From: <ro...@us...> - 2003-02-27 16:04:28
|
Update of /cvsroot/ltp/ltp/testcases/kernel/timers/timer_delete In directory sc8-pr-cvs1:/tmp/cvs-serv13424/timer_delete Added Files: Makefile assertions.xml coverage.txt timer_delete01 timer_delete01.1-1.c timer_delete01.1-2.c timer_delete01.5-1.c timer_delete01.5-2.c Log Message: Added Open POSIX* Testsuite test: timer_delete --- NEW FILE: Makefile --- CFLAGS := -Wall -I ../../../../include -I../include -D _GNU_SOURCE LDFLAGS := -L ../../../../lib -lltp SRCS=$(wildcard *.c) TARGETS=$(patsubst %.c,%,$(SRCS)) TEST=timer_delete01 all: $(TARGETS) @chmod 755 $(TEST) install: for i in $(TARGETS) $(TEST) ; do ln -f $$i ../../../bin/$$i ; done ; clean: rm -f $(TARGETS) --- NEW FILE: assertions.xml --- <assertions> <assertion id="1" tag="ref:XSH6:46851:46852 pt:TMR"> timer_delete() deletes timer, timerid. [timerid is created by timer_create().] </assertion> <assertion id="2" tag="ref:XSH6:46852:46854 pt:TMR"> If timerid is an armed timer when timer_delete() is called, it will appear as if the timer is automatically disarmed before removal. [It is unspecified what happens to any pending signals.] </assertion> <assertion id="3" tag="ref:XSH6:46856:46856 pt:TMR"> timer_delete() returns 0 on success </assertion> <assertion id="4" tag="ref:XSH6:46856:46857 pt:TMR"> timer_delete returns -1 on failure </assertion> <assertion id="5" tag="ref:XSH6:46859:46860 pt:TMR"> timer_delete() sets errno==EINVAL if timerid is not a valid timer ID </assertion> </assertions> --- NEW FILE: coverage.txt --- This file defines the coverage for function timer_delete(). Assertion Covered? 1 YES 2 YES 3 YES 4 YES 5 YES --- NEW FILE: timer_delete01 --- #!/bin/sh #################################################### # Copyright (c) International Business Machines Corp., 2003 # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # DESCRIPTION : a wrapper interface for tests from the Open POSIX* Testsuite. # HISTORY : # 02/19/2003 Robbie Williamson (ro...@au...) # written #################################################### #Set variables NAME and TST_TOTAL NAME=timer_delete01 export TST_TOTAL=4 check_return_code() { #PTS_PASS if [ $RC -eq 0 ];then $LTPBIN/tst_resm TPASS "`cat $OUTPUT_FILE`" fi #PTS_FAIL if [ $RC -eq 1 ];then $LTPBIN/tst_resm TFAIL "`cat $OUTPUT_FILE`" NOPASS=1 fi #PTS_UNRESOLVED if [ $RC -eq 2 ];then $LTPBIN/tst_resm TBROK "`cat $OUTPUT_FILE`" NOPASS=1 fi #PTS_UNSUPPORTED if [ $RC -eq 4 ];then $LTPBIN/tst_resm TCONF "`cat $OUTPUT_FILE`" fi #define PTS_UNTESTED if [ $RC -eq 5 ];then $LTPBIN/tst_resm TINFO "UNTESTED: `cat $OUTPUT_FILE`" fi } if [[ -z $LTPROOT ]] then BIN=. ls | grep tst_resm >/dev/null 2>&1 if [ $? -eq 0 ]; then LTPBIN=$BIN else LTPBIN=../../../bin fi else BIN=$LTPROOT/testcases/bin LTPBIN=$BIN fi if [[ -z $TMP ]] then TMP=/tmp fi OUTPUT_FILE=$TMP/$NAME.$$ export TCID=$NAME NOPASS=0 COUNT=0 TST_LIST=`ls $NAME.*|grep -v "\.c"|cut -d. -f1,2` for TEST in $TST_LIST do COUNT=$(($COUNT + 1)) export TST_COUNT=$COUNT $BIN/$TEST >$OUTPUT_FILE 2>&1 RC=$? check_return_code done rm -f $OUTPUT_FILE exit $NOPASS --- NEW FILE: timer_delete01.1-1.c --- /* * Copyright (c) 2002, Intel Corporation. All rights reserved. * Created by: julie.n.fleischer REMOVE-THIS AT intel DOT com * This file is licensed under the GPL license. For the full content * of this license, see the COPYING file at the top level of this * source tree. * Test that timer_delete() deletes a timer. * Steps: * - Create a timer to send SIGTOTEST on expiration and set up a signal * handler to catch it. * - Activate the timer. * - Delete the timer before the timer had a chance to expire. [Potential * false failure here if the timer cannot be deleted in time. However, * the timer expiration will be set large enough that this should not * be likely.] * - Sleep until the timer would have expired. * - If no signal was caught, PASS. Otherwise, FAIL. * * For this test, signal SIGTOTEST will be used, clock CLOCK_REALTIME * will be used. */ #include <time.h> #include <signal.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include "posixtest.h" #define SIGTOTEST SIGALRM #define TIMERSEC 3 void handler(int signo) { printf("Should not have caught signal\n"); exit(PTS_FAIL); } int main(int argc, char *argv[]) { struct sigevent ev; struct sigaction act; timer_t tid; struct itimerspec its; ev.sigev_notify = SIGEV_SIGNAL; ev.sigev_signo = SIGTOTEST; act.sa_handler=handler; act.sa_flags=0; its.it_interval.tv_sec = 0; its.it_interval.tv_nsec = 0; its.it_value.tv_sec = TIMERSEC; its.it_value.tv_nsec = 0; if (sigemptyset(&act.sa_mask) == -1) { perror("Error calling sigemptyset\n"); return PTS_UNRESOLVED; } if (sigaction(SIGTOTEST, &act, 0) == -1) { perror("Error calling sigaction\n"); return PTS_UNRESOLVED; } if (timer_create(CLOCK_REALTIME, &ev, &tid) != 0) { perror("timer_create() did not return success\n"); return PTS_UNRESOLVED; } if (timer_settime(tid, 0, &its, NULL) != 0) { perror("timer_settime() did not return success\n"); return PTS_UNRESOLVED; } if (timer_delete(tid) != 0) { perror("timer_delete() did not return success\n"); return PTS_UNRESOLVED; } if (sleep(TIMERSEC) != 0) { printf("sleep() did not sleep full time\n"); return PTS_FAIL; } printf("Test PASSED\n"); return PTS_PASS; } --- NEW FILE: timer_delete01.1-2.c --- /* * Copyright (c) 2002, Intel Corporation. All rights reserved. * Created by: julie.n.fleischer REMOVE-THIS AT intel DOT com * This file is licensed under the GPL license. For the full content * of this license, see the COPYING file at the top level of this * source tree. * Test that after a timer is deleted by calling timer_delete(), it * cannot be armed by calling timer_settime(). * Steps: * - Create a timer * - Delete that timer * - Try to call timer_settime() on that timer and ensure it fails * with errno==EINVAL. * * For this test, signal SIGTOTEST will be used, clock CLOCK_REALTIME * will be used. */ #include <time.h> #include <signal.h> #include <stdio.h> #include <errno.h> #include "posixtest.h" #define SIGTOTEST SIGALRM #define TIMERSEC 3 int main(int argc, char *argv[]) { struct sigevent ev; timer_t tid; struct itimerspec its; ev.sigev_notify = SIGEV_SIGNAL; ev.sigev_signo = SIGTOTEST; if (timer_create(CLOCK_REALTIME, &ev, &tid) != 0) { perror("timer_create() did not return success\n"); return PTS_UNRESOLVED; } if (timer_delete(tid) != 0) { perror("timer_delete() did not return success\n"); return PTS_UNRESOLVED; } its.it_interval.tv_sec = 0; its.it_interval.tv_nsec = 0; its.it_value.tv_sec = TIMERSEC; its.it_value.tv_nsec = 0; if (timer_settime(tid, 0, &its, NULL) == -1) { if (errno==EINVAL) { printf("Test PASSED\n"); return PTS_PASS; } else { printf("errno!=EINVAL after a timer_delete()\n"); return PTS_FAIL; } } else { printf("timer_settime() did not fail after timer_delete()\n"); return PTS_FAIL; } printf("This code should not be executed\n"); return PTS_UNRESOLVED; } --- NEW FILE: timer_delete01.5-1.c --- /* * Copyright (c) 2002, Intel Corporation. All rights reserved. * Created by: julie.n.fleischer REMOVE-THIS AT intel DOT com * This file is licensed under the GPL license. For the full content * of this license, see the COPYING file at the top level of this * source tree. * Test that timer_delete() returns -1 and sets errno==EINVAL if * timerid is not a valid timer ID. */ #include <time.h> #include <stdio.h> #include <errno.h> #include "posixtest.h" #define BOGUSTIMERID 99999 int main(int argc, char *argv[]) { timer_t tid; tid = BOGUSTIMERID; if (timer_delete(tid) == -1) { if (errno==EINVAL) { printf("Test PASSED\n"); return PTS_PASS; } else { printf("errno!=EINVAL when bogus timer ID sent\n"); return PTS_FAIL; } } else { printf("timer_delete() did not return -1 for bogus timer ID\n"); return PTS_FAIL; } printf("This code should never be executed\n"); return PTS_UNRESOLVED; } --- NEW FILE: timer_delete01.5-2.c --- /* * Copyright (c) 2002, Intel Corporation. All rights reserved. * Created by: julie.n.fleischer REMOVE-THIS AT intel DOT com * This file is licensed under the GPL license. For the full content * of this license, see the COPYING file at the top level of this * source tree. * Test that timer_delete() returns -1 and sets errno==EINVAL when * trying to delete a timer that has already been deleted. * Steps: * - Run test case 1-1.c and then try to delete the timer again. * * For this test, signal SIGTOTEST will be used, clock CLOCK_REALTIME * will be used. */ #include <time.h> #include <signal.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <errno.h> #include "posixtest.h" #define SIGTOTEST SIGALRM #define TIMERSEC 3 void handler(int signo) { printf("Should not have caught signal\n"); exit(PTS_FAIL); } int main(int argc, char *argv[]) { struct sigevent ev; struct sigaction act; timer_t tid; struct itimerspec its; ev.sigev_notify = SIGEV_SIGNAL; ev.sigev_signo = SIGTOTEST; act.sa_handler=handler; act.sa_flags=0; its.it_interval.tv_sec = 0; its.it_interval.tv_nsec = 0; its.it_value.tv_sec = TIMERSEC; its.it_value.tv_nsec = 0; if (sigemptyset(&act.sa_mask) == -1) { perror("Error calling sigemptyset\n"); return PTS_UNRESOLVED; } if (sigaction(SIGTOTEST, &act, 0) == -1) { perror("Error calling sigaction\n"); return PTS_UNRESOLVED; } if (timer_create(CLOCK_REALTIME, &ev, &tid) != 0) { perror("timer_create() did not return success\n"); return PTS_UNRESOLVED; } if (timer_settime(tid, 0, &its, NULL) != 0) { perror("timer_settime() did not return success\n"); return PTS_UNRESOLVED; } if (timer_delete(tid) != 0) { perror("timer_delete() did not return success\n"); return PTS_UNRESOLVED; } if (sleep(TIMERSEC) != 0) { printf("sleep() did not sleep full time\n"); return PTS_UNRESOLVED; } if (timer_delete(tid) == -1) { if (errno==EINVAL) { printf("Test PASSED\n"); return PTS_PASS; } else { printf("errno!=EINVAL when deleted timer ID sent\n"); return PTS_FAIL; } } else { printf("timer_delete() didn't return -1 on deleted timer ID\n"); return PTS_FAIL; } printf("This code should never be executed\n"); return PTS_UNRESOLVED; } |