[tor-commits] [tor/master] Add tests for max length bw file headers

nickm at torproject.org nickm at torproject.org
Mon Jul 30 12:45:08 UTC 2018


commit c6aee94d1983ad644da51fc1082d673f7a0d5220
Author: juga0 <juga at riseup.net>
Date:   Sat Jun 30 13:57:41 2018 +0000

    Add tests for max length bw file headers
---
 src/test/test_dir.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 68 insertions(+), 6 deletions(-)

diff --git a/src/test/test_dir.c b/src/test/test_dir.c
index 23faace08..48d50b05f 100644
--- a/src/test/test_dir.c
+++ b/src/test/test_dir.c
@@ -1649,12 +1649,12 @@ test_dir_dirserv_read_measured_bandwidths(void *arg)
   char *bw_file_headers_str_v110 = NULL;
   char *bw_file_headers_str_bad = NULL;
   char *bw_file_headers_str_extra = NULL;
-  char bw_file_headers_str_long[MAX_BW_FILE_HEADERS_LEN * 8 + 1] = "";
+  char bw_file_headers_str_long[MAX_BW_FILE_HEADER_COUNT_IN_VOTE * 8 + 1] = "";
   /* string header lines in bw file */
   char *header_lines_v100 = NULL;
   char *header_lines_v110_no_terminator = NULL;
   char *header_lines_v110 = NULL;
-  char header_lines_long[MAX_BW_FILE_HEADERS_LEN * 8 + 1] = "";
+  char header_lines_long[MAX_BW_FILE_HEADER_COUNT_IN_VOTE * 8 + 1] = "";
   int i;
   const char *header_lines_v110_no_terminator_no_timestamp =
     "version=1.1.0\n"
@@ -1682,7 +1682,7 @@ test_dir_dirserv_read_measured_bandwidths(void *arg)
     "master_key_ed25519=YaqV4vbvPYKucElk297eVdNArDz9HtIwUoIeo0+cVIpQ "
     "bw=760 nick=Test rtt=380 time=2018-05-08T16:13:26\n";
   const char *relay_lines_bad =
-    "node_id=$68A483E05A2ABDCA6DA5A3EF8DB5177638A27F80 \n";
+    "node_id=$68A483E05A2ABDCA6DA5A3EF8DB5177638A\n";
 
   tor_asprintf(&header_lines_v100, "%ld\n", (long)timestamp);
   tor_asprintf(&header_lines_v110_no_terminator, "%ld\n%s", (long)timestamp,
@@ -1694,15 +1694,15 @@ test_dir_dirserv_read_measured_bandwidths(void *arg)
   tor_asprintf(&bw_file_headers_str_v110, "timestamp=%ld %s",
                (long)timestamp, bw_file_headers_str_v110_no_timestamp);
   tor_asprintf(&bw_file_headers_str_bad, "%s "
-               "node_id=$68A483E05A2ABDCA6DA5A3EF8DB5177638A27F80 ",
+               "node_id=$68A483E05A2ABDCA6DA5A3EF8DB5177638A",
                bw_file_headers_str_v110);
 
-  for (i=0; i<MAX_BW_FILE_HEADERS_LEN; i++) {
+  for (i=0; i<MAX_BW_FILE_HEADER_COUNT_IN_VOTE; i++) {
     strlcat(header_lines_long, "foo=bar\n",
             sizeof(header_lines_long));
   }
   /* 8 is the number of v110 lines in header_lines_v110 */
-  for (i=0; i<MAX_BW_FILE_HEADERS_LEN - 8 - 1; i++) {
+  for (i=0; i<MAX_BW_FILE_HEADER_COUNT_IN_VOTE - 8 - 1; i++) {
     strlcat(bw_file_headers_str_long, "foo=bar ",
             sizeof(bw_file_headers_str_long));
   }
@@ -1886,6 +1886,68 @@ test_dir_dirserv_read_measured_bandwidths(void *arg)
   smartlist_free(bw_file_headers);
   tor_free(bw_file_headers_str);
 
+  /* Test v1.1.0 bandwidth headers without terminator, then bad relay lines,
+   * then relay lines. bw_file_headers will contain the v1.1.0 headers and
+   * the bad relay lines. */
+  bw_file_headers = smartlist_new();
+  tor_asprintf(&content, "%s%s%s",
+               header_lines_v110_no_terminator, relay_lines_bad,
+               relay_lines_v110);
+  write_str_to_file(fname, content, 0);
+  tor_free(content);
+  tt_int_op(0, OP_EQ, dirserv_read_measured_bandwidths(fname, NULL,
+                                                       bw_file_headers));
+  bw_file_headers_str = smartlist_join_strings(bw_file_headers, " ", 0, NULL);
+  tt_str_op(bw_file_headers_str_bad, OP_EQ, bw_file_headers_str);
+  SMARTLIST_FOREACH(bw_file_headers, char *, c, tor_free(c));
+  smartlist_free(bw_file_headers);
+  tor_free(bw_file_headers_str);
+
+  /* Test v1.1.0 bandwidth headers without terminator,
+   * then many bad relay lines, then relay lines.
+   * bw_file_headers will contain the v1.1.0 headers and the bad relay lines
+   * to a maximum of MAX_BW_FILE_HEADER_COUNT_IN_VOTE header lines. */
+  bw_file_headers = smartlist_new();
+  tor_asprintf(&content, "%s%s%s",
+               header_lines_v110_no_terminator, header_lines_long,
+               relay_lines_v110);
+  write_str_to_file(fname, content, 0);
+  tor_free(content);
+  tt_int_op(0, OP_EQ, dirserv_read_measured_bandwidths(fname, NULL,
+                                                       bw_file_headers));
+  tt_int_op(MAX_BW_FILE_HEADER_COUNT_IN_VOTE, OP_EQ,
+            smartlist_len(bw_file_headers));
+  bw_file_headers_str = smartlist_join_strings(bw_file_headers, " ", 0, NULL);
+  tt_str_op(bw_file_headers_str_extra, OP_EQ, bw_file_headers_str);
+  SMARTLIST_FOREACH(bw_file_headers, char *, c, tor_free(c));
+  smartlist_free(bw_file_headers);
+  tor_free(bw_file_headers_str);
+
+  /* Test v1.1.0 bandwidth headers without terminator,
+   * then many bad relay lines, then relay lines.
+   * bw_file_headers will contain the v1.1.0 headers and the bad relay lines.
+   * Force bw_file_headers to have more than MAX_BW_FILE_HEADER_COUNT_IN_VOTE
+   * This test is needed while there is not dirvote test. */
+  bw_file_headers = smartlist_new();
+  tor_asprintf(&content, "%s%s%s",
+               header_lines_v110_no_terminator, header_lines_long,
+               relay_lines_v110);
+  write_str_to_file(fname, content, 0);
+  tor_free(content);
+  tt_int_op(0, OP_EQ, dirserv_read_measured_bandwidths(fname, NULL,
+                                                       bw_file_headers));
+  tt_int_op(MAX_BW_FILE_HEADER_COUNT_IN_VOTE, OP_EQ,
+            smartlist_len(bw_file_headers));
+  /* force bw_file_headers to be bigger than
+   * MAX_BW_FILE_HEADER_COUNT_IN_VOTE */
+  char line[8] = "foo=bar\0";
+  smartlist_add_strdup(bw_file_headers, line);
+  tt_int_op(MAX_BW_FILE_HEADER_COUNT_IN_VOTE, OP_LT,
+            smartlist_len(bw_file_headers));
+  SMARTLIST_FOREACH(bw_file_headers, char *, c, tor_free(c));
+  smartlist_free(bw_file_headers);
+  tor_free(bw_file_headers_str);
+
  done:
   tor_free(fname);
   tor_free(header_lines_v100);





More information about the tor-commits mailing list