[tor-commits] [tor/master] Divide the different parse_port_config groups into separate tests

nickm at torproject.org nickm at torproject.org
Thu Jan 21 17:16:03 UTC 2016


commit f319231e6ea2eaa87ca937f8ff3c1c1209e9bda3
Author: Ola Bini <ola at olabini.se>
Date:   Mon Oct 5 15:31:49 2015 -0500

    Divide the different parse_port_config groups into separate tests
---
 src/or/config.c        |    2 +-
 src/or/config.h        |    1 +
 src/test/test_config.c |  226 +++++++++++++++++++++++++++++++-----------------
 3 files changed, 151 insertions(+), 78 deletions(-)

diff --git a/src/or/config.c b/src/or/config.c
index e542656..865cfd9 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -5809,7 +5809,6 @@ warn_nonlocal_controller_ports(smartlist_t *ports, unsigned forbid_nonlocal)
   } SMARTLIST_FOREACH_END(port);
 }
 
-
 #ifdef HAVE_SYS_UN_H
 
 /** Parse the given <b>addrport</b> and set <b>path_out</b> if a Unix socket
@@ -7323,3 +7322,4 @@ init_cookie_authentication(const char *fname, const char *header,
   tor_free(cookie_file_str);
   return retval;
 }
+
diff --git a/src/or/config.h b/src/or/config.h
index f29c7da..33dc5df 100644
--- a/src/or/config.h
+++ b/src/or/config.h
@@ -177,3 +177,4 @@ parse_port_config(smartlist_t *out,
 #endif
 
 #endif
+
diff --git a/src/test/test_config.c b/src/test/test_config.c
index cf48938..6fdd7e7 100644
--- a/src/test/test_config.c
+++ b/src/test/test_config.c
@@ -3377,19 +3377,16 @@ test_config_parse_port_config__listenaddress(void *data)
 }
 
 static void
-test_config_parse_port_config__ports(void *data)
+test_config_parse_port_config__ports__no_ports_given(void *data)
 {
   (void)data;
   int ret;
   smartlist_t *slout = NULL;
   port_cfg_t *port_cfg = NULL;
   config_line_t *config_port_invalid = NULL, *config_port_valid = NULL;
-  tor_addr_t addr;
 
   slout = smartlist_new();
 
-  // Test group -------------------- NO PORTS GIVEN ---------------------
-
   // Test no defaultport, no defaultaddress and no out
   ret = parse_port_config(NULL, NULL, NULL, "DNS", 0, NULL, 0, 0);
   tt_int_op(ret, OP_EQ, 0);
@@ -3422,6 +3419,7 @@ test_config_parse_port_config__ports(void *data)
   tt_int_op(smartlist_len(slout), OP_EQ, 0);
 
   // Test with defaultport, with defaultaddress and out, adds a new port cfg
+  smartlist_clear(slout);
   ret = parse_port_config(slout, NULL, NULL, "DNS", 0, "127.0.0.2", 42, 0);
   tt_int_op(ret, OP_EQ, 0);
   tt_int_op(smartlist_len(slout), OP_EQ, 1);
@@ -3431,18 +3429,33 @@ test_config_parse_port_config__ports(void *data)
 
   // Test with defaultport, with defaultaddress and out, adds a new port cfg
   // for a unix address
+  smartlist_clear(slout);
   ret = parse_port_config(slout, NULL, NULL, "DNS", 0, "/foo/bar/unixdomain",
                           42, CL_PORT_IS_UNIXSOCKET);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 2);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 1);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->port, OP_EQ, 0);
   tt_int_op(port_cfg->is_unix_addr, OP_EQ, 1);
   tt_str_op(port_cfg->unix_addr, OP_EQ, "/foo/bar/unixdomain");
 
-  // End group --------------------- NO PORTS GIVEN ---------------------
+ done:
+  smartlist_free(slout);
+  tor_free(config_port_invalid);
+  tor_free(config_port_valid);
+}
 
-  // Test group -------------------- PORTS GIVEN ------------------------
+static void
+test_config_parse_port_config__ports__ports_given(void *data)
+{
+  (void)data;
+  int ret;
+  smartlist_t *slout = NULL;
+  port_cfg_t *port_cfg = NULL;
+  config_line_t *config_port_invalid = NULL, *config_port_valid = NULL;
+  tor_addr_t addr;
+
+  slout = smartlist_new();
 
   // Test error when encounters an invalid Port specification
   config_port_invalid = mock_config_line("DNSPort", "");
@@ -3465,11 +3478,12 @@ test_config_parse_port_config__ports(void *data)
   tt_int_op(ret, OP_EQ, -1);
 
   // Test valid unix domain
+  smartlist_clear(slout);
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS",
                           CONN_TYPE_AP_LISTENER, NULL, 0, 0);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 3);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 2);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->port, OP_EQ, 0);
   tt_int_op(port_cfg->is_unix_addr, OP_EQ, 1);
   tt_str_op(port_cfg->unix_addr, OP_EQ, "/tmp/foo/bar");
@@ -3487,28 +3501,30 @@ test_config_parse_port_config__ports(void *data)
   // Test success with no ipv4 but take ipv6 (for unix domain sockets, this
   // makes no sense - it should be fixed)
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "unix:/tmp/foo/bar "
                                        "NoIPv4Traffic IPv6Traffic");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS",
                           CONN_TYPE_AP_LISTENER, NULL, 0,
                           CL_PORT_TAKES_HOSTNAMES);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 4);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 3);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->entry_cfg.ipv4_traffic, OP_EQ, 0);
   tt_int_op(port_cfg->entry_cfg.ipv6_traffic, OP_EQ, 1);
 
   // Test success with both ipv4 and ipv6 (for unix domain sockets,
   // this makes no sense - it should be fixed)
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "unix:/tmp/foo/bar "
                                        "IPv4Traffic IPv6Traffic");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS",
                           CONN_TYPE_AP_LISTENER, NULL, 0,
                           CL_PORT_TAKES_HOSTNAMES);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 5);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 4);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->entry_cfg.ipv4_traffic, OP_EQ, 1);
   tt_int_op(port_cfg->entry_cfg.ipv6_traffic, OP_EQ, 1);
 
@@ -3535,67 +3551,73 @@ test_config_parse_port_config__ports(void *data)
 
   // Test success with only a port and isolate destination port
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "42 IsolateDestPort");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.3", 0, 0);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 6);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 5);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->entry_cfg.isolation_flags, OP_EQ,
             ISO_DEFAULT | ISO_DESTPORT);
 
   // Test success with a negative isolate destination port, and plural
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "42 NoIsolateDestPorts");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.3", 0, 0);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 7);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 6);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->entry_cfg.isolation_flags, OP_EQ,
             ISO_DEFAULT & ~ISO_DESTPORT);
 
   // Test success with isolate destination address
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "42 IsolateDestAddr");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.3", 0, 0);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 8);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 7);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->entry_cfg.isolation_flags, OP_EQ,
             ISO_DEFAULT | ISO_DESTADDR);
 
   // Test success with isolate socks AUTH
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "42 IsolateSOCKSAuth");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.3", 0, 0);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 9);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 8);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->entry_cfg.isolation_flags, OP_EQ,
             ISO_DEFAULT | ISO_SOCKSAUTH);
 
   // Test success with isolate client protocol
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "42 IsolateClientProtocol");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.3", 0, 0);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 10);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 9);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->entry_cfg.isolation_flags, OP_EQ,
             ISO_DEFAULT | ISO_CLIENTPROTO);
 
   // Test success with isolate client address
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "42 IsolateClientAddr");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.3", 0, 0);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 11);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 10);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->entry_cfg.isolation_flags, OP_EQ,
             ISO_DEFAULT | ISO_CLIENTADDR);
 
@@ -3608,125 +3630,137 @@ test_config_parse_port_config__ports(void *data)
 
   // Test success with no isolate socks AUTH
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "42 NoIsolateSOCKSAuth");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.3", 0, 0);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 12);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 11);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->entry_cfg.socks_prefer_no_auth, OP_EQ, 1);
 
   // Test success with prefer ipv6
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "42 IPv6Traffic PreferIPv6");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS",
                           CONN_TYPE_AP_LISTENER, "127.0.0.42", 0,
                           CL_PORT_TAKES_HOSTNAMES);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 13);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 12);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->entry_cfg.prefer_ipv6, OP_EQ, 1);
 
   // Test success with cache ipv4 DNS
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "42 CacheIPv4DNS");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.42", 0, 0);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 14);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 13);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->entry_cfg.cache_ipv4_answers, OP_EQ, 1);
   tt_int_op(port_cfg->entry_cfg.cache_ipv6_answers, OP_EQ, 0);
 
   // Test success with cache ipv6 DNS
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "42 CacheIPv6DNS");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.42", 0, 0);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 15);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 14);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->entry_cfg.cache_ipv4_answers, OP_EQ, 1);
   tt_int_op(port_cfg->entry_cfg.cache_ipv6_answers, OP_EQ, 1);
 
   // Test success with no cache ipv4 DNS
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "42 NoCacheIPv4DNS");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.42", 0, 0);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 16);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 15);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->entry_cfg.cache_ipv4_answers, OP_EQ, 0);
   tt_int_op(port_cfg->entry_cfg.cache_ipv6_answers, OP_EQ, 0);
 
   // Test success with cache DNS
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "42 CacheDNS");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.42", 0, CL_PORT_TAKES_HOSTNAMES);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 17);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 16);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->entry_cfg.cache_ipv4_answers, OP_EQ, 1);
   tt_int_op(port_cfg->entry_cfg.cache_ipv6_answers, OP_EQ, 1);
 
   // Test success with use cached ipv4 DNS
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "42 UseIPv4Cache");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.42", 0, 0);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 18);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 17);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->entry_cfg.use_cached_ipv4_answers, OP_EQ, 1);
   tt_int_op(port_cfg->entry_cfg.use_cached_ipv6_answers, OP_EQ, 0);
 
   // Test success with use cached ipv6 DNS
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "42 UseIPv6Cache");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.42", 0, 0);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 19);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 18);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->entry_cfg.use_cached_ipv4_answers, OP_EQ, 0);
   tt_int_op(port_cfg->entry_cfg.use_cached_ipv6_answers, OP_EQ, 1);
 
   // Test success with use cached DNS
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "42 UseDNSCache");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.42", 0, 0);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 20);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 19);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->entry_cfg.use_cached_ipv4_answers, OP_EQ, 1);
   tt_int_op(port_cfg->entry_cfg.use_cached_ipv6_answers, OP_EQ, 1);
 
   // Test success with not preferring ipv6 automap
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "42 NoPreferIPv6Automap");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.42", 0, 0);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 21);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 20);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->entry_cfg.prefer_ipv6_virtaddr, OP_EQ, 0);
 
   // Test success with prefer SOCKS no auth
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "42 PreferSOCKSNoAuth");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.42", 0, 0);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 22);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 21);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->entry_cfg.socks_prefer_no_auth, OP_EQ, 1);
 
   // Test failure with both a zero port and a non-zero port
   tor_free(config_port_invalid);
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_invalid = mock_config_line("DNSPort", "0");
   config_port_valid = mock_config_line("DNSPort", "42");
   config_port_invalid->next = config_port_valid;
@@ -3735,18 +3769,21 @@ test_config_parse_port_config__ports(void *data)
   tt_int_op(ret, OP_EQ, -1);
 
   // Test success with warn non-local control
+  smartlist_clear(slout);
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS",
                           CONN_TYPE_CONTROL_LISTENER, "127.0.0.42", 0,
                           CL_PORT_WARN_NONLOCAL);
   tt_int_op(ret, OP_EQ, 0);
 
   // Test success with warn non-local listener
+  smartlist_clear(slout);
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS",
                           CONN_TYPE_EXT_OR_LISTENER, "127.0.0.42", 0,
                           CL_PORT_WARN_NONLOCAL);
   tt_int_op(ret, OP_EQ, 0);
 
   // Test success with warn non-local other
+  smartlist_clear(slout);
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.42", 0, CL_PORT_WARN_NONLOCAL);
   tt_int_op(ret, OP_EQ, 0);
@@ -3758,6 +3795,7 @@ test_config_parse_port_config__ports(void *data)
 
   // Test success with both ipv4 and ipv6 but without stream options
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "42 IPv4Traffic "
                                        "IPv6Traffic");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
@@ -3765,13 +3803,14 @@ test_config_parse_port_config__ports(void *data)
                           CL_PORT_TAKES_HOSTNAMES |
                           CL_PORT_NO_STREAM_OPTIONS);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 27);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 26);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->entry_cfg.ipv4_traffic, OP_EQ, 1);
   tt_int_op(port_cfg->entry_cfg.ipv6_traffic, OP_EQ, 0);
 
   // Test failure for a SessionGroup argument with invalid value
   tor_free(config_port_invalid);
+  smartlist_clear(slout);
   config_port_invalid = mock_config_line("DNSPort", "42 SessionGroup=invalid");
   ret = parse_port_config(slout, config_port_invalid, NULL, "DNS", 0,
                           "127.0.0.44", 0, CL_PORT_NO_STREAM_OPTIONS);
@@ -3782,6 +3821,7 @@ test_config_parse_port_config__ports(void *data)
   // Test failure for a SessionGroup argument with valid value but with stream
   // options allowed
   tor_free(config_port_invalid);
+  smartlist_clear(slout);
   config_port_invalid = mock_config_line("DNSPort", "42 SessionGroup=123");
   ret = parse_port_config(slout, config_port_invalid, NULL, "DNS", 0,
                           "127.0.0.44", 0, 0);
@@ -3789,6 +3829,7 @@ test_config_parse_port_config__ports(void *data)
 
   // Test failure for more than one SessionGroup argument
   tor_free(config_port_invalid);
+  smartlist_clear(slout);
   config_port_invalid = mock_config_line("DNSPort", "42 SessionGroup=123 "
                                          "SessionGroup=321");
   ret = parse_port_config(slout, config_port_invalid, NULL, "DNS", 0,
@@ -3797,53 +3838,58 @@ test_config_parse_port_config__ports(void *data)
 
   // Test success with a sessiongroup options
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "42 SessionGroup=1111122");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.44", 0, CL_PORT_NO_STREAM_OPTIONS);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 28);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 27);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->entry_cfg.session_group, OP_EQ, 1111122);
 
   // Test success with a zero unix domain socket, and doesnt add it to out
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "0");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.45", 0, CL_PORT_IS_UNIXSOCKET);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 28);
+  tt_int_op(smartlist_len(slout), OP_EQ, 0);
 
   // Test success with a one unix domain socket, and doesnt add it to out
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "something");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.45", 0, CL_PORT_IS_UNIXSOCKET);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 29);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 28);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->is_unix_addr, OP_EQ, 1);
   tt_str_op(port_cfg->unix_addr, OP_EQ, "something");
 
   // Test success with a port of auto - it uses the default address
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "auto");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.46", 0, 0);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 30);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 29);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->port, OP_EQ, CFG_AUTO_PORT);
   tor_addr_parse(&addr, "127.0.0.46");
   tt_assert(tor_addr_eq(&port_cfg->addr, &addr))
 
   // Test success with parsing both an address and an auto port
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "127.0.0.122:auto");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.46", 0, 0);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 31);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 30);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->port, OP_EQ, CFG_AUTO_PORT);
   tor_addr_parse(&addr, "127.0.0.122");
   tt_assert(tor_addr_eq(&port_cfg->addr, &addr))
@@ -3857,18 +3903,20 @@ test_config_parse_port_config__ports(void *data)
 
   // Test success with parsing both an address and a real port
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "127.0.0.123:656");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0,
                           "127.0.0.46", 0, 0);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 32);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 31);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->port, OP_EQ, 656);
   tor_addr_parse(&addr, "127.0.0.123");
   tt_assert(tor_addr_eq(&port_cfg->addr, &addr))
 
   // Test failure if we can't parse anything at all
   tor_free(config_port_invalid);
+  smartlist_clear(slout);
   config_port_invalid = mock_config_line("DNSPort", "something wrong");
   ret = parse_port_config(slout, config_port_invalid, NULL, "DNS", 0,
                           "127.0.0.46", 0, 0);
@@ -3876,6 +3924,7 @@ test_config_parse_port_config__ports(void *data)
 
   // Test failure if we find both an address, a port and an auto
   tor_free(config_port_invalid);
+  smartlist_clear(slout);
   config_port_invalid = mock_config_line("DNSPort", "127.0.1.0:123:auto");
   ret = parse_port_config(slout, config_port_invalid, NULL, "DNS", 0,
                           "127.0.0.46", 0, 0);
@@ -3884,18 +3933,32 @@ test_config_parse_port_config__ports(void *data)
   // Test that default to group writeable default sets group writeable for
   // domain socket
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "unix:/tmp/somewhere");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS",
                           CONN_TYPE_AP_LISTENER, "127.0.0.46", 0,
                           CL_PORT_DFLT_GROUP_WRITABLE);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 33);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 32);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->is_group_writable, OP_EQ, 1);
 
-  // End group --------------------- PORTS GIVEN ------------------------
+ done:
+  smartlist_free(slout);
+  tor_free(config_port_invalid);
+  tor_free(config_port_valid);
+}
+
+static void
+test_config_parse_port_config__ports__server_options(void *data)
+{
+  (void)data;
+  int ret;
+  smartlist_t *slout = NULL;
+  port_cfg_t *port_cfg = NULL;
+  config_line_t *config_port_invalid = NULL, *config_port_valid = NULL;
 
-  // Start group ------------------- SERVER OPTIONS ---------------------
+  slout = smartlist_new();
 
   // Test success with NoAdvertise option
   tor_free(config_port_valid);
@@ -3904,24 +3967,26 @@ test_config_parse_port_config__ports(void *data)
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, NULL, 0,
                           CL_PORT_SERVER_OPTIONS);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 34);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 33);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->server_cfg.no_advertise, OP_EQ, 1);
   tt_int_op(port_cfg->server_cfg.no_listen, OP_EQ, 0);
 
   // Test success with NoListen option
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "127.0.0.124:656 NoListen");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, NULL, 0,
                           CL_PORT_SERVER_OPTIONS);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 35);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 34);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->server_cfg.no_advertise, OP_EQ, 0);
   tt_int_op(port_cfg->server_cfg.no_listen, OP_EQ, 1);
 
   // Test failure with both NoAdvertise and NoListen option
   tor_free(config_port_invalid);
+  smartlist_clear(slout);
   config_port_invalid = mock_config_line("DNSPort", "127.0.0.124:656 NoListen "
                                          "NoAdvertise");
   ret = parse_port_config(slout, config_port_invalid, NULL, "DNS", 0, NULL,
@@ -3930,28 +3995,31 @@ test_config_parse_port_config__ports(void *data)
 
   // Test success with IPv4Only
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "127.0.0.124:656 IPv4Only");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, NULL, 0,
                           CL_PORT_SERVER_OPTIONS);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 36);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 35);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->server_cfg.bind_ipv4_only, OP_EQ, 1);
   tt_int_op(port_cfg->server_cfg.bind_ipv6_only, OP_EQ, 0);
 
   // Test success with IPv6Only
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "[::1]:656 IPv6Only");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, NULL, 0,
                           CL_PORT_SERVER_OPTIONS);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 37);
-  port_cfg = (port_cfg_t *)smartlist_get(slout, 36);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
+  port_cfg = (port_cfg_t *)smartlist_get(slout, 0);
   tt_int_op(port_cfg->server_cfg.bind_ipv4_only, OP_EQ, 0);
   tt_int_op(port_cfg->server_cfg.bind_ipv6_only, OP_EQ, 1);
 
   // Test failure with both IPv4Only and IPv6Only
   tor_free(config_port_invalid);
+  smartlist_clear(slout);
   config_port_invalid = mock_config_line("DNSPort", "127.0.0.124:656 IPv6Only "
                                          "IPv4Only");
   ret = parse_port_config(slout, config_port_invalid, NULL, "DNS", 0, NULL,
@@ -3960,14 +4028,16 @@ test_config_parse_port_config__ports(void *data)
 
   // Test success with invalid parameter
   tor_free(config_port_valid);
+  smartlist_clear(slout);
   config_port_valid = mock_config_line("DNSPort", "127.0.0.124:656 unknown");
   ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, NULL, 0,
                           CL_PORT_SERVER_OPTIONS);
   tt_int_op(ret, OP_EQ, 0);
-  tt_int_op(smartlist_len(slout), OP_EQ, 38);
+  tt_int_op(smartlist_len(slout), OP_EQ, 1);
 
   // Test failure when asked to bind only to ipv6 but gets an ipv4 address
   tor_free(config_port_invalid);
+  smartlist_clear(slout);
   config_port_invalid = mock_config_line("DNSPort",
                                          "127.0.0.124:656 IPv6Only");
   ret = parse_port_config(slout, config_port_invalid, NULL, "DNS", 0, NULL,
@@ -3976,13 +4046,12 @@ test_config_parse_port_config__ports(void *data)
 
   // Test failure when asked to bind only to ipv4 but gets an ipv6 address
   tor_free(config_port_invalid);
+  smartlist_clear(slout);
   config_port_invalid = mock_config_line("DNSPort", "[::1]:656 IPv4Only");
   ret = parse_port_config(slout, config_port_invalid, NULL, "DNS", 0, NULL,
                           0, CL_PORT_SERVER_OPTIONS);
   tt_int_op(ret, OP_EQ, -1);
 
-  // End group --------------------- SERVER OPTIONS ---------------------
-
  done:
   smartlist_free(slout);
   tor_free(config_port_invalid);
@@ -4003,6 +4072,9 @@ struct testcase_t config_tests[] = {
   CONFIG_TEST(write_to_data_subdir, TT_FORK),
   CONFIG_TEST(fix_my_family, 0),
   CONFIG_TEST(parse_port_config__listenaddress, 0),
-  CONFIG_TEST(parse_port_config__ports, 0),
+  CONFIG_TEST(parse_port_config__ports__no_ports_given, 0),
+  CONFIG_TEST(parse_port_config__ports__server_options, 0),
+  CONFIG_TEST(parse_port_config__ports__ports_given, 0),
   END_OF_TESTCASES
 };
+





More information about the tor-commits mailing list