[LTP] [PATCH V3 1/3] syscalls: select: Merge few tests and migrate to new format
Viresh Kumar
viresh.kumar@linaro.org
Tue Sep 8 11:44:25 CEST 2020
This merges the first three tests and updates them to new test format.
Acked-by: Li Wang <liwang@redhat.com>
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
More information about the ltp
mailing list