Test for entry_guard_has_higher_priority().

This commit is contained in:
Nick Mathewson 2016-11-27 14:48:17 -05:00
parent c6d218c44b
commit fcb50f1839

View File

@ -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),