From c6d15c2c2698beedb8ecdbbc4ee78c56808b3811 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Thu, 4 Jul 1996 17:01:48 +0000 Subject: first test cases for mutex manager pass --- testsuites/psxtests/psx05/init.c | 171 ++++++++++++++++++++++++++++++++++++ testsuites/psxtests/psx05/psx05.scn | 0 testsuites/psxtests/psx05/system.h | 54 ++++++++++++ testsuites/psxtests/psx05/task.c | 52 +++++++++++ 4 files changed, 277 insertions(+) create mode 100644 testsuites/psxtests/psx05/init.c create mode 100644 testsuites/psxtests/psx05/psx05.scn create mode 100644 testsuites/psxtests/psx05/system.h create mode 100644 testsuites/psxtests/psx05/task.c (limited to 'testsuites/psxtests/psx05') diff --git a/testsuites/psxtests/psx05/init.c b/testsuites/psxtests/psx05/init.c new file mode 100644 index 0000000000..f2b09cefd7 --- /dev/null +++ b/testsuites/psxtests/psx05/init.c @@ -0,0 +1,171 @@ +/* + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +#define CONFIGURE_INIT +#include "system.h" +#include + +void Print_mutexattr( + char *msg, + pthread_mutexattr_t *attr +) +{ + int status; + int protocol; + int prioceiling; + int pshared; + + /* protocol */ + + status = pthread_mutexattr_getprotocol( attr, &protocol ); + assert( !status ); + + printf( "%smutex protocol is (%d) -- ", msg, protocol ); + switch ( protocol ) { + case PTHREAD_PRIO_NONE: + printf( "PTHREAD_PRIO_NONE\n" ); + break; + case PTHREAD_PRIO_INHERIT: + printf( "PTHREAD_PRIO_INHERIT\n" ); + break; + case PTHREAD_PRIO_PROTECT: + printf( "PTHREAD_PRIO_PROTECT\n" ); + break; + default: + printf( "UNKNOWN\n" ); + assert( 0 ); + break; + } + + /* priority ceiling */ + + status = pthread_mutexattr_getprioceiling( attr, &prioceiling ); + assert( !status ); + printf( "%smutex priority ceiling is %d\n", msg, prioceiling ); + + /* process shared */ + + status = pthread_mutexattr_getpshared( attr, &pshared ); + assert( !status ); + printf( "%smutex process shared is (%d) -- ", msg, pshared ); + switch ( pshared ) { + case PTHREAD_PROCESS_PRIVATE: + printf( "PTHREAD_PROCESS_PRIVATE\n" ); + break; + case PTHREAD_PROCESS_SHARED: + printf( "PTHREAD_PROCESS_SHARED\n" ); + break; + default: + printf( "UNKNOWN\n" ); + assert( 0 ); + break; + } +} + +void *POSIX_Init( + void *argument +) +{ + int status; + pthread_mutexattr_t attr; + + puts( "\n\n*** POSIX TEST 5 ***" ); + + /* set the time of day, and print our buffer in multiple ways */ + + set_time( TM_FRIDAY, TM_MAY, 24, 96, 11, 5, 0 ); + + /* get id of this thread */ + + Init_id = pthread_self(); + printf( "Init's ID is 0x%08x\n", Init_id ); + + /* basic checkout of mutex attributes */ + + printf( "Init: Initializing mutex attributes\n" ); + status = pthread_mutexattr_init( &attr ); + assert( !status ); + + Print_mutexattr( "Init: ", &attr ); + + printf( "Init: Changing mutex attributes\n" ); + status = pthread_mutexattr_setprotocol( &attr, PTHREAD_PRIO_INHERIT ); + assert( !status ); + + status = pthread_mutexattr_setprioceiling( &attr, 128 ); + assert( !status ); + + status = pthread_mutexattr_setpshared( &attr, PTHREAD_PROCESS_SHARED ); + assert( !status ); + + Print_mutexattr( "Init: ", &attr ); + + printf( "Init: Resetting mutex attributes\n" ); + status = pthread_mutexattr_init( &attr ); + assert( !status ); + + /* create a thread */ + + status = pthread_create( &Task_id, NULL, Task_1_through_3, NULL ); + assert( !status ); + + /* now try some basic mutex operations */ + + empty_line(); + + printf( "Init: Creating a mutex\n" ); + status = pthread_mutex_init( &Mutex_id, &attr ); + if ( status ) + printf( "status = %d\n", status ); + assert( !status ); + + printf( "Init: pthread_mutex_trylock successfully\n" ); + status = pthread_mutex_trylock( &Mutex_id ); + if ( status ) + printf( "status = %d\n", status ); + assert( !status ); + + printf( "Init: pthread_mutex_trylock already locked\n" ); + status = pthread_mutex_trylock( &Mutex_id ); + if ( status != EDEADLK ) + printf( "status = %d\n", status ); + assert( status == EDEADLK ); + + printf( "Init: pthread_mutex_lock already locked\n" ); + status = pthread_mutex_lock( &Mutex_id ); + if ( status != EDEADLK ) + printf( "status = %d\n", status ); + assert( status == EDEADLK ); + + printf( "Init: Sleep 1 second\n" ); + + sleep( 1 ); + + /* switch to task 1 */ + + printf( "Init: pthread_mutex_unlock successfully\n" ); + status = pthread_mutex_unlock( &Mutex_id ); + if ( status ) + printf( "status = %d\n", status ); + assert( !status ); + + printf( "Init: pthread_mutex_unlock not owner\n" ); + status = pthread_mutex_unlock( &Mutex_id ); + if ( status != EPERM ) + printf( "status = %d\n", status ); + assert( status == EPERM ); + + puts( "*** END OF POSIX TEST 5 ***" ); + exit( 0 ); + + return NULL; /* just so the compiler thinks we returned something */ +} diff --git a/testsuites/psxtests/psx05/psx05.scn b/testsuites/psxtests/psx05/psx05.scn new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuites/psxtests/psx05/system.h b/testsuites/psxtests/psx05/system.h new file mode 100644 index 0000000000..3751a76ce7 --- /dev/null +++ b/testsuites/psxtests/psx05/system.h @@ -0,0 +1,54 @@ +/* system.h + * + * This include file contains information that is included in every + * function in the test set. + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +/* functions */ + +#include + +void *POSIX_Init( + void *argument +); + +void *Task_1_through_3( + void *argument +); + +/* configuration information */ + +#define CONFIGURE_SPTEST + +#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_TEST_NEEDS_CLOCK_DRIVER + +#define CONFIGURE_POSIX_INIT_THREAD_TABLE + +#define CONFIGURE_MAXIMUM_POSIX_MUTEXES 10 + +#include + +/* global variables */ + +#ifdef CONFIGURE_INIT +#define TEST_EXTERN +#else +#define TEST_EXTERN extern +#endif + +TEST_EXTERN pthread_t Init_id; +TEST_EXTERN pthread_t Task_id; +TEST_EXTERN pthread_mutex_t Mutex_id; + +/* end of include file */ diff --git a/testsuites/psxtests/psx05/task.c b/testsuites/psxtests/psx05/task.c new file mode 100644 index 0000000000..9e0fa7d333 --- /dev/null +++ b/testsuites/psxtests/psx05/task.c @@ -0,0 +1,52 @@ +/* Task_1_through_3 + * + * This routine serves as a test task. It verifies the basic task + * switching capabilities of the executive. + * + * Input parameters: + * argument - task argument + * + * Output parameters: NONE + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +#include "system.h" +#include + +void *Task_1_through_3( + void *argument +) +{ + int status; + + printf( "Task: pthread_mutex_trylock already locked\n" ); + status = pthread_mutex_trylock( &Mutex_id ); + if ( status != EBUSY ) + printf( "status = %d\n", status ); + assert( status == EBUSY ); + + printf( "Task: pthread_mutex_lock unavailable\n" ); + status = pthread_mutex_lock( &Mutex_id ); + if ( status ) + printf( "status = %d\n", status ); + assert( !status ); + + printf( "Task: mutex acquired\n" ); + + + printf( "Task: exit\n" ); + pthread_exit( NULL ); + + /* switch to Init */ + + return NULL; /* just so the compiler thinks we returned something */ +} -- cgit v1.2.3