ctdb-tests: Extend TCP packet test to also do packet extraction
authorMartin Schwenke <martin@meltin.net>
Fri, 17 Aug 2018 06:02:50 +0000 (16:02 +1000)
committerAmitay Isaacs <amitay@samba.org>
Thu, 30 Aug 2018 02:48:59 +0000 (04:48 +0200)
Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
ctdb/tests/src/system_socket_test.c
ctdb/wscript

index 285caa34cf433e0e5fbadd01dd3c1e095470023c..6dd9e432ef7fddb999fef64a781beb99ca33bf77 100644 (file)
@@ -104,6 +104,10 @@ static void test_tcp(const char *src_str,
        uint8_t buf[512];
        struct ether_header *eth;
        size_t expected_len, len;
+       char src_str_out[64], dst_str_out[64];
+       uint32_t seq_out, ack_out;
+       int rst_out;
+       uint16_t window;
        int ret;
 
        ret = ctdb_sock_addr_from_string(src_str, &src, true);
@@ -153,6 +157,50 @@ static void test_tcp(const char *src_str,
        assert(len == expected_len);
 
        write(STDOUT_FILENO, buf + sizeof(struct ether_header), len);
+
+       switch (ntohs(eth->ether_type)) {
+       case ETHERTYPE_IP:
+               ret = tcp4_extract(buf + sizeof(struct ether_header),
+                                  len,
+                                  &src.ip,
+                                  &dst.ip,
+                                  &ack_out,
+                                  &seq_out,
+                                  &rst_out,
+                                  &window);
+               break;
+       case ETHERTYPE_IP6:
+               ret = tcp6_extract(buf + sizeof(struct ether_header),
+                                  len,
+                                  &src.ip6,
+                                  &dst.ip6,
+                                  &ack_out,
+                                  &seq_out,
+                                  &rst_out,
+                                  &window);
+               break;
+       default:
+               abort();
+       }
+
+       assert(ret == 0);
+
+       assert(seq == seq_out);
+       assert(ack == ack_out);
+       assert((rst != 0) == (rst_out != 0));
+       assert(window == htons(1234));
+
+       ret = ctdb_sock_addr_to_buf(src_str_out, sizeof(src_str_out),
+                                   &src, true);
+       assert(ret == 0);
+       ret = strcmp(src_str, src_str_out);
+       assert(ret == 0);
+
+       ret = ctdb_sock_addr_to_buf(dst_str_out, sizeof(dst_str_out),
+                                   &dst, true);
+       assert(ret == 0);
+       ret = strcmp(dst_str, dst_str_out);
+       assert(ret == 0);
 }
 
 static void usage(const char *prog)
index 43baee6f68bb8d7e07ab8bf77711416cb57fad38..686a8381f4a28a33853e8700f0f92a34650dec52 100644 (file)
@@ -917,7 +917,7 @@ def build(bld):
 
     bld.SAMBA_BINARY('system_socket_test',
                      source='tests/src/system_socket_test.c',
-                     deps='talloc ctdb-protocol-util',
+                     deps='talloc ctdb-protocol-util pcap',
                      install_path='${CTDB_TEST_LIBEXECDIR}')
 
     bld.SAMBA_BINARY('porting_tests',