Skip to content
Snippets Groups Projects
Unverified Commit b733044f authored by Mike Perry's avatar Mike Perry Committed by teor
Browse files

Bug #29500: Fix monotime mocking in circpad unittests.

Our monotime mocking forces us to call monotime_init() *before* we set the
mocked time value. monotime_init() thus stores the first ratchet value at
whatever the platform is at, and then we set fake mocked time to some later
value.

If monotime_init() gets a value from the host that is greater than what we
choose to mock time at for our unittests, all subsequent monotime_abosolute()
calls return zero, which breaks all unittests that depend on time moving
forward by updating mocked monotime values.

So, we need to adjust our mocked time to take the weird monotime_init() time
into account, when we set fake time.
parent 28db7646
No related branches found
No related tags found
No related merge requests found
......@@ -31,6 +31,12 @@
#include "core/or/or_circuit_st.h"
#include "core/or/origin_circuit_st.h"
/* Start our monotime mocking at 1 second past whatever monotime_init()
* thought the actual wall clock time was, for platforms with bad resolution
* and weird timevalues during monotime_init() before mocking. */
#define MONOTIME_MOCK_START (monotime_absolute_nsec()+\
TOR_NSEC_PER_USEC*TOR_USEC_PER_SEC)
extern smartlist_t *connection_array;
circid_t get_unique_circ_id_by_chan(channel_t *chan);
......@@ -287,6 +293,7 @@ test_circuitpadding_rtt(void *arg)
* 3. Test client side circuit and non-application of RTT..
*/
circpad_delay_t rtt_estimate;
int64_t actual_mocked_monotime_start;
(void)arg;
MOCK(circuitmux_attach_circuit, circuitmux_attach_circuit_mock);
......@@ -300,9 +307,10 @@ test_circuitpadding_rtt(void *arg)
monotime_init();
monotime_enable_test_mocking();
monotime_set_mock_time_nsec(1000*TOR_NSEC_PER_USEC);
monotime_coarse_set_mock_time_nsec(1000*TOR_NSEC_PER_USEC);
curr_mocked_time = 1000*TOR_NSEC_PER_USEC;
actual_mocked_monotime_start = MONOTIME_MOCK_START;
monotime_set_mock_time_nsec(actual_mocked_monotime_start);
monotime_coarse_set_mock_time_nsec(actual_mocked_monotime_start);
curr_mocked_time = actual_mocked_monotime_start;
timers_initialize();
circpad_machines_init();
......@@ -963,6 +971,7 @@ test_circuitpadding_tokens(void *arg)
{
const circpad_state_t *state;
circpad_machine_state_t *mi;
int64_t actual_mocked_monotime_start;
(void)arg;
/** Test plan:
......@@ -990,9 +999,10 @@ test_circuitpadding_tokens(void *arg)
monotime_init();
monotime_enable_test_mocking();
monotime_set_mock_time_nsec(1000*TOR_NSEC_PER_USEC);
monotime_coarse_set_mock_time_nsec(1000*TOR_NSEC_PER_USEC);
curr_mocked_time = 1000*TOR_NSEC_PER_USEC;
actual_mocked_monotime_start = MONOTIME_MOCK_START;
monotime_set_mock_time_nsec(actual_mocked_monotime_start);
monotime_coarse_set_mock_time_nsec(actual_mocked_monotime_start);
curr_mocked_time = actual_mocked_monotime_start;
timers_initialize();
......@@ -1235,6 +1245,7 @@ test_circuitpadding_wronghop(void *arg)
cell_t cell;
signed_error_t ret;
origin_circuit_t *orig_client;
int64_t actual_mocked_monotime_start;
MOCK(circuitmux_attach_circuit, circuitmux_attach_circuit_mock);
......@@ -1254,9 +1265,10 @@ test_circuitpadding_wronghop(void *arg)
monotime_init();
monotime_enable_test_mocking();
monotime_set_mock_time_nsec(1000*TOR_NSEC_PER_USEC);
monotime_coarse_set_mock_time_nsec(1000*TOR_NSEC_PER_USEC);
curr_mocked_time = 1000*TOR_NSEC_PER_USEC;
actual_mocked_monotime_start = MONOTIME_MOCK_START;
monotime_set_mock_time_nsec(actual_mocked_monotime_start);
monotime_coarse_set_mock_time_nsec(actual_mocked_monotime_start);
curr_mocked_time = actual_mocked_monotime_start;
timers_initialize();
circpad_machines_init();
......@@ -1427,6 +1439,7 @@ test_circuitpadding_negotiation(void *arg)
* a. Make sure padding negotiation is not sent
* 3. Test failure to negotiate a machine due to desync.
*/
int64_t actual_mocked_monotime_start;
(void)arg;
MOCK(circuitmux_attach_circuit, circuitmux_attach_circuit_mock);
......@@ -1441,9 +1454,10 @@ test_circuitpadding_negotiation(void *arg)
monotime_init();
monotime_enable_test_mocking();
monotime_set_mock_time_nsec(1000*TOR_NSEC_PER_USEC);
monotime_coarse_set_mock_time_nsec(1000*TOR_NSEC_PER_USEC);
curr_mocked_time = 1000*TOR_NSEC_PER_USEC;
actual_mocked_monotime_start = MONOTIME_MOCK_START;
monotime_set_mock_time_nsec(actual_mocked_monotime_start);
monotime_coarse_set_mock_time_nsec(actual_mocked_monotime_start);
curr_mocked_time = actual_mocked_monotime_start;
timers_initialize();
circpad_machines_init();
......@@ -1703,6 +1717,7 @@ test_circuitpadding_conditions(void *arg)
* 2. Test marking a circuit before padding callback fires
* 3. Test freeing a circuit before padding callback fires
*/
int64_t actual_mocked_monotime_start;
(void)arg;
MOCK(circuitmux_attach_circuit, circuitmux_attach_circuit_mock);
......@@ -1716,9 +1731,10 @@ test_circuitpadding_conditions(void *arg)
monotime_init();
monotime_enable_test_mocking();
monotime_set_mock_time_nsec(1000*TOR_NSEC_PER_USEC);
monotime_coarse_set_mock_time_nsec(1000*TOR_NSEC_PER_USEC);
curr_mocked_time = 1000*TOR_NSEC_PER_USEC;
actual_mocked_monotime_start = MONOTIME_MOCK_START;
monotime_set_mock_time_nsec(actual_mocked_monotime_start);
monotime_coarse_set_mock_time_nsec(actual_mocked_monotime_start);
curr_mocked_time = actual_mocked_monotime_start;
timers_initialize();
helper_create_conditional_machines();
......@@ -1813,6 +1829,7 @@ test_circuitpadding_conditions(void *arg)
void
test_circuitpadding_circuitsetup_machine(void *arg)
{
int64_t actual_mocked_monotime_start;
/**
* Test case plan:
*
......@@ -1838,9 +1855,10 @@ test_circuitpadding_circuitsetup_machine(void *arg)
monotime_init();
monotime_enable_test_mocking();
monotime_set_mock_time_nsec(1*TOR_NSEC_PER_USEC);
monotime_coarse_set_mock_time_nsec(1*TOR_NSEC_PER_USEC);
curr_mocked_time = 1*TOR_NSEC_PER_USEC;
actual_mocked_monotime_start = MONOTIME_MOCK_START;
monotime_set_mock_time_nsec(actual_mocked_monotime_start);
monotime_coarse_set_mock_time_nsec(actual_mocked_monotime_start);
curr_mocked_time = actual_mocked_monotime_start;
timers_initialize();
circpad_machines_init();
......@@ -2250,6 +2268,7 @@ test_circuitpadding_global_rate_limiting(void *arg)
bool retval;
circpad_machine_state_t *mi;
int i;
int64_t actual_mocked_monotime_start;
/* Ignore machine transitions for the purposes of this function, we only
* really care about padding counts */
......@@ -2261,9 +2280,10 @@ test_circuitpadding_global_rate_limiting(void *arg)
monotime_init();
monotime_enable_test_mocking();
monotime_set_mock_time_nsec(1000*TOR_NSEC_PER_USEC);
monotime_coarse_set_mock_time_nsec(1000*TOR_NSEC_PER_USEC);
curr_mocked_time = 1000*TOR_NSEC_PER_USEC;
actual_mocked_monotime_start = MONOTIME_MOCK_START;
monotime_set_mock_time_nsec(actual_mocked_monotime_start);
monotime_coarse_set_mock_time_nsec(actual_mocked_monotime_start);
curr_mocked_time = actual_mocked_monotime_start;
timers_initialize();
client_side = (circuit_t *)origin_circuit_new();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment