From patchwork Fri Nov 11 07:10:10 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [10/11] zdmt: add more checks into socket-closed-tcp From: Andrei Vagin X-Patchwork-Id: 2573 Message-Id: <1478848211-23802-11-git-send-email-avagin@openvz.org> To: xemul@virtuozzo.com Cc: criu@openvz.org, Andrei Vagin Date: Fri, 11 Nov 2016 10:10:10 +0300 From: Andrei Vagin Check source and destination addresses for closed tcp sockets. Signed-off-by: Andrei Vagin --- test/zdtm/static/Makefile | 4 +- test/zdtm/static/socket-closed-tcp.c | 58 --------------- test/zdtm/static/socket-closed-tcp.desc | 1 - test/zdtm/static/socket-tcp-closed.c | 123 +++++++++++++++++++++++++++++++ test/zdtm/static/socket-tcp-closed.desc | 1 + test/zdtm/static/socket-tcp6-closed.c | 1 + test/zdtm/static/socket-tcp6-closed.desc | 1 + 7 files changed, 129 insertions(+), 60 deletions(-) delete mode 100644 test/zdtm/static/socket-closed-tcp.c delete mode 100644 test/zdtm/static/socket-closed-tcp.desc create mode 100644 test/zdtm/static/socket-tcp-closed.c create mode 100644 test/zdtm/static/socket-tcp-closed.desc create mode 120000 test/zdtm/static/socket-tcp6-closed.c create mode 120000 test/zdtm/static/socket-tcp6-closed.desc diff --git a/test/zdtm/static/Makefile b/test/zdtm/static/Makefile index 3a0313b..55d6a8e 100644 --- a/test/zdtm/static/Makefile +++ b/test/zdtm/static/Makefile @@ -72,7 +72,6 @@ TST_NOFILE := \ socket-tcpbuf-local \ socket-tcpbuf6-local \ socket-tcpbuf6 \ - socket-closed-tcp \ socket-tcp-fin-wait1 \ socket-tcp6-fin-wait1 \ socket-tcp-fin-wait2 \ @@ -83,6 +82,8 @@ TST_NOFILE := \ socket-tcp6-last-ack \ socket-tcp-closing \ socket-tcp6-closing \ + socket-tcp-closed \ + socket-tcp6-closed \ sock_opts00 \ sock_opts01 \ sk-unix-unconn \ @@ -408,6 +409,7 @@ socket-tcp6-local: override CFLAGS += -D ZDTM_TCP_LOCAL -D ZDTM_IPV6 socket-tcp-local: override CFLAGS += -D ZDTM_TCP_LOCAL socket-tcp-nfconntrack: override CFLAGS += -D ZDTM_TCP_LOCAL -DZDTM_CONNTRACK socket_listen6: override CFLAGS += -D ZDTM_IPV6 +socket-tcp6-closed: override CFLAGS += -D ZDTM_IPV6 mnt_ext_manual: override CFLAGS += -D ZDTM_EXTMAP_MANUAL sigpending: override LDLIBS += -lrt vdso01: override LDLIBS += -lrt diff --git a/test/zdtm/static/socket-closed-tcp.c b/test/zdtm/static/socket-closed-tcp.c deleted file mode 100644 index 58fc7d7..0000000 --- a/test/zdtm/static/socket-closed-tcp.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "zdtmtst.h" - -#ifdef ZDTM_IPV6 -#define ZDTM_FAMILY AF_INET6 -#else -#define ZDTM_FAMILY AF_INET -#endif - -const char *test_doc = "Check, that a TCP socket in the TCP_CLOSE state can be restored\n"; -const char *test_author = "Andrey Vagin -#include -#include -#include -#include -#include -#include -#include - -static int port = 8880; - -int main(int argc, char **argv) -{ - int fd, fd_s, clt; - - test_init(argc, argv); - - if ((fd_s = tcp_init_server(ZDTM_FAMILY, &port)) < 0) { - pr_err("initializing server failed\n"); - return 1; - } - - clt = tcp_init_client(ZDTM_FAMILY, "localhost", port); - if (clt < 0) - return 1; - - /* - * parent is server of TCP connection - */ - fd = tcp_accept_server(fd_s); - if (fd < 0) { - pr_err("can't accept client connection\n"); - return 1; - } - close(fd_s); - - shutdown(fd, SHUT_WR); - shutdown(clt, SHUT_WR); - close(fd); - - test_daemon(); - test_waitsig(); - - - pass(); - return 0; -} diff --git a/test/zdtm/static/socket-closed-tcp.desc b/test/zdtm/static/socket-closed-tcp.desc deleted file mode 100644 index ded8987..0000000 --- a/test/zdtm/static/socket-closed-tcp.desc +++ /dev/null @@ -1 +0,0 @@ -{'flags': 'crfail'} diff --git a/test/zdtm/static/socket-tcp-closed.c b/test/zdtm/static/socket-tcp-closed.c new file mode 100644 index 0000000..4da3ac3 --- /dev/null +++ b/test/zdtm/static/socket-tcp-closed.c @@ -0,0 +1,123 @@ +#include "zdtmtst.h" + +#ifdef ZDTM_IPV6 +#define ZDTM_FAMILY AF_INET6 +#else +#define ZDTM_FAMILY AF_INET +#endif + +const char *test_doc = "Check closed tcp sockets\n"; +const char *test_author = "Andrey Vagin +#include +#include +#include +#include +#include +#include +#include +#include + +static int port = 8880; + +union sockaddr_inet { + struct sockaddr addr; + struct sockaddr_in v4; + struct sockaddr_in6 v6; +}; + +int main(int argc, char **argv) +{ + int fd, fd_s, clt, sk; + union sockaddr_inet src_addr, dst_addr, addr; + socklen_t aux; + char c = 5; + + test_init(argc, argv); + + sk = socket(ZDTM_FAMILY, SOCK_STREAM, 0); + if (sk < 0) { + pr_perror("socket"); + return 1; + } + + if ((fd_s = tcp_init_server(ZDTM_FAMILY, &port)) < 0) { + pr_err("initializing server failed\n"); + return 1; + } + + clt = tcp_init_client(ZDTM_FAMILY, "localhost", port); + if (clt < 0) + return 1; + + /* + * parent is server of TCP connection + */ + fd = tcp_accept_server(fd_s); + if (fd < 0) { + pr_err("can't accept client connection\n"); + return 1; + } + close(fd_s); + + shutdown(fd, SHUT_WR); + shutdown(clt, SHUT_WR); + + if (ZDTM_FAMILY == AF_INET) + aux = sizeof(struct sockaddr_in); + else if (ZDTM_FAMILY == AF_INET6) + aux = sizeof(struct sockaddr_in6); + else + return 1; + + if (getsockopt(clt, SOL_SOCKET, SO_PEERNAME, &dst_addr, &aux)) { + pr_perror("SO_PEERNAME"); + return 1; + } + if (getsockname(clt, &src_addr.addr, &aux)) { + pr_perror("getsockname"); + return 1; + } + + test_daemon(); + test_waitsig(); + + if (read(fd, &c, 1) != 0) { + fail("read"); + return 1; + } + if (read(clt, &c, 1) != 0) { + fail("read"); + return 1; + } + if (write(clt, &c, 1) != -1) { + fail("write"); + return 1; + } + if (write(fd, &c, 1) != -1) { + fail("write"); + return 1; + } + + if (getsockopt(clt, SOL_SOCKET, SO_PEERNAME, &addr, &aux)) { + pr_perror("SO_PEERNAME"); + return 1; + } + if (memcmp(&addr, &dst_addr, aux)) { + pr_err("A destination address mismatch"); + return 1; + } + + if (getsockname(clt, &addr.addr, &aux)) { + pr_perror("getsockname"); + return 1; + } + if (memcmp(&addr, &src_addr, aux)) { + pr_err("A source address mismatch"); + return 1; + } + + pass(); + return 0; +} diff --git a/test/zdtm/static/socket-tcp-closed.desc b/test/zdtm/static/socket-tcp-closed.desc new file mode 100644 index 0000000..155e103 --- /dev/null +++ b/test/zdtm/static/socket-tcp-closed.desc @@ -0,0 +1 @@ +{'opts': '--tcp-established', 'flags': 'nouser samens', 'feature' : 'tcp_half_closed'} diff --git a/test/zdtm/static/socket-tcp6-closed.c b/test/zdtm/static/socket-tcp6-closed.c new file mode 120000 index 0000000..b0c363c --- /dev/null +++ b/test/zdtm/static/socket-tcp6-closed.c @@ -0,0 +1 @@ +socket-tcp-closed.c \ No newline at end of file diff --git a/test/zdtm/static/socket-tcp6-closed.desc b/test/zdtm/static/socket-tcp6-closed.desc new file mode 120000 index 0000000..a365149 --- /dev/null +++ b/test/zdtm/static/socket-tcp6-closed.desc @@ -0,0 +1 @@ +socket-tcp-closed.desc \ No newline at end of file