From 408eea8879966e73a382b53428961d60dd99cb86 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 8 Mar 2011 22:10:39 +0000 Subject: 2011-03-08 Joel Sherrill PR 1759/cpukit * Makefile.am, configure.ac: Add test to use some pthread calls with Classic Tasks. * psxclassic01/.cvsignore, psxclassic01/Makefile.am, psxclassic01/init.c, psxclassic01/psxclassic01.doc, psxclassic01/psxclassic01.scn: New files. --- testsuites/psxtests/ChangeLog | 9 ++ testsuites/psxtests/Makefile.am | 2 +- testsuites/psxtests/configure.ac | 1 + testsuites/psxtests/psxclassic01/.cvsignore | 2 + testsuites/psxtests/psxclassic01/Makefile.am | 28 ++++ testsuites/psxtests/psxclassic01/init.c | 153 ++++++++++++++++++++++ testsuites/psxtests/psxclassic01/psxclassic01.doc | 27 ++++ testsuites/psxtests/psxclassic01/psxclassic01.scn | 8 ++ 8 files changed, 229 insertions(+), 1 deletion(-) create mode 100644 testsuites/psxtests/psxclassic01/.cvsignore create mode 100644 testsuites/psxtests/psxclassic01/Makefile.am create mode 100644 testsuites/psxtests/psxclassic01/init.c create mode 100644 testsuites/psxtests/psxclassic01/psxclassic01.doc create mode 100644 testsuites/psxtests/psxclassic01/psxclassic01.scn (limited to 'testsuites/psxtests') diff --git a/testsuites/psxtests/ChangeLog b/testsuites/psxtests/ChangeLog index 86ac810e1f..80c1d292ed 100644 --- a/testsuites/psxtests/ChangeLog +++ b/testsuites/psxtests/ChangeLog @@ -1,3 +1,12 @@ +2011-03-08 Joel Sherrill + + PR 1759/cpukit + * Makefile.am, configure.ac: Add test to use some pthread calls with + Classic Tasks. + * psxclassic01/.cvsignore, psxclassic01/Makefile.am, + psxclassic01/init.c, psxclassic01/psxclassic01.doc, + psxclassic01/psxclassic01.scn: New files. + 2011-02-22 Ralf Corsépius * configure.ac: Add AC_CONFIG_HEADER(config.h). diff --git a/testsuites/psxtests/Makefile.am b/testsuites/psxtests/Makefile.am index 4e50581d03..966e959de8 100644 --- a/testsuites/psxtests/Makefile.am +++ b/testsuites/psxtests/Makefile.am @@ -9,7 +9,7 @@ if HAS_POSIX SUBDIRS += psxhdrs psx01 psx02 psx03 psx04 psx05 psx06 psx07 psx08 psx09 \ psx10 psx11 psx12 psx13 psx14 psx15 psxaio01 psxaio02 psxaio03 \ psxalarm01 psxautoinit01 psxautoinit02 psxbarrier01 \ - psxcancel psxcancel01 psxcleanup psxcleanup01 \ + psxcancel psxcancel01 psxclassic01 psxcleanup psxcleanup01 \ psxcond01 psxenosys psxkey01 psxkey02 psxkey03 \ psxitimer psxmsgq01 psxmsgq02 psxmsgq03 psxmsgq04 \ psxmutexattr01 psxobj01 psxrwlock01 psxsem01 psxsignal01 psxsignal02 \ diff --git a/testsuites/psxtests/configure.ac b/testsuites/psxtests/configure.ac index 9cf7794b6a..6968635b46 100644 --- a/testsuites/psxtests/configure.ac +++ b/testsuites/psxtests/configure.ac @@ -106,6 +106,7 @@ psxbarrier01/Makefile psxcancel/Makefile psxcancel01/Makefile psxchroot01/Makefile +psxclassic01/Makefile psxcleanup/Makefile psxcleanup01/Makefile psxclock/Makefile diff --git a/testsuites/psxtests/psxclassic01/.cvsignore b/testsuites/psxtests/psxclassic01/.cvsignore new file mode 100644 index 0000000000..282522db03 --- /dev/null +++ b/testsuites/psxtests/psxclassic01/.cvsignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in diff --git a/testsuites/psxtests/psxclassic01/Makefile.am b/testsuites/psxtests/psxclassic01/Makefile.am new file mode 100644 index 0000000000..7ec0c05de9 --- /dev/null +++ b/testsuites/psxtests/psxclassic01/Makefile.am @@ -0,0 +1,28 @@ +## +## $Id$ +## + +MANAGERS = all + +rtems_tests_PROGRAMS = psxclassic01 +psxclassic01_SOURCES = init.c ../include/pmacros.h + +dist_rtems_tests_DATA = psxclassic01.scn + +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg +include $(top_srcdir)/../automake/compile.am +include $(top_srcdir)/../automake/leaf.am + +psxclassic01_LDADD = $(MANAGERS_NOT_WANTED:%=$(PROJECT_LIB)/no-%.rel) + +AM_CPPFLAGS += -I$(top_srcdir)/include +AM_CPPFLAGS += -I$(top_srcdir)/../support/include + +LINK_OBJS = $(psxclassic01_OBJECTS) $(psxclassic01_LDADD) +LINK_LIBS = $(psxclassic01_LDLIBS) + +psxclassic01$(EXEEXT): $(psxclassic01_OBJECTS) $(psxclassic01_DEPENDENCIES) + @rm -f psxclassic01$(EXEEXT) + $(make-exe) + +include $(top_srcdir)/../automake/local.am diff --git a/testsuites/psxtests/psxclassic01/init.c b/testsuites/psxtests/psxclassic01/init.c new file mode 100644 index 0000000000..575f38b31b --- /dev/null +++ b/testsuites/psxtests/psxclassic01/init.c @@ -0,0 +1,153 @@ +/* + * Based upon user code supplied in conjunction with PR1759 + * + * COPYRIGHT (c) 1989-2011. + * On-Line Applications Research Corporation (OAR). + * + * 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$ + */ + + +#include "tmacros.h" + +#include +#include +#include +#include +#include + +int Caught_signo = -1; +siginfo_t Caught_siginfo = { -1, -1, }; + +void handler(int signo) +{ + Caught_signo = signo; +} + +void handler_info(int signo, siginfo_t *info, void *context) +{ + Caught_signo = signo; + Caught_siginfo = *info; +} + +rtems_task test_task(rtems_task_argument arg) +{ + int sc; + struct sigaction new_action; + sigset_t mask; + + printf("test_task starting...\n"); + + sc = sigemptyset (&new_action.sa_mask); + rtems_test_assert( sc == 0 ); + + sc = sigfillset (&new_action.sa_mask); + rtems_test_assert( sc == 0 ); + + sc = sigdelset (&new_action.sa_mask, SIGUSR1); + rtems_test_assert( sc == 0 ); + + new_action.sa_handler = handler; + new_action.sa_flags = SA_SIGINFO; + new_action.sa_sigaction = handler_info; + + sc = sigaction(SIGUSR1,&new_action,NULL); + rtems_test_assert( sc == 0 ); + + sc = sigemptyset(&mask); + rtems_test_assert( sc == 0 ); + + sc = sigaddset(&mask, SIGUSR1); + rtems_test_assert( sc == 0 ); + + sc = pthread_sigmask( SIG_UNBLOCK, &mask, NULL); + rtems_test_assert( sc == 0 ); + + printf("test_task waiting for signal...\n"); + + while(1) { + sleep(1); + if ( Caught_siginfo.si_signo != -1 ) { + printf( "Signal_info: %d si_signo= %d si_code= %d value= %d\n", + Caught_signo, + Caught_siginfo.si_signo, + Caught_siginfo.si_code, + Caught_siginfo.si_value.sival_int + ); + break; + } + if ( Caught_signo != -1 ) { + printf( "Signal: %d caught\n", Caught_signo ); + break; + } + } + puts( "test_task exiting thread" ); + pthread_exit( 0 ); +} + +rtems_task Init(rtems_task_argument arg) +{ + rtems_status_code sc; + rtems_id task_id; + int status; + void *retval; + + puts( "*** START OF CLASSIC API TEST OF POSIX 01 ***" ); + + sc = rtems_task_create( + rtems_build_name('T','E','S','T'), + 1, + RTEMS_MINIMUM_STACK_SIZE, + RTEMS_DEFAULT_MODES, + RTEMS_DEFAULT_ATTRIBUTES, + &task_id + ); + rtems_test_assert( sc == RTEMS_SUCCESSFUL ); + + sc = rtems_task_start( task_id, test_task, 0 ); + rtems_test_assert( sc == RTEMS_SUCCESSFUL ); + + + puts( "Init - pthread_equal on Classic Ids" ); + status = pthread_equal( task_id, task_id ); + rtems_test_assert( status != 0 ); + + puts( "Init - pthread_cancel on Classic Task" ); + status = pthread_cancel( task_id ); + rtems_test_assert( status == 0 ); + + status = pthread_detach( task_id ); + rtems_test_assert( status == 0 ); + + status = pthread_join( task_id, &retval ); + if ( status != EINVAL ) printf( "JOIN %s\n", strerror( status ) ); + rtems_test_assert( status == EINVAL ); + + status = pthread_kill( task_id, SIGUSR1 ); + rtems_test_assert( status == 0 ); + + puts( "*** END OF CLASSIC API TEST OF POSIX 01 ***" ); + exit(0); +} + +/* configuration information */ +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER + +#define CONFIGURE_MAXIMUM_TASKS 2 + +#define CONFIGURE_INIT_TASK_INITIAL_MODES \ + (RTEMS_PREEMPT | RTEMS_NO_TIMESLICE | RTEMS_ASR | RTEMS_INTERRUPT_LEVEL(0)) + +#define CONFIGURE_INIT_TASK_PRIORITY 4 +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_UNIFIED_WORK_AREAS + +#define CONFIGURE_INIT +#include +/* end of file */ diff --git a/testsuites/psxtests/psxclassic01/psxclassic01.doc b/testsuites/psxtests/psxclassic01/psxclassic01.doc new file mode 100644 index 0000000000..0257c7e099 --- /dev/null +++ b/testsuites/psxtests/psxclassic01/psxclassic01.doc @@ -0,0 +1,27 @@ +# +# $Id$ +# +# COPYRIGHT (c) 1989-2019. +# On-Line Applications Research Corporation (OAR). +# +# 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. +# + +This file describes the directives and concepts tested by this test set. + +test set name: Classic API Task Using POSIX Services + +directives: + ++ pthread_equal ++ pthread_cancel ++ pthread_detach ++ pthread_join ++ pthread_kill + +concepts: + ++ Ensure that Classic API tasks can be operated upon by the above listed +services. diff --git a/testsuites/psxtests/psxclassic01/psxclassic01.scn b/testsuites/psxtests/psxclassic01/psxclassic01.scn new file mode 100644 index 0000000000..1d7c4ddae5 --- /dev/null +++ b/testsuites/psxtests/psxclassic01/psxclassic01.scn @@ -0,0 +1,8 @@ +*** START OF CLASSIC API TEST OF POSIX 01 *** +test_task starting... +test_task waiting for signal... +Init - pthread_equal on Classic Ids +Init - pthread_cancel on Classic Task +Signal_info: 25 si_signo= 0 si_code= 0 value= 0 +test_task exiting thread +*** END OF CLASSIC API TEST OF POSIX 01 *** -- cgit v1.2.3