Fix a failing keyring test

The in-memory identity creation test was failing intermittently because
the server only creates the in-memory identity on the first tick, and
under load the server sometimes does not tick for a while, leading to a
race with the "servald id self" command.

The test case now waits for the server to emit a tick before running the
"id self" command.  This necessitated a new DEBUG() statement and a new
debug flag 'overlaytick'.

Also disabled Rhizome for all the keyring tests, as unnecessary Rhizome
DB creation was slowing down the fixtures.
This commit is contained in:
Andrew Bettison 2016-09-06 15:00:21 +09:30
parent 2cfdafdb56
commit 43bd0bd33f
3 changed files with 21 additions and 4 deletions

View File

@ -246,6 +246,7 @@ ATOM(bool_t, radio_link, 0, boolean,, "")
ATOM(bool_t, overlaybuffer, 0, boolean,, "")
ATOM(bool_t, overlayframes, 0, boolean,, "")
ATOM(bool_t, packets_sent, 0, boolean,, "")
ATOM(bool_t, overlaytick, 0, boolean,, "")
ATOM(bool_t, overlayrouting, 0, boolean,, "")
ATOM(bool_t, overlayinterfaces, 0, boolean,, "")
ATOM(bool_t, broadcasts, 0, boolean,, "")

View File

@ -586,6 +586,11 @@ int overlay_send_tick_packet(struct network_destination *destination)
packet.seq);
}
overlay_fill_send_packet(&packet, gettime_ms(), debug);
// This debug statement is used for testing; do not remove or alter.
DEBUGF(overlaytick, "TICK name=%s destination=%s seq=%d",
packet.destination->interface->name,
alloca_socket_address(&packet.destination->address),
packet.seq);
}
return 0;
}

View File

@ -39,6 +39,7 @@ setup_instances() {
for arg; do
set_instance $arg
executeOk_servald config \
set rhizome.enable off \
set log.console.level debug \
set debug.keyring on
executeOk_servald keyring list
@ -177,9 +178,11 @@ test_KeyringPinIdentityPin() {
assert_keyring_list 0
}
doc_KeyringAutoCreate="Starting a server with no interfaces does not create an identity"
doc_KeyringAutoCreate="Server with no interfaces does not create an identity"
test_KeyringAutoCreate() {
executeOk_servald config set debug.mdprequests on
executeOk_servald config \
set debug.mdprequests on \
set debug.overlaytick on
configure_servald_server() {
:
}
@ -196,13 +199,21 @@ teardown_KeyringAutoCreate() {
teardown_servald
}
doc_KeyringNoAutoCreate="Starting a server with interface creates an in-memory identity"
has_sent_mdp_tick_to() {
$GREP "TICK name=$1 " $instance_servald_log || return 1
return 0
}
doc_KeyringNoAutoCreate="Server creates an in-memory identity on the first interface tick"
test_KeyringNoAutoCreate() {
executeOk_servald config set debug.mdprequests on
executeOk_servald config \
set debug.mdprequests on \
set debug.overlaytick on
configure_servald_server() {
add_servald_interface
}
start_servald_server
wait_until has_sent_mdp_tick_to "dummy1/$instance_name"
executeOk_servald keyring list
assert_keyring_list 0
executeOk_servald id self