signal02.c revision 48049f3c3b45134999d83aabb82282c7e072791f
1865695bbc89088b9526ea9045410e5afb70a985cplars/* 2865695bbc89088b9526ea9045410e5afb70a985cplars * 3865695bbc89088b9526ea9045410e5afb70a985cplars * Copyright (c) International Business Machines Corp., 2001 4865695bbc89088b9526ea9045410e5afb70a985cplars * 5865695bbc89088b9526ea9045410e5afb70a985cplars * This program is free software; you can redistribute it and/or modify 6865695bbc89088b9526ea9045410e5afb70a985cplars * it under the terms of the GNU General Public License as published by 7865695bbc89088b9526ea9045410e5afb70a985cplars * the Free Software Foundation; either version 2 of the License, or 8865695bbc89088b9526ea9045410e5afb70a985cplars * (at your option) any later version. 9865695bbc89088b9526ea9045410e5afb70a985cplars * 10865695bbc89088b9526ea9045410e5afb70a985cplars * This program is distributed in the hope that it will be useful, 11865695bbc89088b9526ea9045410e5afb70a985cplars * but WITHOUT ANY WARRANTY; without even the implied warranty of 12865695bbc89088b9526ea9045410e5afb70a985cplars * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 13865695bbc89088b9526ea9045410e5afb70a985cplars * the GNU General Public License for more details. 14865695bbc89088b9526ea9045410e5afb70a985cplars * 15865695bbc89088b9526ea9045410e5afb70a985cplars * You should have received a copy of the GNU General Public License 16865695bbc89088b9526ea9045410e5afb70a985cplars * along with this program; if not, write to the Free Software 17865695bbc89088b9526ea9045410e5afb70a985cplars * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18865695bbc89088b9526ea9045410e5afb70a985cplars */ 19865695bbc89088b9526ea9045410e5afb70a985cplars 20865695bbc89088b9526ea9045410e5afb70a985cplars/* 21865695bbc89088b9526ea9045410e5afb70a985cplars * NAME 22865695bbc89088b9526ea9045410e5afb70a985cplars * signal02.c 23865695bbc89088b9526ea9045410e5afb70a985cplars * 24865695bbc89088b9526ea9045410e5afb70a985cplars * DESCRIPTION 25865695bbc89088b9526ea9045410e5afb70a985cplars * signal02 - Test that we get an error using illegal signals 26865695bbc89088b9526ea9045410e5afb70a985cplars * 27865695bbc89088b9526ea9045410e5afb70a985cplars * ALGORITHM 28865695bbc89088b9526ea9045410e5afb70a985cplars * loop if that option was specified 29865695bbc89088b9526ea9045410e5afb70a985cplars * issue the system call 30865695bbc89088b9526ea9045410e5afb70a985cplars * check the return value 31865695bbc89088b9526ea9045410e5afb70a985cplars * if return value != -1 32865695bbc89088b9526ea9045410e5afb70a985cplars * issue a FAIL message, break remaining tests and cleanup 33865695bbc89088b9526ea9045410e5afb70a985cplars * if we get an EINVAL 34865695bbc89088b9526ea9045410e5afb70a985cplars * issue a PASS message 35865695bbc89088b9526ea9045410e5afb70a985cplars * else 36865695bbc89088b9526ea9045410e5afb70a985cplars * issue a FAIL message, break remaining tests and cleanup 37865695bbc89088b9526ea9045410e5afb70a985cplars * call cleanup 38865695bbc89088b9526ea9045410e5afb70a985cplars * 39865695bbc89088b9526ea9045410e5afb70a985cplars * USAGE: <for command-line> 40865695bbc89088b9526ea9045410e5afb70a985cplars * signal02 [-c n] [-e] [-i n] [-I x] [-p x] [-t] 41865695bbc89088b9526ea9045410e5afb70a985cplars * where, -c n : Run n copies concurrently. 42865695bbc89088b9526ea9045410e5afb70a985cplars * -e : Turn on error logging. 43865695bbc89088b9526ea9045410e5afb70a985cplars * -i n : Execute test n times. 44865695bbc89088b9526ea9045410e5afb70a985cplars * -I x : Execute test for x seconds. 45865695bbc89088b9526ea9045410e5afb70a985cplars * -P x : Pause for x seconds between iterations. 46865695bbc89088b9526ea9045410e5afb70a985cplars * -t : Turn on syscall timing. 47865695bbc89088b9526ea9045410e5afb70a985cplars * 48865695bbc89088b9526ea9045410e5afb70a985cplars * History 49865695bbc89088b9526ea9045410e5afb70a985cplars * 07/2001 John George 50865695bbc89088b9526ea9045410e5afb70a985cplars * -Ported 51865695bbc89088b9526ea9045410e5afb70a985cplars * 52865695bbc89088b9526ea9045410e5afb70a985cplars * Restrictions 53865695bbc89088b9526ea9045410e5afb70a985cplars * none 54865695bbc89088b9526ea9045410e5afb70a985cplars */ 55865695bbc89088b9526ea9045410e5afb70a985cplars 56865695bbc89088b9526ea9045410e5afb70a985cplars#include "test.h" 57865695bbc89088b9526ea9045410e5afb70a985cplars#include "usctest.h" 58865695bbc89088b9526ea9045410e5afb70a985cplars 59865695bbc89088b9526ea9045410e5afb70a985cplars#include <errno.h> 60865695bbc89088b9526ea9045410e5afb70a985cplars#include <signal.h> 61865695bbc89088b9526ea9045410e5afb70a985cplars 62865695bbc89088b9526ea9045410e5afb70a985cplarsvoid cleanup(void); 63865695bbc89088b9526ea9045410e5afb70a985cplarsvoid setup(void); 64865695bbc89088b9526ea9045410e5afb70a985cplars 6548049f3c3b45134999d83aabb82282c7e072791fplarschar *TCID= "signal02"; 66865695bbc89088b9526ea9045410e5afb70a985cplarsint TST_TOTAL = 3; 67865695bbc89088b9526ea9045410e5afb70a985cplarsextern int Tst_count; 68865695bbc89088b9526ea9045410e5afb70a985cplars 6974948ad801d4aba1c872652580b8b331e41aefcaplarstypedef void (*sighandler_t)(int); 7074948ad801d4aba1c872652580b8b331e41aefcaplars 7174948ad801d4aba1c872652580b8b331e41aefcaplarssighandler_t Tret; 72865695bbc89088b9526ea9045410e5afb70a985cplarsint sigs[] = {_NSIG + 1, SIGKILL, SIGSTOP}; 73865695bbc89088b9526ea9045410e5afb70a985cplarsint exp_enos[] = {22, 0}; 74865695bbc89088b9526ea9045410e5afb70a985cplars 7574948ad801d4aba1c872652580b8b331e41aefcaplarsint main(int ac, char **av) 76865695bbc89088b9526ea9045410e5afb70a985cplars{ 77865695bbc89088b9526ea9045410e5afb70a985cplars int lc; /* loop counter */ 78865695bbc89088b9526ea9045410e5afb70a985cplars char *msg; /* message returned from parse_opts */ 79865695bbc89088b9526ea9045410e5afb70a985cplars int i; 80865695bbc89088b9526ea9045410e5afb70a985cplars 81865695bbc89088b9526ea9045410e5afb70a985cplars /* parse standard options */ 82865695bbc89088b9526ea9045410e5afb70a985cplars if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){ 83865695bbc89088b9526ea9045410e5afb70a985cplars tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg); 84865695bbc89088b9526ea9045410e5afb70a985cplars /*NOTREACHED*/ 85865695bbc89088b9526ea9045410e5afb70a985cplars } 86865695bbc89088b9526ea9045410e5afb70a985cplars 87865695bbc89088b9526ea9045410e5afb70a985cplars setup(); /* global setup */ 88865695bbc89088b9526ea9045410e5afb70a985cplars 89865695bbc89088b9526ea9045410e5afb70a985cplars /* The following loop checks looping state if -i option given */ 90865695bbc89088b9526ea9045410e5afb70a985cplars 91865695bbc89088b9526ea9045410e5afb70a985cplars for (lc = 0; TEST_LOOPING(lc); lc++) { 92865695bbc89088b9526ea9045410e5afb70a985cplars /* reset Tst_count in case we are looping */ 93865695bbc89088b9526ea9045410e5afb70a985cplars Tst_count = 0; 94865695bbc89088b9526ea9045410e5afb70a985cplars 95865695bbc89088b9526ea9045410e5afb70a985cplars /* 96865695bbc89088b9526ea9045410e5afb70a985cplars * There are three cases where we should get an EINVAL 97865695bbc89088b9526ea9045410e5afb70a985cplars */ 98865695bbc89088b9526ea9045410e5afb70a985cplars for (i=0; i<TST_TOTAL; i++) { 99865695bbc89088b9526ea9045410e5afb70a985cplars 10074948ad801d4aba1c872652580b8b331e41aefcaplars errno = 0; Tret = signal(sigs[i], SIG_IGN); TEST_ERRNO = errno; 101865695bbc89088b9526ea9045410e5afb70a985cplars 10274948ad801d4aba1c872652580b8b331e41aefcaplars if (Tret != SIG_ERR) { 103865695bbc89088b9526ea9045410e5afb70a985cplars tst_brkm(TFAIL, cleanup, "%s call failed - " 104865695bbc89088b9526ea9045410e5afb70a985cplars "errno = %d : %s", TCID, TEST_ERRNO, 105865695bbc89088b9526ea9045410e5afb70a985cplars strerror(TEST_ERRNO)); 106865695bbc89088b9526ea9045410e5afb70a985cplars /*NOTREACHED*/ 107865695bbc89088b9526ea9045410e5afb70a985cplars } 108865695bbc89088b9526ea9045410e5afb70a985cplars 109865695bbc89088b9526ea9045410e5afb70a985cplars TEST_ERROR_LOG(TEST_ERRNO); 110865695bbc89088b9526ea9045410e5afb70a985cplars 111865695bbc89088b9526ea9045410e5afb70a985cplars switch (TEST_ERRNO){ 112865695bbc89088b9526ea9045410e5afb70a985cplars case EINVAL: 113865695bbc89088b9526ea9045410e5afb70a985cplars tst_resm(TPASS, "expected failure - errno = " 114865695bbc89088b9526ea9045410e5afb70a985cplars "%d - %s", TEST_ERRNO, 115865695bbc89088b9526ea9045410e5afb70a985cplars strerror(TEST_ERRNO)); 116865695bbc89088b9526ea9045410e5afb70a985cplars break; 117865695bbc89088b9526ea9045410e5afb70a985cplars default: 118865695bbc89088b9526ea9045410e5afb70a985cplars tst_resm(TFAIL, "call failed to produce " 119865695bbc89088b9526ea9045410e5afb70a985cplars "expected error - errno = %d " 120865695bbc89088b9526ea9045410e5afb70a985cplars "- %s", TEST_ERRNO, 121865695bbc89088b9526ea9045410e5afb70a985cplars strerror(TEST_ERRNO)); 122865695bbc89088b9526ea9045410e5afb70a985cplars } 123865695bbc89088b9526ea9045410e5afb70a985cplars } 124865695bbc89088b9526ea9045410e5afb70a985cplars Tst_count++; /* incr. TEST_LOOP counter */ 125865695bbc89088b9526ea9045410e5afb70a985cplars } 126865695bbc89088b9526ea9045410e5afb70a985cplars 127865695bbc89088b9526ea9045410e5afb70a985cplars cleanup(); 128865695bbc89088b9526ea9045410e5afb70a985cplars 129865695bbc89088b9526ea9045410e5afb70a985cplars /*NOTREACHED*/ 130fa451a14d1fd38a2c32ff2a66474bafbf5b6c9dfrobbiew 131fa451a14d1fd38a2c32ff2a66474bafbf5b6c9dfrobbiew return(0); 132fa451a14d1fd38a2c32ff2a66474bafbf5b6c9dfrobbiew 133865695bbc89088b9526ea9045410e5afb70a985cplars} 134865695bbc89088b9526ea9045410e5afb70a985cplars 135865695bbc89088b9526ea9045410e5afb70a985cplars/* 136865695bbc89088b9526ea9045410e5afb70a985cplars * setup() - performs all the ONE TIME setup for this test. 137865695bbc89088b9526ea9045410e5afb70a985cplars */ 138865695bbc89088b9526ea9045410e5afb70a985cplarsvoid 139865695bbc89088b9526ea9045410e5afb70a985cplarssetup(void) 140865695bbc89088b9526ea9045410e5afb70a985cplars{ 141865695bbc89088b9526ea9045410e5afb70a985cplars /* capture signals */ 142865695bbc89088b9526ea9045410e5afb70a985cplars tst_sig(NOFORK, DEF_HANDLER, cleanup); 143865695bbc89088b9526ea9045410e5afb70a985cplars 144865695bbc89088b9526ea9045410e5afb70a985cplars /* set expected errnos for -e option */ 145865695bbc89088b9526ea9045410e5afb70a985cplars TEST_EXP_ENOS(exp_enos); 146865695bbc89088b9526ea9045410e5afb70a985cplars 147865695bbc89088b9526ea9045410e5afb70a985cplars /* Pause if that option was specified */ 148865695bbc89088b9526ea9045410e5afb70a985cplars TEST_PAUSE; 149865695bbc89088b9526ea9045410e5afb70a985cplars} 150865695bbc89088b9526ea9045410e5afb70a985cplars 151865695bbc89088b9526ea9045410e5afb70a985cplars/* 152865695bbc89088b9526ea9045410e5afb70a985cplars * cleanup() - performs all the ONE TIME cleanup for this test at completion 153865695bbc89088b9526ea9045410e5afb70a985cplars * or premature exit. 154865695bbc89088b9526ea9045410e5afb70a985cplars */ 155865695bbc89088b9526ea9045410e5afb70a985cplarsvoid 156865695bbc89088b9526ea9045410e5afb70a985cplarscleanup(void) 157865695bbc89088b9526ea9045410e5afb70a985cplars{ 158865695bbc89088b9526ea9045410e5afb70a985cplars /* 159865695bbc89088b9526ea9045410e5afb70a985cplars * print timing stats if that option was specified. 160865695bbc89088b9526ea9045410e5afb70a985cplars * print errno log if that option was specified. 161865695bbc89088b9526ea9045410e5afb70a985cplars */ 162865695bbc89088b9526ea9045410e5afb70a985cplars TEST_CLEANUP; 163865695bbc89088b9526ea9045410e5afb70a985cplars 164865695bbc89088b9526ea9045410e5afb70a985cplars /* exit with return code appropriate for results */ 165865695bbc89088b9526ea9045410e5afb70a985cplars tst_exit(); 166865695bbc89088b9526ea9045410e5afb70a985cplars} 167