/* * Copyright (c) Wipro Technologies Ltd, 2003. 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., 59 * Temple Place - Suite 330, Boston MA 02111-1307, USA. * */ /************************************************************************** * * TEST IDENTIFIER : timer_delete01 * * EXECUTED BY : anyone * * TEST TITLE : Basic test for timer_delete(2) * * TEST CASE TOTAL : 1 * * AUTHOR : Aniruddha Marathe * * 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 timer_delete(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. * Create a POSIX timer * 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. * * Cleanup: * Print errno log and/or timing stats if options given * * USAGE: * timer_delete01 [-c n] [-e] [-i n] [-I x] [-P x] [-t] [-p] * where: * -c n : Run n copies simultaneously. * -e : Turn on errno logging. * -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. * *RESTRICTIONS: * This system call is implemented in kernel 2.5.63. Test case will break for * Kernel versions less than 2.5.63 *****************************************************************************/ #include "test.h" #include "usctest.h" #include #include #include #ifndef CLOCK_REALTIME #define CLOCK_REALTIME 0 #endif #define __NR_timer_create 259 #define __NR_timer_delete (__NR_timer_create + 4) static void setup (); static void cleanup (); char *TCID = "timer_delete01"; /* Test program identifier. */ int TST_TOTAL = 1; /* Total number of test cases. */ extern int Tst_count; /* Test Case counter for tst_* routines */ timer_t timer_id; _syscall3 (int, timer_create, clockid_t, which_clock, struct sigevent *, timer_event_spec, timer_t *, timer_id); _syscall1 (int, timer_delete, timer_t, timer_id); int main (int ac, char **av) { int lc, i; /* loop counter */ char *msg; /* message returned from parse_opts */ if (tst_kvercmp (2, 5, 63) < 0) { tst_brkm (TBROK, tst_exit, "This system call is not implemented" " in the running kernel version"); } /* parse standard options */ if ((msg = parse_opts (ac, av, (option_t *) NULL, NULL)) != (char *) NULL) { tst_brkm (TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg); } /* perform global setup for test */ setup (); /* check looping state if -i option given */ for (lc = 0; TEST_LOOPING (lc); lc++) { /* reset Tst_count in case we are looping. */ Tst_count = 0; for (i = 0; i < TST_TOTAL; i++) { /* Create a Posix timer*/ if(timer_create(CLOCK_REALTIME, NULL, &timer_id) < 0) { tst_brkm(TBROK, cleanup, "timer_create" " failed"); } TEST (timer_delete(timer_id)); if (TEST_RETURN == -1) { TEST_ERROR_LOG (TEST_ERRNO); tst_resm (TFAIL, "timer_delete(2) Failed and" " set errno to %d", TEST_ERRNO); } else { tst_resm (TPASS, "timer_delete(2) Passed"); } } /*End of TEST CASE LOOPING */ } /*End for TEST_LOOPING */ /*Clean up and exit */ cleanup (); /*NOTREACHED*/ return 0; } /* setup() - performs all ONE TIME setup for this test */ void setup () { /* capture signals */ tst_sig (NOFORK, DEF_HANDLER, cleanup); /* Pause if that option was specified */ TEST_PAUSE; } /* End setup() */ /* * cleanup() - Performs one time cleanup for this test at * completion or premature exit */ void cleanup () { /* * print timing stats if that option was specified. * print errno log if that option was specified. */ TEST_CLEANUP; /* exit with return code appropriate for results */ tst_exit (); } /* End cleanup() */