[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v7 12/54] tests/tcg/multiarch: don't hard code p
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [Qemu-devel] [PATCH v7 12/54] tests/tcg/multiarch: don't hard code paths/ports for linux-test |
Date: |
Sat, 16 Jun 2018 19:24:41 -0300 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 |
Hi Alex,
On 06/15/2018 04:46 PM, Alex Bennée wrote:
> The fixed path and ports get in the way of running our tests and
> builds in parallel. Instead of using TESTPATH we use mkdtemp() and
> instead of a fixed port we allow the kernel to assign one and query it
> afterwards.
>
> Signed-off-by: Alex Bennée <address@hidden>
> ---
> tests/tcg/multiarch/linux-test.c | 37 ++++++++++++++++----------------
> 1 file changed, 19 insertions(+), 18 deletions(-)
>
> diff --git a/tests/tcg/multiarch/linux-test.c
> b/tests/tcg/multiarch/linux-test.c
> index 6f2c531474..3f73b96420 100644
> --- a/tests/tcg/multiarch/linux-test.c
> +++ b/tests/tcg/multiarch/linux-test.c
> @@ -41,8 +41,6 @@
> #include <setjmp.h>
> #include <sys/shm.h>
>
> -#define TESTPATH "/tmp/linux-test.tmp"
> -#define TESTPORT 7654
> #define STACK_SIZE 16384
>
> static void error1(const char *filename, int line, const char *fmt, ...)
> @@ -85,19 +83,15 @@ static void test_file(void)
> struct iovec vecs[2];
> DIR *dir;
> struct dirent *de;
> + char template[] = "/tmp/linux-test-XXXXXX";
Since /tmp doesn't always fit, can this be:
char *tmpbase = getenv("TMPDIR");
char *template = g_strdup_printf("%s/qemu-test-XXXXXX",
tmpbase ? tmpbase : "/tmp");
> + char *tmpdir = mkdtemp(template);
g_free(template);
>
> - /* clean up, just in case */
> - unlink(TESTPATH "/file1");
> - unlink(TESTPATH "/file2");
> - unlink(TESTPATH "/file3");
> - rmdir(TESTPATH);
> + chk_error(strlen(tmpdir));
>
> if (getcwd(cur_dir, sizeof(cur_dir)) == NULL)
> error("getcwd");
>
> - chk_error(mkdir(TESTPATH, 0755));
> -
> - chk_error(chdir(TESTPATH));
> + chk_error(chdir(tmpdir));
>
> /* open/read/write/close/readv/writev/lseek */
>
> @@ -163,7 +157,7 @@ static void test_file(void)
> st.st_mtime != 1000)
> error("stat time");
>
> - chk_error(stat(TESTPATH, &st));
> + chk_error(stat(tmpdir, &st));
> if (!S_ISDIR(st.st_mode))
> error("stat mode");
>
> @@ -185,7 +179,7 @@ static void test_file(void)
> error("stat mode");
>
> /* getdents */
> - dir = opendir(TESTPATH);
> + dir = opendir(tmpdir);
> if (!dir)
> error("opendir");
> len = 0;
> @@ -207,7 +201,7 @@ static void test_file(void)
> chk_error(unlink("file3"));
> chk_error(unlink("file2"));
> chk_error(chdir(cur_dir));
> - chk_error(rmdir(TESTPATH));
> + chk_error(rmdir(tmpdir));
> }
>
> static void test_fork(void)
> @@ -264,7 +258,7 @@ static int server_socket(void)
> chk_error(setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)));
>
> sockaddr.sin_family = AF_INET;
> - sockaddr.sin_port = htons(TESTPORT);
> + sockaddr.sin_port = htons(0); /* choose random ephemeral port) */
> sockaddr.sin_addr.s_addr = 0;
> chk_error(bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr)));
> chk_error(listen(fd, 0));
> @@ -272,7 +266,7 @@ static int server_socket(void)
>
> }
>
> -static int client_socket(void)
> +static int client_socket(uint16_t port)
> {
> int fd;
> struct sockaddr_in sockaddr;
> @@ -280,7 +274,7 @@ static int client_socket(void)
> /* server socket */
> fd = chk_error(socket(PF_INET, SOCK_STREAM, 0));
> sockaddr.sin_family = AF_INET;
> - sockaddr.sin_port = htons(TESTPORT);
> + sockaddr.sin_port = htons(port);
> inet_aton("127.0.0.1", &sockaddr.sin_addr);
> chk_error(connect(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr)));
> return fd;
> @@ -292,10 +286,17 @@ static void test_socket(void)
> {
> int server_fd, client_fd, fd, pid, ret, val;
> struct sockaddr_in sockaddr;
> - socklen_t len;
> + struct sockaddr_in server_addr;
> + socklen_t len, socklen;
> + uint16_t server_port;
> char buf[512];
>
> server_fd = server_socket();
> + /* find out what port we got */
> + socklen = sizeof(server_addr);
> + ret = getsockname(server_fd, &server_addr, &socklen);
> + chk_error(ret);
> + server_port = ntohs(server_addr.sin_port);
>
> /* test a few socket options */
> len = sizeof(val);
> @@ -305,7 +306,7 @@ static void test_socket(void)
>
> pid = chk_error(fork());
> if (pid == 0) {
> - client_fd = client_socket();
> + client_fd = client_socket(server_port);
> send(client_fd, socket_msg, sizeof(socket_msg), 0);
> close(client_fd);
> exit(0);
>
Re: [Qemu-devel] [PATCH v7 12/54] tests/tcg/multiarch: don't hard code paths/ports for linux-test,
Philippe Mathieu-Daudé <=
[Qemu-devel] [PATCH v7 23/54] tests/tcg: enable building for ARM, Alex Bennée, 2018/06/15
[Qemu-devel] [PATCH v7 43/54] tests/tcg/Makefile: update to be called from Makefile.target, Alex Bennée, 2018/06/15
[Qemu-devel] [PATCH v7 09/54] tests/tcg: move architecture independent tests into subdir, Alex Bennée, 2018/06/15
[Qemu-devel] [PATCH v7 22/54] tests/tcg: move ARM specific tests into subdir, Alex Bennée, 2018/06/15
[Qemu-devel] [PATCH v7 21/54] tests/tcg/i386/test-i386: fix printf format, Alex Bennée, 2018/06/15
[Qemu-devel] [PATCH v7 15/54] tests/tcg: enable building for i386, Alex Bennée, 2018/06/15
[Qemu-devel] [PATCH v7 19/54] tests/tcg/x86_64: add Makefile.target, Alex Bennée, 2018/06/15