From 8df052e2ae3e55b1cd71478b1bc6ee19df0f7766 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Tue, 2 Aug 2016 16:33:09 +0000 Subject: [PATCH] ip_mreq.test: rewrite from match_grep to match_diff * tests/ip_mreq.c (main): Print expected output. * tests/ip_mreq.test: Use run_strace_match_diff. * tests/ip_mreq.expected: Remove. * tests/Makefile.am (EXTRA_DIST): Remove it. --- tests/Makefile.am | 1 - tests/ip_mreq.c | 75 +++++++++++++++++++++++++++++++++++++----- tests/ip_mreq.expected | 12 ------- tests/ip_mreq.test | 7 +--- 4 files changed, 68 insertions(+), 27 deletions(-) delete mode 100644 tests/ip_mreq.expected diff --git a/tests/Makefile.am b/tests/Makefile.am index e8ea059f..69b69065 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -732,7 +732,6 @@ EXTRA_DIST = init.sh run.sh match.awk \ fstatat.c \ fstatx.c \ getresugid.c \ - ip_mreq.expected \ ipc.sh \ ipc_msgbuf.expected \ ksysent.sed \ diff --git a/tests/ip_mreq.c b/tests/ip_mreq.c index 0559b92d..86cd2bc3 100644 --- a/tests/ip_mreq.c +++ b/tests/ip_mreq.c @@ -29,50 +29,109 @@ #include #if defined IP_ADD_MEMBERSHIP && defined IPV6_ADD_MEMBERSHIP \ - && defined IPV6_JOIN_ANYCAST + && defined IPV6_JOIN_ANYCAST && defined HAVE_IF_INDEXTONAME # include +# include # include # include # include +# include int main(void) { + static const char multi4addr[] = "224.0.0.3"; + static const char multi6addr[] = "ff01::c"; + static const char interface[] = "127.0.0.1"; + struct ip_mreq m4; struct ipv6_mreq m6; - inet_pton(AF_INET, "224.0.0.3", &m4.imr_multiaddr); - inet_pton(AF_INET, "127.0.0.1", &m4.imr_interface); - inet_pton(AF_INET6, "ff01::c", &m6.ipv6mr_multiaddr); - m6.ipv6mr_interface = 1; + inet_pton(AF_INET, multi4addr, &m4.imr_multiaddr); + inet_pton(AF_INET, interface, &m4.imr_interface); + inet_pton(AF_INET6, multi6addr, &m6.ipv6mr_multiaddr); + + m6.ipv6mr_interface = if_nametoindex("lo"); + if (!m6.ipv6mr_interface) + perror_msg_and_skip("lo"); (void) close(0); if (socket(AF_INET, SOCK_DGRAM, 0)) perror_msg_and_skip("socket"); - assert(setsockopt(0, SOL_IP, IP_ADD_MEMBERSHIP, &m4, 1) == -1); - assert(setsockopt(0, SOL_IP, IP_DROP_MEMBERSHIP, &m4, 1) == -1); if (setsockopt(0, SOL_IP, IP_ADD_MEMBERSHIP, &m4, sizeof(m4)) || setsockopt(0, SOL_IP, IP_DROP_MEMBERSHIP, &m4, sizeof(m4))) perror_msg_and_skip("setsockopt"); + printf("setsockopt(0, SOL_IP, IP_ADD_MEMBERSHIP" + ", {imr_multiaddr=inet_addr(\"%s\")" + ", imr_interface=inet_addr(\"%s\")}, %u) = 0\n", + multi4addr, interface, (unsigned) sizeof(m4)); + printf("setsockopt(0, SOL_IP, IP_DROP_MEMBERSHIP" + ", {imr_multiaddr=inet_addr(\"%s\")" + ", imr_interface=inet_addr(\"%s\")}, %u) = 0\n", + multi4addr, interface, (unsigned) sizeof(m4)); + + assert(setsockopt(0, SOL_IP, IP_ADD_MEMBERSHIP, &m4, 1) == -1); + printf("setsockopt(0, SOL_IP, IP_ADD_MEMBERSHIP, \"\\%hho\", 1)" + " = -1 %s (%m)\n", + * (unsigned char *) (void *) &m4, errno2name()); + + assert(setsockopt(0, SOL_IP, IP_DROP_MEMBERSHIP, &m4, 1) == -1); + printf("setsockopt(0, SOL_IP, IP_DROP_MEMBERSHIP, \"\\%hho\", 1)" + " = -1 %s (%m)\n", + * (unsigned char *) (void *) &m4, errno2name()); assert(setsockopt(0, SOL_IPV6, IPV6_ADD_MEMBERSHIP, &m6, 1) == -1); + printf("setsockopt(0, SOL_IPV6, IPV6_ADD_MEMBERSHIP, \"\\%hho\", 1)" + " = -1 %s (%m)\n", + * (unsigned char *) (void *) &m6, errno2name()); assert(setsockopt(0, SOL_IPV6, IPV6_DROP_MEMBERSHIP, &m6, 1) == -1); + printf("setsockopt(0, SOL_IPV6, IPV6_DROP_MEMBERSHIP, \"\\%hho\", 1)" + " = -1 %s (%m)\n", + * (unsigned char *) (void *) &m6, errno2name()); + assert(setsockopt(0, SOL_IPV6, IPV6_ADD_MEMBERSHIP, &m6, sizeof(m6)) == -1); + printf("setsockopt(0, SOL_IPV6, IPV6_ADD_MEMBERSHIP" + ", {ipv6mr_multiaddr=inet_pton(\"%s\")" + ", ipv6mr_interface=if_nametoindex(\"lo\")}, 20) = -1 %s (%m)\n", + multi6addr, errno2name()); + assert(setsockopt(0, SOL_IPV6, IPV6_DROP_MEMBERSHIP, &m6, sizeof(m6)) == -1); + printf("setsockopt(0, SOL_IPV6, IPV6_DROP_MEMBERSHIP" + ", {ipv6mr_multiaddr=inet_pton(\"%s\")" + ", ipv6mr_interface=if_nametoindex(\"lo\")}, 20) = -1 %s (%m)\n", + multi6addr, errno2name()); assert(setsockopt(0, SOL_IPV6, IPV6_JOIN_ANYCAST, &m6, 1) == -1); + printf("setsockopt(0, SOL_IPV6, IPV6_JOIN_ANYCAST, \"\\%hho\", 1)" + " = -1 %s (%m)\n", + * (unsigned char *) (void *) &m6, errno2name()); + assert(setsockopt(0, SOL_IPV6, IPV6_LEAVE_ANYCAST, &m6, 1) == -1); + printf("setsockopt(0, SOL_IPV6, IPV6_LEAVE_ANYCAST, \"\\%hho\", 1)" + " = -1 %s (%m)\n", + * (unsigned char *) (void *) &m6, errno2name()); + assert(setsockopt(0, SOL_IPV6, IPV6_JOIN_ANYCAST, &m6, sizeof(m6)) == -1); + printf("setsockopt(0, SOL_IPV6, IPV6_JOIN_ANYCAST" + ", {ipv6mr_multiaddr=inet_pton(\"%s\")" + ", ipv6mr_interface=if_nametoindex(\"lo\")}, 20) = -1 %s (%m)\n", + multi6addr, errno2name()); + assert(setsockopt(0, SOL_IPV6, IPV6_LEAVE_ANYCAST, &m6, sizeof(m6)) == -1); + printf("setsockopt(0, SOL_IPV6, IPV6_LEAVE_ANYCAST" + ", {ipv6mr_multiaddr=inet_pton(\"%s\")" + ", ipv6mr_interface=if_nametoindex(\"lo\")}, 20) = -1 %s (%m)\n", + multi6addr, errno2name()); + puts("+++ exited with 0 +++"); return 0; } #else SKIP_MAIN_UNDEFINED("IP_ADD_MEMBERSHIP && IPV6_ADD_MEMBERSHIP" - " && IPV6_JOIN_ANYCAST") + " && IPV6_JOIN_ANYCAST && HAVE_IF_INDEXTONAME") #endif diff --git a/tests/ip_mreq.expected b/tests/ip_mreq.expected deleted file mode 100644 index e694c73e..00000000 --- a/tests/ip_mreq.expected +++ /dev/null @@ -1,12 +0,0 @@ -setsockopt\(0, SOL_IP, IP_ADD_MEMBERSHIP, "\\340", 1\) = -1 EINVAL .* -setsockopt\(0, SOL_IP, IP_DROP_MEMBERSHIP, "\\340", 1\) = -1 EINVAL .* -setsockopt\(0, SOL_IP, IP_ADD_MEMBERSHIP, \{imr_multiaddr=inet_addr\("224\.0\.0\.3"\), imr_interface=inet_addr\("127\.0\.0\.1"\)\}, 8\) = 0 -setsockopt\(0, SOL_IP, IP_DROP_MEMBERSHIP, \{imr_multiaddr=inet_addr\("224\.0\.0\.3"\), imr_interface=inet_addr\("127\.0\.0\.1"\)\}, 8\) = 0 -setsockopt\(0, SOL_IPV6, IPV6_ADD_MEMBERSHIP, "\\377", 1\) = -1 ENOPROTOOPT .* -setsockopt\(0, SOL_IPV6, IPV6_DROP_MEMBERSHIP, "\\377", 1\) = -1 ENOPROTOOPT .* -setsockopt\(0, SOL_IPV6, IPV6_ADD_MEMBERSHIP, \{ipv6mr_multiaddr=inet_pton\("ff01::c"\), ipv6mr_interface=if_nametoindex\("lo"\)\}, 20\) = -1 ENOPROTOOPT .* -setsockopt\(0, SOL_IPV6, IPV6_DROP_MEMBERSHIP, \{ipv6mr_multiaddr=inet_pton\("ff01::c"\), ipv6mr_interface=if_nametoindex\("lo"\)\}, 20\) = -1 ENOPROTOOPT .* -setsockopt\(0, SOL_IPV6, IPV6_JOIN_ANYCAST, "\\377", 1\) = -1 ENOPROTOOPT .* -setsockopt\(0, SOL_IPV6, IPV6_LEAVE_ANYCAST, "\\377", 1\) = -1 ENOPROTOOPT .* -setsockopt\(0, SOL_IPV6, IPV6_JOIN_ANYCAST, \{ipv6mr_multiaddr=inet_pton\("ff01::c"\), ipv6mr_interface=if_nametoindex\("lo"\)\}, 20\) = -1 ENOPROTOOPT .* -setsockopt\(0, SOL_IPV6, IPV6_LEAVE_ANYCAST, \{ipv6mr_multiaddr=inet_pton\("ff01::c"\), ipv6mr_interface=if_nametoindex\("lo"\)\}, 20\) = -1 ENOPROTOOPT .* diff --git a/tests/ip_mreq.test b/tests/ip_mreq.test index d423b1ba..d0a9e0f1 100755 --- a/tests/ip_mreq.test +++ b/tests/ip_mreq.test @@ -3,9 +3,4 @@ # Check {IP,IPV6}_{ADD,DROP}_MEMBERSHIP setsockopt decoding. . "${srcdir=.}/init.sh" - -run_prog -run_strace -e setsockopt $args -match_grep - -exit 0 +run_strace_match_diff -e trace=setsockopt -- 2.40.0