Re: [PATCH 5/5] VSOCK: add tools/vsock/vsock_diag_test

2017-10-04 Thread Stefan Hajnoczi
On Tue, Oct 03, 2017 at 09:48:05PM -0700, David Miller wrote:
> From: Stefan Hajnoczi 
> Date: Tue,  3 Oct 2017 11:39:43 -0400
> 
> >  MAINTAINERS   |   1 +
> >  tools/vsock/Makefile  |   9 +
> >  tools/vsock/control.h |  13 +
> >  tools/vsock/timeout.h |  14 +
> >  tools/vsock/control.c | 219 ++
> >  tools/vsock/timeout.c |  64 
> >  tools/vsock/vsock_diag_test.c | 681 
> > ++
> >  tools/vsock/.gitignore|   2 +
> 
> Please don't create you own "special" directory for tests.
> 
> Tests belong under tools/testing/selftests/
> 
> If you put your tests in the proper place, and structure them properly 
> (especially
> the Makefile rules), they will automatically be run by various automated build
> and test frameworks.

Cool, thanks for the hint.  I wasn't aware of that.

Will fix in v2.

Stefan


Re: [PATCH 5/5] VSOCK: add tools/vsock/vsock_diag_test

2017-10-03 Thread David Miller
From: Stefan Hajnoczi 
Date: Tue,  3 Oct 2017 11:39:43 -0400

>  MAINTAINERS   |   1 +
>  tools/vsock/Makefile  |   9 +
>  tools/vsock/control.h |  13 +
>  tools/vsock/timeout.h |  14 +
>  tools/vsock/control.c | 219 ++
>  tools/vsock/timeout.c |  64 
>  tools/vsock/vsock_diag_test.c | 681 
> ++
>  tools/vsock/.gitignore|   2 +

Please don't create you own "special" directory for tests.

Tests belong under tools/testing/selftests/

If you put your tests in the proper place, and structure them properly 
(especially
the Makefile rules), they will automatically be run by various automated build
and test frameworks.



[PATCH 5/5] VSOCK: add tools/vsock/vsock_diag_test

2017-10-03 Thread Stefan Hajnoczi
This patch adds tests for the vsock_diag.ko module.

To run the tests:

  # qemu-system-x86_64 -M accel=kvm ... \
   -device vhost-vsock-pci,peer-cid=3
  (host)# ./vsock_diag_test --mode=server \
--control-port=1234 \
--peer-cid=3
  (guest)# ./vsock_diag_test --mode=client \
 --control-host=10.0.2.2 \
 --control-port 1234 \
 --peer-cid=2

The control.h and timeout.h infrastructure can be used for additional
AF_VSOCK tests in the future.

Signed-off-by: Stefan Hajnoczi 
---
 MAINTAINERS   |   1 +
 tools/vsock/Makefile  |   9 +
 tools/vsock/control.h |  13 +
 tools/vsock/timeout.h |  14 +
 tools/vsock/control.c | 219 ++
 tools/vsock/timeout.c |  64 
 tools/vsock/vsock_diag_test.c | 681 ++
 tools/vsock/.gitignore|   2 +
 8 files changed, 1003 insertions(+)
 create mode 100644 tools/vsock/Makefile
 create mode 100644 tools/vsock/control.h
 create mode 100644 tools/vsock/timeout.h
 create mode 100644 tools/vsock/control.c
 create mode 100644 tools/vsock/timeout.c
 create mode 100644 tools/vsock/vsock_diag_test.c
 create mode 100644 tools/vsock/.gitignore

diff --git a/MAINTAINERS b/MAINTAINERS
index 200dac93f34b..bd396f52670b 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -13983,6 +13983,7 @@ F:  net/vmw_vsock/virtio_transport.c
 F: drivers/net/vsockmon.c
 F: drivers/vhost/vsock.c
 F: drivers/vhost/vsock.h
+F: tools/vsock/
 
 VIRTIO CONSOLE DRIVER
 M: Amit Shah 
diff --git a/tools/vsock/Makefile b/tools/vsock/Makefile
new file mode 100644
index ..fccd860593ad
--- /dev/null
+++ b/tools/vsock/Makefile
@@ -0,0 +1,9 @@
+all: test
+test: vsock_diag_test
+vsock_diag_test: vsock_diag_test.o timeout.o control.o
+
+CFLAGS += -g -O2 -Werror -Wall -I. -I../include/uapi -I../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
+-include *.d
diff --git a/tools/vsock/control.h b/tools/vsock/control.h
new file mode 100644
index ..54a07efd267c
--- /dev/null
+++ b/tools/vsock/control.h
@@ -0,0 +1,13 @@
+#ifndef CONTROL_H
+#define CONTROL_H
+
+#include 
+
+void control_init(const char *control_host, const char *control_port,
+ bool server);
+void control_cleanup(void);
+void control_writeln(const char *str);
+char *control_readln(void);
+void control_expectln(const char *str);
+
+#endif /* CONTROL_H */
diff --git a/tools/vsock/timeout.h b/tools/vsock/timeout.h
new file mode 100644
index ..77db9ce9860a
--- /dev/null
+++ b/tools/vsock/timeout.h
@@ -0,0 +1,14 @@
+#ifndef TIMEOUT_H
+#define TIMEOUT_H
+
+enum {
+   /* Default timeout */
+   TIMEOUT = 10 /* seconds */
+};
+
+void sigalrm(int signo);
+void timeout_begin(unsigned int seconds);
+void timeout_check(const char *operation);
+void timeout_end(void);
+
+#endif /* TIMEOUT_H */
diff --git a/tools/vsock/control.c b/tools/vsock/control.c
new file mode 100644
index ..90fd47f0e422
--- /dev/null
+++ b/tools/vsock/control.c
@@ -0,0 +1,219 @@
+/* Control socket for client/server test execution
+ *
+ * Copyright (C) 2017 Red Hat, Inc.
+ *
+ * Author: Stefan Hajnoczi 
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; version 2
+ * of the License.
+ */
+
+/* The client and server may need to coordinate to avoid race conditions like
+ * the client attempting to connect to a socket that the server is not
+ * listening on yet.  The control socket offers a communications channel for
+ * such coordination tasks.
+ *
+ * If the client calls control_expectln("LISTENING"), then it will block until
+ * the server calls control_writeln("LISTENING").  This provides a simple
+ * mechanism for coordinating between the client and the server.
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "timeout.h"
+#include "control.h"
+
+static int control_fd = -1;
+
+/* Open the control socket, either in server or client mode */
+void control_init(const char *control_host,
+ const char *control_port,
+ bool server)
+{
+   struct addrinfo hints = {
+   .ai_socktype = SOCK_STREAM,
+   };
+   struct addrinfo *result = NULL;
+   struct addrinfo *ai;
+   int ret;
+
+   ret = getaddrinfo(control_host, control_port, , );
+   if (ret != 0) {
+   fprintf(stderr, "%s\n", gai_strerror(ret));
+   exit(EXIT_FAILURE);
+   }
+
+   for (ai = result; ai; ai = ai->ai_next) {
+