]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
add a unit test to expose bug 7192
authorRoger Dingledine <arma@torproject.org>
Mon, 22 Oct 2012 21:09:43 +0000 (17:09 -0400)
committerRoger Dingledine <arma@torproject.org>
Mon, 22 Oct 2012 21:09:43 +0000 (17:09 -0400)
src/or/policies.c
src/or/policies.h
src/test/test.c

index 6e984211baed98c490b407f46dde4b776c9440fd..486c2647ebd384779382aa9863547c1b3545444a 100644 (file)
@@ -1413,6 +1413,33 @@ parse_short_policy(const char *summary)
   return result;
 }
 
+/** Write <b>policy</b> back out into a string. Used only for unit tests
+ * currently. */
+const char *
+write_short_policy(const short_policy_t *policy)
+{
+  int i;
+  char *answer;
+  smartlist_t *sl = smartlist_new();
+
+  smartlist_add_asprintf(sl, "%s", policy->is_accept ? "accept " : "reject ");
+
+  for(i=0; i < policy->n_entries; i++) {
+    const short_policy_entry_t *e = &policy->entries[i];
+    if (e->min_port == e->max_port) {
+      smartlist_add_asprintf(sl, "%d", e->min_port);
+    } else {
+      smartlist_add_asprintf(sl, "%d-%d", e->min_port, e->max_port);
+    }
+    if (i < policy->n_entries-1)
+      smartlist_add(sl, tor_strdup(","));
+  }
+  answer = smartlist_join_strings(sl, "", 0, NULL);
+  SMARTLIST_FOREACH(sl, char *, a, tor_free(a));
+  smartlist_free(sl);
+  return answer;
+}
+
 /** Release all storage held in <b>policy</b>. */
 void
 short_policy_free(short_policy_t *policy)
index 31f3f06c7d348910fbb1d479f59403057f5eca61..b385d8e4908c4aa061f985e104552b524de6edea 100644 (file)
@@ -61,6 +61,7 @@ void policies_free_all(void);
 char *policy_summarize(smartlist_t *policy);
 
 short_policy_t *parse_short_policy(const char *summary);
+const char *write_short_policy(const short_policy_t *policy);
 void short_policy_free(short_policy_t *policy);
 int short_policy_is_reject_star(const short_policy_t *policy);
 addr_policy_result_t compare_tor_addr_to_short_policy(
index 6bf2d28d9044cb17c0c1684ec3f34a03cde96705..9b510d292105c99db71adaf03cf622d3c77d1cd2 100644 (file)
@@ -1014,6 +1014,7 @@ test_policy_summary_helper(const char *policy_str,
   config_line_t line;
   smartlist_t *policy = smartlist_new();
   char *summary = NULL;
+  const char *summary_after;
   int r;
   short_policy_t *short_policy = NULL;
 
@@ -1030,8 +1031,11 @@ test_policy_summary_helper(const char *policy_str,
 
   short_policy = parse_short_policy(summary);
   tt_assert(short_policy);
+  summary_after = write_short_policy(short_policy);
+  test_streq(summary, summary_after);
 
  done:
+  tor_free(summary_after);
   tor_free(summary);
   if (policy)
     addr_policy_list_free(policy);