2009-05-17 Joel Sherrill <joel.sherrill@OARcorp.com>

* psxsem01/Makefile.am, psxsem01/init.c, psxsem01/psxsem01.scn,
	psxtimer01/psxtimer.c, psxtimer01/system.h, psxtimer02/psxtimer.c:
	Improved so coverage is better.
This commit is contained in:
Joel Sherrill
2009-05-17 20:59:23 +00:00
parent 5b469b7387
commit 7a67dfbc62
7 changed files with 61 additions and 12 deletions

View File

@@ -1,3 +1,9 @@
2009-05-17 Joel Sherrill <joel.sherrill@OARcorp.com>
* psxsem01/Makefile.am, psxsem01/init.c, psxsem01/psxsem01.scn,
psxtimer01/psxtimer.c, psxtimer01/system.h, psxtimer02/psxtimer.c:
Improved so coverage is better.
2009-05-17 Joel Sherrill <joel.sherrill@oarcorp.com> 2009-05-17 Joel Sherrill <joel.sherrill@oarcorp.com>
* psx04/init.c: Correct errors introduced by using different variable * psx04/init.c: Correct errors introduced by using different variable

View File

@@ -5,7 +5,8 @@
MANAGERS = all MANAGERS = all
rtems_tests_PROGRAMS = psxsem01 rtems_tests_PROGRAMS = psxsem01
psxsem01_SOURCES = init.c system.h ../include/pmacros.h psxsem01_SOURCES = init.c system.h ../include/pmacros.h \
../../support/src/test_support.c
dist_rtems_tests_DATA = psxsem01.scn dist_rtems_tests_DATA = psxsem01.scn

View File

@@ -4,6 +4,7 @@
#include <fcntl.h> #include <fcntl.h>
#include <time.h> #include <time.h>
#include <tmacros.h> #include <tmacros.h>
#include "test_support.h"
void *POSIX_Init( void *POSIX_Init(
void *argument void *argument
@@ -21,6 +22,11 @@ void *POSIX_Init(
puts( "\n\n*** POSIX SEMAPHORE MANAGER TEST 1 ***" ); puts( "\n\n*** POSIX SEMAPHORE MANAGER TEST 1 ***" );
puts( "Init: sem_init - UNSUCCESSFUL (EINVAL)" );
status = sem_init(NULL, 0, 1);
fatal_posix_service_status( status, -1, "sem_init error return status");
fatal_posix_service_status( errno, EINVAL, "sem_init errorno EINVAL" );
puts( "Init: sem_init - SUCCESSFUL" ); puts( "Init: sem_init - SUCCESSFUL" );
for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_SEMAPHORES; i++) { for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_SEMAPHORES; i++) {
status = sem_init(&sems[i], 0, i); status = sem_init(&sems[i], 0, i);
@@ -112,7 +118,8 @@ void *POSIX_Init(
puts( "Init: sem_timedwait - UNSUCCESSFUL (ETIMEDOUT)" ); puts( "Init: sem_timedwait - UNSUCCESSFUL (ETIMEDOUT)" );
status = sem_timedwait(&sems[2], &waittime); status = sem_timedwait(&sems[2], &waittime);
fatal_posix_service_status( status, -1, "sem_timedwait error return status"); fatal_posix_service_status( status, -1, "sem_timedwait error return status");
fatal_posix_service_status( errno, ETIMEDOUT, "sem_timedwait errno ETIMEDOUT"); fatal_posix_service_status(
errno, ETIMEDOUT, "sem_timedwait errno ETIMEDOUT");
/* /*
* To do this case, we must be blocking when we want the semaphore. * To do this case, we must be blocking when we want the semaphore.
@@ -148,18 +155,29 @@ void *POSIX_Init(
* Validate all sem_open return paths. * Validate all sem_open return paths.
*/ */
puts( "Init: sem_open - UNSUCCESSFUL (ENAMETOOLONG)" );
status = sem_open(Get_Too_Long_Name(), O_CREAT, 0777, 1 );
fatal_posix_service_status( status, -1, "sem_open error return status");
fatal_posix_service_status(
errno, ENAMETOOLONG, "sem_open errorno ENAMETOOLONG" );
puts( "Init: sem_open - sem1 SUCCESSFUL" ); puts( "Init: sem_open - sem1 SUCCESSFUL" );
n_sem1 = sem_open( "sem1", O_CREAT, 00777, 1 ); n_sem1 = sem_open( "sem1",O_CREAT, 0777, 1 );
assert( n_sem1 != SEM_FAILED ); assert( n_sem1 != SEM_FAILED );
puts( "Init: sem_destroy - named sem1 - EINVAL" );
status = sem_destroy(n_sem1);
fatal_posix_service_status( status, -1, "sem_destroy named semaphore");
fatal_posix_service_status( errno, EINVAL, "sem_destroy named semaphore");
puts( "Init: sem_open - Create an Existing sem (EEXIST)" ); puts( "Init: sem_open - Create an Existing sem (EEXIST)" );
n_sem2 = sem_open("sem1", O_CREAT | O_EXCL, 00777, 1); n_sem2 = sem_open("sem1", O_CREAT | O_EXCL, 0777, 1);
fatal_posix_service_status( fatal_posix_service_status(
(int) n_sem2, (int ) SEM_FAILED, "sem_open error return status" ); (int) n_sem2, (int ) SEM_FAILED, "sem_open error return status" );
fatal_posix_service_status( errno, EEXIST, "sem_open errno EEXIST"); fatal_posix_service_status( errno, EEXIST, "sem_open errno EEXIST");
puts( "Init: sem_open - Open new sem without create flag (ENOENT)" ); puts( "Init: sem_open - Open new sem without create flag (ENOENT)" );
n_sem2 = sem_open("sem3", O_EXCL, 00777, 1); n_sem2 = sem_open("sem3", O_EXCL, 0777, 1);
fatal_posix_service_status( fatal_posix_service_status(
(int) n_sem2, (int ) SEM_FAILED, "sem_open error return status" ); (int) n_sem2, (int ) SEM_FAILED, "sem_open error return status" );
fatal_posix_service_status( errno, ENOENT, "sem_open errno EEXIST"); fatal_posix_service_status( errno, ENOENT, "sem_open errno EEXIST");
@@ -198,7 +216,7 @@ void *POSIX_Init(
fatal_posix_service_status( status, 0, "sem_unlink locked semaphore"); fatal_posix_service_status( status, 0, "sem_unlink locked semaphore");
puts( "Init: sem_open - Reopen sem1 SUCCESSFUL with a different id" ); puts( "Init: sem_open - Reopen sem1 SUCCESSFUL with a different id" );
n_sem2 = sem_open( "sem1", O_CREAT | O_EXCL, 00777, 1); n_sem2 = sem_open( "sem1", O_CREAT | O_EXCL, 0777, 1);
assert( n_sem2 != SEM_FAILED ); assert( n_sem2 != SEM_FAILED );
assert( n_sem2 != n_sem1 ); assert( n_sem2 != n_sem1 );

View File

@@ -1,4 +1,5 @@
*** POSIX SEMAPHORE MANAGER TEST 1 *** *** POSIX SEMAPHORE MANAGER TEST 1 ***
Init: sem_init - UNSUCCESSFUL (EINVAL)
Init: sem_init - SUCCESSFUL Init: sem_init - SUCCESSFUL
Init: sem_init - UNSUCCESSFUL (ENOSPC) Init: sem_init - UNSUCCESSFUL (ENOSPC)
Init: sem_init - UNSUCCESSFUL (ENOSYS -- pshared not supported) Init: sem_init - UNSUCCESSFUL (ENOSYS -- pshared not supported)
@@ -18,7 +19,9 @@ Init: sem_timedwait - UNSUCCESSFUL (ETIMEDOUT)
Init: sem_timedwait - UNSUCCESSFUL (EINVAL) Init: sem_timedwait - UNSUCCESSFUL (EINVAL)
Init: sem_post - UNSUCCESSFUL (EINVAL) Init: sem_post - UNSUCCESSFUL (EINVAL)
Init: sem_destroy - SUCCESSFUL Init: sem_destroy - SUCCESSFUL
Init: sem_open - UNSUCCESSFUL (ENAMETOOLONG)
Init: sem_open - sem1 SUCCESSFUL Init: sem_open - sem1 SUCCESSFUL
Init: sem_destroy - named sem1 - EINVAL
Init: sem_open - Create an Existing sem (EEXIST) Init: sem_open - Create an Existing sem (EEXIST)
Init: sem_open - Open new sem without create flag (ENOENT) Init: sem_open - Open new sem without create flag (ENOENT)
Init: sem_wait on sem1 Init: sem_wait on sem1

View File

@@ -63,9 +63,11 @@ void StopTimer(
struct itimerspec *timerdata struct itimerspec *timerdata
) )
{ {
struct itimerspec prev;
timerdata->it_value.tv_sec = 0; timerdata->it_value.tv_sec = 0;
timerdata->it_value.tv_nsec = 0; timerdata->it_value.tv_nsec = 0;
if (timer_settime(timer_id,POSIX_TIMER_RELATIVE,timerdata,NULL) == -1) { if (timer_settime(timer_id,POSIX_TIMER_RELATIVE,timerdata,&prev) == -1) {
perror ("Error in timer setting\n"); perror ("Error in timer setting\n");
pthread_exit ((void *) -1); pthread_exit ((void *) -1);
} }
@@ -307,11 +309,11 @@ void *POSIX_Init (
pthread_mutexattr_t mutexattr; /* mutex attributes */ pthread_mutexattr_t mutexattr; /* mutex attributes */
pthread_condattr_t condattr; /* condition attributes */ pthread_condattr_t condattr; /* condition attributes */
pthread_attr_t attr; /* task attributes */ pthread_attr_t attr; /* task attributes */
pthread_t ta,tb,tc; /* threads */ pthread_t ta,tb,tc, tc1; /* threads */
sigset_t set; /* signals */ sigset_t set; /* signals */
struct sched_param sch_param; /* schedule parameters */ struct sched_param sch_param; /* schedule parameters */
struct periodic_params params_a, params_b, params_c; struct periodic_params params_a, params_b, params_c, params_c1;
puts( "\n\n*** POSIX Timers Test 01 ***" ); puts( "\n\n*** POSIX Timers Test 01 ***" );
@@ -412,9 +414,21 @@ void *POSIX_Init (
perror ("Error in thread create for task c\n"); perror ("Error in thread create for task c\n");
} }
/* execute 25 seconds and finish */ /* execute 25 seconds and finish */
sleep (25); sleep (25);
puts( "starting C again with 0.5 second periodicity" );
/* Temporal parameters (0.5 sec. periodicity) */
params_c1.period.tv_sec = 0; /* seconds */
params_c1.period.tv_nsec = 500000000; /* nanoseconds */
params_c1.count = 6;
params_c1.signo = SIGALRM;
if (pthread_create (&tc1, &attr, task_c, &params_c1) != 0) {
perror ("Error in thread create for task c1\n");
}
sleep(5);
puts( "*** END OF POSIX Timers Test 01 ***" ); puts( "*** END OF POSIX Timers Test 01 ***" );
rtems_test_exit (0); rtems_test_exit (0);
} }

View File

@@ -41,8 +41,8 @@ void *task_c(
#define CONFIGURE_POSIX_INIT_THREAD_TABLE #define CONFIGURE_POSIX_INIT_THREAD_TABLE
#define CONFIGURE_MAXIMUM_POSIX_THREADS 4 #define CONFIGURE_MAXIMUM_POSIX_THREADS 5
#define CONFIGURE_MAXIMUM_POSIX_TIMERS 4 #define CONFIGURE_MAXIMUM_POSIX_TIMERS 5
#define CONFIGURE_MAXIMUM_TIMERS 4 #define CONFIGURE_MAXIMUM_TIMERS 4
#define CONFIGURE_MAXIMUM_POSIX_MUTEXES 2 #define CONFIGURE_MAXIMUM_POSIX_MUTEXES 2
#define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES 2 #define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES 2

View File

@@ -103,6 +103,13 @@ void *POSIX_Init (
status = timer_settime( timer, TIMER_ABSTIME, &itimer, NULL ); status = timer_settime( timer, TIMER_ABSTIME, &itimer, NULL );
fatal_posix_service_status_errno( status, EINVAL, "bad itimer value #3" ); fatal_posix_service_status_errno( status, EINVAL, "bad itimer value #3" );
clock_gettime( CLOCK_REALTIME, &now );
itimer.it_value = now;
itimer.it_value.tv_sec = itimer.it_value.tv_sec + 1;
puts( "timer_settime - bad id - EINVAL" );
status = timer_settime( timer1, TIMER_ABSTIME, &itimer, NULL );
fatal_posix_service_status_errno( status, EINVAL, "bad id" );
itimer.it_value.tv_nsec = 0; itimer.it_value.tv_nsec = 0;
puts( "timer_settime - bad clock value - EINVAL" ); puts( "timer_settime - bad clock value - EINVAL" );
status = timer_settime( timer, 0x80, &itimer, NULL ); status = timer_settime( timer, 0x80, &itimer, NULL );