commit c464a367728dcd123b9ad9bd0cf6a4a3e4397310
Author: teor (Tim Wilson-Brown) <teor2...@gmail.com>
Date:   Tue Oct 6 15:32:44 2015 +1100

    Make get_ifaddrs tests more tolerant of unusual network configs
    
    * Don't assume that every test box has an IPv4 address
    * Don't assume that every test box has a non-local address
    
    Resolves issue #17255 released in unit tests in 0.2.7.3-rc.
---
 changes/ifaddrs-tests-network-configs |    7 +++++
 src/test/test_address.c               |   46 +++++++++++++++++++++------------
 2 files changed, 37 insertions(+), 16 deletions(-)

diff --git a/changes/ifaddrs-tests-network-configs 
b/changes/ifaddrs-tests-network-configs
new file mode 100644
index 0000000..f7f3d3e
--- /dev/null
+++ b/changes/ifaddrs-tests-network-configs
@@ -0,0 +1,7 @@
+  o Minor fixes (unit tests, networking):
+    - Make get_ifaddrs_* unit tests more tolerant of different network
+      configurations:
+        - Don't assume every test box has an IPv4 address.
+        - Don't assume every test box has a non-localhost address.
+    - Closes ticket #17255. Patch by "teor".
+      Fix for unit tests released in 0.2.7.3.
diff --git a/src/test/test_address.c b/src/test/test_address.c
index 938f776..3e73c3e 100644
--- a/src/test/test_address.c
+++ b/src/test/test_address.c
@@ -688,16 +688,20 @@ test_address_get_if_addrs_list_internal(void *arg)
   results = get_interface_address_list(LOG_ERR, 1);
 
   tt_assert(results != NULL);
-  /* Assume every system has at least 1 non-local non-multicast IPv4
-   * interface, even if it is an internal one */
-  tt_int_op(smartlist_len(results),>=,1);
+  /* When the network is down, a system might not have any non-local
+   * non-multicast addresseses, not even internal ones.
+   * Unit tests shouldn't fail because of this. */
+  tt_int_op(smartlist_len(results),>=,0);
 
   tt_assert(!smartlist_contains_localhost_tor_addr(results));
   tt_assert(!smartlist_contains_multicast_tor_addr(results));
   /* The list may or may not contain internal addresses */
 
-  tt_assert(smartlist_contains_ipv4_tor_addr(results));
-  tt_assert(!smartlist_contains_ipv6_tor_addr(results));
+  /* Allow unit tests to pass on IPv6-only machines */
+  if (smartlist_len(results) > 0) {
+    tt_assert(smartlist_contains_ipv4_tor_addr(results)
+              || smartlist_contains_ipv6_tor_addr(results));
+  }
 
  done:
   free_interface_address_list(results);
@@ -721,7 +725,10 @@ test_address_get_if_addrs_list_no_internal(void *arg)
   tt_assert(!smartlist_contains_multicast_tor_addr(results));
   tt_assert(!smartlist_contains_internal_tor_addr(results));
 
-    /* The list may or may not contain IPv4 addresses */
+  /* if there are any addresses, they must be IPv4 */
+  if (smartlist_len(results) > 0) {
+    tt_assert(smartlist_contains_ipv4_tor_addr(results));
+  }
   tt_assert(!smartlist_contains_ipv6_tor_addr(results));
 
  done:
@@ -746,8 +753,11 @@ test_address_get_if_addrs6_list_internal(void *arg)
   tt_assert(!smartlist_contains_multicast_tor_addr(results));
   /* The list may or may not contain internal addresses */
 
+  /* if there are any addresses, they must be IPv6 */
   tt_assert(!smartlist_contains_ipv4_tor_addr(results));
-  /* The list may or may not contain IPv6 addresses */
+  if (smartlist_len(results) > 0) {
+    tt_assert(smartlist_contains_ipv6_tor_addr(results));
+  }
 
  done:
   free_interface_address6_list(results);
@@ -772,7 +782,9 @@ test_address_get_if_addrs6_list_no_internal(void *arg)
   tt_assert(!smartlist_contains_internal_tor_addr(results));
 
   tt_assert(!smartlist_contains_ipv4_tor_addr(results));
-  /* The list may or may not contain IPv6 addresses */
+  if (smartlist_len(results) > 0) {
+    tt_assert(smartlist_contains_ipv6_tor_addr(results));
+  }
 
  done:
   free_interface_address6_list(results);
@@ -883,16 +895,18 @@ test_address_get_if_addrs(void *arg)
 
   rv = get_interface_address(LOG_ERR, &addr_h);
 
-  /* Assume every system has at least 1 non-local non-multicast IPv4
-   * interface, even if it is an internal one */
-  tt_assert(rv == 0);
-  tor_addr_from_ipv4h(&tor_addr, addr_h);
+  /* When the network is down, a system might not have any non-local
+   * non-multicast IPv4 addresses, not even internal ones.
+   * Unit tests shouldn't fail because of this. */
+  if (rv == 0) {
+    tor_addr_from_ipv4h(&tor_addr, addr_h);
 
-  tt_assert(!tor_addr_is_loopback(&tor_addr));
-  tt_assert(!tor_addr_is_multicast(&tor_addr));
-  /* The address may or may not be an internal address */
+    tt_assert(!tor_addr_is_loopback(&tor_addr));
+    tt_assert(!tor_addr_is_multicast(&tor_addr));
+    /* The address may or may not be an internal address */
 
-  tt_assert(tor_addr_is_v4(&tor_addr));
+    tt_assert(tor_addr_is_v4(&tor_addr));
+  }
 
  done:
   return;

_______________________________________________
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits

Reply via email to