mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
Revert "test/circuitpadding: Delete circuitpadding_circuitsetup_machine()"
This reverts commit 387d9448de
.
This commit is contained in:
parent
da678213e0
commit
593b33608d
@ -1824,6 +1824,257 @@ test_circuitpadding_conditions(void *arg)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Disabled unstable test until #29298 is implemented (see #29122) */
|
||||||
|
#if 0
|
||||||
|
void
|
||||||
|
test_circuitpadding_circuitsetup_machine(void *arg)
|
||||||
|
{
|
||||||
|
int64_t actual_mocked_monotime_start;
|
||||||
|
/**
|
||||||
|
* Test case plan:
|
||||||
|
*
|
||||||
|
* 1. Simulate a normal circuit setup pattern
|
||||||
|
* a. Application traffic
|
||||||
|
*
|
||||||
|
* FIXME: This should focus more on exercising the machine
|
||||||
|
* features rather than actual traffic patterns. For example,
|
||||||
|
* test cancellation and bins empty/refill
|
||||||
|
*/
|
||||||
|
(void)arg;
|
||||||
|
|
||||||
|
MOCK(circuitmux_attach_circuit, circuitmux_attach_circuit_mock);
|
||||||
|
|
||||||
|
dummy_channel.cmux = circuitmux_alloc();
|
||||||
|
client_side = TO_CIRCUIT(origin_circuit_new());
|
||||||
|
relay_side = TO_CIRCUIT(new_fake_orcirc(&dummy_channel, &dummy_channel));
|
||||||
|
|
||||||
|
relay_side->purpose = CIRCUIT_PURPOSE_OR;
|
||||||
|
client_side->purpose = CIRCUIT_PURPOSE_C_GENERAL;
|
||||||
|
|
||||||
|
nodes_init();
|
||||||
|
|
||||||
|
monotime_init();
|
||||||
|
monotime_enable_test_mocking();
|
||||||
|
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();
|
||||||
|
|
||||||
|
MOCK(circuit_package_relay_cell,
|
||||||
|
circuit_package_relay_cell_mock);
|
||||||
|
MOCK(node_get_by_id,
|
||||||
|
node_get_by_id_mock);
|
||||||
|
|
||||||
|
/* Test case #1: Build a 3 hop circuit, then wait and let pad */
|
||||||
|
simulate_single_hop_extend(client_side, relay_side, 1);
|
||||||
|
simulate_single_hop_extend(client_side, relay_side, 1);
|
||||||
|
simulate_single_hop_extend(client_side, relay_side, 1);
|
||||||
|
|
||||||
|
tt_int_op(n_client_cells, OP_EQ, 1);
|
||||||
|
tt_int_op(n_relay_cells, OP_EQ, 1);
|
||||||
|
tt_int_op(client_side->padding_info[0]->current_state, OP_EQ,
|
||||||
|
CIRCPAD_STATE_BURST);
|
||||||
|
tt_int_op(relay_side->padding_info[0]->current_state, OP_EQ,
|
||||||
|
CIRCPAD_STATE_BURST);
|
||||||
|
|
||||||
|
tt_u64_op(client_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_NE, 0);
|
||||||
|
tt_int_op(relay_side->padding_info[0]->is_padding_timer_scheduled,
|
||||||
|
OP_EQ, 0);
|
||||||
|
timers_advance_and_run(2000);
|
||||||
|
tt_int_op(n_client_cells, OP_EQ, 2);
|
||||||
|
tt_int_op(n_relay_cells, OP_EQ, 1);
|
||||||
|
|
||||||
|
tt_int_op(relay_side->padding_info[0]->current_state, OP_EQ,
|
||||||
|
CIRCPAD_STATE_GAP);
|
||||||
|
|
||||||
|
tt_u64_op(client_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_EQ, 0);
|
||||||
|
tt_u64_op(relay_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_NE, 0);
|
||||||
|
timers_advance_and_run(5000);
|
||||||
|
tt_int_op(n_client_cells, OP_EQ, 2);
|
||||||
|
tt_int_op(n_relay_cells, OP_EQ, 2);
|
||||||
|
|
||||||
|
tt_u64_op(client_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_NE, 0);
|
||||||
|
tt_u64_op(relay_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_EQ, 0);
|
||||||
|
timers_advance_and_run(2000);
|
||||||
|
tt_int_op(n_client_cells, OP_EQ, 3);
|
||||||
|
tt_int_op(n_relay_cells, OP_EQ, 2);
|
||||||
|
|
||||||
|
tt_u64_op(client_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_EQ, 0);
|
||||||
|
tt_u64_op(relay_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_NE, 0);
|
||||||
|
timers_advance_and_run(5000);
|
||||||
|
tt_int_op(n_client_cells, OP_EQ, 3);
|
||||||
|
tt_int_op(n_relay_cells, OP_EQ, 3);
|
||||||
|
|
||||||
|
tt_u64_op(client_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_NE, 0);
|
||||||
|
tt_u64_op(relay_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_EQ, 0);
|
||||||
|
timers_advance_and_run(2000);
|
||||||
|
tt_int_op(n_client_cells, OP_EQ, 4);
|
||||||
|
tt_int_op(n_relay_cells, OP_EQ, 3);
|
||||||
|
|
||||||
|
tt_u64_op(client_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_EQ, 0);
|
||||||
|
tt_u64_op(relay_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_NE, 0);
|
||||||
|
timers_advance_and_run(5000);
|
||||||
|
tt_int_op(n_client_cells, OP_EQ, 4);
|
||||||
|
tt_int_op(n_relay_cells, OP_EQ, 4);
|
||||||
|
|
||||||
|
tt_u64_op(client_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_NE, 0);
|
||||||
|
tt_u64_op(relay_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_EQ, 0);
|
||||||
|
timers_advance_and_run(2000);
|
||||||
|
tt_int_op(n_client_cells, OP_EQ, 5);
|
||||||
|
tt_int_op(n_relay_cells, OP_EQ, 4);
|
||||||
|
|
||||||
|
tt_u64_op(client_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_EQ, 0);
|
||||||
|
tt_u64_op(relay_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_NE, 0);
|
||||||
|
timers_advance_and_run(5000);
|
||||||
|
tt_int_op(n_client_cells, OP_EQ, 5);
|
||||||
|
tt_int_op(n_relay_cells, OP_EQ, 5);
|
||||||
|
|
||||||
|
tt_u64_op(client_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_NE, 0);
|
||||||
|
tt_u64_op(relay_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_EQ, 0);
|
||||||
|
timers_advance_and_run(2000);
|
||||||
|
tt_int_op(n_client_cells, OP_EQ, 6);
|
||||||
|
tt_int_op(n_relay_cells, OP_EQ, 5);
|
||||||
|
|
||||||
|
tt_u64_op(client_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_EQ, 0);
|
||||||
|
tt_u64_op(relay_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_NE, 0);
|
||||||
|
timers_advance_and_run(5000);
|
||||||
|
tt_int_op(n_client_cells, OP_EQ, 6);
|
||||||
|
tt_int_op(n_relay_cells, OP_EQ, 6);
|
||||||
|
|
||||||
|
tt_int_op(client_side->padding_info[0]->current_state,
|
||||||
|
OP_EQ, CIRCPAD_STATE_END);
|
||||||
|
tt_u64_op(client_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_EQ, 0);
|
||||||
|
tt_int_op(relay_side->padding_info[0]->current_state,
|
||||||
|
OP_EQ, CIRCPAD_STATE_GAP);
|
||||||
|
tt_u64_op(relay_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_EQ, 0);
|
||||||
|
|
||||||
|
/* Verify we can't schedule padding in END state */
|
||||||
|
circpad_decision_t ret =
|
||||||
|
circpad_machine_schedule_padding(client_side->padding_info[0]);
|
||||||
|
tt_int_op(ret, OP_EQ, CIRCPAD_STATE_UNCHANGED);
|
||||||
|
|
||||||
|
/* Simulate application traffic */
|
||||||
|
circpad_cell_event_nonpadding_sent(client_side);
|
||||||
|
circpad_deliver_unrecognized_cell_events(relay_side, CELL_DIRECTION_OUT);
|
||||||
|
circpad_deliver_unrecognized_cell_events(relay_side, CELL_DIRECTION_IN);
|
||||||
|
circpad_deliver_recognized_relay_cell_events(client_side, RELAY_COMMAND_DATA,
|
||||||
|
TO_ORIGIN_CIRCUIT(client_side)->cpath->next);
|
||||||
|
|
||||||
|
tt_ptr_op(client_side->padding_info[0], OP_EQ, NULL);
|
||||||
|
tt_ptr_op(client_side->padding_machine[0], OP_EQ, NULL);
|
||||||
|
|
||||||
|
tt_ptr_op(relay_side->padding_info[0], OP_EQ, NULL);
|
||||||
|
tt_ptr_op(relay_side->padding_machine[0], OP_EQ, NULL);
|
||||||
|
tt_int_op(n_client_cells, OP_EQ, 6);
|
||||||
|
tt_int_op(n_relay_cells, OP_EQ, 7);
|
||||||
|
|
||||||
|
// Test timer cancellation
|
||||||
|
simulate_single_hop_extend(client_side, relay_side, 1);
|
||||||
|
simulate_single_hop_extend(client_side, relay_side, 1);
|
||||||
|
timers_advance_and_run(5000);
|
||||||
|
circpad_cell_event_padding_received(client_side);
|
||||||
|
|
||||||
|
tt_int_op(client_side->padding_info[0]->current_state, OP_EQ,
|
||||||
|
CIRCPAD_STATE_BURST);
|
||||||
|
tt_int_op(relay_side->padding_info[0]->current_state, OP_EQ,
|
||||||
|
CIRCPAD_STATE_GAP);
|
||||||
|
|
||||||
|
tt_int_op(n_client_cells, OP_EQ, 8);
|
||||||
|
tt_int_op(n_relay_cells, OP_EQ, 8);
|
||||||
|
tt_u64_op(client_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_NE, 0);
|
||||||
|
tt_u64_op(relay_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_NE, 0);
|
||||||
|
|
||||||
|
/* Test timer cancel due to state rules */
|
||||||
|
circpad_cell_event_nonpadding_sent(client_side);
|
||||||
|
tt_u64_op(client_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_EQ, 0);
|
||||||
|
circpad_cell_event_padding_received(client_side);
|
||||||
|
tt_u64_op(client_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_NE, 0);
|
||||||
|
|
||||||
|
/* Simulate application traffic to cancel timer */
|
||||||
|
circpad_cell_event_nonpadding_sent(client_side);
|
||||||
|
circpad_deliver_unrecognized_cell_events(relay_side, CELL_DIRECTION_OUT);
|
||||||
|
circpad_deliver_unrecognized_cell_events(relay_side, CELL_DIRECTION_IN);
|
||||||
|
circpad_deliver_recognized_relay_cell_events(client_side, RELAY_COMMAND_DATA,
|
||||||
|
TO_ORIGIN_CIRCUIT(client_side)->cpath->next);
|
||||||
|
|
||||||
|
tt_ptr_op(client_side->padding_info[0], OP_EQ, NULL);
|
||||||
|
tt_ptr_op(client_side->padding_machine[0], OP_EQ, NULL);
|
||||||
|
|
||||||
|
tt_ptr_op(relay_side->padding_info[0], OP_EQ, NULL);
|
||||||
|
tt_ptr_op(relay_side->padding_machine[0], OP_EQ, NULL);
|
||||||
|
|
||||||
|
/* No cells sent, except negotiate end from relay */
|
||||||
|
tt_int_op(n_client_cells, OP_EQ, 8);
|
||||||
|
tt_int_op(n_relay_cells, OP_EQ, 9);
|
||||||
|
|
||||||
|
/* Test mark for close and free */
|
||||||
|
simulate_single_hop_extend(client_side, relay_side, 1);
|
||||||
|
simulate_single_hop_extend(client_side, relay_side, 1);
|
||||||
|
timers_advance_and_run(5000);
|
||||||
|
circpad_cell_event_padding_received(client_side);
|
||||||
|
|
||||||
|
tt_int_op(n_client_cells, OP_EQ, 10);
|
||||||
|
tt_int_op(n_relay_cells, OP_EQ, 10);
|
||||||
|
|
||||||
|
tt_int_op(client_side->padding_info[0]->current_state, OP_EQ,
|
||||||
|
CIRCPAD_STATE_BURST);
|
||||||
|
tt_int_op(relay_side->padding_info[0]->current_state, OP_EQ,
|
||||||
|
CIRCPAD_STATE_GAP);
|
||||||
|
|
||||||
|
tt_u64_op(client_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_NE, 0);
|
||||||
|
tt_u64_op(relay_side->padding_info[0]->padding_scheduled_at_usec,
|
||||||
|
OP_NE, 0);
|
||||||
|
circuit_mark_for_close(client_side, END_CIRC_REASON_FLAG_REMOTE);
|
||||||
|
free_fake_orcirc(relay_side);
|
||||||
|
timers_advance_and_run(5000);
|
||||||
|
|
||||||
|
/* No cells sent */
|
||||||
|
tt_int_op(n_client_cells, OP_EQ, 10);
|
||||||
|
tt_int_op(n_relay_cells, OP_EQ, 10);
|
||||||
|
|
||||||
|
done:
|
||||||
|
free_fake_origin_circuit(TO_ORIGIN_CIRCUIT(client_side));
|
||||||
|
|
||||||
|
circuitmux_detach_all_circuits(dummy_channel.cmux, NULL);
|
||||||
|
circuitmux_free(dummy_channel.cmux);
|
||||||
|
timers_shutdown();
|
||||||
|
monotime_disable_test_mocking();
|
||||||
|
UNMOCK(circuit_package_relay_cell);
|
||||||
|
UNMOCK(circuitmux_attach_circuit);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/** Helper function: Initializes a padding machine where every state uses the
|
/** Helper function: Initializes a padding machine where every state uses the
|
||||||
* uniform probability distribution. */
|
* uniform probability distribution. */
|
||||||
static void
|
static void
|
||||||
@ -2114,6 +2365,8 @@ struct testcase_t circuitpadding_tests[] = {
|
|||||||
TEST_CIRCUITPADDING(circuitpadding_tokens, TT_FORK),
|
TEST_CIRCUITPADDING(circuitpadding_tokens, TT_FORK),
|
||||||
TEST_CIRCUITPADDING(circuitpadding_negotiation, TT_FORK),
|
TEST_CIRCUITPADDING(circuitpadding_negotiation, TT_FORK),
|
||||||
TEST_CIRCUITPADDING(circuitpadding_wronghop, TT_FORK),
|
TEST_CIRCUITPADDING(circuitpadding_wronghop, TT_FORK),
|
||||||
|
/** Disabled unstable test until #29298 is implemented (see #29122) */
|
||||||
|
// TEST_CIRCUITPADDING(circuitpadding_circuitsetup_machine, TT_FORK),
|
||||||
TEST_CIRCUITPADDING(circuitpadding_conditions, TT_FORK),
|
TEST_CIRCUITPADDING(circuitpadding_conditions, TT_FORK),
|
||||||
TEST_CIRCUITPADDING(circuitpadding_rtt, TT_FORK),
|
TEST_CIRCUITPADDING(circuitpadding_rtt, TT_FORK),
|
||||||
TEST_CIRCUITPADDING(circuitpadding_sample_distribution, TT_FORK),
|
TEST_CIRCUITPADDING(circuitpadding_sample_distribution, TT_FORK),
|
||||||
|
Loading…
Reference in New Issue
Block a user