From eed0b96d206fcf7e20781120ff7509d8dd85fe9a Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Mon, 17 Dec 2007 16:04:40 +0000 Subject: 2007-12-17 Joel Sherrill * Makefile.am, configure.ac: Rename psxtimer to psxtimer01 to indicate addition of second POSIX Timer test. Add initial version of psxtimer02 to cover some conditions missed in psxtimer01. More cases left to add. * psxtimer01/.cvsignore, psxtimer01/Makefile.am, psxtimer01/psxtimer.c, psxtimer01/psxtimer01.scn, psxtimer01/system.h, psxtimer02/.cvsignore, psxtimer02/Makefile.am, psxtimer02/psxtimer.c, psxtimer02/psxtimer02.scn, psxtimer02/system.h: New files. * psxtimer/.cvsignore, psxtimer/Makefile.am, psxtimer/psxtimer.c, psxtimer/psxtimer.scn, psxtimer/system.h: Removed. --- testsuites/psxtests/psxtimer02/.cvsignore | 2 + testsuites/psxtests/psxtimer02/Makefile.am | 28 +++++++ testsuites/psxtests/psxtimer02/psxtimer.c | 110 ++++++++++++++++++++++++++ testsuites/psxtests/psxtimer02/psxtimer02.scn | 16 ++++ testsuites/psxtests/psxtimer02/system.h | 37 +++++++++ 5 files changed, 193 insertions(+) create mode 100644 testsuites/psxtests/psxtimer02/.cvsignore create mode 100644 testsuites/psxtests/psxtimer02/Makefile.am create mode 100644 testsuites/psxtests/psxtimer02/psxtimer.c create mode 100644 testsuites/psxtests/psxtimer02/psxtimer02.scn create mode 100644 testsuites/psxtests/psxtimer02/system.h (limited to 'testsuites/psxtests/psxtimer02') diff --git a/testsuites/psxtests/psxtimer02/.cvsignore b/testsuites/psxtests/psxtimer02/.cvsignore new file mode 100644 index 0000000000..282522db03 --- /dev/null +++ b/testsuites/psxtests/psxtimer02/.cvsignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in diff --git a/testsuites/psxtests/psxtimer02/Makefile.am b/testsuites/psxtests/psxtimer02/Makefile.am new file mode 100644 index 0000000000..d3acc0aac1 --- /dev/null +++ b/testsuites/psxtests/psxtimer02/Makefile.am @@ -0,0 +1,28 @@ +## +## $Id$ +## + +MANAGERS = all + +rtems_tests_PROGRAMS = psxtimer02.exe +psxtimer02_exe_SOURCES = psxtimer.c system.h ../include/pmacros.h + +dist_rtems_tests_DATA = psxtimer02.scn + +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg +include $(top_srcdir)/../automake/compile.am +include $(top_srcdir)/../automake/leaf.am + +psxtimer02_exe_LDADD = $(MANAGERS_NOT_WANTED:%=$(PROJECT_LIB)/no-%.rel) + +AM_CPPFLAGS += -I$(top_srcdir)/include +AM_CPPFLAGS += -I$(top_srcdir)/../support/include + +LINK_OBJS = $(psxtimer02_exe_OBJECTS) $(psxtimer02_exe_LDADD) +LINK_LIBS = $(psxtimer02_exe_LDLIBS) + +psxtimer02.exe$(EXEEXT): $(psxtimer02_exe_OBJECTS) $(psxtimer02_exe_DEPENDENCIES) + @rm -f psxtimer02.exe$(EXEEXT) + $(make-exe) + +include $(top_srcdir)/../automake/local.am diff --git a/testsuites/psxtests/psxtimer02/psxtimer.c b/testsuites/psxtests/psxtimer02/psxtimer.c new file mode 100644 index 0000000000..330d4abbe0 --- /dev/null +++ b/testsuites/psxtests/psxtimer02/psxtimer.c @@ -0,0 +1,110 @@ +/* + * + * This is a simple real-time applications which contains 3 periodic tasks. + * + * Task A is an independent task. + * + * Task B and C share a data. + * + * Tasks are implemented as POSIX threads. + * + * The share data is protected with a POSIX mutex. + * + * Other POSIX facilities such as timers, condition, .. is also used + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#define CONFIGURE_INIT +#include "system.h" +#include "tmacros.h" +#include /* signal facilities */ +#include /* sleep facilities */ +#include /* time facilities */ +#include /* console facilities */ + +void *POSIX_Init ( + void *argument +) + +{ + struct sigevent event; + int status; + timer_t timer; + timer_t timer1; + struct itimerspec itimer; + + /* + * If these are not filled in correctly, we don't pass its error checking. + */ + event.sigev_notify = SIGEV_SIGNAL; + event.sigev_signo = SIGUSR1; + + puts( "\n\n*** POSIX Timers Test 02 ***" ); + + puts( "timer_create - bad clock id - EINVAL" ); + status = timer_create( -1, &event, &timer ); + fatal_posix_service_status_errno( status, EINVAL, "bad clock id" ); + + puts( "timer_create - bad timer id pointer - EINVAL" ); + status = timer_create( CLOCK_REALTIME, &event, NULL ); + fatal_posix_service_status_errno( status, EINVAL, "bad timer id" ); + + puts( "timer_create - OK" ); + status = timer_create( CLOCK_REALTIME, NULL, &timer ); + posix_service_failed( status, "timer_create OK" ); + + puts( "timer_create - too many - EAGAIN" ); + status = timer_create( CLOCK_REALTIME, NULL, &timer1 ); + fatal_posix_service_status_errno( status, EAGAIN, "too many" ); + + puts( "timer_delete - bad id - EINVAL" ); + status = timer_delete( timer1 + 1 ); + fatal_posix_service_status_errno( status, EINVAL, "bad id" ); + + puts( "timer_getoverrun - bad id - EINVAL" ); + status = timer_getoverrun( timer1 + 1 ); + fatal_posix_service_status_errno( status, EINVAL, "bad id" ); + + puts( "timer_gettime - bad itimer - EINVAL" ); + status = timer_gettime( timer1, NULL ); + fatal_posix_service_status_errno( status, EINVAL, "bad id" ); + + puts( "timer_gettime - bad id - EINVAL" ); + status = timer_gettime( timer1 + 1, &itimer ); + fatal_posix_service_status_errno( status, EINVAL, "bad id" ); + + puts( "timer_settime - bad itimer pointer - EINVAL" ); + status = timer_settime( timer, TIMER_ABSTIME, &itimer, NULL ); + fatal_posix_service_status_errno( status, EINVAL, "bad itimer pointer" ); + + itimer.it_value.tv_nsec = 2000000000; + puts( "timer_settime - bad itimer value - too many nanosecond - EINVAL" ); + status = timer_settime( timer, TIMER_ABSTIME, &itimer, NULL ); + fatal_posix_service_status_errno( status, EINVAL, "bad itimer value #1" ); + + itimer.it_value.tv_nsec = -1; + puts( "timer_settime - bad itimer value - negative nanosecond - EINVAL" ); + status = timer_settime( timer, TIMER_ABSTIME, &itimer, NULL ); + fatal_posix_service_status_errno( status, EINVAL, "bad itimer value #2" ); + + itimer.it_value.tv_nsec = 0; + puts( "timer_settime - bad clock value - EINVAL" ); + status = timer_settime( timer, 0x80, &itimer, NULL ); + fatal_posix_service_status_errno( status, EINVAL, "bad clock value" ); + + puts( "timer_delete - OK" ); + status = timer_delete( timer ); + posix_service_failed( status, "timer_delete OK" ); + + puts( "timer_delete - bad id - EINVAL" ); + status = timer_delete( timer ); + fatal_posix_service_status_errno( status, EINVAL, "bad id" ); + + puts( "*** END OF POSIX Timers Test 02 ***" ); + rtems_test_exit (0); +} diff --git a/testsuites/psxtests/psxtimer02/psxtimer02.scn b/testsuites/psxtests/psxtimer02/psxtimer02.scn new file mode 100644 index 0000000000..e78425a32e --- /dev/null +++ b/testsuites/psxtests/psxtimer02/psxtimer02.scn @@ -0,0 +1,16 @@ +*** POSIX Timers Test 02 *** +timer_create - bad clock id - EINVAL +timer_create - bad timer id pointer - EINVAL +timer_create - OK +timer_create - too many - EAGAIN +timer_delete - bad id - EINVAL +timer_getoverrun - bad id - EINVAL +timer_gettime - bad itimer - EINVAL +timer_gettime - bad id - EINVAL +timer_settime - bad itimer pointer - EINVAL +timer_settime - bad itimer value - too many nanosecond - EINVAL +timer_settime - bad itimer value - negative nanosecond - EINVAL +timer_settime - bad clock value - EINVAL +timer_delete - OK +timer_delete - bad id - EINVAL +*** END OF POSIX Timers Test 02 *** diff --git a/testsuites/psxtests/psxtimer02/system.h b/testsuites/psxtests/psxtimer02/system.h new file mode 100644 index 0000000000..5f18d521ca --- /dev/null +++ b/testsuites/psxtests/psxtimer02/system.h @@ -0,0 +1,37 @@ +/* system.h + * + * This include file contains information that is included in every + * function in the test set. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ + +/* functions */ + +#include +#include +#include +#include + +void *POSIX_Init ( + void *arg +); + +/* configuration information */ + +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER + +#define CONFIGURE_POSIX_INIT_THREAD_TABLE + +#define CONFIGURE_MAXIMUM_POSIX_THREADS 1 +#define CONFIGURE_MAXIMUM_POSIX_TIMERS 1 + + +#include + +/* end of include file */ -- cgit v1.2.3