Bind to random port numbers in unit tests

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.

(cherry picked from commit ea7bddb4ca)
This commit is contained in:
Michał Kępień
2020-01-08 18:30:54 +01:00
parent 4d80289abb
commit 11ff0537e1
2 changed files with 6 additions and 3 deletions

View File

@@ -28,6 +28,7 @@
#include <isc/list.h>
#include <isc/print.h>
#include <isc/random.h>
#include <isc/util.h>
#include <dns/acl.h>
@@ -61,13 +62,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);
@@ -94,7 +96,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));

View File

@@ -175,6 +175,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();
@@ -199,7 +200,7 @@ create_managers(void) {
CHECK(ns_clientmgr_create(mctx, sctx, taskmgr, timermgr,
&clientmgr));
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);