[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [tor/maint-0.4.5] test: Add test for exits blocking reentry to the network
commit 46efbcb116b70f417c9e4241e4480688169b1813
Author: George Kadianakis <desnacked@xxxxxxxxxx>
Date: Fri Jan 29 18:21:30 2021 +0200
test: Add test for exits blocking reentry to the network
Signed-off-by: David Goulet <dgoulet@xxxxxxxxxxxxxx>
---
src/test/test_address_set.c | 80 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 80 insertions(+)
diff --git a/src/test/test_address_set.c b/src/test/test_address_set.c
index 3fee322c47..55a0b106d2 100644
--- a/src/test/test_address_set.c
+++ b/src/test/test_address_set.c
@@ -181,11 +181,91 @@ test_nodelist(void *arg)
UNMOCK(dirlist_add_trusted_dir_addresses);
}
+/** Test that the no-reentry exit filter works as intended */
+static void
+test_exit_no_reentry(void *arg)
+{
+ routerstatus_t *rs = NULL; microdesc_t *md = NULL; routerinfo_t *ri = NULL;
+ (void) arg;
+
+ MOCK(networkstatus_get_latest_consensus,
+ mock_networkstatus_get_latest_consensus);
+ MOCK(networkstatus_get_latest_consensus_by_flavor,
+ mock_networkstatus_get_latest_consensus_by_flavor);
+ MOCK(get_estimated_address_per_node,
+ mock_get_estimated_address_per_node);
+ MOCK(dirlist_add_trusted_dir_addresses,
+ mock_dirlist_add_trusted_dir_addresses);
+
+ dummy_ns = tor_malloc_zero(sizeof(*dummy_ns));
+ dummy_ns->flavor = FLAV_MICRODESC;
+ dummy_ns->routerstatus_list = smartlist_new();
+
+ tor_addr_t addr_v4, addr_v6, dummy_addr;
+ tor_addr_parse(&addr_v4, "42.42.42.42");
+ tor_addr_parse(&addr_v6, "1:2:3:4::");
+ memset(&dummy_addr, 'A', sizeof(dummy_addr));
+
+ /* This will make the nodelist bloom filter very large
+ * (the_nodelist->node_addrs) so we will fail the contain test rarely. */
+ addr_per_node = 1024;
+
+ /* After this point the nodelist is populated with the directory authorities
+ * address and ports */
+ nodelist_set_consensus(dummy_ns);
+
+ /* The address set is empty. Try it anyway */
+ tt_assert(!nodelist_reentry_probably_contains(&addr_v4, 244));
+ tt_assert(!nodelist_reentry_probably_contains(&addr_v6, 244));
+
+ /* Now let's populate the network */
+ md = tor_malloc_zero(sizeof(*md));
+ ri = tor_malloc_zero(sizeof(*ri));
+ rs = tor_malloc_zero(sizeof(*rs));
+ crypto_rand(rs->identity_digest, sizeof(rs->identity_digest));
+ crypto_rand(md->digest, sizeof(md->digest));
+ memcpy(rs->descriptor_digest, md->digest, DIGEST256_LEN);
+
+ /* Setup the rs, ri and md addresses. */
+ tor_addr_copy(&rs->ipv4_addr, &addr_v4);
+ rs->ipv4_orport = 444;
+ tor_addr_parse(&rs->ipv6_addr, "1:2:3:4::");
+ rs->ipv6_orport = 666;
+ tor_addr_copy(&ri->ipv4_addr, &addr_v4);
+ tor_addr_parse(&ri->ipv6_addr, "1:2:3:4::");
+ tor_addr_parse(&md->ipv6_addr, "1:2:3:4::");
+
+ /* Add the rs to the consensus becoming a node_t. */
+ smartlist_add(dummy_ns->routerstatus_list, rs);
+ nodelist_set_consensus(dummy_ns);
+
+ /* Now that the nodelist is populated let's do some retry attempts */
+
+ /* First let's try an address that is on the no-reentry list, but with a
+ different port */
+ tt_assert(!nodelist_reentry_probably_contains(&addr_v4, 666));
+ tt_assert(!nodelist_reentry_probably_contains(&addr_v6, 444));
+
+ /* OK now let's try with the right address and right port */
+ tt_assert(nodelist_reentry_probably_contains(&addr_v4, 444));
+ tt_assert(nodelist_reentry_probably_contains(&addr_v6, 666));
+
+ done:
+ routerstatus_free(rs); routerinfo_free(ri); microdesc_free(md);
+ smartlist_clear(dummy_ns->routerstatus_list);
+ networkstatus_vote_free(dummy_ns);
+ UNMOCK(networkstatus_get_latest_consensus);
+ UNMOCK(networkstatus_get_latest_consensus_by_flavor);
+ UNMOCK(get_estimated_address_per_node);
+ UNMOCK(dirlist_add_trusted_dir_addresses);
+}
+
struct testcase_t address_set_tests[] = {
{ "contains", test_contains, TT_FORK,
NULL, NULL },
{ "nodelist", test_nodelist, TT_FORK,
NULL, NULL },
+ { "exit_no_reentry", test_exit_no_reentry, TT_FORK, NULL, NULL },
END_OF_TESTCASES
};
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits