Re: [PATCH v2 07/11] VSOCK: add AF_VSOCK test cases
On Wed, Oct 09, 2019 at 04:15:03PM +0100, Stefan Hajnoczi wrote: > On Wed, Oct 09, 2019 at 12:03:53PM +0200, Stefano Garzarella wrote: > > Hi Stefan, > > I'm thinking about dividing this test into single applications, one > > for each test, do you think it makes sense? > > Or is it just a useless complication? > > I don't mind either way but personally I would leave it as a single > program. > Okay, since I had the doubt it was a useless complication and you prefer a single application, I continue on this way :-) Thanks, Stefano
Re: [PATCH v2 07/11] VSOCK: add AF_VSOCK test cases
On Wed, Oct 09, 2019 at 12:03:53PM +0200, Stefano Garzarella wrote: > Hi Stefan, > I'm thinking about dividing this test into single applications, one > for each test, do you think it makes sense? > Or is it just a useless complication? I don't mind either way but personally I would leave it as a single program. Stefan signature.asc Description: PGP signature
Re: [PATCH v2 07/11] VSOCK: add AF_VSOCK test cases
Hi Stefan, I'm thinking about dividing this test into single applications, one for each test, do you think it makes sense? Or is it just a useless complication? Thanks, Stefano On Thu, Aug 1, 2019 at 5:27 PM Stefano Garzarella wrote: > > From: Stefan Hajnoczi > > The vsock_test.c program runs a test suite of AF_VSOCK test cases. > > Signed-off-by: Stefan Hajnoczi > Signed-off-by: Stefano Garzarella > --- > v2: > * Drop unnecessary includes [Stefan] > * Aligned with the current SPDX [Stefano] > * Set MULTICONN_NFDS to 100 [Stefano] > * Change (i % 1) in (i % 2) in the 'multiconn' test [Stefano] > --- > tools/testing/vsock/.gitignore | 1 + > tools/testing/vsock/Makefile | 5 +- > tools/testing/vsock/README | 1 + > tools/testing/vsock/vsock_test.c | 312 +++ > 4 files changed, 317 insertions(+), 2 deletions(-) > create mode 100644 tools/testing/vsock/vsock_test.c > > diff --git a/tools/testing/vsock/.gitignore b/tools/testing/vsock/.gitignore > index dc5f11faf530..7f7a2ccc30c4 100644 > --- a/tools/testing/vsock/.gitignore > +++ b/tools/testing/vsock/.gitignore > @@ -1,2 +1,3 @@ > *.d > +vsock_test > vsock_diag_test > diff --git a/tools/testing/vsock/Makefile b/tools/testing/vsock/Makefile > index a916878a2d8c..f8293c6910c9 100644 > --- a/tools/testing/vsock/Makefile > +++ b/tools/testing/vsock/Makefile > @@ -1,10 +1,11 @@ > # SPDX-License-Identifier: GPL-2.0-only > all: test > -test: vsock_diag_test > +test: vsock_test vsock_diag_test > +vsock_test: vsock_test.o timeout.o control.o util.o > vsock_diag_test: vsock_diag_test.o timeout.o control.o util.o > > CFLAGS += -g -O2 -Werror -Wall -I. -I../../include -I../../../usr/include > -Wno-pointer-sign -fno-strict-overflow -fno-strict-aliasing -fno-common -MMD > -U_FORTIFY_SOURCE -D_GNU_SOURCE > .PHONY: all test clean > clean: > - ${RM} *.o *.d vsock_diag_test > + ${RM} *.o *.d vsock_test vsock_diag_test > -include *.d > diff --git a/tools/testing/vsock/README b/tools/testing/vsock/README > index cf7dc64273bf..4d5045e7d2c3 100644 > --- a/tools/testing/vsock/README > +++ b/tools/testing/vsock/README > @@ -5,6 +5,7 @@ Hyper-V. > > The following tests are available: > > + * vsock_test - core AF_VSOCK socket functionality >* vsock_diag_test - vsock_diag.ko module for listing open sockets > > The following prerequisite steps are not automated and must be performed > prior > diff --git a/tools/testing/vsock/vsock_test.c > b/tools/testing/vsock/vsock_test.c > new file mode 100644 > index ..06099d037405 > --- /dev/null > +++ b/tools/testing/vsock/vsock_test.c > @@ -0,0 +1,312 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +/* > + * vsock_test - vsock.ko test suite > + * > + * Copyright (C) 2017 Red Hat, Inc. > + * > + * Author: Stefan Hajnoczi > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > + > +#include "timeout.h" > +#include "control.h" > +#include "util.h" > + > +static void test_stream_connection_reset(const struct test_opts *opts) > +{ > + union { > + struct sockaddr sa; > + struct sockaddr_vm svm; > + } addr = { > + .svm = { > + .svm_family = AF_VSOCK, > + .svm_port = 1234, > + .svm_cid = opts->peer_cid, > + }, > + }; > + int ret; > + int fd; > + > + fd = socket(AF_VSOCK, SOCK_STREAM, 0); > + > + timeout_begin(TIMEOUT); > + do { > + ret = connect(fd, , sizeof(addr.svm)); > + timeout_check("connect"); > + } while (ret < 0 && errno == EINTR); > + timeout_end(); > + > + if (ret != -1) { > + fprintf(stderr, "expected connect(2) failure, got %d\n", ret); > + exit(EXIT_FAILURE); > + } > + if (errno != ECONNRESET) { > + fprintf(stderr, "unexpected connect(2) errno %d\n", errno); > + exit(EXIT_FAILURE); > + } > + > + close(fd); > +} > + > +static void test_stream_client_close_client(const struct test_opts *opts) > +{ > + int fd; > + > + fd = vsock_stream_connect(opts->peer_cid, 1234); > + if (fd < 0) { > + perror("connect"); > + exit(EXIT_FAILURE); > + } > + > + send_byte(fd, 1); > + close(fd); > + control_writeln("CLOSED"); > +} > + > +static void test_stream_client_close_server(const struct test_opts *opts) > +{ > + int fd; > + > + fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL); > + if (fd < 0) { > + perror("accept"); > + exit(EXIT_FAILURE); > + } > + > + control_expectln("CLOSED"); > + > + send_byte(fd, -EPIPE); > + recv_byte(fd, 1); > + recv_byte(fd, 0); > + close(fd); > +} > + > +static void test_stream_server_close_client(const struct test_opts *opts) > +{ > + int fd;
[PATCH v2 07/11] VSOCK: add AF_VSOCK test cases
From: Stefan Hajnoczi The vsock_test.c program runs a test suite of AF_VSOCK test cases. Signed-off-by: Stefan Hajnoczi Signed-off-by: Stefano Garzarella --- v2: * Drop unnecessary includes [Stefan] * Aligned with the current SPDX [Stefano] * Set MULTICONN_NFDS to 100 [Stefano] * Change (i % 1) in (i % 2) in the 'multiconn' test [Stefano] --- tools/testing/vsock/.gitignore | 1 + tools/testing/vsock/Makefile | 5 +- tools/testing/vsock/README | 1 + tools/testing/vsock/vsock_test.c | 312 +++ 4 files changed, 317 insertions(+), 2 deletions(-) create mode 100644 tools/testing/vsock/vsock_test.c diff --git a/tools/testing/vsock/.gitignore b/tools/testing/vsock/.gitignore index dc5f11faf530..7f7a2ccc30c4 100644 --- a/tools/testing/vsock/.gitignore +++ b/tools/testing/vsock/.gitignore @@ -1,2 +1,3 @@ *.d +vsock_test vsock_diag_test diff --git a/tools/testing/vsock/Makefile b/tools/testing/vsock/Makefile index a916878a2d8c..f8293c6910c9 100644 --- a/tools/testing/vsock/Makefile +++ b/tools/testing/vsock/Makefile @@ -1,10 +1,11 @@ # SPDX-License-Identifier: GPL-2.0-only all: test -test: vsock_diag_test +test: vsock_test vsock_diag_test +vsock_test: vsock_test.o timeout.o control.o util.o vsock_diag_test: vsock_diag_test.o timeout.o control.o util.o CFLAGS += -g -O2 -Werror -Wall -I. -I../../include -I../../../usr/include -Wno-pointer-sign -fno-strict-overflow -fno-strict-aliasing -fno-common -MMD -U_FORTIFY_SOURCE -D_GNU_SOURCE .PHONY: all test clean clean: - ${RM} *.o *.d vsock_diag_test + ${RM} *.o *.d vsock_test vsock_diag_test -include *.d diff --git a/tools/testing/vsock/README b/tools/testing/vsock/README index cf7dc64273bf..4d5045e7d2c3 100644 --- a/tools/testing/vsock/README +++ b/tools/testing/vsock/README @@ -5,6 +5,7 @@ Hyper-V. The following tests are available: + * vsock_test - core AF_VSOCK socket functionality * vsock_diag_test - vsock_diag.ko module for listing open sockets The following prerequisite steps are not automated and must be performed prior diff --git a/tools/testing/vsock/vsock_test.c b/tools/testing/vsock/vsock_test.c new file mode 100644 index ..06099d037405 --- /dev/null +++ b/tools/testing/vsock/vsock_test.c @@ -0,0 +1,312 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * vsock_test - vsock.ko test suite + * + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Stefan Hajnoczi + */ + +#include +#include +#include +#include +#include +#include + +#include "timeout.h" +#include "control.h" +#include "util.h" + +static void test_stream_connection_reset(const struct test_opts *opts) +{ + union { + struct sockaddr sa; + struct sockaddr_vm svm; + } addr = { + .svm = { + .svm_family = AF_VSOCK, + .svm_port = 1234, + .svm_cid = opts->peer_cid, + }, + }; + int ret; + int fd; + + fd = socket(AF_VSOCK, SOCK_STREAM, 0); + + timeout_begin(TIMEOUT); + do { + ret = connect(fd, , sizeof(addr.svm)); + timeout_check("connect"); + } while (ret < 0 && errno == EINTR); + timeout_end(); + + if (ret != -1) { + fprintf(stderr, "expected connect(2) failure, got %d\n", ret); + exit(EXIT_FAILURE); + } + if (errno != ECONNRESET) { + fprintf(stderr, "unexpected connect(2) errno %d\n", errno); + exit(EXIT_FAILURE); + } + + close(fd); +} + +static void test_stream_client_close_client(const struct test_opts *opts) +{ + int fd; + + fd = vsock_stream_connect(opts->peer_cid, 1234); + if (fd < 0) { + perror("connect"); + exit(EXIT_FAILURE); + } + + send_byte(fd, 1); + close(fd); + control_writeln("CLOSED"); +} + +static void test_stream_client_close_server(const struct test_opts *opts) +{ + int fd; + + fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL); + if (fd < 0) { + perror("accept"); + exit(EXIT_FAILURE); + } + + control_expectln("CLOSED"); + + send_byte(fd, -EPIPE); + recv_byte(fd, 1); + recv_byte(fd, 0); + close(fd); +} + +static void test_stream_server_close_client(const struct test_opts *opts) +{ + int fd; + + fd = vsock_stream_connect(opts->peer_cid, 1234); + if (fd < 0) { + perror("connect"); + exit(EXIT_FAILURE); + } + + control_expectln("CLOSED"); + + send_byte(fd, -EPIPE); + recv_byte(fd, 1); + recv_byte(fd, 0); + close(fd); +} + +static void test_stream_server_close_server(const struct test_opts *opts) +{ + int fd; + + fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL); + if (fd < 0) { + perror("accept"); +