提交 5aa632d5 编写于 作者: A Alex Bennée

tests/tcg/multiarch: don't hard code paths/ports for linux-test

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.

Ideally test directory creation should be common functionally across
all TCG tests but this could complicate an already huge patch series
so we mark it as a TODO for next time.
Signed-off-by: NAlex Bennée <alex.bennee@linaro.org>
上级 875fcce6
...@@ -40,9 +40,8 @@ ...@@ -40,9 +40,8 @@
#include <dirent.h> #include <dirent.h>
#include <setjmp.h> #include <setjmp.h>
#include <sys/shm.h> #include <sys/shm.h>
#include <assert.h>
#define TESTPATH "/tmp/linux-test.tmp"
#define TESTPORT 7654
#define STACK_SIZE 16384 #define STACK_SIZE 16384
static void error1(const char *filename, int line, const char *fmt, ...) static void error1(const char *filename, int line, const char *fmt, ...)
...@@ -85,19 +84,16 @@ static void test_file(void) ...@@ -85,19 +84,16 @@ static void test_file(void)
struct iovec vecs[2]; struct iovec vecs[2];
DIR *dir; DIR *dir;
struct dirent *de; struct dirent *de;
/* TODO: make common tempdir creation for tcg tests */
char template[] = "/tmp/linux-test-XXXXXX";
char *tmpdir = mkdtemp(template);
/* clean up, just in case */ assert(tmpdir);
unlink(TESTPATH "/file1");
unlink(TESTPATH "/file2");
unlink(TESTPATH "/file3");
rmdir(TESTPATH);
if (getcwd(cur_dir, sizeof(cur_dir)) == NULL) if (getcwd(cur_dir, sizeof(cur_dir)) == NULL)
error("getcwd"); error("getcwd");
chk_error(mkdir(TESTPATH, 0755)); chk_error(chdir(tmpdir));
chk_error(chdir(TESTPATH));
/* open/read/write/close/readv/writev/lseek */ /* open/read/write/close/readv/writev/lseek */
...@@ -163,7 +159,7 @@ static void test_file(void) ...@@ -163,7 +159,7 @@ static void test_file(void)
st.st_mtime != 1000) st.st_mtime != 1000)
error("stat time"); error("stat time");
chk_error(stat(TESTPATH, &st)); chk_error(stat(tmpdir, &st));
if (!S_ISDIR(st.st_mode)) if (!S_ISDIR(st.st_mode))
error("stat mode"); error("stat mode");
...@@ -185,7 +181,7 @@ static void test_file(void) ...@@ -185,7 +181,7 @@ static void test_file(void)
error("stat mode"); error("stat mode");
/* getdents */ /* getdents */
dir = opendir(TESTPATH); dir = opendir(tmpdir);
if (!dir) if (!dir)
error("opendir"); error("opendir");
len = 0; len = 0;
...@@ -207,7 +203,7 @@ static void test_file(void) ...@@ -207,7 +203,7 @@ static void test_file(void)
chk_error(unlink("file3")); chk_error(unlink("file3"));
chk_error(unlink("file2")); chk_error(unlink("file2"));
chk_error(chdir(cur_dir)); chk_error(chdir(cur_dir));
chk_error(rmdir(TESTPATH)); chk_error(rmdir(tmpdir));
} }
static void test_fork(void) static void test_fork(void)
...@@ -264,7 +260,7 @@ static int server_socket(void) ...@@ -264,7 +260,7 @@ static int server_socket(void)
chk_error(setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val))); chk_error(setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)));
sockaddr.sin_family = AF_INET; 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; sockaddr.sin_addr.s_addr = 0;
chk_error(bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr))); chk_error(bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr)));
chk_error(listen(fd, 0)); chk_error(listen(fd, 0));
...@@ -272,7 +268,7 @@ static int server_socket(void) ...@@ -272,7 +268,7 @@ static int server_socket(void)
} }
static int client_socket(void) static int client_socket(uint16_t port)
{ {
int fd; int fd;
struct sockaddr_in sockaddr; struct sockaddr_in sockaddr;
...@@ -280,7 +276,7 @@ static int client_socket(void) ...@@ -280,7 +276,7 @@ static int client_socket(void)
/* server socket */ /* server socket */
fd = chk_error(socket(PF_INET, SOCK_STREAM, 0)); fd = chk_error(socket(PF_INET, SOCK_STREAM, 0));
sockaddr.sin_family = AF_INET; sockaddr.sin_family = AF_INET;
sockaddr.sin_port = htons(TESTPORT); sockaddr.sin_port = htons(port);
inet_aton("127.0.0.1", &sockaddr.sin_addr); inet_aton("127.0.0.1", &sockaddr.sin_addr);
chk_error(connect(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr))); chk_error(connect(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr)));
return fd; return fd;
...@@ -292,10 +288,17 @@ static void test_socket(void) ...@@ -292,10 +288,17 @@ static void test_socket(void)
{ {
int server_fd, client_fd, fd, pid, ret, val; int server_fd, client_fd, fd, pid, ret, val;
struct sockaddr_in sockaddr; struct sockaddr_in sockaddr;
socklen_t len; struct sockaddr_in server_addr;
socklen_t len, socklen;
uint16_t server_port;
char buf[512]; char buf[512];
server_fd = server_socket(); 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 */ /* test a few socket options */
len = sizeof(val); len = sizeof(val);
...@@ -305,7 +308,7 @@ static void test_socket(void) ...@@ -305,7 +308,7 @@ static void test_socket(void)
pid = chk_error(fork()); pid = chk_error(fork());
if (pid == 0) { if (pid == 0) {
client_fd = client_socket(); client_fd = client_socket(server_port);
send(client_fd, socket_msg, sizeof(socket_msg), 0); send(client_fd, socket_msg, sizeof(socket_msg), 0);
close(client_fd); close(client_fd);
exit(0); exit(0);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册