]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Enable deterministic RNG for address set tests.
authorAlexander Færøy <ahf@torproject.org>
Fri, 25 Jun 2021 16:29:53 +0000 (16:29 +0000)
committerAlexander Færøy <ahf@torproject.org>
Fri, 25 Jun 2021 16:43:10 +0000 (16:43 +0000)
This patch enables the deterministic RNG for address set tests,
including the tests which uses address set indirectly via the nodelist
API.

This should prevent random test failures in the highly unlikely case of
a false positive which was seen in tor#40419.

See: tpo/core/tor#40419.

changes/ticket40419 [new file with mode: 0644]
src/test/test_address_set.c

diff --git a/changes/ticket40419 b/changes/ticket40419
new file mode 100644 (file)
index 0000000..0004329
--- /dev/null
@@ -0,0 +1,3 @@
+  o Minor features (testing):
+    - Enable the deterministic RNG for unit tests that covers the address set
+      bloomfilter-based API's. Fixes bug 40419; bugfix on 0.3.3.2-alpha.
index a73fbab76a0f7c9454ec0b3e3e7cce9e35c7f368..37688f4c1d54de9ca4fed7bc22889f5d2cd2df35 100644 (file)
@@ -17,6 +17,7 @@
 #include "feature/nodelist/routerstatus_st.h"
 
 #include "test/test.h"
+#include "test/rng_test_helpers.h"
 
 static networkstatus_t *dummy_ns = NULL;
 static networkstatus_t *
@@ -62,6 +63,10 @@ test_contains(void *arg)
   tor_addr_parse(&addr_v4, "42.42.42.42");
   uint32_t ipv4h = tor_addr_to_ipv4h(&addr_v4);
 
+  /* Use our deterministic RNG since the address set uses a bloom filter
+   * internally. */
+  testing_enable_deterministic_rng();
+
   /* Make it very big so the chance of failing the contain test will be
    * extremely rare. */
   set = address_set_new(1024);
@@ -89,6 +94,8 @@ test_contains(void *arg)
 
  done:
   address_set_free(set);
+
+  testing_disable_deterministic_rng();
 }
 
 static void
@@ -108,6 +115,10 @@ test_nodelist(void *arg)
   MOCK(dirlist_add_trusted_dir_addresses,
        mock_dirlist_add_trusted_dir_addresses);
 
+  /* Use our deterministic RNG since the address set, used for
+   * nodelist_probably_contains_address() uses a bloom filter internally. */
+  testing_enable_deterministic_rng();
+
   dummy_ns = tor_malloc_zero(sizeof(*dummy_ns));
   dummy_ns->flavor = FLAV_MICRODESC;
   dummy_ns->routerstatus_list = smartlist_new();
@@ -179,6 +190,8 @@ test_nodelist(void *arg)
   UNMOCK(networkstatus_get_latest_consensus_by_flavor);
   UNMOCK(get_estimated_address_per_node);
   UNMOCK(dirlist_add_trusted_dir_addresses);
+
+  testing_disable_deterministic_rng();
 }
 
 /** Test that the no-reentry exit filter works as intended */