]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Bind to random port numbers in unit tests
authorMichał Kępień <michal@isc.org>
Wed, 8 Jan 2020 17:30:54 +0000 (18:30 +0100)
committerMichał Kępień <michal@isc.org>
Thu, 9 Jan 2020 09:32:25 +0000 (09:32 +0000)
Some unit tests need various managers to be created before they are run.
The interface manager spawned during libns tests listens on a fixed port
number, which causes intermittent issues when multiple tests using an
interface manager are run concurrently.  Make the interface manager
listen on a randomized port number to greatly reduce the risk of
multiple unit tests using the same port concurrently.

lib/ns/tests/listenlist_test.c
lib/ns/tests/nstest.c

index 78ca786d8fdf0b99d2496c5fbad3045fb69e573d..55fcc457416c50ab4a8c682d275d03cae87ea5b5 100644 (file)
@@ -28,6 +28,7 @@
 
 #include <isc/list.h>
 #include <isc/print.h>
+#include <isc/random.h>
 
 #include <dns/acl.h>
 
@@ -60,13 +61,14 @@ _teardown(void **state) {
 static void
 ns_listenlist_default_test(void **state) {
        isc_result_t result;
+       in_port_t port = 5300 + isc_random8();
        ns_listenlist_t *list = NULL;
        ns_listenelt_t *elt;
        int count;
 
        UNUSED(state);
 
-       result = ns_listenlist_default(mctx, 5300, -1, false, &list);
+       result = ns_listenlist_default(mctx, port, -1, false, &list);
        assert_int_equal(result, ISC_R_SUCCESS);
        assert_non_null(list);
 
@@ -93,7 +95,7 @@ ns_listenlist_default_test(void **state) {
 
        ns_listenlist_detach(&list);
 
-       result = ns_listenlist_default(mctx, 5300, -1, true, &list);
+       result = ns_listenlist_default(mctx, port, -1, true, &list);
        assert_int_equal(result, ISC_R_SUCCESS);
 
        assert_false(ISC_LIST_EMPTY(list->elts));
index 6a6bd45e720335b21f5b81c1cec64ec33ead30d5..d4314693d2ff6514b78530b6c28473a6b6208549 100644 (file)
@@ -215,6 +215,7 @@ scan_interfaces(isc_task_t *task, isc_event_t *event) {
 static isc_result_t
 create_managers(void) {
        isc_result_t result;
+       in_port_t port = 5300 + isc_random8();
        ns_listenlist_t *listenon = NULL;
        isc_event_t *event = NULL;
        ncpus = isc_os_ncpus();
@@ -238,7 +239,7 @@ create_managers(void) {
                                     socketmgr, nm, dispatchmgr, maintask,
                                     ncpus, NULL, &interfacemgr));
 
-       CHECK(ns_listenlist_default(mctx, 5300, -1, true, &listenon));
+       CHECK(ns_listenlist_default(mctx, port, -1, true, &listenon));
        ns_interfacemgr_setlistenon4(interfacemgr, listenon);
        ns_listenlist_detach(&listenon);