aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Goulet <dgoulet@torproject.org>2022-03-15 13:28:04 -0400
committerDavid Goulet <dgoulet@torproject.org>2022-03-29 10:32:29 -0400
commitb4890e753459bb1aeb1c258e98fdb2c598bb1369 (patch)
tree54a275343639602b25a12f7ed29d0e2a27524044
parent7ce3edaee0eaf93f2f8fa60b859cf49118b9523b (diff)
downloadtor-b4890e753459bb1aeb1c258e98fdb2c598bb1369.tar.gz
tor-b4890e753459bb1aeb1c258e98fdb2c598bb1369.zip
test: Unit tests for overload onionskin ntor
Part of #40560 Signed-off-by: David Goulet <dgoulet@torproject.org>
-rw-r--r--src/test/test_stats.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/test/test_stats.c b/src/test/test_stats.c
index af035ae54c..5b40afc64e 100644
--- a/src/test/test_stats.c
+++ b/src/test/test_stats.c
@@ -867,6 +867,65 @@ test_overload_stats(void *arg)
tor_free(stats_str);
}
+/** Test the overload stats logic. */
+static void
+test_overload_onionskin_ntor(void *arg)
+{
+ char *stats_str = NULL;
+ (void) arg;
+ uint16_t type = ONION_HANDSHAKE_TYPE_NTOR;
+
+ /* Lets simulate a series of timeouts but below our default 1% threshold. */
+
+ for (int i = 0; i < 1000; i++) {
+ rep_hist_note_circuit_handshake_requested(type);
+ /* This should trigger 9 drop which is just below 1% (10) */
+ if (i > 0 && !(i % 100)) {
+ rep_hist_note_circuit_handshake_dropped(type);
+ }
+ }
+
+ /* No overload yet. */
+ stats_str = rep_hist_get_overload_general_line();
+ tt_assert(!stats_str);
+
+ /* Move it 6 hours in the future and see if we get a general overload. */
+ update_approx_time(approx_time() + 21600);
+
+ /* This request should NOT trigger the general overload because we are below
+ * our default of 1%. */
+ rep_hist_note_circuit_handshake_requested(type);
+ stats_str = rep_hist_get_overload_general_line();
+ tt_assert(!stats_str);
+
+ /* We'll now go above our 1% threshold. */
+ for (int i = 0; i < 1000; i++) {
+ rep_hist_note_circuit_handshake_requested(type);
+ /* This should trigger 10 timeouts which is our threshold of 1% (10) */
+ if (!(i % 10)) {
+ rep_hist_note_circuit_handshake_dropped(type);
+ }
+ }
+
+ /* Move it 6 hours in the future and see if we get a general overload. */
+ update_approx_time(approx_time() + 21600);
+
+ /* This request should trigger the general overload because above 1%. */
+ rep_hist_note_circuit_handshake_requested(type);
+ stats_str = rep_hist_get_overload_general_line();
+ tt_assert(stats_str);
+ tor_free(stats_str);
+
+ /* Move 72h in the future, we should NOT get an overload anymore. */
+ update_approx_time(approx_time() + (72 * 3600));
+
+ stats_str = rep_hist_get_overload_general_line();
+ tt_assert(!stats_str);
+
+ done:
+ tor_free(stats_str);
+}
+
#define ENT(name) \
{ #name, test_ ## name , 0, NULL, NULL }
#define FORK(name) \
@@ -883,6 +942,7 @@ struct testcase_t stats_tests[] = {
FORK(rephist_v3_onions),
FORK(load_stats_file),
FORK(overload_stats),
+ FORK(overload_onionskin_ntor),
END_OF_TESTCASES
};