[LTP] [PATCH V3 1/3] syscalls: select: Merge few tests and migrate to new format
From: Viresh Kumar <viresh.kumar@linaro.org>
Date: 2020-09-08 09:44:25
Subsystem:
the rest · Maintainer:
Linus Torvalds
This merges the first three tests and updates them to new test format. Acked-by: Li Wang <redacted> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> --- V3: - Improved print message - Improved comment at the top runtest/quickhit | 8 +- runtest/syscalls | 2 - testcases/kernel/syscalls/select/.gitignore | 2 - testcases/kernel/syscalls/select/select01.c | 168 ++++++++------------ testcases/kernel/syscalls/select/select02.c | 114 ------------- testcases/kernel/syscalls/select/select03.c | 134 ---------------- 6 files changed, 66 insertions(+), 362 deletions(-) delete mode 100644 testcases/kernel/syscalls/select/select02.c delete mode 100644 testcases/kernel/syscalls/select/select03.c
diff --git a/runtest/quickhit b/runtest/quickhit
index b17318b655fa..c01dc4f30b9f 100644
--- a/runtest/quickhit
+++ b/runtest/quickhit@@ -179,14 +179,8 @@ rename02 rename02 sbrk01 sbrk01 # Basic test for sbrk(2) select01 select01 -# select to a file -# TEST CASES -# 1.) select(2) to a fd of regular file with no I/O and small timeout -select02 select02 -# select of system pipe fds -select03 select03 +# Basic select tests select04 select04 -# select of fd of a named-pipe (FIFO) setgid01 setgid01 # Basic test for setgid(2) setpgid01 setpgid01
diff --git a/runtest/syscalls b/runtest/syscalls
index 35770e6db4a5..cf8e989969e5 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls@@ -1150,8 +1150,6 @@ sched_getattr01 sched_getattr01 sched_getattr02 sched_getattr02 select01 select01 -select02 select02 -select03 select03 select04 select04 semctl01 semctl01
diff --git a/testcases/kernel/syscalls/select/.gitignore b/testcases/kernel/syscalls/select/.gitignore
index 9d64cb8b8a1b..243a092ac6ca 100644
--- a/testcases/kernel/syscalls/select/.gitignore
+++ b/testcases/kernel/syscalls/select/.gitignore@@ -1,4 +1,2 @@ /select01 -/select02 -/select03 /select04
diff --git a/testcases/kernel/syscalls/select/select01.c b/testcases/kernel/syscalls/select/select01.c
index e9100c78e9b5..1213aa931251 100644
--- a/testcases/kernel/syscalls/select/select01.c
+++ b/testcases/kernel/syscalls/select/select01.c@@ -1,126 +1,88 @@ +// SPDX-License-Identifier: GPL-2.0-or-later /* * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * Further, this software is distributed without any warranty that it is - * free of the rightful claim of any third person regarding infringement - * or the like. Any license provided herein, whether implied or - * otherwise, applies only to this software file. Patent licenses, if - * any, provided herein do not apply to combinations of this program with - * other software, or any other product whatsoever. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, - * Mountain View, CA 94043, or: - * * http://www.sgi.com * - * For further information regarding this notice, see: - * - * http://oss.sgi.com/projects/GenInfo/NoticeExplan/ - */ -/* - * AUTHOR : Richard Logan - * CO-PILOT : William Roske - * DATE STARTED : 02/24/93 + * AUTHOR : Richard Logan + * CO-PILOT : William Roske * - * 1.) select(2) to a fd of regular file with no I/O and small timeout + * 1.) select(2) to fd of regular file with no I/O and small timeout + * 2.) select(2) to fd of system pipe with no I/O and small timeout + * 3.) select(2) of fd of a named-pipe (FIFO) with no I/O and small timeout value */ +#include <unistd.h> #include <errno.h> -#include <signal.h> -#include <fcntl.h> -#include <signal.h> -#include <string.h> -#include <sys/param.h> -#include <sys/types.h> #include <sys/time.h> - -#include "test.h" - -#define FILENAME "select01" - -static void setup(void); -static void cleanup(void); - -char *TCID = "select01"; -int TST_TOTAL = 1; - -int Fd = -1; -fd_set Readfds; - -int main(int ac, char **av) +#include <sys/types.h> +#include <fcntl.h> +#include "select_var.h" + +static fd_set readfds_reg, readfds_pipe, writefds_pipe, readfds_npipe, writefds_npipe; +static int fd_reg, fds_pipe[2], fd_npipe; + +static struct select_info { + int *nfds; + fd_set *readfds; + fd_set *writefds; + char *desc; +} tests[] = { + {&fd_reg, &readfds_reg, NULL, "with regular file"}, + {&fds_pipe[1], &readfds_pipe, &writefds_pipe, "with system pipe"}, + {&fd_npipe, &readfds_npipe, &writefds_npipe, "with named pipe (FIFO)"}, +}; + +static void run(unsigned int n) { - int lc; + struct select_info *tc = &tests[n]; struct timeval timeout; - long test_time = 0; /* in usecs */ - - tst_parse_opts(ac, av, NULL, NULL); - - setup(); - - for (lc = 0; TEST_LOOPING(lc); lc++) { - tst_count = 0; - - test_time = ((lc % 2000) * 100000); /* 100 milli-seconds */ - - if (test_time > 1000000 * 60) - test_time = test_time % (1000000 * 60); - - timeout.tv_sec = test_time / 1000000; - timeout.tv_usec = test_time - (timeout.tv_sec * 1000000); - TEST(select(4, &Readfds, 0, 0, &timeout)); + timeout.tv_sec = 0; + timeout.tv_usec = 100000; - if (TEST_RETURN == -1) { - tst_resm(TFAIL, - "%d select(4, &Readfds, 0, 0, &timeout), timeout = %ld usecs, errno=%d", - lc, test_time, errno); - } + TEST(do_select(*tc->nfds + 1, tc->readfds, tc->writefds, 0, &timeout)); - tst_resm(TPASS, - "select(4, &Readfds, 0, 0, &timeout) timeout = %ld usecs", - test_time); - - } - - cleanup(); - tst_exit(); + if (TST_RET == -1) + tst_res(TFAIL | TTERRNO, "select() failed %s", tc->desc); + else + tst_res(TPASS, "select() passed %s", tc->desc); } static void setup(void) { - tst_sig(FORK, DEF_HANDLER, cleanup); - - TEST_PAUSE; - - tst_tmpdir(); - - if ((Fd = open(FILENAME, O_CREAT | O_RDWR, 0777)) == -1) - tst_brkm(TBROK | TERRNO, cleanup, - "open(%s, O_CREAT | O_RDWR) failed", FILENAME); - - FD_ZERO(&Readfds); - FD_SET(Fd, &Readfds); + select_info(); + + /* Regular file */ + fd_reg = SAFE_OPEN("tmpfile1", O_CREAT | O_RDWR, 0777); + FD_ZERO(&readfds_reg); + FD_SET(fd_reg, &readfds_reg); + + /* System pipe*/ + SAFE_PIPE(fds_pipe); + FD_ZERO(&readfds_pipe); + FD_ZERO(&writefds_pipe); + FD_SET(fds_pipe[0], &readfds_pipe); + FD_SET(fds_pipe[1], &writefds_pipe); + + /* Named pipe (FIFO) */ + SAFE_MKFIFO("tmpfile2", 0666); + fd_npipe = SAFE_OPEN("tmpfile2", O_RDWR); + FD_ZERO(&readfds_npipe); + FD_ZERO(&writefds_npipe); + FD_SET(fd_npipe, &readfds_npipe); + FD_SET(fd_npipe, &writefds_npipe); } static void cleanup(void) { - if (Fd >= 0) { - if (close(Fd) == -1) - tst_resm(TWARN | TERRNO, "close(%s) failed", FILENAME); - Fd = -1; - } - - tst_rmdir(); + SAFE_UNLINK("tmpfile2"); } + +static struct tst_test test = { + .test = run, + .tcnt = ARRAY_SIZE(tests), + .test_variants = TEST_VARIANTS, + .setup = setup, + .cleanup = cleanup, + .needs_tmpdir = 1, +};
diff --git a/testcases/kernel/syscalls/select/select02.c b/testcases/kernel/syscalls/select/select02.c
deleted file mode 100644
index 7aa0107c0ce1..000000000000
--- a/testcases/kernel/syscalls/select/select02.c
+++ /dev/null@@ -1,114 +0,0 @@ -/* - * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * Further, this software is distributed without any warranty that it is - * free of the rightful claim of any third person regarding infringement - * or the like. Any license provided herein, whether implied or - * otherwise, applies only to this software file. Patent licenses, if - * any, provided herein do not apply to combinations of this program with - * other software, or any other product whatsoever. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, - * Mountain View, CA 94043, or: - * - * http://www.sgi.com - * - * For further information regarding this notice, see: - * - * http://oss.sgi.com/projects/GenInfo/NoticeExplan/ - * - */ -/* - * AUTHOR : Richard Logan - * CO-PILOT : Glen Overby - * DATE STARTED : 02/24/93 - * - * TEST CASES - * 1.) select(2) to fd of system pipe with no I/O and small timeout - */ -#include <errno.h> -#include <signal.h> -#include <fcntl.h> -#include <signal.h> -#include <sys/param.h> -#include <sys/types.h> -#include <sys/time.h> - -#include "test.h" -#include "safe_macros.h" - -static void setup(void); - -char *TCID = "select02"; -int TST_TOTAL = 1; - -int Fd[2]; -fd_set saved_Readfds, saved_Writefds; -fd_set Readfds, Writefds; - -int main(int ac, char **av) -{ - int lc; - struct timeval timeout; - long test_time = 0; /* in usecs */ - - tst_parse_opts(ac, av, NULL, NULL); - - setup(); - - for (lc = 0; TEST_LOOPING(lc); lc++) { - tst_count = 0; - - test_time = ((lc % 2000) * 100000); /* 100 milli-seconds */ - - if (test_time > 1000000 * 60) - test_time = test_time % (1000000 * 60); - - timeout.tv_sec = test_time / 1000000; - timeout.tv_usec = test_time - (timeout.tv_sec * 1000000); - - Readfds = saved_Readfds; - Writefds = saved_Writefds; - - TEST(select(5, &Readfds, &Writefds, 0, &timeout)); - - if (TEST_RETURN == -1) { - tst_resm(TFAIL, - "%d select(5, &Readfds, &Writefds, 0, &timeout) failed, errno=%d\n", - lc, errno); - } else { - tst_resm(TPASS, - "select(5, &Readfds, &Writefds, 0, &timeout) timeout = %ld usecs", - test_time); - } - - } - - tst_exit(); -} - -static void setup(void) -{ - tst_sig(FORK, DEF_HANDLER, NULL); - - TEST_PAUSE; - - SAFE_PIPE(NULL, Fd); - - FD_ZERO(&saved_Readfds); - FD_ZERO(&saved_Writefds); - FD_SET(Fd[0], &saved_Readfds); - FD_SET(Fd[1], &saved_Writefds); -}
diff --git a/testcases/kernel/syscalls/select/select03.c b/testcases/kernel/syscalls/select/select03.c
deleted file mode 100644
index da7fdb094173..000000000000
--- a/testcases/kernel/syscalls/select/select03.c
+++ /dev/null@@ -1,134 +0,0 @@ -/* - * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * Further, this software is distributed without any warranty that it is - * free of the rightful claim of any third person regarding infringement - * or the like. Any license provided herein, whether implied or - * otherwise, applies only to this software file. Patent licenses, if - * any, provided herein do not apply to combinations of this program with - * other software, or any other product whatsoever. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, - * Mountain View, CA 94043, or: - * - * http://www.sgi.com - * - * For further information regarding this notice, see: - * - * http://oss.sgi.com/projects/GenInfo/NoticeExplan/ - * - */ -/* - * AUTHOR : Richard Logan - * CO-PILOT : Glen Overby - * DATE STARTED : 02/24/93 - * - * 1.) select(2) of fd of a named-pipe (FIFO) with no I/O and small timeout value - */ - -#include <errno.h> -#include <signal.h> -#include <fcntl.h> -#include <signal.h> -#include <sys/param.h> -#include <sys/types.h> -#include <sys/time.h> -#include <sys/stat.h> - -#include "test.h" -#include "safe_macros.h" - -#define FILENAME "select03" - -static void setup(void); -static void cleanup(void); - -char *TCID = "select03"; -int TST_TOTAL = 1; - -int Fd; -fd_set saved_Readfds, saved_Writefds; -fd_set Readfds, Writefds; - -int main(int ac, char **av) -{ - int lc; - struct timeval timeout; - long test_time = 0; /* in usecs */ - - tst_parse_opts(ac, av, NULL, NULL); - - setup(); - - for (lc = 0; TEST_LOOPING(lc); lc++) { - - tst_count = 0; - - test_time = ((lc % 2000) * 100000); /* 100 milli-seconds */ - - if (test_time > 1000000 * 60) - test_time = test_time % (1000000 * 60); - - timeout.tv_sec = test_time / 1000000; - timeout.tv_usec = test_time - (timeout.tv_sec * 1000000); - - Readfds = saved_Readfds; - Writefds = saved_Writefds; - - TEST(select(5, &Readfds, &Writefds, 0, &timeout)); - - if (TEST_RETURN == -1) { - tst_resm(TFAIL, - "%d select(5, &Readfds, &Writefds, 0, &timeout) failed errno=%d\n", - lc, errno); - } else { - tst_resm(TPASS, - "select(5, &Readfds, &Writefds, 0, &timeout) timeout = %ld usecs", - test_time); - } - - } - - cleanup(); - tst_exit(); -} - -static void setup(void) -{ - - tst_sig(FORK, DEF_HANDLER, cleanup); - - TEST_PAUSE; - - tst_tmpdir(); - - SAFE_MKFIFO(cleanup, FILENAME, 0777); - - if ((Fd = open(FILENAME, O_RDWR)) == -1) { - tst_brkm(TBROK, cleanup, "open(%s, O_RDWR) failed, errno=%d", - FILENAME, errno); - } - - FD_ZERO(&saved_Readfds); - FD_ZERO(&saved_Writefds); - FD_SET(Fd, &saved_Readfds); - FD_SET(Fd, &saved_Writefds); -} - -static void cleanup(void) -{ - close(Fd); - tst_rmdir(); -}
--
2.25.0.rc1.19.g042ed3e048af