summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2012-10-22 17:09:43 -0400
committerRoger Dingledine <arma@torproject.org>2012-10-22 17:09:43 -0400
commit4c8b58f9005b7a187878273b8ff0f8ec23e86326 (patch)
tree07dac5f06df0d3a1b0aa69fc3e28a4e2f3cd1adf
parent1cc06bd35e4203569ecc72ff314a1dd543f60651 (diff)
downloadtor-4c8b58f9005b7a187878273b8ff0f8ec23e86326.tar.gz
tor-4c8b58f9005b7a187878273b8ff0f8ec23e86326.zip
add a unit test to expose bug 7192
-rw-r--r--src/or/policies.c27
-rw-r--r--src/or/policies.h1
-rw-r--r--src/test/test.c4
3 files changed, 32 insertions, 0 deletions
diff --git a/src/or/policies.c b/src/or/policies.c
index 6e984211ba..486c2647eb 100644
--- a/src/or/policies.c
+++ b/src/or/policies.c
@@ -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)
diff --git a/src/or/policies.h b/src/or/policies.h
index 31f3f06c7d..b385d8e490 100644
--- a/src/or/policies.h
+++ b/src/or/policies.h
@@ -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(
diff --git a/src/test/test.c b/src/test/test.c
index 6bf2d28d90..9b510d2921 100644
--- a/src/test/test.c
+++ b/src/test/test.c
@@ -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);