diff options
author | Nick Mathewson <nickm@torproject.org> | 2018-05-03 16:52:09 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2018-05-03 16:52:09 -0400 |
commit | 08e525c198c52bb57f154e79326a9b123ef55d91 (patch) | |
tree | a71b48ed3e9b307791344a654ac73a63b5b884a0 | |
parent | 80b9a589bb351659252faa9793176ada6c9ce914 (diff) | |
parent | 19b53e264527a1506a21e7b563c47500ac304450 (diff) | |
download | tor-08e525c198c52bb57f154e79326a9b123ef55d91.tar.gz tor-08e525c198c52bb57f154e79326a9b123ef55d91.zip |
Merge remote-tracking branch 'github/ticket25995'
-rw-r--r-- | changes/ticket25995 | 5 | ||||
-rw-r--r-- | src/test/test.c | 19 |
2 files changed, 24 insertions, 0 deletions
diff --git a/changes/ticket25995 b/changes/ticket25995 new file mode 100644 index 0000000000..855020bd39 --- /dev/null +++ b/changes/ticket25995 @@ -0,0 +1,5 @@ + o Minor bugfixes (tests): + - While running the circuit_timeout test, fix the PRNG to a deterministic + AES stream, so that the test coverage from this test will itself be + deterministic. Fixes bug 25995; bugfix on 0.2.2.2-alpha. + diff --git a/src/test/test.c b/src/test/test.c index 41fca424ca..b1e5345b3c 100644 --- a/src/test/test.c +++ b/src/test/test.c @@ -350,6 +350,18 @@ test_onion_queues(void *arg) tor_free(onionskin); } +static crypto_cipher_t *crypto_rand_aes_cipher = NULL; + +// Mock replacement for crypto_rand: Generates bytes from a provided AES_CTR +// cipher in <b>crypto_rand_aes_cipher</b>. +static void +crypto_rand_deterministic_aes(char *out, size_t n) +{ + tor_assert(crypto_rand_aes_cipher); + memset(out, 0, n); + crypto_cipher_crypt_inplace(crypto_rand_aes_cipher, out, n); +} + static void test_circuit_timeout(void *arg) { @@ -379,6 +391,11 @@ test_circuit_timeout(void *arg) state = or_state_new(); + // Use a deterministic RNG here, or else we'll get nondeterministic + // coverage in some of the circuitstats functions. + MOCK(crypto_rand, crypto_rand_deterministic_aes); + crypto_rand_aes_cipher = crypto_cipher_new("xyzzyplughplover"); + circuitbuild_running_unit_tests(); #define timeout0 (build_time_t)(30*1000.0) initial.Xm = 3000; @@ -513,6 +530,8 @@ test_circuit_timeout(void *arg) circuit_build_times_free_timeouts(&final); or_state_free(state); teardown_periodic_events(); + UNMOCK(crypto_rand); + crypto_cipher_free(crypto_rand_aes_cipher); } /** Test encoding and parsing of rendezvous service descriptors. */ |