Hold monotonic time constant during channel/outbound_cell test

This change should make it impossible for the monotonic time to roll
over from one EWMA tick to the next during this test, and make it so
that this test never invokes scale_active_circuits() (which it
doesn't test).

(Earlier changes during the 0.3.4 series should make this call even
rarer than it was before, since we fixed #25927 and removed
cached_gettimeofday.  Because this test didn't update
cached_gettimeofday, the chance of rolling over a 10-second interval
was much higher.)

Closes ticket 25994; bugfix on 0.3.3.1-alpha when this test was
introduced.
This commit is contained in:
Nick Mathewson 2018-05-01 18:44:11 -04:00
parent 60fad8d41f
commit 24299d385d
2 changed files with 11 additions and 0 deletions

5
changes/ticket25994 Normal file
View File

@ -0,0 +1,5 @@
o Minor bugfixes (tests):
- Change the behavior of the "channel/outbound" test so that it never
causes a 10-second rollover for the EWMA circuitmux code. Previously,
this behavior would happen randomly, and result in fluctuating test
coverage. Fixes bug 25994; bugfix on 0.3.3.1-alpha.

View File

@ -544,6 +544,11 @@ test_channel_outbound_cell(void *arg)
(void) arg; (void) arg;
/* Set the test time to be mocked, since this test assumes that no
* time will pass, ewma values will not need to be re-scaled, and so on */
monotime_enable_test_mocking();
monotime_set_mock_time_nsec(U64_LITERAL(1000000000) * 12345);
cmux_ewma_set_options(NULL,NULL); cmux_ewma_set_options(NULL,NULL);
/* The channel will be freed so we need to hijack this so the scheduler /* The channel will be freed so we need to hijack this so the scheduler
@ -660,6 +665,7 @@ test_channel_outbound_cell(void *arg)
tor_free(p_cell); tor_free(p_cell);
channel_free_all(); channel_free_all();
UNMOCK(scheduler_release_channel); UNMOCK(scheduler_release_channel);
monotime_disable_test_mocking();
} }
/* Test inbound cell. The callstack is: /* Test inbound cell. The callstack is: