From 24f6608c94946e2352b74e42ded2a37d88e75d15 Mon Sep 17 00:00:00 2001 From: Jennifer Averett Date: Mon, 22 Nov 1999 16:05:09 +0000 Subject: + Corrected error messages. + Added tests for sem_open, sem_close, and sem_unlink. + Yellow lined sem_open, sem_close, sem_unlink, _POSIX_Semaphore_Delete, _POSIX_Semaphore_Name_to_id, and _POSIX_Semaphore_Create_support. Except for MP, pshared OBJECT_REMOTE, and out of memory paths. --- testsuites/psxtests/psxsem01/init.c | 110 ++++++++++++++++++++++++++---------- 1 file changed, 80 insertions(+), 30 deletions(-) (limited to 'testsuites') diff --git a/testsuites/psxtests/psxsem01/init.c b/testsuites/psxtests/psxsem01/init.c index 2f694bd1aa..32dac252a5 100644 --- a/testsuites/psxtests/psxsem01/init.c +++ b/testsuites/psxtests/psxsem01/init.c @@ -16,7 +16,6 @@ void *POSIX_Init( sem_t sem2; sem_t *n_sem1; sem_t *n_sem2; - sem_t testsem; struct timespec waittime; char failure_msg[80]; @@ -47,7 +46,7 @@ void *POSIX_Init( } puts( "Init: sem_getvalue - UNSUCCESSFUL "); status = sem_getvalue(&sem2, &value); - fatal_directive_status( status, -1, "sem_init error return status"); + fatal_directive_status( status, -1, "sem_getvalue error return status"); fatal_directive_status( errno, EINVAL, "sem_getvalue errno EINVAL"); puts( "Init: sem_destroy - SUCCESSFUL" ); @@ -56,7 +55,7 @@ void *POSIX_Init( puts( "Init: sem_destroy - UNSUCCESSFUL (EINVAL)" ); status = sem_destroy(&sem2); - fatal_directive_status( status, -1, "sem_init error return status"); + fatal_directive_status( status, -1, "sem_destroy error return status"); fatal_directive_status( errno, EINVAL, "sem_destroy errno EINVAL"); puts( "Init: sem_wait - SUCCESSFUL" ); @@ -65,7 +64,7 @@ void *POSIX_Init( puts( "Init: sem_wait - UNSUCCESSFUL (EINVAL)" ); status = sem_wait(&sem2); - fatal_directive_status( status, -1, "sem_init error return status"); + fatal_directive_status( status, -1, "sem_wait error return status"); fatal_directive_status( errno, EINVAL, "sem_wait errno EINVAL"); puts( "Init: sem_post - SUCCESSFUL" ); @@ -82,12 +81,12 @@ void *POSIX_Init( puts( "Init: sem_trywait - UNSUCCESSFUL (EAGAIN)" ); status = sem_trywait(&sems[1]); - fatal_directive_status( status, -1, "sem_init error return status"); + fatal_directive_status( status, -1, "sem_trywait error return status"); fatal_directive_status( errno, EAGAIN, "sem_trywait errno EAGAIN"); puts( "Init: sem_trywait - UNSUCCESSFUL (EINVAL)" ); status = sem_trywait(&sem2); - fatal_directive_status( status, -1, "sem_init error return status"); + fatal_directive_status( status, -1, "sem_trywait error return status"); fatal_directive_status( errno, EINVAL, "sem_trywait errno EINVAL"); puts( "Init: sem_timedwait - SUCCESSFUL" ); @@ -98,17 +97,17 @@ void *POSIX_Init( puts( "Init: sem_timedwait - UNSUCCESSFUL (ETIMEDOUT)" ); status = sem_timedwait(&sems[1], &waittime); - fatal_directive_status( status, -1, "sem_init error return status"); - fatal_directive_status( errno, ETIMEDOUT, "sem_init errno ETIMEDOUT"); + fatal_directive_status( status, -1, "sem_timedwait error return status"); + fatal_directive_status( errno, ETIMEDOUT, "sem_timedwait errno ETIMEDOUT"); puts( "Init: sem_timedwait - UNSUCCESSFUL (EINVAL)" ); status = sem_timedwait(&sem2, &waittime); - fatal_directive_status( status, -1, "sem_init error return status"); + fatal_directive_status( status, -1, "sem_timedwait error return status"); fatal_directive_status( errno, EINVAL, "sem_init errno EINVAL"); puts( "Init: sem_post - UNSUCCESSFUL (EINVAL)" ); status = sem_post(&sem2); - fatal_directive_status( status, -1, "sem_init error return status"); + fatal_directive_status( status, -1, "sem_post error return status"); fatal_directive_status( errno, EINVAL, "sem_post errno EINVAL"); puts( "Init: sem_destroy - SUCCESSFUL" ); @@ -125,14 +124,27 @@ void *POSIX_Init( */ puts( "Init: sem_open - sem1 SUCCESSFUL" ); - n_sem1 = sem_open("sem1", O_CREAT, 00777, 1); + n_sem1 = sem_open( "sem1", O_CREAT, 00777, 1 ); assert( n_sem1 != SEM_FAILED ); - puts( "Init: sem_open - UNSUCCESSFUL (EEXIST)" ); + puts( "Init: sem_open - Create an Existing sem (EEXIST)" ); n_sem2 = sem_open("sem1", O_CREAT | O_EXCL, 00777, 1); fatal_directive_status( (int) n_sem2, (int ) SEM_FAILED, "sem_open error return status" ); - fatal_directive_status( errno, EEXIST, "sem_open errno EEXIST"); + fatal_directive_status( errno, EEXIST, "sem_open errno EEXIST"); + + puts( "Init: sem_open - Open new sem without create flag (ENOENT)" ); + n_sem2 = sem_open("sem3", O_EXCL, 00777, 1); + fatal_directive_status( + (int) n_sem2, (int ) SEM_FAILED, "sem_open error return status" ); + fatal_directive_status( errno, ENOENT, "sem_open errno EEXIST"); + + /* + * XXX - Could not hit the following errors: + * E_POSIX_Semaphore_Create_support only fails if + * ENOSYS - When semaphore is shared between processes. + * ENOSPC - When out of memory. + */ /* * Validate we can wait on a semaphore opened with sem_open. @@ -142,7 +154,20 @@ void *POSIX_Init( status = sem_wait(n_sem1); fatal_directive_status( status, 0, "sem_wait opened semaphore"); -#if 0 + /* + * Validate a second open returns the same semaphore. + */ + + puts( "Init: sem_open - Open an existing sem ( same id )" ); + n_sem2 = sem_open("sem1", 0 ); + fatal_directive_status( + (int) n_sem2, (int ) n_sem1, "sem_open error return status" ); + + /* + * Unlink the semaphore, then verify an open of the same name produces a + * different semaphore. + */ + puts( "Init: sem_unlink - sem1 SUCCESSFUL" ); status = sem_unlink( "sem1" ); fatal_directive_status( status, 0, "sem_unlink locked semaphore"); @@ -150,38 +175,66 @@ void *POSIX_Init( puts( "Init: sem_open - Reopen sem1 SUCCESSFUL with a different id" ); n_sem2 = sem_open( "sem1", O_CREAT | O_EXCL, 00777, 1); assert( n_sem2 != SEM_FAILED ); -#endif + assert( n_sem2 != n_sem1 ); /* * Validate we can call close on a semaphore opened with sem_open. */ - puts( "Init: sem_close - SUCCESSFUL" ); + puts( "Init: sem_close (1) - SUCCESSFUL" ); status = sem_close( n_sem1 ); fatal_directive_status( status, 0, "sem_close semaphore"); + /* - * Notes: - * Calls to sem_close when sem_link has not been previously called shall - * have no effect on the state of the semaphore. - * - * - + * Validate it n_sem2 (the last open for sem1 name can be + * correctly closed and unlinked. + */ + + puts( "Init: sem_close (2) - SUCCESSFUL" ); + status = sem_close( n_sem2 ); + fatal_directive_status( status, 0, "sem_close semaphore"); + + puts( "Init: sem_unlink - sem1 (2) SUCCESSFUL" ); + status = sem_unlink( "sem1" ); + fatal_directive_status( status, 0, "sem_unlink locked semaphore"); + puts( "Init: sem_close - UNSUCCESSFUL (EINVAL)" ); status = sem_close(n_sem2); - fatal_directive_status( status, -1, "sem_init error return status"); + fatal_directive_status( status, -1, "sem_close error return status"); fatal_directive_status( errno, EINVAL, "sem_close errno EINVAL"); - puts( "Init: sem_unlink - SUCCESSFUL" ); + puts( "Init: sem_unlink - UNSUCCESSFUL (ENOENT)" ); status = sem_unlink("sem1"); - fatal_directive_status( status, 0, "sem_unlink semaphore"); + fatal_directive_status( status, -1, "sem_unlink error return status"); + fatal_directive_status( errno, ENOENT, "sem_close errno EINVAL"); + + + /* + * Validate we can unlink (2) + */ + + puts( "Init: sem_unlink (NULL) - EINVAL" ); + status = sem_unlink( NULL ); + fatal_directive_status( status, -1, "sem_unlink error return status"); + fatal_directive_status( errno, EINVAL, "sem_unlink errno value"); + + puts( "Init: sem_unlink (\"\") - EINVAL" ); + status = sem_unlink( "" ); + fatal_directive_status( status, -1, "sem_unlink error return status"); + fatal_directive_status( errno, EINVAL, "sem_unlink errno value"); + + /* + * XXX - Cant' create location OBJECTS_ERROR or OBJECTS_REMOTE. + * sem_close and sem_unlink. + */ puts( "Init: sem_unlink - UNSUCCESSFUL (ENOENT)" ); status = sem_unlink("sem2"); - fatal_directive_status( status, -1, "sem_init error return status"); + fatal_directive_status( status, -1, "sem_unlink error return status"); fatal_directive_status( errno, ENOENT, "sem_unlink errno ENOENT"); assert( (status == -1) && (errno == ENOENT) ); - */ + /* Try adding in unlinking before closing... (can we still open?) */ @@ -190,6 +243,3 @@ void *POSIX_Init( return NULL; /* just so the compiler thinks we returned something */ } - - - -- cgit v1.2.3