You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2013/10/27 22:37:01 UTC

[36/50] [abbrv] git commit: Add simple unit tests for ats_ip_parse()

Add simple unit tests for ats_ip_parse()


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/5460ce5b
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/5460ce5b
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/5460ce5b

Branch: refs/heads/5.0.x
Commit: 5460ce5b5b490053ab7ed747531ffa3eb74e52fa
Parents: a3d1208
Author: James Peach <jp...@apache.org>
Authored: Fri Sep 20 16:05:39 2013 -0700
Committer: James Peach <jp...@apache.org>
Committed: Tue Oct 22 20:47:22 2013 -0700

----------------------------------------------------------------------
 lib/ts/ink_inet.cc | 60 +++++++++++++++++++++++++++++++++++++++----------
 1 file changed, 48 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/5460ce5b/lib/ts/ink_inet.cc
----------------------------------------------------------------------
diff --git a/lib/ts/ink_inet.cc b/lib/ts/ink_inet.cc
index 7ec7c6a..397e7da 100644
--- a/lib/ts/ink_inet.cc
+++ b/lib/ts/ink_inet.cc
@@ -473,6 +473,9 @@ ats_ip_check_characters(ts::ConstBuffer text) {
     ;
 }
 
+// Need to declare this type globally so gcc 4.4 can use it in the countof() template ...
+struct ip_parse_spec { const char * hostspec; const char * host; const char * port; };
+
 REGRESSION_TEST(Ink_Inet) (RegressionTest * t, int /* atype */, int * pstatus) {
   TestBox box(t, pstatus);
   IpEndpoint  ep;
@@ -480,18 +483,51 @@ REGRESSION_TEST(Ink_Inet) (RegressionTest * t, int /* atype */, int * pstatus) {
 
   box = REGRESSION_TEST_PASSED;
 
-  box.check(ats_ip_pton("76.14.64.156", &ep.sa) == 0, "ats_ip_pton()");
-  box.check(addr.load("76.14.64.156") == 0, "IpAddr::load()");
-  box.check(addr.family() == ep.family(), "mismatched address family");
+  // Test ats_ip_parse() ...
+  {
+    struct ip_parse_spec names[] = {
+      { "::", "::", NULL },
+      { "[::1]:99", "::1", "99" },
+      { "127.0.0.1:8080", "127.0.0.1", "8080" },
+      { "foo.example.com", "foo.example.com", NULL },
+      { "foo.example.com:99", "foo.example.com", "99" },
+    };
+
+    for (unsigned i = 0; i < countof(names); ++i) {
+      ts::ConstBuffer addr, port;
+
+      box.check(ats_ip_parse(ts::ConstBuffer(names[i].hostspec, strlen(names[i].hostspec)), &addr, &port) == 0,
+          "ats_ip_parse(%s)", names[i].hostspec);
+      box.check(strncmp(addr.data(), names[i].host, addr.size()) ==  0,
+          "ats_ip_parse(%s) gave addr '%.*s'", names[i].hostspec, addr.size(), addr.data());
+      if (names[i].port) {
+        box.check(strncmp(port.data(), names[i].port, port.size()) ==  0,
+          "ats_ip_parse(%s) gave port '%.*s'", names[i].hostspec, port.size(), port.data());
+      } else {
+        box.check(port.size() == 0,
+          "ats_ip_parse(%s) gave port '%.*s'", names[i].hostspec, port.size(), port.data());
+      }
 
-  switch (addr.family()) {
-  case AF_INET:
-    box.check(ep.sin.sin_addr.s_addr == addr._addr._ip4, "IPv4 address mismatch");
-    break;
-  case AF_INET6:
-    box.check(memcmp(&ep.sin6.sin6_addr, &addr._addr._ip6, sizeof(in6_addr)) == 0, "IPv6 address mismatch");
-    break;
-  default:
-    ;
+    }
   }
+
+  // Test ats_ip_pton() ...
+  {
+    box.check(ats_ip_pton("76.14.64.156", &ep.sa) == 0, "ats_ip_pton()");
+    box.check(addr.load("76.14.64.156") == 0, "IpAddr::load()");
+    box.check(addr.family() == ep.family(), "mismatched address family");
+
+    switch (addr.family()) {
+    case AF_INET:
+      box.check(ep.sin.sin_addr.s_addr == addr._addr._ip4, "IPv4 address mismatch");
+      break;
+    case AF_INET6:
+      box.check(memcmp(&ep.sin6.sin6_addr, &addr._addr._ip6, sizeof(in6_addr)) == 0, "IPv6 address mismatch");
+      break;
+    default:
+      ;
+    }
+  }
+
+
 }