From d70a793cfc3e01492bd627788aaba54ee291cb87 Mon Sep 17 00:00:00 2001 From: Mike Perry Date: Wed, 20 Sep 2017 22:37:05 +0000 Subject: [PATCH] Bug 23608: Mock time for all channelpadding tests. --- changes/bug23608 | 4 ++++ src/test/test_channelpadding.c | 43 ++++++++++++++++++++++++++++------ 2 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 changes/bug23608 diff --git a/changes/bug23608 b/changes/bug23608 new file mode 100644 index 000000000..16cf88aa3 --- /dev/null +++ b/changes/bug23608 @@ -0,0 +1,4 @@ + o Minor bugfixes (unit tests): + - Fix additional channelpadding unit test failures by using mocked time + instead of actual time for all tests. Fixes bug 23608; + bugfix on 0.3.1.1-alpha. diff --git a/src/test/test_channelpadding.c b/src/test/test_channelpadding.c index 1e9d59931..d54c9cc52 100644 --- a/src/test/test_channelpadding.c +++ b/src/test/test_channelpadding.c @@ -275,6 +275,7 @@ test_channelpadding_timers(void *arg) { channelpadding_decision_t decision; channel_t *chans[CHANNELS_TO_TEST]; + int64_t new_time; (void)arg; tor_libevent_postfork(); @@ -282,6 +283,10 @@ test_channelpadding_timers(void *arg) connection_array = smartlist_new(); monotime_init(); + monotime_enable_test_mocking(); + monotime_set_mock_time_nsec(1); + monotime_coarse_set_mock_time_nsec(1); + timers_initialize(); channelpadding_new_consensus_params(NULL); @@ -339,8 +344,10 @@ test_channelpadding_timers(void *arg) } // Wait for the timers and then kill the event loop. - dont_stop_libevent = 1; - dummy_nop_timer(); + new_time = (monotime_coarse_absolute_msec()+1001)*NSEC_PER_MSEC; + monotime_coarse_set_mock_time_nsec(new_time); + monotime_set_mock_time_nsec(new_time); + timers_run_pending(); tt_int_op(tried_to_write_cell, OP_EQ, CHANNELS_TO_TEST); @@ -357,6 +364,7 @@ test_channelpadding_timers(void *arg) smartlist_free(connection_array); timers_shutdown(); + monotime_disable_test_mocking(); channel_free_all(); return; @@ -366,13 +374,17 @@ void test_channelpadding_killonehop(void *arg) { channelpadding_decision_t decision; + int64_t new_time; (void)arg; tor_libevent_postfork(); routerstatus_t *relay = tor_malloc_zero(sizeof(routerstatus_t)); monotime_init(); - timers_initialize(); + monotime_enable_test_mocking(); + monotime_set_mock_time_nsec(1); + monotime_coarse_set_mock_time_nsec(1); + timers_initialize(); setup_mock_consensus(); setup_mock_network(); @@ -396,7 +408,10 @@ test_channelpadding_killonehop(void *arg) tt_int_op(decision, OP_EQ, CHANNELPADDING_PADDING_ALREADY_SCHEDULED); // Wait for the timer - event_base_loop(tor_libevent_get_base(), 0); + new_time = (monotime_coarse_absolute_msec()+101)*NSEC_PER_MSEC; + monotime_coarse_set_mock_time_nsec(new_time); + monotime_set_mock_time_nsec(new_time); + timers_run_pending(); tt_int_op(tried_to_write_cell, OP_EQ, 1); tt_assert(!client_relay3->pending_padding_callback); @@ -415,7 +430,10 @@ test_channelpadding_killonehop(void *arg) tt_assert(relay3_client->pending_padding_callback); // Wait for the timer - event_base_loop(tor_libevent_get_base(), 0); + new_time = (monotime_coarse_absolute_msec()+101)*NSEC_PER_MSEC; + monotime_coarse_set_mock_time_nsec(new_time); + monotime_set_mock_time_nsec(new_time); + timers_run_pending(); tt_int_op(tried_to_write_cell, OP_EQ, 1); tt_assert(!client_relay3->pending_padding_callback); @@ -461,7 +479,10 @@ test_channelpadding_killonehop(void *arg) tt_int_op(decision, OP_EQ, CHANNELPADDING_PADDING_ALREADY_SCHEDULED); // Wait for the timer - event_base_loop(tor_libevent_get_base(), 0); + new_time = (monotime_coarse_absolute_msec()+101)*NSEC_PER_MSEC; + monotime_coarse_set_mock_time_nsec(new_time); + monotime_set_mock_time_nsec(new_time); + timers_run_pending(); tt_int_op(tried_to_write_cell, OP_EQ, 1); tt_assert(!client_relay3->pending_padding_callback); @@ -481,7 +502,10 @@ test_channelpadding_killonehop(void *arg) tt_assert(relay3_client->pending_padding_callback); // Wait for the timer - event_base_loop(tor_libevent_get_base(), 0); + new_time = (monotime_coarse_absolute_msec()+101)*NSEC_PER_MSEC; + monotime_coarse_set_mock_time_nsec(new_time); + monotime_set_mock_time_nsec(new_time); + timers_run_pending(); tt_int_op(tried_to_write_cell, OP_EQ, 1); tt_assert(!client_relay3->pending_padding_callback); @@ -508,6 +532,7 @@ test_channelpadding_killonehop(void *arg) tor_free(relay); timers_shutdown(); + monotime_disable_test_mocking(); channel_free_all(); } @@ -749,6 +774,9 @@ test_channelpadding_negotiation(void *arg) * 4. Test channelpadding_reduced_padding */ monotime_init(); + monotime_enable_test_mocking(); + monotime_set_mock_time_nsec(1); + monotime_coarse_set_mock_time_nsec(1); timers_initialize(); setup_mock_consensus(); setup_mock_network(); @@ -855,6 +883,7 @@ test_channelpadding_negotiation(void *arg) free_mock_consensus(); timers_shutdown(); + monotime_disable_test_mocking(); channel_free_all(); return;