diff options
Diffstat (limited to 'testsuites')
-rw-r--r-- | testsuites/psxtests/psxsem01/init.c | 34 | ||||
-rw-r--r-- | testsuites/sptests/spsem_err01/init.c | 29 | ||||
-rw-r--r-- | testsuites/sptests/spsem_err01/spsem_err01.scn | 7 |
3 files changed, 68 insertions, 2 deletions
diff --git a/testsuites/psxtests/psxsem01/init.c b/testsuites/psxtests/psxsem01/init.c index 24f6d96465..1bec5c65a7 100644 --- a/testsuites/psxtests/psxsem01/init.c +++ b/testsuites/psxtests/psxsem01/init.c @@ -15,6 +15,7 @@ #include <semaphore.h> #include <errno.h> #include <fcntl.h> +#include <limits.h> #include <time.h> #include <tmacros.h> #include <pmacros.h> @@ -76,6 +77,38 @@ static void test_sem_wait_during_delete(void) rtems_test_assert( eno == 0 ); } +static void test_sem_post_overflow(void) +{ + sem_t sem; + int rv; + int val; + + rv = sem_init( &sem, 0, SEM_VALUE_MAX ); + rtems_test_assert( rv == 0 ); + + rv = sem_getvalue( &sem, &val ); + rtems_test_assert( rv == 0 ); + rtems_test_assert( val == (int) SEM_VALUE_MAX ); + + errno = 0; + rv = sem_post( &sem ); + rtems_test_assert( rv == -1 ); + rtems_test_assert( errno == EOVERFLOW ); + + rv = sem_getvalue( &sem, &val ); + rtems_test_assert( rv == 0 ); + rtems_test_assert( val == (int) SEM_VALUE_MAX ); + + rv = sem_wait( &sem ); + rtems_test_assert( rv == 0 ); + + rv = sem_post( &sem ); + rtems_test_assert( rv == 0 ); + + rv = sem_destroy( &sem ); + rtems_test_assert( rv == 0 ); +} + void *POSIX_Init( void *argument ) @@ -345,6 +378,7 @@ void *POSIX_Init( rtems_test_assert( (status == -1) && (errno == ENOENT) ); test_sem_wait_during_delete(); + test_sem_post_overflow(); /* Try adding in unlinking before closing... (can we still open?) */ diff --git a/testsuites/sptests/spsem_err01/init.c b/testsuites/sptests/spsem_err01/init.c index 897581ac94..39a366b41a 100644 --- a/testsuites/sptests/spsem_err01/init.c +++ b/testsuites/sptests/spsem_err01/init.c @@ -30,6 +30,35 @@ rtems_task Init( Semaphore_name[ 2 ] = rtems_build_name( 'S', 'M', '2', ' ' ); Semaphore_name[ 3 ] = rtems_build_name( 'S', 'M', '3', ' ' ); + /* release overflow */ + status = rtems_semaphore_create( + Semaphore_name[ 1 ], + UINT32_MAX, + RTEMS_COUNTING_SEMAPHORE, + 0, + &Semaphore_id[ 1 ] + ); + fatal_directive_status( + status, + RTEMS_SUCCESSFUL, + "rtems_semaphore_create" + ); + puts( "TA1 - rtems_semaphore_create - RTEMS_SUCCESSFUL" ); + status = rtems_semaphore_release( Semaphore_id[ 1 ] ); + fatal_directive_status( + status, + RTEMS_UNSATISFIED, + "rtems_semaphore_release" + ); + puts( "TA1 - rtems_semaphore_release - RTEMS_UNSATISFIED" ); + status = rtems_semaphore_delete( Semaphore_id[ 1 ] ); + fatal_directive_status( + status, + RTEMS_SUCCESSFUL, + "rtems_semaphore_delete" + ); + puts( "TA1 - rtems_semaphore_delete - RTEMS_SUCCESSFUL" ); + /* invalid name */ status = rtems_semaphore_create( 0, diff --git a/testsuites/sptests/spsem_err01/spsem_err01.scn b/testsuites/sptests/spsem_err01/spsem_err01.scn index 00d363d15f..b6172196b0 100644 --- a/testsuites/sptests/spsem_err01/spsem_err01.scn +++ b/testsuites/sptests/spsem_err01/spsem_err01.scn @@ -1,4 +1,7 @@ -*** TEST SEMAPHORE ERROR 01 *** +*** BEGIN OF TEST SP SEMAPHORE ERROR 01 *** +TA1 - rtems_semaphore_create - RTEMS_SUCCESSFUL +TA1 - rtems_semaphore_release - RTEMS_UNSATISFIED +TA1 - rtems_semaphore_delete - RTEMS_SUCCESSFUL TA1 - rtems_semaphore_create - RTEMS_INVALID_NAME TA1 - rtems_semaphore_create - RTEMS_INVALID_ADDRESS TA1 - rtems_semaphore_create - 1 - RTEMS_SUCCESSFUL @@ -16,4 +19,4 @@ TA1 - rtems_semaphore_ident - global RTEMS_INVALID_NAME TA1 - rtems_semaphore_ident - local RTEMS_INVALID_NAME TA1 - rtems_semaphore_release - RTEMS_INVALID_ID TA1 - rtems_semaphore_flush - RTEMS_INVALID_ID -*** END TEST SEMAPHORE ERROR 01 *** +*** END OF TEST SP SEMAPHORE ERROR 01 *** |