[LTP] [PATCH 1/3] syscalls: select: Merge few tests and migrate to new format
Yang Xu
xuyang2018.jy@cn.fujitsu.com
Tue Sep 8 09:16:57 CEST 2020
Hi Viresh
Looks good to me, just a small comment.
Can we add a message, so this case is more friendly for user. as below:
[root@localhost select]# ./select01
tst_test.c:1248: INFO: Timeout per run is 0h 05m 00s
select_var.h:82: INFO: Testing libc select()
select01.c:48: PASS: select() passed with regular file
select01.c:48: PASS: select() passed with system pipe
select01.c:48: PASS: select() passed with named pipe(FIFO)
.....
Best Regards
Yang Xu
> This merges the first three tests and updates them to new test format.
>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> ---
> Cyril: Here is series of cleanup as you asked during reviews.
>
> runtest/quickhit | 8 +-
> runtest/syscalls | 2 -
> testcases/kernel/syscalls/select/.gitignore | 2 -
> testcases/kernel/syscalls/select/select01.c | 167 ++++++++------------
> testcases/kernel/syscalls/select/select02.c | 114 -------------
> testcases/kernel/syscalls/select/select03.c | 134 ----------------
> 6 files changed, 65 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 398145f6564a..105ca29dd29b 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..4367e7f3af3f 100644
> --- a/testcases/kernel/syscalls/select/select01.c
> +++ b/testcases/kernel/syscalls/select/select01.c
> @@ -1,126 +1,87 @@
> +// 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
> + * 2.) 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;
> +} tests[] = {
> + {4, &readfds_reg, NULL},
> + {5, &readfds_pipe, &writefds_pipe},
> + {5, &readfds_npipe, &writefds_npipe},
> +};
> +
> +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, 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");
> + else
> + tst_res(TPASS, "select() passed");
> }
>
> 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();
> -}
>
More information about the ltp
mailing list