commit 19d32fd0d643117cc809bafb1a68d1e004d806f3 Author: David Goulet dgoulet@torproject.org Date: Tue Oct 31 14:39:27 2017 -0400
test: Fix voting schedule for shared random
Part of #23623
Signed-off-by: David Goulet dgoulet@torproject.org --- src/test/test_shared_random.c | 142 ++++++++++++++++++------------------------ 1 file changed, 60 insertions(+), 82 deletions(-)
diff --git a/src/test/test_shared_random.c b/src/test/test_shared_random.c index d9daa26ce..cac78baec 100644 --- a/src/test/test_shared_random.c +++ b/src/test/test_shared_random.c @@ -131,7 +131,15 @@ test_get_sr_protocol_phase(void *arg) ; }
-static networkstatus_t *mock_consensus = NULL; +static networkstatus_t mock_consensus; + +/* Mock function to immediately return our local 'mock_consensus'. */ +static networkstatus_t * +mock_networkstatus_get_live_consensus(time_t now) +{ + (void) now; + return &mock_consensus; +}
static void test_get_state_valid_until_time(void *arg) @@ -143,11 +151,23 @@ test_get_state_valid_until_time(void *arg)
(void) arg;
+ MOCK(networkstatus_get_live_consensus, + mock_networkstatus_get_live_consensus); + + retval = parse_rfc1123_time("Mon, 20 Apr 2015 01:00:00 UTC", + &mock_consensus.fresh_until); + tt_int_op(retval, OP_EQ, 0); + + retval = parse_rfc1123_time("Mon, 20 Apr 2015 00:00:00 UTC", + &mock_consensus.valid_after); + tt_int_op(retval, OP_EQ, 0); + { /* Get the valid until time if called at 00:00:01 */ retval = parse_rfc1123_time("Mon, 20 Apr 2015 00:00:01 UTC", ¤t_time); tt_int_op(retval, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), current_time); valid_until_time = get_state_valid_until_time(current_time);
/* Compare it with the correct result */ @@ -159,6 +179,7 @@ test_get_state_valid_until_time(void *arg) retval = parse_rfc1123_time("Mon, 20 Apr 2015 19:22:00 UTC", ¤t_time); tt_int_op(retval, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), current_time); valid_until_time = get_state_valid_until_time(current_time);
format_iso_time(tbuf, valid_until_time); @@ -169,6 +190,7 @@ test_get_state_valid_until_time(void *arg) retval = parse_rfc1123_time("Mon, 20 Apr 2015 23:59:00 UTC", ¤t_time); tt_int_op(retval, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), current_time); valid_until_time = get_state_valid_until_time(current_time);
format_iso_time(tbuf, valid_until_time); @@ -179,6 +201,7 @@ test_get_state_valid_until_time(void *arg) retval = parse_rfc1123_time("Mon, 20 Apr 2015 00:00:00 UTC", ¤t_time); tt_int_op(retval, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), current_time); valid_until_time = get_state_valid_until_time(current_time);
format_iso_time(tbuf, valid_until_time); @@ -186,7 +209,7 @@ test_get_state_valid_until_time(void *arg) }
done: - ; + UNMOCK(networkstatus_get_live_consensus); }
/** Test the function that calculates the start time of the current SRV @@ -200,11 +223,23 @@ test_get_start_time_of_current_run(void *arg)
(void) arg;
+ MOCK(networkstatus_get_live_consensus, + mock_networkstatus_get_live_consensus); + + retval = parse_rfc1123_time("Mon, 20 Apr 2015 01:00:00 UTC", + &mock_consensus.fresh_until); + tt_int_op(retval, OP_EQ, 0); + + retval = parse_rfc1123_time("Mon, 20 Apr 2015 00:00:00 UTC", + &mock_consensus.valid_after); + tt_int_op(retval, OP_EQ, 0); + { /* Get start time if called at 00:00:01 */ retval = parse_rfc1123_time("Mon, 20 Apr 2015 00:00:01 UTC", ¤t_time); tt_int_op(retval, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), current_time); run_start_time = sr_state_get_start_time_of_current_protocol_run(current_time);
@@ -217,6 +252,7 @@ test_get_start_time_of_current_run(void *arg) retval = parse_rfc1123_time("Mon, 20 Apr 2015 23:59:59 UTC", ¤t_time); tt_int_op(retval, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), current_time); run_start_time = sr_state_get_start_time_of_current_protocol_run(current_time);
@@ -229,6 +265,7 @@ test_get_start_time_of_current_run(void *arg) retval = parse_rfc1123_time("Mon, 20 Apr 2015 00:00:00 UTC", ¤t_time); tt_int_op(retval, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), current_time); run_start_time = sr_state_get_start_time_of_current_protocol_run(current_time);
@@ -237,6 +274,10 @@ test_get_start_time_of_current_run(void *arg) tt_str_op("2015-04-20 00:00:00", OP_EQ, tbuf); }
+ /* Next test is testing it without a consensus to use the testing voting + * interval . */ + UNMOCK(networkstatus_get_live_consensus); + /* Now let's alter the voting schedule and check the correctness of the * function. Voting interval of 10 seconds, means that an SRV protocol run * takes 10 seconds * 24 rounds = 4 mins */ @@ -246,8 +287,8 @@ test_get_start_time_of_current_run(void *arg) options->TestingV3AuthInitialVotingInterval = 10; retval = parse_rfc1123_time("Mon, 20 Apr 2015 00:15:32 UTC", ¤t_time); - tt_int_op(retval, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), current_time); run_start_time = sr_state_get_start_time_of_current_protocol_run(current_time);
@@ -266,8 +307,21 @@ static void test_get_start_time_functions(void *arg) { (void) arg; - time_t now = approx_time(); + int retval; + + MOCK(networkstatus_get_live_consensus, + mock_networkstatus_get_live_consensus); + + retval = parse_rfc1123_time("Mon, 20 Apr 2015 01:00:00 UTC", + &mock_consensus.fresh_until); + tt_int_op(retval, OP_EQ, 0);
+ retval = parse_rfc1123_time("Mon, 20 Apr 2015 00:00:00 UTC", + &mock_consensus.valid_after); + tt_int_op(retval, OP_EQ, 0); + time_t now = mock_consensus.valid_after; + + dirvote_recalculate_timing(get_options(), now); time_t start_time_of_protocol_run = sr_state_get_start_time_of_current_protocol_run(now); tt_assert(start_time_of_protocol_run); @@ -276,7 +330,8 @@ test_get_start_time_functions(void *arg) tt_int_op(get_start_time_of_current_round(), OP_EQ, start_time_of_protocol_run);
- done: ; + done: + UNMOCK(networkstatus_get_live_consensus); }
static void @@ -298,81 +353,6 @@ test_get_sr_protocol_duration(void *arg) done: ; }
-/* Mock function to immediately return our local 'mock_consensus'. */ -static networkstatus_t * -mock_networkstatus_get_live_consensus(time_t now) -{ - (void) now; - return mock_consensus; -} - -/** Test the dirvote_get_next_valid_after_time() function. */ -static void -test_get_next_valid_after_time(void *arg) -{ - time_t current_time; - time_t valid_after_time; - char tbuf[ISO_TIME_LEN + 1]; - int retval; - - (void) arg; - - { - /* Setup a fake consensus just to get the times out of it, since - dirvote_get_next_valid_after_time() needs them. */ - mock_consensus = tor_malloc_zero(sizeof(networkstatus_t)); - - retval = parse_rfc1123_time("Mon, 13 Jan 2016 16:00:00 UTC", - &mock_consensus->fresh_until); - tt_int_op(retval, OP_EQ, 0); - - retval = parse_rfc1123_time("Mon, 13 Jan 2016 15:00:00 UTC", - &mock_consensus->valid_after); - tt_int_op(retval, OP_EQ, 0); - - MOCK(networkstatus_get_live_consensus, - mock_networkstatus_get_live_consensus); - } - - { - /* Get the valid after time if called at 00:00:00 */ - retval = parse_rfc1123_time("Mon, 20 Apr 2015 00:00:00 UTC", - ¤t_time); - tt_int_op(retval, OP_EQ, 0); - valid_after_time = dirvote_get_next_valid_after_time(); - - /* Compare it with the correct result */ - format_iso_time(tbuf, valid_after_time); - tt_str_op("2015-04-20 01:00:00", OP_EQ, tbuf); - } - - { - /* Get the valid until time if called at 00:00:01 */ - retval = parse_rfc1123_time("Mon, 20 Apr 2015 00:00:01 UTC", - ¤t_time); - tt_int_op(retval, OP_EQ, 0); - valid_after_time = dirvote_get_next_valid_after_time(); - - /* Compare it with the correct result */ - format_iso_time(tbuf, valid_after_time); - tt_str_op("2015-04-20 01:00:00", OP_EQ, tbuf); - } - - { - retval = parse_rfc1123_time("Mon, 20 Apr 2015 23:30:01 UTC", - ¤t_time); - tt_int_op(retval, OP_EQ, 0); - valid_after_time = dirvote_get_next_valid_after_time(); - - /* Compare it with the correct result */ - format_iso_time(tbuf, valid_after_time); - tt_str_op("2015-04-21 00:00:00", OP_EQ, tbuf); - } - - done: - networkstatus_vote_free(mock_consensus); -} - /* In this test we are going to generate a sr_commit_t object and validate * it. We first generate our values, and then we parse them as if they were * received from the network. After we parse both the commit and the reveal, @@ -1381,8 +1361,6 @@ struct testcase_t sr_tests[] = { NULL, NULL }, { "encoding", test_encoding, TT_FORK, NULL, NULL }, - { "get_next_valid_after_time", test_get_next_valid_after_time, TT_FORK, - NULL, NULL }, { "get_start_time_of_current_run", test_get_start_time_of_current_run, TT_FORK, NULL, NULL }, { "get_start_time_functions", test_get_start_time_functions,
tor-commits@lists.torproject.org