diff options
Diffstat (limited to 'testcases/kernel/syscalls/sched_getparam/sched_getparam01.c')
-rw-r--r-- | testcases/kernel/syscalls/sched_getparam/sched_getparam01.c | 165 |
1 files changed, 49 insertions, 116 deletions
diff --git a/testcases/kernel/syscalls/sched_getparam/sched_getparam01.c b/testcases/kernel/syscalls/sched_getparam/sched_getparam01.c index 82e97713b..eec3ccaae 100644 --- a/testcases/kernel/syscalls/sched_getparam/sched_getparam01.c +++ b/testcases/kernel/syscalls/sched_getparam/sched_getparam01.c @@ -1,137 +1,70 @@ +// SPDX-License-Identifier: GPL-2.0-or-later /* - * Copyright (c) Wipro Technologies Ltd, 2002. 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. - * - * 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. - * + * * Copyright (c) Wipro Technologies Ltd, 2002. All Rights Reserved. */ -/********************************************************** - * - * TEST IDENTIFIER : sched_getparam01 - * - * EXECUTED BY : anyone - * - * TEST TITLE : Basic test for sched_getparam(2) - * - * TEST CASE TOTAL : 1 - * - * AUTHOR : Saji Kumar.V.R <saji.kumar@wipro.com> - * - * SIGNALS - * Uses SIGUSR1 to pause before test if option set. - * (See the parse_opts(3) man page). - * - * DESCRIPTION - * This is a Phase I test for the sched_getparam(2) system call. - * It is intended to provide a limited exposure of the system call. - * - * Setup: - * Setup signal handling. - * Pause for SIGUSR1 if option specified. - * - * Test: - * Loop if the proper options are given. - * Execute system call - * Check return code, if system call failed (return=-1) - * Log the errno and Issue a FAIL message. - * Otherwise, Issue a PASS message. + +/*\ + * [DESCRIPTION] * - * Cleanup: - * Print errno log and/or timing stats if options given + * Verify that: * - * USAGE: <for command-line> - * sched_getparam01 [-c n] [-e] [-i n] [-I x] [-P x] [-t] [-h] [-f] [-p] - * where, -c n : Run n copies concurrently. - * -e : Turn on errno logging. - * -h : Show help screen - * -f : Turn off functional testing - * -i n : Execute test n times. - * -I x : Execute test for x seconds. - * -p : Pause for SIGUSR1 before starting - * -P x : Pause for x seconds between iterations. - * -t : Turn on syscall timing. + * sched_getparam(2) gets correct scheduling parameters for + * the specified process: * - ****************************************************************/ + * - If pid is zero, sched_getparam(2) gets the scheduling parameters + * for the calling process. + * - If pid is not zero, sched_getparam(2) gets the scheduling + * parameters for the specified [pid] process. +\*/ #include <errno.h> +#include <stdlib.h> +#include <sys/types.h> +#include <unistd.h> #include <sched.h> -#include "test.h" - -static void setup(); -static void cleanup(); +#include "tst_test.h" -char *TCID = "sched_getparam01"; -int TST_TOTAL = 1; +static pid_t pids[2] = {0, 0}; -static struct sched_param param; - -int main(int ac, char **av) +static void verify_sched_getparam(unsigned int n) { - - int lc; - - tst_parse_opts(ac, av, NULL, NULL); - - setup(); - - for (lc = 0; TEST_LOOPING(lc); lc++) { - - tst_count = 0; - - param.sched_priority = 100; - - /* - * Call sched_getparam(2) with pid=0 sothat it will - * get the scheduling parameters for the calling process - */ - TEST(sched_getparam(0, ¶m)); + pid_t child_pid; + struct sched_param param = { + .sched_priority = 100, + }; + + child_pid = SAFE_FORK(); + if (!child_pid) { + TST_EXP_PASS_SILENT(sched_getparam(pids[n], ¶m), + "sched_getparam(%d)", pids[n]); + if (!TST_PASS) + exit(0); /* - * Check return code & priority. For normal process, - * scheduling policy is SCHED_OTHER. For this scheduling - * policy, only allowed priority value is 0. So we should - * get 0 for priority value + * For normal process, scheduling policy is SCHED_OTHER. + * For this scheduling policy, only allowed priority value is 0. */ - if ((TEST_RETURN == 0) && (param.sched_priority == 0)) { - tst_resm(TPASS, "sched_getparam() returned %ld", - TEST_RETURN); - } else { - tst_resm(TFAIL, "Test Failed, sched_getparam()" - "returned %ld, errno = %d : %s; returned " - "process priority value is %d", TEST_RETURN, - TEST_ERRNO, strerror(TEST_ERRNO), - param.sched_priority); - } + if (param.sched_priority) + tst_res(TFAIL, + "sched_getparam(%d) got wrong sched_priority %d, expected 0", + pids[n], param.sched_priority); + else + tst_res(TPASS, "sched_getparam(%d) got expected sched_priority 0", pids[n]); + + exit(0); } - cleanup(); - tst_exit(); - + tst_reap_children(); } -/* setup() - performs all ONE TIME setup for this test */ -void setup(void) +static void setup(void) { - - tst_sig(NOFORK, DEF_HANDLER, cleanup); - - TEST_PAUSE; - + pids[1] = getpid(); } -/* - *cleanup() - performs all ONE TIME cleanup for this test at - * completion or premature exit. - */ -void cleanup(void) -{ -} +static struct tst_test test = { + .forks_child = 1, + .setup = setup, + .tcnt = ARRAY_SIZE(pids), + .test = verify_sched_getparam, +}; |