Message ID | 20210422065732.61222-3-xieziyao@huawei.com |
---|---|
State | Accepted |
Delegated to: | Petr Vorel |
Headers | show |
Series | syscalls/tkill: Convert tkill{01, 02} to the new API | expand |
Hi, LGTM with very minor changes. Reviewed-by: Petr Vorel <pvorel@suse.cz> > +static pid_t expired_pid; > static pid_t inval_tid = -1; > -static pid_t unused_tid; IMHO unused_tid is better describe what the variable holds. > - > -void cleanup(void) > -{ > - tst_rmdir(); > -} > - > -void setup(void) > -{ > - TEST_PAUSE; > - tst_tmpdir(); > - > - unused_tid = tst_get_unused_pid(cleanup); > -} > struct test_case_t { > int *tid; > int exp_errno; > -} test_cases[] = { > - {&inval_tid, EINVAL}, > - {&unused_tid, ESRCH} > + const char *desc; > +} tc[] = { > + {&inval_tid, EINVAL, "inval_tid"}, > + {&expired_pid, ESRCH, "expired_pid"} Well, there is no point to print variable name. Better would be "invalid TID" and "unused TID". But IMHO just writing what we expect is enough. It could be: #define ERRNO_DESC(x) .exp_errno = x, .desc = "exp" #x ... {&inval_tid, ERRNO_DESC(EINVAL}, {&expired_pid, ERRNO_DESC(ESRCH} But we have tst_strerrno(), thus just: struct test_case_t { int *tid; int exp_errno; } tc[] = { {&inval_tid, EINVAL}, {&unused_tid, ESRCH} }; ... TST_EXP_FAIL(tst_syscall(__NR_tkill, *(tc[i].tid), SIGUSR1), tc[i].exp_errno, "tst_syscall(__NR_tkill) expecting %s", tst_strerrno(tc[i].exp_errno)); I'll merge code below. Kind regards, Petr // SPDX-License-Identifier: GPL-2.0-or-later /* * Copyright (c) Crackerjack Project., 2007 * Ported from Crackerjack to LTP by Manas Kumar Nayak maknayak@in.ibm.com> */ /*\ * [Description] * * Basic tests for the tkill() errors. * * [Algorithm] * * - EINVAL on an invalid thread ID * - ESRCH when no process with the specified thread ID exists */ #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <unistd.h> #include <signal.h> #include <sys/syscall.h> #include "lapi/syscalls.h" #include "tst_test.h" static pid_t unused_tid; static pid_t inval_tid = -1; struct test_case_t { int *tid; int exp_errno; } tc[] = { {&inval_tid, EINVAL}, {&unused_tid, ESRCH} }; static void setup(void) { unused_tid = tst_get_unused_pid(); } static void run(unsigned int i) { TST_EXP_FAIL(tst_syscall(__NR_tkill, *(tc[i].tid), SIGUSR1), tc[i].exp_errno, "tst_syscall(__NR_tkill) expecting %s", tst_strerrno(tc[i].exp_errno)); } static struct tst_test test = { .tcnt = ARRAY_SIZE(tc), .needs_tmpdir = 1, .setup = setup, .test = run, };
Hi, Petr, LGTM, thanks for your review. Best Regards, Ziyao -----Original Message----- From: Petr Vorel [mailto:pvorel@suse.cz] Sent: Monday, April 26, 2021 7:12 PM To: xieziyao <xieziyao@huawei.com> Cc: ltp@lists.linux.it Subject: Re: [LTP] [PATCH 2/2] syscalls/tkill: Convert tkill02 to the new API Hi, LGTM with very minor changes. Reviewed-by: Petr Vorel <pvorel@suse.cz> > +static pid_t expired_pid; > static pid_t inval_tid = -1; > -static pid_t unused_tid; IMHO unused_tid is better describe what the variable holds. > - > -void cleanup(void) > -{ > - tst_rmdir(); > -} > - > -void setup(void) > -{ > - TEST_PAUSE; > - tst_tmpdir(); > - > - unused_tid = tst_get_unused_pid(cleanup); > -} > struct test_case_t { > int *tid; > int exp_errno; > -} test_cases[] = { > - {&inval_tid, EINVAL}, > - {&unused_tid, ESRCH} > + const char *desc; > +} tc[] = { > + {&inval_tid, EINVAL, "inval_tid"}, > + {&expired_pid, ESRCH, "expired_pid"} Well, there is no point to print variable name. Better would be "invalid TID" and "unused TID". But IMHO just writing what we expect is enough. It could be: #define ERRNO_DESC(x) .exp_errno = x, .desc = "exp" #x ... {&inval_tid, ERRNO_DESC(EINVAL}, {&expired_pid, ERRNO_DESC(ESRCH} But we have tst_strerrno(), thus just: struct test_case_t { int *tid; int exp_errno; } tc[] = { {&inval_tid, EINVAL}, {&unused_tid, ESRCH} }; ... TST_EXP_FAIL(tst_syscall(__NR_tkill, *(tc[i].tid), SIGUSR1), tc[i].exp_errno, "tst_syscall(__NR_tkill) expecting %s", tst_strerrno(tc[i].exp_errno)); I'll merge code below. Kind regards, Petr // SPDX-License-Identifier: GPL-2.0-or-later /* * Copyright (c) Crackerjack Project., 2007 * Ported from Crackerjack to LTP by Manas Kumar Nayak maknayak@in.ibm.com> */ /*\ * [Description] * * Basic tests for the tkill() errors. * * [Algorithm] * * - EINVAL on an invalid thread ID * - ESRCH when no process with the specified thread ID exists */ #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <unistd.h> #include <signal.h> #include <sys/syscall.h> #include "lapi/syscalls.h" #include "tst_test.h" static pid_t unused_tid; static pid_t inval_tid = -1; struct test_case_t { int *tid; int exp_errno; } tc[] = { {&inval_tid, EINVAL}, {&unused_tid, ESRCH} }; static void setup(void) { unused_tid = tst_get_unused_pid(); } static void run(unsigned int i) { TST_EXP_FAIL(tst_syscall(__NR_tkill, *(tc[i].tid), SIGUSR1), tc[i].exp_errno, "tst_syscall(__NR_tkill) expecting %s", tst_strerrno(tc[i].exp_errno)); } static struct tst_test test = { .tcnt = ARRAY_SIZE(tc), .needs_tmpdir = 1, .setup = setup, .test = run, };
diff --git a/testcases/kernel/syscalls/tkill/tkill02.c b/testcases/kernel/syscalls/tkill/tkill02.c index 48431755b..20b461705 100644 --- a/testcases/kernel/syscalls/tkill/tkill02.c +++ b/testcases/kernel/syscalls/tkill/tkill02.c @@ -1,28 +1,18 @@ -/****************************************************************************** - * Copyright (c) Crackerjack Project., 2007 * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See * - * the GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the Free Software Foundation, * - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - * * - ******************************************************************************/ +// SPDX-License-Identifier: GPL-2.0-or-later /* - * File: tkill02.c + * Copyright (c) Crackerjack Project., 2007 + * Ported from Crackerjack to LTP by Manas Kumar Nayak maknayak@in.ibm.com> + */ + +/*\ + * [Description] + * + * Basic tests for the tkill errors. * - * Description: This tests the tkill() syscall + * [Algorithm] * - * History: Porting from Crackerjack to LTP is done by - * Manas Kumar Nayak maknayak@in.ibm.com> + * - EINVAL on an invalid thread ID + * - ESRCH when no process with the specified thread ID exists */ #include <stdio.h> @@ -32,66 +22,35 @@ #include <signal.h> #include <sys/syscall.h> -#include "test.h" #include "lapi/syscalls.h" +#include "tst_test.h" -char *TCID = "tkill02"; -int testno; - +static pid_t expired_pid; static pid_t inval_tid = -1; -static pid_t unused_tid; - -void cleanup(void) -{ - tst_rmdir(); -} - -void setup(void) -{ - TEST_PAUSE; - tst_tmpdir(); - - unused_tid = tst_get_unused_pid(cleanup); -} struct test_case_t { int *tid; int exp_errno; -} test_cases[] = { - {&inval_tid, EINVAL}, - {&unused_tid, ESRCH} + const char *desc; +} tc[] = { + {&inval_tid, EINVAL, "inval_tid"}, + {&expired_pid, ESRCH, "expired_pid"} }; -int TST_TOTAL = sizeof(test_cases) / sizeof(test_cases[0]); - -int main(int ac, char **av) +static void setup(void) { - int i; - - setup(); - - tst_parse_opts(ac, av, NULL, NULL); - - for (i = 0; i < TST_TOTAL; i++) { - - TEST(ltp_syscall(__NR_tkill, *(test_cases[i].tid), SIGUSR1)); + expired_pid = tst_get_unused_pid(); +} - if (TEST_RETURN == -1) { - if (TEST_ERRNO == test_cases[i].exp_errno) { - tst_resm(TPASS | TTERRNO, - "tkill(%d, SIGUSR1) failed as expected", - *(test_cases[i].tid)); - } else { - tst_brkm(TFAIL | TTERRNO, cleanup, - "tkill(%d, SIGUSR1) failed unexpectedly", - *(test_cases[i].tid)); - } - } else { - tst_brkm(TFAIL, cleanup, - "tkill(%d) succeeded unexpectedly", - *(test_cases[i].tid)); - } - } - cleanup(); - tst_exit(); +static void run(unsigned int i) +{ + TST_EXP_FAIL(tst_syscall(__NR_tkill, *(tc[i].tid), SIGUSR1), + tc[i].exp_errno, "tst_syscall(__NR_tkill, %s)", tc[i].desc); } + +static struct tst_test test = { + .tcnt = ARRAY_SIZE(tc), + .needs_tmpdir = 1, + .setup = setup, + .test = run, +};
Cleanup and convert tkill02 to the new API. Signed-off-by: Xie Ziyao <xieziyao@huawei.com> --- testcases/kernel/syscalls/tkill/tkill02.c | 105 +++++++--------------- 1 file changed, 32 insertions(+), 73 deletions(-) -- 2.17.1