summaryrefslogtreecommitdiffstats
path: root/testsuites
diff options
context:
space:
mode:
authorJennifer Averett <Jennifer.Averett@OARcorp.com>1999-11-22 16:05:09 +0000
committerJennifer Averett <Jennifer.Averett@OARcorp.com>1999-11-22 16:05:09 +0000
commit24f6608c94946e2352b74e42ded2a37d88e75d15 (patch)
tree7da8724ece98ca12209eab01bcfd108a5dac8b9d /testsuites
parentRTEMS RPM basically working. (diff)
downloadrtems-24f6608c94946e2352b74e42ded2a37d88e75d15.tar.bz2
+ 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.
Diffstat (limited to 'testsuites')
-rw-r--r--testsuites/psxtests/psxsem01/init.c110
1 files changed, 80 insertions, 30 deletions
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 */
}
-
-
-