[tor-commits] [tor/master] consdiffmgr test: survive failures to compute a diff.

nickm at torproject.org nickm at torproject.org
Mon Apr 24 15:05:42 UTC 2017


commit d418f28cb5cd175f224768fe214e2e2c1bc2b413
Author: Nick Mathewson <nickm at torproject.org>
Date:   Sat Apr 15 10:05:10 2017 -0400

    consdiffmgr test: survive failures to compute a diff.
---
 src/test/test_consdiffmgr.c | 41 ++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 40 insertions(+), 1 deletion(-)

diff --git a/src/test/test_consdiffmgr.c b/src/test/test_consdiffmgr.c
index f550482..1a666cc 100644
--- a/src/test/test_consdiffmgr.c
+++ b/src/test/test_consdiffmgr.c
@@ -353,6 +353,45 @@ test_consdiffmgr_diff_rules(void *arg)
 #undef N
 }
 
+static void
+test_consdiffmgr_diff_failure(void *arg)
+{
+  (void)arg;
+  MOCK(cpuworker_queue_work, mock_cpuworker_queue_work);
+
+  /* We're going to make sure that if we have a bogus request where
+   * we can't actually compute a diff, the world must not end. */
+  networkstatus_t *ns1 = NULL;
+  networkstatus_t *ns2 = NULL;
+  int r;
+
+  ns1 = fake_ns_new(FLAV_NS, approx_time()-100);
+  ns2 = fake_ns_new(FLAV_NS, approx_time()-50);
+  r = consdiffmgr_add_consensus("foo bar baz\n", ns1);
+  tt_int_op(r, OP_EQ, 0);
+  // We refuse to compute a diff to or from a line holding only a single dot.
+  // We can add it here, though.
+  r = consdiffmgr_add_consensus("foo bar baz\n.\n.\n", ns2);
+  tt_int_op(r, OP_EQ, 0);
+
+  consdiffmgr_rescan();
+  tt_ptr_op(NULL, OP_NE, fake_cpuworker_queue);
+  setup_capture_of_logs(LOG_WARN);
+  tt_int_op(1, OP_EQ, smartlist_len(fake_cpuworker_queue));
+  tt_int_op(0, OP_EQ, mock_cpuworker_run_work());
+  expect_single_log_msg_containing("one of the lines to be added is \".\".");
+  mock_clean_saved_logs();
+  mock_cpuworker_handle_replies();
+  expect_single_log_msg_containing("Worker was unable to compute consensus "
+                                   "diff from ");
+
+ done:
+  teardown_capture_of_logs();
+  UNMOCK(cpuworker_queue_work);
+  networkstatus_vote_free(ns1);
+  networkstatus_vote_free(ns2);
+}
+
 #define TEST(name)                                      \
   { #name, test_consdiffmgr_ ## name , TT_FORK, &setup_diffmgr, NULL }
 
@@ -360,6 +399,7 @@ struct testcase_t consdiffmgr_tests[] = {
   TEST(add),
   TEST(make_diffs),
   TEST(diff_rules),
+  TEST(diff_failure),
 
   // XXXX Test: deleting consensuses for being too old
   // XXXX Test: deleting diffs for not being to most recent consensus
@@ -367,7 +407,6 @@ struct testcase_t consdiffmgr_tests[] = {
   // XXXX Test: Objects with bad iso time are not cleaned.
 
   // XXXX Test: Failure to open cache???
-  // XXXX Test: failure to create consensus diff.
   END_OF_TESTCASES
 };
 





More information about the tor-commits mailing list