Browse Source

Test get_guard_selection_by_name

Nick Mathewson 7 years ago
parent
commit
a7bc73935b
3 changed files with 51 additions and 1 deletions
  1. 1 1
      src/or/entrynodes.c
  2. 2 0
      src/or/entrynodes.h
  3. 48 0
      src/test/test_entrynodes.c

+ 1 - 1
src/or/entrynodes.c

@@ -201,7 +201,7 @@ guard_selection_new(const char *name)
  * <b>create_if_absent</b> is true, then create and return it.  If there
  * is none, and <b>create_if_absent</b> is false, then return NULL.
  */
-static guard_selection_t *
+STATIC guard_selection_t *
 get_guard_selection_by_name(const char *name, int create_if_absent)
 {
   if (!guard_contexts) {

+ 2 - 0
src/or/entrynodes.h

@@ -416,6 +416,8 @@ int num_bridges_usable(void);
 // ---------- XXXX these functions and definitions are post-prop271.
 HANDLE_DECL(entry_guard, entry_guard_t, STATIC)
 STATIC guard_selection_t *guard_selection_new(const char *name);
+STATIC guard_selection_t *get_guard_selection_by_name(
+                                    const char *name, int create_if_absent);
 STATIC void guard_selection_free(guard_selection_t *gs);
 STATIC entry_guard_t *get_sampled_guard_with_id(guard_selection_t *gs,
                                                 const uint8_t *rsa_id);

+ 48 - 0
src/test/test_entrynodes.c

@@ -1235,6 +1235,52 @@ test_entry_guard_parse_from_state_partial_failure(void *arg)
   tor_free(mem_op_hex_tmp);
 }
 
+static void
+test_entry_guard_get_guard_selection_by_name(void *arg)
+{
+  (void)arg;
+  guard_selection_t *gs1, *gs2, *gs3;
+
+  gs1 = get_guard_selection_by_name("unlikely", 0);
+  tt_assert(gs1 == NULL);
+  gs1 = get_guard_selection_by_name("unlikely", 1);
+  tt_assert(gs1 != NULL);
+  gs2 = get_guard_selection_by_name("unlikely", 1);
+  tt_assert(gs2 == gs1);
+  gs2 = get_guard_selection_by_name("unlikely", 0);
+  tt_assert(gs2 == gs1);
+
+  gs2 = get_guard_selection_by_name("implausible", 0);
+  tt_assert(gs2 == NULL);
+  gs2 = get_guard_selection_by_name("implausible", 1);
+  tt_assert(gs2 != NULL);
+  tt_assert(gs2 != gs1);
+  gs3 = get_guard_selection_by_name("implausible", 0);
+  tt_assert(gs3 == gs2);
+
+  gs3 = get_guard_selection_by_name("default", 0);
+  tt_assert(gs3 == NULL);
+  gs3 = get_guard_selection_by_name("default", 1);
+  tt_assert(gs3 != NULL);
+  tt_assert(gs3 != gs2);
+  tt_assert(gs3 != gs1);
+  tt_assert(gs3 == get_guard_selection_info());
+
+#if 0
+  or_options_t *options = get_options_mutable();
+  options->UseDeprecatedGuardAlgorithm = 1;
+  gs4 = get_guard_selection_info();
+  tt_assert(gs4 != gs3);
+  tt_assert(gs4 == get_guard_selection_by_name("legacy", 1));
+
+  options->UseDeprecatedGuardAlgorithm = 0;
+  tt_assert(gs3 == get_guard_selection_info());
+#endif
+
+ done:
+  entry_guards_free_all();
+}
+
 static void
 test_entry_guard_add_single_guard(void *arg)
 {
@@ -2245,6 +2291,8 @@ struct testcase_t entrynodes_tests[] = {
     test_entry_guard_parse_from_state_failure, 0, NULL, NULL },
   { "parse_from_state_partial_failure",
     test_entry_guard_parse_from_state_partial_failure, 0, NULL, NULL },
+  { "get_guard_selection_by_name",
+    test_entry_guard_get_guard_selection_by_name, TT_FORK, NULL, NULL },
   BFN_TEST(add_single_guard),
   BFN_TEST(node_filter),
   BFN_TEST(expand_sample),