ctdb-tests: Add some testing for IPv4-mapped IPv6 address parsing
authorMartin Schwenke <martin@meltin.net>
Thu, 14 Mar 2019 05:32:02 +0000 (16:32 +1100)
committerAmitay Isaacs <amitay@samba.org>
Fri, 15 Mar 2019 05:17:13 +0000 (05:17 +0000)
ctdb_sock_addr values are hashed in some contexts.  This means that
all of the memory used for the ctdb_sock_addr should be consistent
regardless of how parsing is done.  The first 2 cases are just sanity
checks but the 3rd case involving an IPv4-mapped IPv6 address is the
real target of this test addition.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=13839

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@samba.org>
ctdb/tests/src/protocol_util_test.c

index 178ce1d6429704c896f41ee4df826768736de336..edd2a3411a049673c0f5099de086f86cf57050d9 100644 (file)
@@ -52,6 +52,20 @@ static void test_sock_addr_from_string_bad(const char *ip, bool with_port)
        assert(ret == EINVAL);
 }
 
+static void test_sock_addr_from_string_memcmp(const char *ip1,
+                                             const char* ip2)
+{
+       ctdb_sock_addr sa1, sa2;
+       int ret;
+
+       ret = ctdb_sock_addr_from_string(ip1, &sa1, false);
+       assert(ret == 0);
+       ret = ctdb_sock_addr_from_string(ip2, &sa2, false);
+       assert(ret == 0);
+       ret = memcmp(&sa1, &sa2, sizeof(ctdb_sock_addr));
+       assert(ret == 0);
+}
+
 static void test_sock_addr_cmp(const char *ip1, const char *ip2,
                               bool with_port, int res)
 {
@@ -329,6 +343,11 @@ int main(int argc, char *argv[])
        test_sock_addr_from_string_bad("junk", false);
        test_sock_addr_from_string_bad("0.0.0.0:0 trailing junk", true);
 
+       test_sock_addr_from_string_memcmp("127.0.0.1", "127.0.0.1");
+       test_sock_addr_from_string_memcmp("fe80::6af7:28ff:fefa:d136",
+                                         "fe80::6af7:28ff:fefa:d136");
+       test_sock_addr_from_string_memcmp("::ffff:192.0.2.128", "192.0.2.128");
+
        test_sock_addr_cmp("127.0.0.1", "127.0.0.1" , false, 0);
        test_sock_addr_cmp("127.0.0.1", "127.0.0.2" , false, -1);
        test_sock_addr_cmp("127.0.0.2", "127.0.0.1" , false, 1);