timer_delete02.c revision 53740500924f6439623a8ac256b5be2d6c59ed1f
1d13d74bbf207c2d01598c6fef092a75b93b07c71vapier/*
2d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * Copyright (c) Wipro Technologies Ltd, 2003.  All Rights Reserved.
3d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *
4d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * This program is free software; you can redistribute it and/or modify it
5d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * under the terms of version 2 of the GNU General Public License as
6d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * published by the Free Software Foundation.
7d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *
8d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * This program is distributed in the hope that it would be useful, but
9d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * WITHOUT ANY WARRANTY; without even the implied warranty of
10d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *
12d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * You should have received a copy of the GNU General Public License along
13d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * with this program; if not, write the Free Software Foundation, Inc., 59
14d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * Temple Place - Suite 330, Boston MA 02111-1307, USA.
15d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *
16d13d74bbf207c2d01598c6fef092a75b93b07c71vapier */
17d13d74bbf207c2d01598c6fef092a75b93b07c71vapier/**************************************************************************
186670f8476bb253032aba3ff4b8b0c41cf7e90156vapier *
196670f8476bb253032aba3ff4b8b0c41cf7e90156vapier *    TEST IDENTIFIER	: timer_delete02
206670f8476bb253032aba3ff4b8b0c41cf7e90156vapier *
21d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *    EXECUTED BY	: anyone
226670f8476bb253032aba3ff4b8b0c41cf7e90156vapier *
23d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *    TEST TITLE	: Basic test for timer_delete(2)
246670f8476bb253032aba3ff4b8b0c41cf7e90156vapier *
25d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *    TEST CASE TOTAL	: 1
266670f8476bb253032aba3ff4b8b0c41cf7e90156vapier *
27d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *    AUTHOR		: Aniruddha Marathe <aniruddha.marathe@wipro.com>
286670f8476bb253032aba3ff4b8b0c41cf7e90156vapier *
29d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *    SIGNALS
30d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * 	Uses SIGUSR1 to pause before test if option set.
31d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * 	(See the parse_opts(3) man page).
32d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *
33d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *    DESCRIPTION
34d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *     This is a Phase I test for the timer_delete(2) system call.
35d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *     It is intended to provide a limited exposure of the system call.
366670f8476bb253032aba3ff4b8b0c41cf7e90156vapier *
37d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * 	Setup:
38d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *	  Setup signal handling.
39d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *	  Pause for SIGUSR1 if option specified.
406670f8476bb253032aba3ff4b8b0c41cf7e90156vapier *
41d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * 	Test:
42d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *	 Loop if the proper options are given.
43d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *	 Create a POSIX timer
446670f8476bb253032aba3ff4b8b0c41cf7e90156vapier *	 Execute system call
45d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *	 Check return code, if system call failed (return=-1)
46d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *		Log the errno and Issue a FAIL message.
47d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *	 Otherwise, Issue a PASS message.
486670f8476bb253032aba3ff4b8b0c41cf7e90156vapier *
49d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * 	Cleanup:
50d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * 	  Print errno log and/or timing stats if options given
516670f8476bb253032aba3ff4b8b0c41cf7e90156vapier *
52d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * USAGE:  <for command-line>
53d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * timer_delete02 [-c n] [-e] [-i n] [-I x] [-P x] [-t] [-p]
54d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * where:
556670f8476bb253032aba3ff4b8b0c41cf7e90156vapier * 	-c n : Run n copies simultaneously.
56d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *	-e   : Turn on errno logging.
57d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *	-i n : Execute test n times.
58d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *	-I x : Execute test for x seconds.
59d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *	-p   : Pause for SIGUSR1 before starting
60d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *	-P x : Pause for x seconds between iterations.
61d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *	-t   : Turn on syscall timing.
62d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *
63d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *RESTRICTIONS:
64d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * None
65d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *****************************************************************************/
66d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
67bc8a4616c83630c69ec3ca2bd6e4eb7acc456eeevapier#include <stdlib.h>
68d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <errno.h>
69d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <time.h>
70d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <signal.h>
71d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
72bc8a4616c83630c69ec3ca2bd6e4eb7acc456eeevapier#include "test.h"
73bc8a4616c83630c69ec3ca2bd6e4eb7acc456eeevapier#include "usctest.h"
74bc8a4616c83630c69ec3ca2bd6e4eb7acc456eeevapier#include "common_timers.h"
75d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
76a9670cd56bfee821a9b2d34b5c5d1710d7f03777Garrett Coopervoid setup(void);
77d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
78d13d74bbf207c2d01598c6fef092a75b93b07c71vapierchar *TCID = "timer_delete02";	/* Test program identifier.    */
79d13d74bbf207c2d01598c6fef092a75b93b07c71vapierint TST_TOTAL = 1;		/* Total number of test cases. */
80d13d74bbf207c2d01598c6fef092a75b93b07c71vapierextern int Tst_count;		/* Test Case counter for tst_* routines */
81d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
82d13d74bbf207c2d01598c6fef092a75b93b07c71vapierint
83d13d74bbf207c2d01598c6fef092a75b93b07c71vapiermain(int ac, char **av)
84d13d74bbf207c2d01598c6fef092a75b93b07c71vapier{
85d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	int lc;		/* loop counter */
86d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	char *msg;	/* message returned from parse_opts */
874e94765d753c0ea91b4745ffac30df427a4d9202Subrata Modak	kernel_timer_t timer_id;
88d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
89d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/* parse standard options */
906670f8476bb253032aba3ff4b8b0c41cf7e90156vapier	if ((msg = parse_opts (ac, av, (option_t *) NULL, NULL)) !=
91d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			(char *) NULL) {
9253740500924f6439623a8ac256b5be2d6c59ed1fGarrett Cooper		tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
93d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}
94d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
95d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/* perform global setup for test */
96d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	setup();
97d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
98d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/* check looping state if -i option given */
99d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	for (lc = 0; TEST_LOOPING(lc); lc++) {
100d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
101d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		/* reset Tst_count in case we are looping. */
102d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Tst_count = 0;
103d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
104d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		/* Create a Posix timer */
1051a7f54261e0ab0d8318f1833987f1a7178b546e6yaberauneya		if (syscall(__NR_timer_create, CLOCK_REALTIME, NULL, &timer_id) < 0) {
106d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			Tst_count = TST_TOTAL;
1071a7f54261e0ab0d8318f1833987f1a7178b546e6yaberauneya			tst_brkm(TBROK | TERRNO, cleanup,
1081a7f54261e0ab0d8318f1833987f1a7178b546e6yaberauneya				"timer_delete can't be tested because "
1091a7f54261e0ab0d8318f1833987f1a7178b546e6yaberauneya				"timer_create failed");
110d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
1111a7f54261e0ab0d8318f1833987f1a7178b546e6yaberauneya		TEST(syscall(__NR_timer_delete, timer_id));
1121a7f54261e0ab0d8318f1833987f1a7178b546e6yaberauneya		tst_resm((TEST_RETURN == 0 ? TPASS : TFAIL | TTERRNO),
1131a7f54261e0ab0d8318f1833987f1a7178b546e6yaberauneya			"%s",
1141a7f54261e0ab0d8318f1833987f1a7178b546e6yaberauneya			(TEST_RETURN == 0 ? "passed" : "failed"));
115d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}	/* End for TEST_LOOPING */
116d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
117d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	cleanup();
1181a7f54261e0ab0d8318f1833987f1a7178b546e6yaberauneya	tst_exit();
119d13d74bbf207c2d01598c6fef092a75b93b07c71vapier}
120d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
121d13d74bbf207c2d01598c6fef092a75b93b07c71vapier/* setup() - performs all ONE TIME setup for this test */
122a9670cd56bfee821a9b2d34b5c5d1710d7f03777Garrett Coopervoid
123a9670cd56bfee821a9b2d34b5c5d1710d7f03777Garrett Coopersetup(void)
124d13d74bbf207c2d01598c6fef092a75b93b07c71vapier{
125d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/* capture signals */
126d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	tst_sig(NOFORK, DEF_HANDLER, cleanup);
127d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
128d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/* Pause if that option was specified */
129d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	TEST_PAUSE;
130a9670cd56bfee821a9b2d34b5c5d1710d7f03777Garrett Cooper}
131d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
132d13d74bbf207c2d01598c6fef092a75b93b07c71vapier/*
133d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * cleanup() - Performs one time cleanup for this test at
134d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * completion or premature exit
135d13d74bbf207c2d01598c6fef092a75b93b07c71vapier */
136a9670cd56bfee821a9b2d34b5c5d1710d7f03777Garrett Coopervoid
1371a7f54261e0ab0d8318f1833987f1a7178b546e6yaberauneyacleanup(void)
138d13d74bbf207c2d01598c6fef092a75b93b07c71vapier{
139d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/*
140d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	* print timing stats if that option was specified.
141d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	* print errno log if that option was specified.
142d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	*/
143d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	TEST_CLEANUP;
144a9670cd56bfee821a9b2d34b5c5d1710d7f03777Garrett Cooper}
145