mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-11 05:33:47 +01:00
Test for entry_guard_has_higher_priority().
This commit is contained in:
parent
c6d218c44b
commit
fcb50f1839
@ -2093,6 +2093,54 @@ test_entry_guard_manage_primary(void *arg)
|
||||
smartlist_free(prev_guards);
|
||||
}
|
||||
|
||||
static void
|
||||
test_entry_guard_guard_preferred(void *arg)
|
||||
{
|
||||
(void) arg;
|
||||
entry_guard_t *g1 = tor_malloc_zero(sizeof(entry_guard_t));
|
||||
entry_guard_t *g2 = tor_malloc_zero(sizeof(entry_guard_t));
|
||||
|
||||
g1->confirmed_idx = g2->confirmed_idx = -1;
|
||||
g1->last_tried_to_connect = approx_time();
|
||||
g2->last_tried_to_connect = approx_time();
|
||||
|
||||
tt_int_op(0, OP_EQ, entry_guard_has_higher_priority(g1, g1));
|
||||
|
||||
/* Neither is pending; priorities equal. */
|
||||
tt_int_op(0, OP_EQ, entry_guard_has_higher_priority(g2, g1));
|
||||
tt_int_op(0, OP_EQ, entry_guard_has_higher_priority(g1, g2));
|
||||
|
||||
/* If one is pending, the pending one has higher priority */
|
||||
g1->is_pending = 1;
|
||||
tt_int_op(1, OP_EQ, entry_guard_has_higher_priority(g1, g2));
|
||||
tt_int_op(0, OP_EQ, entry_guard_has_higher_priority(g2, g1));
|
||||
|
||||
/* If both are pending, and last_tried_to_connect is equal:
|
||||
priorities equal */
|
||||
g2->is_pending = 1;
|
||||
tt_int_op(0, OP_EQ, entry_guard_has_higher_priority(g2, g1));
|
||||
tt_int_op(0, OP_EQ, entry_guard_has_higher_priority(g1, g2));
|
||||
|
||||
/* One had a connection that startied earlier: it has higher priority. */
|
||||
g2->last_tried_to_connect -= 10;
|
||||
tt_int_op(1, OP_EQ, entry_guard_has_higher_priority(g2, g1));
|
||||
tt_int_op(0, OP_EQ, entry_guard_has_higher_priority(g1, g2));
|
||||
|
||||
/* Now, say that g1 is confirmed. It will get higher priority. */
|
||||
g1->confirmed_idx = 5;
|
||||
tt_int_op(0, OP_EQ, entry_guard_has_higher_priority(g2, g1));
|
||||
tt_int_op(1, OP_EQ, entry_guard_has_higher_priority(g1, g2));
|
||||
|
||||
/* But if g2 was confirmed first, it will get priority */
|
||||
g2->confirmed_idx = 2;
|
||||
tt_int_op(1, OP_EQ, entry_guard_has_higher_priority(g2, g1));
|
||||
tt_int_op(0, OP_EQ, entry_guard_has_higher_priority(g1, g2));
|
||||
|
||||
done:
|
||||
tor_free(g1);
|
||||
tor_free(g2);
|
||||
}
|
||||
|
||||
static void
|
||||
test_entry_guard_select_for_circuit_no_confirmed(void *arg)
|
||||
{
|
||||
@ -2578,6 +2626,7 @@ struct testcase_t entrynodes_tests[] = {
|
||||
BFN_TEST(sample_reachable_filtered_empty),
|
||||
BFN_TEST(retry_unreachable),
|
||||
BFN_TEST(manage_primary),
|
||||
{ "guard_preferred", test_entry_guard_guard_preferred, TT_FORK, NULL, NULL },
|
||||
BFN_TEST(select_for_circuit_no_confirmed),
|
||||
BFN_TEST(select_for_circuit_confirmed),
|
||||
BFN_TEST(select_for_circuit_highlevel_primary),
|
||||
|
Loading…
Reference in New Issue
Block a user