mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-09-21 13:34:59 +02:00
Use reproducible RNG logic in circuitpadding tests.
This commit is contained in:
parent
72e9c427b8
commit
536ba09ad1
@ -34,6 +34,8 @@
|
|||||||
#include "core/or/or_circuit_st.h"
|
#include "core/or/or_circuit_st.h"
|
||||||
#include "core/or/origin_circuit_st.h"
|
#include "core/or/origin_circuit_st.h"
|
||||||
|
|
||||||
|
#include "test/rng_test_helpers.h"
|
||||||
|
|
||||||
/* Start our monotime mocking at 1 second past whatever monotime_init()
|
/* Start our monotime mocking at 1 second past whatever monotime_init()
|
||||||
* thought the actual wall clock time was, for platforms with bad resolution
|
* thought the actual wall clock time was, for platforms with bad resolution
|
||||||
* and weird timevalues during monotime_init() before mocking. */
|
* and weird timevalues during monotime_init() before mocking. */
|
||||||
@ -300,6 +302,7 @@ test_circuitpadding_rtt(void *arg)
|
|||||||
|
|
||||||
MOCK(circuitmux_attach_circuit, circuitmux_attach_circuit_mock);
|
MOCK(circuitmux_attach_circuit, circuitmux_attach_circuit_mock);
|
||||||
MOCK(circpad_send_command_to_hop, circpad_send_command_to_hop_mock);
|
MOCK(circpad_send_command_to_hop, circpad_send_command_to_hop_mock);
|
||||||
|
testing_enable_reproducible_rng();
|
||||||
|
|
||||||
dummy_channel.cmux = circuitmux_alloc();
|
dummy_channel.cmux = circuitmux_alloc();
|
||||||
relay_side = TO_CIRCUIT(new_fake_orcirc(&dummy_channel, &dummy_channel));
|
relay_side = TO_CIRCUIT(new_fake_orcirc(&dummy_channel, &dummy_channel));
|
||||||
@ -403,6 +406,7 @@ test_circuitpadding_rtt(void *arg)
|
|||||||
UNMOCK(circuit_package_relay_cell);
|
UNMOCK(circuit_package_relay_cell);
|
||||||
UNMOCK(circuitmux_attach_circuit);
|
UNMOCK(circuitmux_attach_circuit);
|
||||||
tor_free(circ_client_machine.states);
|
tor_free(circ_client_machine.states);
|
||||||
|
testing_disable_reproducible_rng();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -524,6 +528,7 @@ test_circuitpadding_token_removal_higher(void *arg)
|
|||||||
/* Mock it up */
|
/* Mock it up */
|
||||||
MOCK(monotime_absolute_usec, mock_monotime_absolute_usec);
|
MOCK(monotime_absolute_usec, mock_monotime_absolute_usec);
|
||||||
MOCK(circpad_machine_schedule_padding,circpad_machine_schedule_padding_mock);
|
MOCK(circpad_machine_schedule_padding,circpad_machine_schedule_padding_mock);
|
||||||
|
testing_enable_reproducible_rng();
|
||||||
|
|
||||||
/* Setup test environment (time etc.) */
|
/* Setup test environment (time etc.) */
|
||||||
client_side = (circuit_t *)origin_circuit_new();
|
client_side = (circuit_t *)origin_circuit_new();
|
||||||
@ -617,6 +622,7 @@ test_circuitpadding_token_removal_higher(void *arg)
|
|||||||
free_fake_origin_circuit(TO_ORIGIN_CIRCUIT(client_side));
|
free_fake_origin_circuit(TO_ORIGIN_CIRCUIT(client_side));
|
||||||
monotime_disable_test_mocking();
|
monotime_disable_test_mocking();
|
||||||
tor_free(circ_client_machine.states);
|
tor_free(circ_client_machine.states);
|
||||||
|
testing_disable_reproducible_rng();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Test lower token removal strategy by bin */
|
/** Test lower token removal strategy by bin */
|
||||||
@ -629,6 +635,7 @@ test_circuitpadding_token_removal_lower(void *arg)
|
|||||||
/* Mock it up */
|
/* Mock it up */
|
||||||
MOCK(monotime_absolute_usec, mock_monotime_absolute_usec);
|
MOCK(monotime_absolute_usec, mock_monotime_absolute_usec);
|
||||||
MOCK(circpad_machine_schedule_padding,circpad_machine_schedule_padding_mock);
|
MOCK(circpad_machine_schedule_padding,circpad_machine_schedule_padding_mock);
|
||||||
|
testing_enable_reproducible_rng();
|
||||||
|
|
||||||
/* Setup test environment (time etc.) */
|
/* Setup test environment (time etc.) */
|
||||||
client_side = (circuit_t *)origin_circuit_new();
|
client_side = (circuit_t *)origin_circuit_new();
|
||||||
@ -715,6 +722,7 @@ test_circuitpadding_token_removal_lower(void *arg)
|
|||||||
free_fake_origin_circuit(TO_ORIGIN_CIRCUIT(client_side));
|
free_fake_origin_circuit(TO_ORIGIN_CIRCUIT(client_side));
|
||||||
monotime_disable_test_mocking();
|
monotime_disable_test_mocking();
|
||||||
tor_free(circ_client_machine.states);
|
tor_free(circ_client_machine.states);
|
||||||
|
testing_disable_reproducible_rng();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Test closest token removal strategy by bin */
|
/** Test closest token removal strategy by bin */
|
||||||
@ -727,6 +735,7 @@ test_circuitpadding_closest_token_removal(void *arg)
|
|||||||
/* Mock it up */
|
/* Mock it up */
|
||||||
MOCK(monotime_absolute_usec, mock_monotime_absolute_usec);
|
MOCK(monotime_absolute_usec, mock_monotime_absolute_usec);
|
||||||
MOCK(circpad_machine_schedule_padding,circpad_machine_schedule_padding_mock);
|
MOCK(circpad_machine_schedule_padding,circpad_machine_schedule_padding_mock);
|
||||||
|
testing_enable_reproducible_rng();
|
||||||
|
|
||||||
/* Setup test environment (time etc.) */
|
/* Setup test environment (time etc.) */
|
||||||
client_side = (circuit_t *)origin_circuit_new();
|
client_side = (circuit_t *)origin_circuit_new();
|
||||||
@ -821,6 +830,7 @@ test_circuitpadding_closest_token_removal(void *arg)
|
|||||||
free_fake_origin_circuit(TO_ORIGIN_CIRCUIT(client_side));
|
free_fake_origin_circuit(TO_ORIGIN_CIRCUIT(client_side));
|
||||||
monotime_disable_test_mocking();
|
monotime_disable_test_mocking();
|
||||||
tor_free(circ_client_machine.states);
|
tor_free(circ_client_machine.states);
|
||||||
|
testing_disable_reproducible_rng();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Test closest token removal strategy with usec */
|
/** Test closest token removal strategy with usec */
|
||||||
@ -833,6 +843,7 @@ test_circuitpadding_closest_token_removal_usec(void *arg)
|
|||||||
/* Mock it up */
|
/* Mock it up */
|
||||||
MOCK(monotime_absolute_usec, mock_monotime_absolute_usec);
|
MOCK(monotime_absolute_usec, mock_monotime_absolute_usec);
|
||||||
MOCK(circpad_machine_schedule_padding,circpad_machine_schedule_padding_mock);
|
MOCK(circpad_machine_schedule_padding,circpad_machine_schedule_padding_mock);
|
||||||
|
testing_enable_reproducible_rng();
|
||||||
|
|
||||||
/* Setup test environment (time etc.) */
|
/* Setup test environment (time etc.) */
|
||||||
client_side = (circuit_t *)origin_circuit_new();
|
client_side = (circuit_t *)origin_circuit_new();
|
||||||
@ -932,6 +943,7 @@ test_circuitpadding_closest_token_removal_usec(void *arg)
|
|||||||
free_fake_origin_circuit(TO_ORIGIN_CIRCUIT(client_side));
|
free_fake_origin_circuit(TO_ORIGIN_CIRCUIT(client_side));
|
||||||
monotime_disable_test_mocking();
|
monotime_disable_test_mocking();
|
||||||
tor_free(circ_client_machine.states);
|
tor_free(circ_client_machine.states);
|
||||||
|
testing_disable_reproducible_rng();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Test closest token removal strategy with usec */
|
/** Test closest token removal strategy with usec */
|
||||||
@ -944,6 +956,7 @@ test_circuitpadding_token_removal_exact(void *arg)
|
|||||||
/* Mock it up */
|
/* Mock it up */
|
||||||
MOCK(monotime_absolute_usec, mock_monotime_absolute_usec);
|
MOCK(monotime_absolute_usec, mock_monotime_absolute_usec);
|
||||||
MOCK(circpad_machine_schedule_padding,circpad_machine_schedule_padding_mock);
|
MOCK(circpad_machine_schedule_padding,circpad_machine_schedule_padding_mock);
|
||||||
|
testing_enable_reproducible_rng();
|
||||||
|
|
||||||
/* Setup test environment (time etc.) */
|
/* Setup test environment (time etc.) */
|
||||||
client_side = (circuit_t *)origin_circuit_new();
|
client_side = (circuit_t *)origin_circuit_new();
|
||||||
@ -991,6 +1004,7 @@ test_circuitpadding_token_removal_exact(void *arg)
|
|||||||
free_fake_origin_circuit(TO_ORIGIN_CIRCUIT(client_side));
|
free_fake_origin_circuit(TO_ORIGIN_CIRCUIT(client_side));
|
||||||
monotime_disable_test_mocking();
|
monotime_disable_test_mocking();
|
||||||
tor_free(circ_client_machine.states);
|
tor_free(circ_client_machine.states);
|
||||||
|
testing_disable_reproducible_rng();
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef BIG_HISTOGRAM_LEN
|
#undef BIG_HISTOGRAM_LEN
|
||||||
@ -1003,6 +1017,8 @@ test_circuitpadding_tokens(void *arg)
|
|||||||
int64_t actual_mocked_monotime_start;
|
int64_t actual_mocked_monotime_start;
|
||||||
(void)arg;
|
(void)arg;
|
||||||
|
|
||||||
|
testing_enable_reproducible_rng();
|
||||||
|
|
||||||
/** Test plan:
|
/** Test plan:
|
||||||
*
|
*
|
||||||
* 1. Test symmetry between bin_to_usec and usec_to_bin
|
* 1. Test symmetry between bin_to_usec and usec_to_bin
|
||||||
@ -1256,6 +1272,7 @@ test_circuitpadding_tokens(void *arg)
|
|||||||
free_fake_origin_circuit(TO_ORIGIN_CIRCUIT(client_side));
|
free_fake_origin_circuit(TO_ORIGIN_CIRCUIT(client_side));
|
||||||
monotime_disable_test_mocking();
|
monotime_disable_test_mocking();
|
||||||
tor_free(circ_client_machine.states);
|
tor_free(circ_client_machine.states);
|
||||||
|
testing_disable_reproducible_rng();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1283,6 +1300,7 @@ test_circuitpadding_wronghop(void *arg)
|
|||||||
/* Mock this function so that our cell counting tests don't get confused by
|
/* Mock this function so that our cell counting tests don't get confused by
|
||||||
* padding that gets sent by scheduled timers. */
|
* padding that gets sent by scheduled timers. */
|
||||||
MOCK(circpad_machine_schedule_padding,circpad_machine_schedule_padding_mock);
|
MOCK(circpad_machine_schedule_padding,circpad_machine_schedule_padding_mock);
|
||||||
|
testing_enable_reproducible_rng();
|
||||||
|
|
||||||
client_side = (circuit_t *)origin_circuit_new();
|
client_side = (circuit_t *)origin_circuit_new();
|
||||||
dummy_channel.cmux = circuitmux_alloc();
|
dummy_channel.cmux = circuitmux_alloc();
|
||||||
@ -1456,6 +1474,7 @@ test_circuitpadding_wronghop(void *arg)
|
|||||||
UNMOCK(circuit_package_relay_cell);
|
UNMOCK(circuit_package_relay_cell);
|
||||||
UNMOCK(circuitmux_attach_circuit);
|
UNMOCK(circuitmux_attach_circuit);
|
||||||
nodes_free();
|
nodes_free();
|
||||||
|
testing_disable_reproducible_rng();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1758,6 +1777,7 @@ test_circuitpadding_conditions(void *arg)
|
|||||||
int64_t actual_mocked_monotime_start;
|
int64_t actual_mocked_monotime_start;
|
||||||
(void)arg;
|
(void)arg;
|
||||||
MOCK(circuitmux_attach_circuit, circuitmux_attach_circuit_mock);
|
MOCK(circuitmux_attach_circuit, circuitmux_attach_circuit_mock);
|
||||||
|
testing_enable_reproducible_rng();
|
||||||
|
|
||||||
nodes_init();
|
nodes_init();
|
||||||
dummy_channel.cmux = circuitmux_alloc();
|
dummy_channel.cmux = circuitmux_alloc();
|
||||||
@ -1862,6 +1882,7 @@ test_circuitpadding_conditions(void *arg)
|
|||||||
|
|
||||||
done:
|
done:
|
||||||
/* XXX: Free everything */
|
/* XXX: Free everything */
|
||||||
|
testing_disable_reproducible_rng();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2191,6 +2212,7 @@ test_circuitpadding_sample_distribution(void *arg)
|
|||||||
/* mock this function so that we dont actually schedule any padding */
|
/* mock this function so that we dont actually schedule any padding */
|
||||||
MOCK(circpad_machine_schedule_padding,
|
MOCK(circpad_machine_schedule_padding,
|
||||||
circpad_machine_schedule_padding_mock);
|
circpad_machine_schedule_padding_mock);
|
||||||
|
testing_enable_reproducible_rng();
|
||||||
|
|
||||||
/* Initialize a machine with multiple probability distributions */
|
/* Initialize a machine with multiple probability distributions */
|
||||||
circpad_machines_init();
|
circpad_machines_init();
|
||||||
@ -2223,6 +2245,7 @@ test_circuitpadding_sample_distribution(void *arg)
|
|||||||
done:
|
done:
|
||||||
free_fake_origin_circuit(TO_ORIGIN_CIRCUIT(client_side));
|
free_fake_origin_circuit(TO_ORIGIN_CIRCUIT(client_side));
|
||||||
UNMOCK(circpad_machine_schedule_padding);
|
UNMOCK(circpad_machine_schedule_padding);
|
||||||
|
testing_disable_reproducible_rng();
|
||||||
}
|
}
|
||||||
|
|
||||||
static circpad_decision_t
|
static circpad_decision_t
|
||||||
@ -2248,6 +2271,7 @@ test_circuitpadding_machine_rate_limiting(void *arg)
|
|||||||
* really care about padding counts */
|
* really care about padding counts */
|
||||||
MOCK(circpad_machine_spec_transition, circpad_machine_spec_transition_mock);
|
MOCK(circpad_machine_spec_transition, circpad_machine_spec_transition_mock);
|
||||||
MOCK(circpad_send_command_to_hop, circpad_send_command_to_hop_mock);
|
MOCK(circpad_send_command_to_hop, circpad_send_command_to_hop_mock);
|
||||||
|
testing_enable_reproducible_rng();
|
||||||
|
|
||||||
/* Setup machine and circuits */
|
/* Setup machine and circuits */
|
||||||
client_side = TO_CIRCUIT(origin_circuit_new());
|
client_side = TO_CIRCUIT(origin_circuit_new());
|
||||||
@ -2301,6 +2325,7 @@ test_circuitpadding_machine_rate_limiting(void *arg)
|
|||||||
|
|
||||||
done:
|
done:
|
||||||
free_fake_origin_circuit(TO_ORIGIN_CIRCUIT(client_side));
|
free_fake_origin_circuit(TO_ORIGIN_CIRCUIT(client_side));
|
||||||
|
testing_disable_reproducible_rng();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Test global padding rate limits */
|
/* Test global padding rate limits */
|
||||||
@ -2320,6 +2345,7 @@ test_circuitpadding_global_rate_limiting(void *arg)
|
|||||||
MOCK(circuit_package_relay_cell,
|
MOCK(circuit_package_relay_cell,
|
||||||
circuit_package_relay_cell_mock);
|
circuit_package_relay_cell_mock);
|
||||||
MOCK(monotime_absolute_usec, mock_monotime_absolute_usec);
|
MOCK(monotime_absolute_usec, mock_monotime_absolute_usec);
|
||||||
|
testing_enable_reproducible_rng();
|
||||||
|
|
||||||
monotime_init();
|
monotime_init();
|
||||||
monotime_enable_test_mocking();
|
monotime_enable_test_mocking();
|
||||||
@ -2399,6 +2425,7 @@ test_circuitpadding_global_rate_limiting(void *arg)
|
|||||||
circuitmux_free(dummy_channel.cmux);
|
circuitmux_free(dummy_channel.cmux);
|
||||||
SMARTLIST_FOREACH(vote1.net_params, char *, cp, tor_free(cp));
|
SMARTLIST_FOREACH(vote1.net_params, char *, cp, tor_free(cp));
|
||||||
smartlist_free(vote1.net_params);
|
smartlist_free(vote1.net_params);
|
||||||
|
testing_disable_reproducible_rng();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Test reduced and disabled padding */
|
/* Test reduced and disabled padding */
|
||||||
@ -2409,6 +2436,7 @@ test_circuitpadding_reduce_disable(void *arg)
|
|||||||
int64_t actual_mocked_monotime_start;
|
int64_t actual_mocked_monotime_start;
|
||||||
|
|
||||||
MOCK(circuitmux_attach_circuit, circuitmux_attach_circuit_mock);
|
MOCK(circuitmux_attach_circuit, circuitmux_attach_circuit_mock);
|
||||||
|
testing_enable_reproducible_rng();
|
||||||
|
|
||||||
nodes_init();
|
nodes_init();
|
||||||
dummy_channel.cmux = circuitmux_alloc();
|
dummy_channel.cmux = circuitmux_alloc();
|
||||||
@ -2548,6 +2576,7 @@ test_circuitpadding_reduce_disable(void *arg)
|
|||||||
free_fake_orcirc(relay_side);
|
free_fake_orcirc(relay_side);
|
||||||
circuitmux_detach_all_circuits(dummy_channel.cmux, NULL);
|
circuitmux_detach_all_circuits(dummy_channel.cmux, NULL);
|
||||||
circuitmux_free(dummy_channel.cmux);
|
circuitmux_free(dummy_channel.cmux);
|
||||||
|
testing_disable_reproducible_rng();
|
||||||
}
|
}
|
||||||
|
|
||||||
#define TEST_CIRCUITPADDING(name, flags) \
|
#define TEST_CIRCUITPADDING(name, flags) \
|
||||||
|
Loading…
Reference in New Issue
Block a user