[tor-commits] [tor/master] test: Unit tests for the revision counter state file codethe

nickm at torproject.org nickm at torproject.org
Wed Aug 9 00:36:38 UTC 2017


commit b47139d7583ff247fcdd07904144dc99c412028a
Author: George Kadianakis <desnacked at riseup.net>
Date:   Mon Jul 24 13:03:19 2017 +0300

    test: Unit tests for the revision counter state file codethe
    
    Signed-off-by: David Goulet <dgoulet at torproject.org>
---
 src/or/hs_service.c        |  6 ++---
 src/or/hs_service.h        | 10 ++++++++
 src/test/test_hs_service.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 74 insertions(+), 3 deletions(-)

diff --git a/src/or/hs_service.c b/src/or/hs_service.c
index 6519cb1b6..131c4ff9f 100644
--- a/src/or/hs_service.c
+++ b/src/or/hs_service.c
@@ -924,7 +924,7 @@ load_service_keys(hs_service_t *service)
 }
 
 /* Free a given service descriptor object and all key material is wiped. */
-static void
+STATIC void
 service_descriptor_free(hs_service_descriptor_t *desc)
 {
   if (!desc) {
@@ -1947,7 +1947,7 @@ upload_descriptor_to_hsdir(const hs_service_t *service,
  *
  *     HidServRevCounter <blinded_pubkey> <rev_counter>
  */
-static char *
+STATIC char *
 encode_desc_rev_counter_for_state(const hs_service_descriptor_t *desc)
 {
   char *state_str = NULL;
@@ -2009,7 +2009,7 @@ update_revision_counters_in_state(void)
  *  with <b>blinded_pubkey</b>. Set <b>service_found_out</b> to True if the
  *  line is relevant to this service, and return the cached revision
  *  counter. Else set <b>service_found_out</b> to False. */
-static uint64_t
+STATIC uint64_t
 check_state_line_for_service_rev_counter(const char *state_line,
                                          ed25519_public_key_t *blinded_pubkey,
                                          int *service_found_out)
diff --git a/src/or/hs_service.h b/src/or/hs_service.h
index f46c4f51a..cb2a7aa80 100644
--- a/src/or/hs_service.h
+++ b/src/or/hs_service.h
@@ -325,6 +325,16 @@ STATIC void build_all_descriptors(time_t now);
 STATIC void update_all_descriptors(time_t now);
 STATIC void run_upload_descriptor_event(time_t now);
 
+STATIC char *
+encode_desc_rev_counter_for_state(const hs_service_descriptor_t *desc);
+
+STATIC void service_descriptor_free(hs_service_descriptor_t *desc);
+
+STATIC uint64_t
+check_state_line_for_service_rev_counter(const char *state_line,
+                                         ed25519_public_key_t *blinded_pubkey,
+                                         int *service_found_out);
+
 #endif /* TOR_UNIT_TESTS */
 
 #endif /* HS_SERVICE_PRIVATE */
diff --git a/src/test/test_hs_service.c b/src/test/test_hs_service.c
index 30f1682d8..664277b19 100644
--- a/src/test/test_hs_service.c
+++ b/src/test/test_hs_service.c
@@ -1194,6 +1194,65 @@ test_upload_desctriptors(void *arg)
   UNMOCK(hs_overlap_mode_is_active);
 }
 
+/** Test the functions that save and load HS revision counters to state. */
+static void
+test_revision_counter_state(void *arg)
+{
+  char *state_line_one = NULL;
+  char *state_line_two = NULL;
+
+  hs_service_descriptor_t *desc_one = service_descriptor_new();
+  hs_service_descriptor_t *desc_two = service_descriptor_new();
+
+  (void) arg;
+
+  /* Prepare both descriptors */
+  desc_one->desc->plaintext_data.revision_counter = 42;
+  desc_two->desc->plaintext_data.revision_counter = 240;
+  memset(&desc_one->blinded_kp.pubkey.pubkey, '\x42',
+         sizeof(desc_one->blinded_kp.pubkey.pubkey));
+  memset(&desc_two->blinded_kp.pubkey.pubkey, '\xf0',
+         sizeof(desc_one->blinded_kp.pubkey.pubkey));
+
+  /* Turn the descriptor rev counters into state lines */
+  state_line_one = encode_desc_rev_counter_for_state(desc_one);
+  tt_str_op(state_line_one, OP_EQ,
+            "QkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkI 42");
+
+  state_line_two = encode_desc_rev_counter_for_state(desc_two);
+  tt_str_op(state_line_two, OP_EQ,
+            "8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PA 240");
+
+  /* Now let's test our state parsing function: */
+  int service_found;
+  uint64_t cached_rev_counter;
+
+  /* First's try with wrong pubkey and check that no service was found */
+  cached_rev_counter =check_state_line_for_service_rev_counter(state_line_one,
+                                                 &desc_two->blinded_kp.pubkey,
+                                                               &service_found);
+  tt_int_op(service_found, OP_EQ, 0);
+
+  /* Now let's try with the right pubkeys */
+  cached_rev_counter =check_state_line_for_service_rev_counter(state_line_one,
+                                                 &desc_one->blinded_kp.pubkey,
+                                                               &service_found);
+  tt_int_op(service_found, OP_EQ, 1);
+  tt_int_op(cached_rev_counter, OP_EQ, 42);
+
+  cached_rev_counter =check_state_line_for_service_rev_counter(state_line_two,
+                                                 &desc_two->blinded_kp.pubkey,
+                                                               &service_found);
+  tt_int_op(service_found, OP_EQ, 1);
+  tt_int_op(cached_rev_counter, OP_EQ, 240);
+
+ done:
+  tor_free(state_line_one);
+  tor_free(state_line_two);
+  service_descriptor_free(desc_one);
+  service_descriptor_free(desc_two);
+}
+
 struct testcase_t hs_service_tests[] = {
   { "e2e_rend_circuit_setup", test_e2e_rend_circuit_setup, TT_FORK,
     NULL, NULL },
@@ -1221,6 +1280,8 @@ struct testcase_t hs_service_tests[] = {
     NULL, NULL },
   { "upload_desctriptors", test_upload_desctriptors, TT_FORK,
     NULL, NULL },
+  { "revision_counter_state", test_revision_counter_state, TT_FORK,
+    NULL, NULL },
 
   END_OF_TESTCASES
 };





More information about the tor-commits mailing list