aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2018-05-03 16:52:09 -0400
committerNick Mathewson <nickm@torproject.org>2018-05-03 16:52:09 -0400
commit08e525c198c52bb57f154e79326a9b123ef55d91 (patch)
treea71b48ed3e9b307791344a654ac73a63b5b884a0
parent80b9a589bb351659252faa9793176ada6c9ce914 (diff)
parent19b53e264527a1506a21e7b563c47500ac304450 (diff)
downloadtor-08e525c198c52bb57f154e79326a9b123ef55d91.tar.gz
tor-08e525c198c52bb57f154e79326a9b123ef55d91.zip
Merge remote-tracking branch 'github/ticket25995'
-rw-r--r--changes/ticket259955
-rw-r--r--src/test/test.c19
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. */