Browse Source

Mock tor_addr_lookup() during part of addr/basic test.

If this function isn't mocked, then our unit tests break on stupid
networks where localhost is broken or absent. Fixes bug 6298; bugfix
on 0.0.9pre2.
Nick Mathewson 6 years ago
parent
commit
159a8061cf
2 changed files with 27 additions and 1 deletions
  1. 4 0
      changes/bug6298
  2. 23 1
      src/test/test_addr.c

+ 4 - 0
changes/bug6298

@@ -0,0 +1,4 @@
+  o Minor bugfixes (unit tests):
+    - The unit tests now pass on systems where localhost is misconfigured
+      to some IPv4 address other than 127.0.0.1.  Fixes bug 6298;
+      bugfix on 0.0.9pre2.

+ 23 - 1
src/test/test_addr.c

@@ -9,6 +9,24 @@
 #include "test.h"
 #include "addressmap.h"
 
+/** Mocking replacement: only handles localhost. */
+static int
+mock_tor_addr_lookup(const char *name, uint16_t family, tor_addr_t *addr_out)
+{
+  if (!strcmp(name, "localhost")) {
+    if (family == AF_INET || family == AF_UNSPEC) {
+      tor_addr_from_ipv4h(addr_out, 0x7f000001);
+      return 0;
+    } else if (family == AF_INET6) {
+      char bytes[16] = { 0, 0, 0, 0, 0, 0, 0, 0,
+                         0, 0, 0, 0, 0, 0, 0, 1 };
+      tor_addr_from_ipv6_bytes(addr_out, bytes);
+      return 0;
+    }
+  }
+  return -1;
+}
+
 static void
 test_addr_basic(void *arg)
 {
@@ -29,6 +47,9 @@ test_addr_basic(void *arg)
   tt_int_op(u32,OP_EQ, 0x04030201u);
   tt_int_op(u16,OP_EQ, 99);
   tor_free(cp);
+
+  MOCK(tor_addr_lookup, mock_tor_addr_lookup);
+
   tt_assert(!addr_port_lookup(LOG_WARN, "nonexistent.address:4040",
                                &cp, NULL, &u16));
   tt_str_op(cp,OP_EQ, "nonexistent.address");
@@ -36,8 +57,8 @@ test_addr_basic(void *arg)
   tor_free(cp);
   tt_assert(!addr_port_lookup(LOG_WARN, "localhost:9999", &cp, &u32, &u16));
   tt_str_op(cp,OP_EQ, "localhost");
-  tt_int_op(u32,OP_EQ, 0x7f000001u);
   tt_int_op(u16,OP_EQ, 9999);
+  tt_int_op(u32,OP_EQ, 0x7f000001u);
   tor_free(cp);
   u32 = 3;
   tt_assert(!addr_port_lookup(LOG_WARN, "localhost", NULL, &u32, &u16));
@@ -75,6 +96,7 @@ test_addr_basic(void *arg)
   }
 
  done:
+  UNMOCK(tor_addr_lookup);
   tor_free(cp);
 }