summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorabutterfield-ext <Andrew.Butterfield@scss.tcd.ie>2021-01-04 18:33:26 +0000
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-07-12 15:09:25 +0200
commit6510107e8905c22fbb6c21a4a656afc2708b591e (patch)
tree356424b8e552500477981efb096822f9828f4c13
parentd676f513e46a82b9aab1666ba5da043f4ed147ac (diff)
Factors out common boilerplate and passes all tests
-rw-r--r--spec/build/testsuites/validation/model-0.yml1
-rw-r--r--testsuites/validation/tc-model-events-mgr.c16
-rw-r--r--testsuites/validation/tr-model-events-mgr-0.c368
-rw-r--r--testsuites/validation/tr-model-events-mgr-1.c378
-rw-r--r--testsuites/validation/tr-model-events-mgr-2.c369
-rw-r--r--testsuites/validation/tr-model-events-mgr-3.c379
-rw-r--r--testsuites/validation/tr-model-events-mgr.c373
-rw-r--r--testsuites/validation/tr-model-events-mgr.h92
8 files changed, 421 insertions, 1555 deletions
diff --git a/spec/build/testsuites/validation/model-0.yml b/spec/build/testsuites/validation/model-0.yml
index 14b5b6c757..3d6d532159 100644
--- a/spec/build/testsuites/validation/model-0.yml
+++ b/spec/build/testsuites/validation/model-0.yml
@@ -13,6 +13,7 @@ links: []
source:
- testsuites/validation/ts-model-0.c
- testsuites/validation/tc-model-events-mgr.c
+- testsuites/validation/tr-model-events-mgr.c
- testsuites/validation/tr-model-events-mgr-0.c
- testsuites/validation/tr-model-events-mgr-1.c
- testsuites/validation/tr-model-events-mgr-2.c
diff --git a/testsuites/validation/tc-model-events-mgr.c b/testsuites/validation/tc-model-events-mgr.c
index 08097467db..2c4a0f8421 100644
--- a/testsuites/validation/tc-model-events-mgr.c
+++ b/testsuites/validation/tc-model-events-mgr.c
@@ -106,7 +106,7 @@ static rtems_event_set GetPendingEvents( Thread_Control *thread )
*/
T_TEST_CASE( RtemsModelEventsMgr0 )
{
- RtemsModelEventsMgr0_Run(
+ RtemsModelEventsMgr_Run0(
EventSend,
EventReceive,
GetPendingEvents,
@@ -117,7 +117,7 @@ T_TEST_CASE( RtemsModelEventsMgr0 )
T_TEST_CASE( RtemsModelEventsMgr1 )
{
- RtemsModelEventsMgr1_Run(
+ RtemsModelEventsMgr_Run1(
EventSend,
EventReceive,
GetPendingEvents,
@@ -128,7 +128,7 @@ T_TEST_CASE( RtemsModelEventsMgr1 )
T_TEST_CASE( RtemsModelEventsMgr2 )
{
- RtemsModelEventsMgr2_Run(
+ RtemsModelEventsMgr_Run2(
EventSend,
EventReceive,
GetPendingEvents,
@@ -139,7 +139,7 @@ T_TEST_CASE( RtemsModelEventsMgr2 )
T_TEST_CASE( RtemsModelEventsMgr3 )
{
- RtemsModelEventsMgr3_Run(
+ RtemsModelEventsMgr_Run3(
EventSend,
EventReceive,
GetPendingEvents,
@@ -203,7 +203,7 @@ static rtems_event_set GetPendingSystemEvents( Thread_Control *thread )
*/
T_TEST_CASE( RtemsModelSystemEventsMgr0 )
{
- RtemsModelEventsMgr0_Run(
+ RtemsModelEventsMgr_Run0(
EventSystemSend,
EventSystemReceive,
GetPendingSystemEvents,
@@ -214,7 +214,7 @@ T_TEST_CASE( RtemsModelSystemEventsMgr0 )
T_TEST_CASE( RtemsModelSystemEventsMgr1 )
{
- RtemsModelEventsMgr1_Run(
+ RtemsModelEventsMgr_Run1(
EventSystemSend,
EventSystemReceive,
GetPendingSystemEvents,
@@ -225,7 +225,7 @@ T_TEST_CASE( RtemsModelSystemEventsMgr1 )
T_TEST_CASE( RtemsModelSystemEventsMgr2 )
{
- RtemsModelEventsMgr2_Run(
+ RtemsModelEventsMgr_Run2(
EventSystemSend,
EventSystemReceive,
GetPendingSystemEvents,
@@ -236,7 +236,7 @@ T_TEST_CASE( RtemsModelSystemEventsMgr2 )
T_TEST_CASE( RtemsModelSystemEventsMgr3 )
{
- RtemsModelEventsMgr3_Run(
+ RtemsModelEventsMgr_Run3(
EventSystemSend,
EventSystemReceive,
GetPendingSystemEvents,
diff --git a/testsuites/validation/tr-model-events-mgr-0.c b/testsuites/validation/tr-model-events-mgr-0.c
index 960b11d521..726a76f8de 100644
--- a/testsuites/validation/tr-model-events-mgr-0.c
+++ b/testsuites/validation/tr-model-events-mgr-0.c
@@ -3,7 +3,7 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsModelEventsMgr0
+ * @ingroup RTEMSTestCaseRtemsModelEventsMgr
*/
/*
@@ -47,192 +47,8 @@
#include <rtems/score/threadimpl.h>
-#include "tr-model-events-mgr.h"
-
-#include <rtems/test.h>
-
-typedef enum {
- PRIO_HIGH = 1,
- PRIO_NORMAL,
- PRIO_LOW,
- PRIO_OTHER
-} Priorities;
-
-
-typedef struct {
- rtems_status_code ( *send )( rtems_id, rtems_event_set ); // copy of the
- // corresponding RtemsModelEventsMgr0_Run() parameter
- rtems_status_code ( *receive )
- ( rtems_event_set, rtems_option
- , rtems_interval, rtems_event_set * ); // copy of the
- // corresponding RtemsModelEventsMgr0_Run() parameter
- rtems_event_set ( *get_pending_events )( Thread_Control * ); // copy of the
- // corresponding RtemsModelEventsMgr0_Run() parameter
- unsigned int wait_class; // copy of the corresponding
- // RtemsModelEventsMgr0_Run() parameter
- int waiting_for_event; // copy of the corresponding
- // RtemsModelEventsMgr0_Run() parameter
- rtems_id receiver_id; // receiver ID used for the event send action.
- rtems_event_set events_to_send; // events to send for the event send action
- rtems_status_code send_status; // status of the event send action.
- rtems_option receive_option_set; // option set used for the event receive action
- rtems_interval receive_timeout; // timeout used for the event receive action
- rtems_event_set received_events; // events received by the event receive action
- rtems_status_code receive_status; // status of the event receive action
- rtems_event_set unsatisfied_pending; // pending events after an event send action
- // which did not satsify the event condition of the receiver
- Thread_Control *runner_thread; // TCB of the runner task
- rtems_id runner_id; // ID of the runner task
- rtems_id worker_id; // task ID of the worker task
- rtems_id worker_wakeup; // ID of the semaphore used to wake up the worker task
- rtems_id runner_wakeup; // ID of the semaphore used to wake up the runner task
- rtems_id runner_sched; // scheduler ID of scheduler used by the runner task
- rtems_id other_sched; // scheduler ID of another scheduler
- // which is not used by the runner task
- T_thread_switch_log_4 thread_switch_log; // thread switch log
-} RtemsModelEventsMgr0_Context;
-
-static RtemsModelEventsMgr0_Context
- RtemsModelEventsMgr0_Instance;
-
-static const char PromelaModelEventsMgr[] = "/PML-EventsMgr0";
-
-#define INPUT_EVENTS ( RTEMS_EVENT_5 | RTEMS_EVENT_23 )
-
-#define WORKER_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES
-
-#define MAX_TLS_SIZE RTEMS_ALIGN_UP( 64, RTEMS_TASK_STORAGE_ALIGNMENT )
-
-typedef RtemsModelEventsMgr0_Context Context;
-
-RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char WorkerStorage[
- RTEMS_TASK_STORAGE_SIZE(
- MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE,
- WORKER_ATTRIBUTES
- )
-];
-
-static const rtems_task_config WorkerConfig = {
- .name = rtems_build_name( 'W', 'O', 'R', 'K' ),
- .initial_priority = PRIO_LOW,
- .storage_area = WorkerStorage,
- .storage_size = sizeof( WorkerStorage ),
- .maximum_thread_local_storage_size = MAX_TLS_SIZE,
- .initial_modes = RTEMS_DEFAULT_MODES,
- .attributes = WORKER_ATTRIBUTES
-};
-static rtems_id CreateWakeupSema( void )
-{
- rtems_status_code sc;
- rtems_id id;
-
- sc = rtems_semaphore_create(
- rtems_build_name( 'W', 'K', 'U', 'P' ),
- 0,
- RTEMS_SIMPLE_BINARY_SEMAPHORE,
- 0,
- &id
- );
- T_assert_rsc_success( sc );
-
- return id;
-}
-
-static void DeleteWakeupSema( rtems_id id )
-{
- if ( id != 0 ) {
- rtems_status_code sc;
-
- sc = rtems_semaphore_delete( id );
- T_rsc_success( sc );
- }
-}
-
-static void Wait( rtems_id id )
-{
- rtems_status_code sc;
-
- sc = rtems_semaphore_obtain( id, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
- T_quiet_rsc_success( sc );
-}
-
-static void Wakeup( rtems_id id )
-{
- rtems_status_code sc;
-
- sc = rtems_semaphore_release( id );
- T_quiet_rsc_success( sc );
-}
-
-static rtems_event_set GetPendingEvents( Context *ctx )
-{
- rtems_event_set pending;
- rtems_status_code sc;
-
- sc = ( *ctx->receive )(
- RTEMS_PENDING_EVENTS,
- RTEMS_DEFAULT_OPTIONS,
- 0,
- &pending
- );
- T_quiet_rsc_success( sc );
-
- return pending;
-}
-
-
-static rtems_option mergeopts( bool wait, bool wantall )
-{
- rtems_option opts;
-
- if ( wait ) { opts = RTEMS_WAIT; }
- else { opts = RTEMS_NO_WAIT; } ;
- if ( wantall ) { opts |= RTEMS_EVENT_ALL; }
- else { opts |= RTEMS_EVENT_ANY; } ;
- return opts;
-}
-
-
-/*
- * Here we need a mapping from model "task numbers/names" to thread Id's here
- * Promela Process 3 corresponds to Task 0 (Worker), doing Send
- * Promela Process 4 corresponds to Task 1 (Runner), doing Receive
- */
-static rtems_id mapid( Context *ctx, int pid )
-{
- rtems_id mapped_id;
-
- switch ( pid ) {
- case 0 : mapped_id = ctx->worker_id ; break;
- case 1 : mapped_id = ctx->runner_id; break;
- default : mapped_id = 0xffffffff; break;
- }
- return mapped_id;
-}
-
-static void checkTaskIs( rtems_id expected_id )
-{
- rtems_id own_id;
-
- own_id = _Thread_Get_executing()->Object.id;
- T_eq_u32( own_id, expected_id );
-}
-
-static void initialise_pending( rtems_event_set pending[], int max )
-{
- int i;
-
- for( i=0; i < max; i++ ) {
- pending[i] = 0;
- }
-}
-
-static void initialise_semaphore( Context *ctx, rtems_id semaphore[] )
-{
- semaphore[0] = ctx->worker_wakeup;
- semaphore[1] = ctx->runner_wakeup;
-}
+#include "tr-model-events-mgr.h"
/* =============================================== */
@@ -284,11 +100,11 @@ static rtems_id semaphore[SEMA_MAX];
static void TestSegment0( Context* ctx ) {
/* Test Name is defined in the Test Case code (tc-model-events-mgr.c) */
-
+
T_log(T_NORMAL,"@@@ 0 INIT");
initialise_pending( pending, TASK_MAX );
initialise_semaphore( ctx, semaphore );
-
+
}
/* ===== TEST CODE SEGMENT 3 =====*/
@@ -298,17 +114,17 @@ static void TestSegment3( Context* ctx ) {
checkTaskIs( ctx->worker_id );
T_log(T_NORMAL,"@@@ 3 WAIT 0");
Wait( semaphore[0] );
-
- T_log(T_NORMAL,"@@@ 3 CALL event_send 0 1 14 sendrc");
- T_log( T_NORMAL, "Calling Send(%d,%d)", mapid( ctx, 1), 14 );
- sendrc = ( *ctx->send )( mapid( ctx, 1 ), 14 );
+
+ T_log(T_NORMAL,"@@@ 3 CALL event_send 0 2 10 sendrc");
+ T_log( T_NORMAL, "Calling Send(%d,%d)", mapid( ctx, 2), 10 );
+ sendrc = ( *ctx->send )( mapid( ctx, 2 ), 10 );
T_log( T_NORMAL, "Returned 0x%x from Send", sendrc );
-
- T_log(T_NORMAL,"@@@ 3 SCALAR sendrc 0");
- T_rsc_success( sendrc );
+
+ T_log(T_NORMAL,"@@@ 3 SCALAR sendrc 4");
+ T_rsc( sendrc, 4 );
T_log(T_NORMAL,"@@@ 3 SIGNAL 1");
Wakeup( semaphore[1] );
-
+
T_log(T_NORMAL,"@@@ 3 STATE 0 Zombie");
/* Code to check that Task 0 has terminated */
}
@@ -320,30 +136,13 @@ static void TestSegment4( Context* ctx ) {
checkTaskIs( ctx->runner_id );
T_log(T_NORMAL,"@@@ 4 SIGNAL 0");
Wakeup( semaphore[0] );
-
+
T_log(T_NORMAL,"@@@ 4 WAIT 1");
Wait( semaphore[1] );
-
- T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 14");
- pending[1] = GetPendingEvents( ctx );
- T_eq_int( pending[1], 14 );
-
- T_log(T_NORMAL,"@@@ 4 CALL event_receive 10 1 1 0 recout recrc");
- T_log( T_NORMAL, "Calling Receive(%d,%d,%d,%d)", 10, mergeopts( 1, 1 ) ,0 ,&recout );
- recrc = ( *ctx->receive )( 10, mergeopts( 1, 1 ), 0, &recout );
- T_log( T_NORMAL, "Returned 0x%x from Receive", recrc );
-
- T_log(T_NORMAL,"@@@ 4 SCALAR recrc 0");
- T_rsc_success( recrc );
- T_log(T_NORMAL,"@@@ 4 SCALAR recout 10");
- T_eq_int( recout, 10 );
- T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 4");
- pending[1] = GetPendingEvents( ctx );
- T_eq_int( pending[1], 4 );
-
+
T_log(T_NORMAL,"@@@ 4 SIGNAL 0");
Wakeup( semaphore[0] );
-
+
T_log(T_NORMAL,"@@@ 4 STATE 1 Zombie");
/* Code to check that Task 1 has terminated */
}
@@ -351,7 +150,15 @@ static void TestSegment4( Context* ctx ) {
/* =============================================== */
-static void Worker( rtems_task_argument arg )
+
+static void Runner( RtemsModelEventsMgr_Context *ctx )
+{
+ T_log( T_NORMAL, "Runner running" );
+ TestSegment4( ctx );
+ T_log( T_NORMAL, "Runner finished" );
+}
+
+static void Worker0( rtems_task_argument arg )
{
Context *ctx;
@@ -365,17 +172,26 @@ static void Worker( rtems_task_argument arg )
}
+RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char WorkerStorage0[
+ RTEMS_TASK_STORAGE_SIZE(
+ MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE,
+ WORKER_ATTRIBUTES
+ )
+];
-static void Runner( RtemsModelEventsMgr0_Context *ctx )
-{
- T_log( T_NORMAL, "Runner running" );
- TestSegment4( ctx );
- T_log( T_NORMAL, "Runner finished" );
-}
+static const rtems_task_config WorkerConfig0 = {
+ .name = rtems_build_name( 'W', 'O', 'R', 'K' ),
+ .initial_priority = PRIO_LOW,
+ .storage_area = WorkerStorage0,
+ .storage_size = sizeof( WorkerStorage0 ),
+ .maximum_thread_local_storage_size = MAX_TLS_SIZE,
+ .initial_modes = RTEMS_DEFAULT_MODES,
+ .attributes = WORKER_ATTRIBUTES
+};
-static void RtemsModelEventsMgr0_Setup(
- RtemsModelEventsMgr0_Context *ctx
+static void RtemsModelEventsMgr_Setup0(
+ RtemsModelEventsMgr_Context *ctx
)
{
rtems_status_code sc;
@@ -403,99 +219,39 @@ static void RtemsModelEventsMgr0_Setup(
T_rsc_success( sc );
T_eq_u32( prio, PRIO_HIGH );
- sc = rtems_task_construct( &WorkerConfig, &ctx->worker_id );
+ sc = rtems_task_construct( &WorkerConfig0, &ctx->worker_id );
T_log( T_NORMAL, "Construct Worker, sc = %x", sc );
T_assert_rsc_success( sc );
T_log( T_NORMAL, "Starting Worker..." );
- sc = rtems_task_start( ctx->worker_id, Worker, (rtems_task_argument) ctx );
+ sc = rtems_task_start( ctx->worker_id, Worker0, (rtems_task_argument) ctx );
T_log( T_NORMAL, "Started Worker, sc = %x", sc );
T_assert_rsc_success( sc );
}
-static void RtemsModelEventsMgr0_Setup_Wrap( void *arg )
-{
- RtemsModelEventsMgr0_Context *ctx;
-
- ctx = arg;
- RtemsModelEventsMgr0_Setup( ctx );
-}
-
-static void RtemsModelEventsMgr0_Teardown(
- RtemsModelEventsMgr0_Context *ctx
-)
-{
- rtems_status_code sc;
- rtems_task_priority prio;
-
- T_log( T_NORMAL, "Runner Teardown" );
-
- prio = 0;
- sc = rtems_task_set_priority( RTEMS_SELF, PRIO_HIGH, &prio );
- T_rsc_success( sc );
- T_eq_u32( prio, PRIO_NORMAL );
-
- if ( ctx->worker_id != 0 ) {
- sc = rtems_task_delete( ctx->worker_id );
- T_rsc_success( sc );
- }
- DeleteWakeupSema( ctx->worker_wakeup );
- DeleteWakeupSema( ctx->runner_wakeup );
-}
-
-static void RtemsModelEventsMgr0_Teardown_Wrap( void *arg )
+static void RtemsModelEventsMgr_Setup_Wrap0( void *arg )
{
- RtemsModelEventsMgr0_Context *ctx;
+ RtemsModelEventsMgr_Context *ctx;
ctx = arg;
- RtemsModelEventsMgr0_Teardown( ctx );
+ RtemsModelEventsMgr_Setup0( ctx );
}
-static size_t RtemsModelEventsMgr0_Scope( void *arg, char *buf, size_t n )
-{
- size_t pme_size;
- pme_size = strlen(PromelaModelEventsMgr);
- return T_str_copy(buf, PromelaModelEventsMgr, pme_size);
-}
+static RtemsModelEventsMgr_Context RtemsModelEventsMgr_Instance0;
-static T_fixture RtemsModelEventsMgr0_Fixture = {
- .setup = RtemsModelEventsMgr0_Setup_Wrap,
+static T_fixture RtemsModelEventsMgr_Fixture0 = {
+ .setup = RtemsModelEventsMgr_Setup_Wrap0,
.stop = NULL,
- .teardown = RtemsModelEventsMgr0_Teardown_Wrap,
- .scope = RtemsModelEventsMgr0_Scope,
- .initial_context = &RtemsModelEventsMgr0_Instance
+ .teardown = RtemsModelEventsMgr_Teardown_Wrap,
+ .scope = RtemsModelEventsMgr_Scope,
+ .initial_context = &RtemsModelEventsMgr_Instance0
};
+static T_fixture_node RtemsModelEventsMgr_Node0;
-
-static void RtemsModelEventsMgr0_Cleanup(
- RtemsModelEventsMgr0_Context *ctx
-)
-{
- rtems_status_code sc;
- rtems_event_set events;
-
- events = 0;
- sc = ( *ctx->receive )(
- RTEMS_ALL_EVENTS,
- RTEMS_NO_WAIT | RTEMS_EVENT_ANY,
- 0,
- &events
- );
- if ( sc == RTEMS_SUCCESSFUL ) {
- T_quiet_ne_u32( events, 0 );
- } else {
- T_quiet_rsc( sc, RTEMS_UNSATISFIED );
- T_quiet_eq_u32( events, 0 );
- }
-}
-
-
-static T_fixture_node RtemsModelEventsMgr0_Node;
-
-void RtemsModelEventsMgr0_Run(
+void RtemsModelEventsMgr_Run0(
rtems_status_code ( *send )( rtems_id, rtems_event_set ),
rtems_status_code ( *receive )( rtems_event_set, rtems_option, rtems_interval, rtems_event_set * ),
rtems_event_set ( *get_pending_events )( Thread_Control * ),
@@ -503,7 +259,7 @@ void RtemsModelEventsMgr0_Run(
int waiting_for_event
)
{
- RtemsModelEventsMgr0_Context *ctx;
+ RtemsModelEventsMgr_Context *ctx;
T_set_verbosity( T_NORMAL );
@@ -513,20 +269,24 @@ void RtemsModelEventsMgr0_Run(
T_log( T_NORMAL, "Pushing Test Fixture..." );
+
ctx = T_push_fixture(
- &RtemsModelEventsMgr0_Node,
- &RtemsModelEventsMgr0_Fixture
+ &RtemsModelEventsMgr_Node0,
+ &RtemsModelEventsMgr_Fixture0
);
T_log( T_NORMAL, "Test Fixture Pushed" );
+
ctx->send = send;
ctx->receive = receive;
ctx->get_pending_events = get_pending_events;
ctx->wait_class = wait_class;
ctx->waiting_for_event = waiting_for_event;
- // RtemsModelEventsMgr0_Prepare( ctx );
+ ctx->this_test_number = 0;
+
+ // RtemsModelEventsMgr_Prepare( ctx );
ctx->events_to_send = 0;
ctx->send_status = RTEMS_INCORRECT_STATE;
ctx->received_events = 0xffffffff;
@@ -534,14 +294,14 @@ void RtemsModelEventsMgr0_Run(
ctx->receive_timeout = RTEMS_NO_TIMEOUT;
ctx->unsatisfied_pending = 0xffffffff;
memset( &ctx->thread_switch_log, 0, sizeof( ctx->thread_switch_log ) );
- T_eq_u32( GetPendingEvents( ctx ), 0 );
+ T_eq_u32( GetPending( ctx ), 0 );
_Thread_Wait_flags_set( ctx->runner_thread, THREAD_WAIT_FLAGS_INITIAL );
TestSegment0( ctx );
Runner( ctx );
- RtemsModelEventsMgr0_Cleanup( ctx );
+ RtemsModelEventsMgr_Cleanup( ctx );
T_log( T_NORMAL, "Run Pop Fixture" );
T_pop_fixture();
diff --git a/testsuites/validation/tr-model-events-mgr-1.c b/testsuites/validation/tr-model-events-mgr-1.c
index 99d2697711..7896f5574f 100644
--- a/testsuites/validation/tr-model-events-mgr-1.c
+++ b/testsuites/validation/tr-model-events-mgr-1.c
@@ -3,7 +3,7 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsModelEventsMgr1
+ * @ingroup RTEMSTestCaseRtemsModelEventsMgr
*/
/*
@@ -47,192 +47,8 @@
#include <rtems/score/threadimpl.h>
-#include "tr-model-events-mgr.h"
-
-#include <rtems/test.h>
-
-typedef enum {
- PRIO_HIGH = 1,
- PRIO_NORMAL,
- PRIO_LOW,
- PRIO_OTHER
-} Priorities;
-
-
-typedef struct {
- rtems_status_code ( *send )( rtems_id, rtems_event_set ); // copy of the
- // corresponding RtemsModelEventsMgr1_Run() parameter
- rtems_status_code ( *receive )
- ( rtems_event_set, rtems_option
- , rtems_interval, rtems_event_set * ); // copy of the
- // corresponding RtemsModelEventsMgr1_Run() parameter
- rtems_event_set ( *get_pending_events )( Thread_Control * ); // copy of the
- // corresponding RtemsModelEventsMgr1_Run() parameter
- unsigned int wait_class; // copy of the corresponding
- // RtemsModelEventsMgr1_Run() parameter
- int waiting_for_event; // copy of the corresponding
- // RtemsModelEventsMgr1_Run() parameter
- rtems_id receiver_id; // receiver ID used for the event send action.
- rtems_event_set events_to_send; // events to send for the event send action
- rtems_status_code send_status; // status of the event send action.
- rtems_option receive_option_set; // option set used for the event receive action
- rtems_interval receive_timeout; // timeout used for the event receive action
- rtems_event_set received_events; // events received by the event receive action
- rtems_status_code receive_status; // status of the event receive action
- rtems_event_set unsatisfied_pending; // pending events after an event send action
- // which did not satsify the event condition of the receiver
- Thread_Control *runner_thread; // TCB of the runner task
- rtems_id runner_id; // ID of the runner task
- rtems_id worker_id; // task ID of the worker task
- rtems_id worker_wakeup; // ID of the semaphore used to wake up the worker task
- rtems_id runner_wakeup; // ID of the semaphore used to wake up the runner task
- rtems_id runner_sched; // scheduler ID of scheduler used by the runner task
- rtems_id other_sched; // scheduler ID of another scheduler
- // which is not used by the runner task
- T_thread_switch_log_4 thread_switch_log; // thread switch log
-} RtemsModelEventsMgr1_Context;
-
-static RtemsModelEventsMgr1_Context
- RtemsModelEventsMgr1_Instance;
-
-static const char PromelaModelEventsMgr[] = "/PML-EventsMgr1";
-
-#define INPUT_EVENTS ( RTEMS_EVENT_5 | RTEMS_EVENT_23 )
-
-#define WORKER_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES
-
-#define MAX_TLS_SIZE RTEMS_ALIGN_UP( 64, RTEMS_TASK_STORAGE_ALIGNMENT )
-
-typedef RtemsModelEventsMgr1_Context Context;
-
-RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char WorkerStorage[
- RTEMS_TASK_STORAGE_SIZE(
- MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE,
- WORKER_ATTRIBUTES
- )
-];
-
-static const rtems_task_config WorkerConfig = {
- .name = rtems_build_name( 'W', 'O', 'R', 'K' ),
- .initial_priority = PRIO_LOW,
- .storage_area = WorkerStorage,
- .storage_size = sizeof( WorkerStorage ),
- .maximum_thread_local_storage_size = MAX_TLS_SIZE,
- .initial_modes = RTEMS_DEFAULT_MODES,
- .attributes = WORKER_ATTRIBUTES
-};
-static rtems_id CreateWakeupSema( void )
-{
- rtems_status_code sc;
- rtems_id id;
-
- sc = rtems_semaphore_create(
- rtems_build_name( 'W', 'K', 'U', 'P' ),
- 0,
- RTEMS_SIMPLE_BINARY_SEMAPHORE,
- 0,
- &id
- );
- T_assert_rsc_success( sc );
-
- return id;
-}
-
-static void DeleteWakeupSema( rtems_id id )
-{
- if ( id != 0 ) {
- rtems_status_code sc;
-
- sc = rtems_semaphore_delete( id );
- T_rsc_success( sc );
- }
-}
-
-static void Wait( rtems_id id )
-{
- rtems_status_code sc;
-
- sc = rtems_semaphore_obtain( id, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
- T_quiet_rsc_success( sc );
-}
-
-static void Wakeup( rtems_id id )
-{
- rtems_status_code sc;
-
- sc = rtems_semaphore_release( id );
- T_quiet_rsc_success( sc );
-}
-
-static rtems_event_set GetPendingEvents( Context *ctx )
-{
- rtems_event_set pending;
- rtems_status_code sc;
-
- sc = ( *ctx->receive )(
- RTEMS_PENDING_EVENTS,
- RTEMS_DEFAULT_OPTIONS,
- 0,
- &pending
- );
- T_quiet_rsc_success( sc );
-
- return pending;
-}
-
-
-static rtems_option mergeopts( bool wait, bool wantall )
-{
- rtems_option opts;
-
- if ( wait ) { opts = RTEMS_WAIT; }
- else { opts = RTEMS_NO_WAIT; } ;
- if ( wantall ) { opts |= RTEMS_EVENT_ALL; }
- else { opts |= RTEMS_EVENT_ANY; } ;
- return opts;
-}
-
-
-/*
- * Here we need a mapping from model "task numbers/names" to thread Id's here
- * Promela Process 3 corresponds to Task 0 (Worker), doing Send
- * Promela Process 4 corresponds to Task 1 (Runner), doing Receive
- */
-static rtems_id mapid( Context *ctx, int pid )
-{
- rtems_id mapped_id;
-
- switch ( pid ) {
- case 0 : mapped_id = ctx->worker_id ; break;
- case 1 : mapped_id = ctx->runner_id; break;
- default : mapped_id = 0xffffffff; break;
- }
- return mapped_id;
-}
-
-static void checkTaskIs( rtems_id expected_id )
-{
- rtems_id own_id;
-
- own_id = _Thread_Get_executing()->Object.id;
- T_eq_u32( own_id, expected_id );
-}
-
-static void initialise_pending( rtems_event_set pending[], int max )
-{
- int i;
-
- for( i=0; i < max; i++ ) {
- pending[i] = 0;
- }
-}
-
-static void initialise_semaphore( Context *ctx, rtems_id semaphore[] )
-{
- semaphore[0] = ctx->worker_wakeup;
- semaphore[1] = ctx->runner_wakeup;
-}
+#include "tr-model-events-mgr.h"
/* =============================================== */
@@ -284,11 +100,11 @@ static rtems_id semaphore[SEMA_MAX];
static void TestSegment0( Context* ctx ) {
/* Test Name is defined in the Test Case code (tc-model-events-mgr.c) */
-
+
T_log(T_NORMAL,"@@@ 0 INIT");
initialise_pending( pending, TASK_MAX );
initialise_semaphore( ctx, semaphore );
-
+
}
/* ===== TEST CODE SEGMENT 3 =====*/
@@ -298,17 +114,10 @@ static void TestSegment3( Context* ctx ) {
checkTaskIs( ctx->worker_id );
T_log(T_NORMAL,"@@@ 3 WAIT 0");
Wait( semaphore[0] );
-
- T_log(T_NORMAL,"@@@ 3 CALL event_send 0 1 14 sendrc");
- T_log( T_NORMAL, "Calling Send(%d,%d)", mapid( ctx, 1), 14 );
- sendrc = ( *ctx->send )( mapid( ctx, 1 ), 14 );
- T_log( T_NORMAL, "Returned 0x%x from Send", sendrc );
-
- T_log(T_NORMAL,"@@@ 3 SCALAR sendrc 0");
- T_rsc_success( sendrc );
+
T_log(T_NORMAL,"@@@ 3 SIGNAL 1");
Wakeup( semaphore[1] );
-
+
T_log(T_NORMAL,"@@@ 3 STATE 0 Zombie");
/* Code to check that Task 0 has terminated */
}
@@ -320,30 +129,30 @@ static void TestSegment4( Context* ctx ) {
checkTaskIs( ctx->runner_id );
T_log(T_NORMAL,"@@@ 4 SIGNAL 0");
Wakeup( semaphore[0] );
-
+
T_log(T_NORMAL,"@@@ 4 WAIT 1");
Wait( semaphore[1] );
-
- T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 14");
- pending[1] = GetPendingEvents( ctx );
- T_eq_int( pending[1], 14 );
-
- T_log(T_NORMAL,"@@@ 4 CALL event_receive 6 1 1 0 recout recrc");
- T_log( T_NORMAL, "Calling Receive(%d,%d,%d,%d)", 6, mergeopts( 1, 1 ) ,0 ,&recout );
- recrc = ( *ctx->receive )( 6, mergeopts( 1, 1 ), 0, &recout );
+
+ T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 0");
+ pending[1] = GetPending( ctx );
+ T_eq_int( pending[1], 0 );
+
+ T_log(T_NORMAL,"@@@ 4 CALL event_receive 10 0 1 0 recout recrc");
+ T_log( T_NORMAL, "Calling Receive(%d,%d,%d,%d)", 10, mergeopts( 0, 1 ) ,0 ,&recout );
+ recrc = ( *ctx->receive )( 10, mergeopts( 0, 1 ), 0, &recout );
T_log( T_NORMAL, "Returned 0x%x from Receive", recrc );
-
- T_log(T_NORMAL,"@@@ 4 SCALAR recrc 0");
- T_rsc_success( recrc );
- T_log(T_NORMAL,"@@@ 4 SCALAR recout 6");
- T_eq_int( recout, 6 );
- T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 8");
- pending[1] = GetPendingEvents( ctx );
- T_eq_int( pending[1], 8 );
-
+
+ T_log(T_NORMAL,"@@@ 4 SCALAR recrc 13");
+ T_rsc( recrc, 13 );
+ T_log(T_NORMAL,"@@@ 4 SCALAR recout 0");
+ T_eq_int( recout, 0 );
+ T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 0");
+ pending[1] = GetPending( ctx );
+ T_eq_int( pending[1], 0 );
+
T_log(T_NORMAL,"@@@ 4 SIGNAL 0");
Wakeup( semaphore[0] );
-
+
T_log(T_NORMAL,"@@@ 4 STATE 1 Zombie");
/* Code to check that Task 1 has terminated */
}
@@ -351,7 +160,15 @@ static void TestSegment4( Context* ctx ) {
/* =============================================== */
-static void Worker( rtems_task_argument arg )
+
+static void Runner( RtemsModelEventsMgr_Context *ctx )
+{
+ T_log( T_NORMAL, "Runner running" );
+ TestSegment4( ctx );
+ T_log( T_NORMAL, "Runner finished" );
+}
+
+static void Worker1( rtems_task_argument arg )
{
Context *ctx;
@@ -365,17 +182,26 @@ static void Worker( rtems_task_argument arg )
}
+RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char WorkerStorage1[
+ RTEMS_TASK_STORAGE_SIZE(
+ MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE,
+ WORKER_ATTRIBUTES
+ )
+];
-static void Runner( RtemsModelEventsMgr1_Context *ctx )
-{
- T_log( T_NORMAL, "Runner running" );
- TestSegment4( ctx );
- T_log( T_NORMAL, "Runner finished" );
-}
+static const rtems_task_config WorkerConfig1 = {
+ .name = rtems_build_name( 'W', 'O', 'R', 'K' ),
+ .initial_priority = PRIO_LOW,
+ .storage_area = WorkerStorage1,
+ .storage_size = sizeof( WorkerStorage1 ),
+ .maximum_thread_local_storage_size = MAX_TLS_SIZE,
+ .initial_modes = RTEMS_DEFAULT_MODES,
+ .attributes = WORKER_ATTRIBUTES
+};
-static void RtemsModelEventsMgr1_Setup(
- RtemsModelEventsMgr1_Context *ctx
+static void RtemsModelEventsMgr_Setup1(
+ RtemsModelEventsMgr_Context *ctx
)
{
rtems_status_code sc;
@@ -403,99 +229,39 @@ static void RtemsModelEventsMgr1_Setup(
T_rsc_success( sc );
T_eq_u32( prio, PRIO_HIGH );
- sc = rtems_task_construct( &WorkerConfig, &ctx->worker_id );
+ sc = rtems_task_construct( &WorkerConfig1, &ctx->worker_id );
T_log( T_NORMAL, "Construct Worker, sc = %x", sc );
T_assert_rsc_success( sc );
T_log( T_NORMAL, "Starting Worker..." );
- sc = rtems_task_start( ctx->worker_id, Worker, (rtems_task_argument) ctx );
+ sc = rtems_task_start( ctx->worker_id, Worker1, (rtems_task_argument) ctx );
T_log( T_NORMAL, "Started Worker, sc = %x", sc );
T_assert_rsc_success( sc );
}
-static void RtemsModelEventsMgr1_Setup_Wrap( void *arg )
-{
- RtemsModelEventsMgr1_Context *ctx;
-
- ctx = arg;
- RtemsModelEventsMgr1_Setup( ctx );
-}
-
-static void RtemsModelEventsMgr1_Teardown(
- RtemsModelEventsMgr1_Context *ctx
-)
-{
- rtems_status_code sc;
- rtems_task_priority prio;
-
- T_log( T_NORMAL, "Runner Teardown" );
-
- prio = 0;
- sc = rtems_task_set_priority( RTEMS_SELF, PRIO_HIGH, &prio );
- T_rsc_success( sc );
- T_eq_u32( prio, PRIO_NORMAL );
-
- if ( ctx->worker_id != 0 ) {
- sc = rtems_task_delete( ctx->worker_id );
- T_rsc_success( sc );
- }
- DeleteWakeupSema( ctx->worker_wakeup );
- DeleteWakeupSema( ctx->runner_wakeup );
-}
-
-static void RtemsModelEventsMgr1_Teardown_Wrap( void *arg )
+static void RtemsModelEventsMgr_Setup_Wrap1( void *arg )
{
- RtemsModelEventsMgr1_Context *ctx;
+ RtemsModelEventsMgr_Context *ctx;
ctx = arg;
- RtemsModelEventsMgr1_Teardown( ctx );
+ RtemsModelEventsMgr_Setup1( ctx );
}
-static size_t RtemsModelEventsMgr1_Scope( void *arg, char *buf, size_t n )
-{
- size_t pme_size;
- pme_size = strlen(PromelaModelEventsMgr);
- return T_str_copy(buf, PromelaModelEventsMgr, pme_size);
-}
+static RtemsModelEventsMgr_Context RtemsModelEventsMgr_Instance1;
-static T_fixture RtemsModelEventsMgr1_Fixture = {
- .setup = RtemsModelEventsMgr1_Setup_Wrap,
+static T_fixture RtemsModelEventsMgr_Fixture1 = {
+ .setup = RtemsModelEventsMgr_Setup_Wrap1,
.stop = NULL,
- .teardown = RtemsModelEventsMgr1_Teardown_Wrap,
- .scope = RtemsModelEventsMgr1_Scope,
- .initial_context = &RtemsModelEventsMgr1_Instance
+ .teardown = RtemsModelEventsMgr_Teardown_Wrap,
+ .scope = RtemsModelEventsMgr_Scope,
+ .initial_context = &RtemsModelEventsMgr_Instance1
};
+static T_fixture_node RtemsModelEventsMgr_Node1;
-
-static void RtemsModelEventsMgr1_Cleanup(
- RtemsModelEventsMgr1_Context *ctx
-)
-{
- rtems_status_code sc;
- rtems_event_set events;
-
- events = 0;
- sc = ( *ctx->receive )(
- RTEMS_ALL_EVENTS,
- RTEMS_NO_WAIT | RTEMS_EVENT_ANY,
- 0,
- &events
- );
- if ( sc == RTEMS_SUCCESSFUL ) {
- T_quiet_ne_u32( events, 0 );
- } else {
- T_quiet_rsc( sc, RTEMS_UNSATISFIED );
- T_quiet_eq_u32( events, 0 );
- }
-}
-
-
-static T_fixture_node RtemsModelEventsMgr1_Node;
-
-void RtemsModelEventsMgr1_Run(
+void RtemsModelEventsMgr_Run1(
rtems_status_code ( *send )( rtems_id, rtems_event_set ),
rtems_status_code ( *receive )( rtems_event_set, rtems_option, rtems_interval, rtems_event_set * ),
rtems_event_set ( *get_pending_events )( Thread_Control * ),
@@ -503,7 +269,7 @@ void RtemsModelEventsMgr1_Run(
int waiting_for_event
)
{
- RtemsModelEventsMgr1_Context *ctx;
+ RtemsModelEventsMgr_Context *ctx;
T_set_verbosity( T_NORMAL );
@@ -513,20 +279,24 @@ void RtemsModelEventsMgr1_Run(
T_log( T_NORMAL, "Pushing Test Fixture..." );
+
ctx = T_push_fixture(
- &RtemsModelEventsMgr1_Node,
- &RtemsModelEventsMgr1_Fixture
+ &RtemsModelEventsMgr_Node1,
+ &RtemsModelEventsMgr_Fixture1
);
T_log( T_NORMAL, "Test Fixture Pushed" );
+
ctx->send = send;
ctx->receive = receive;
ctx->get_pending_events = get_pending_events;
ctx->wait_class = wait_class;
ctx->waiting_for_event = waiting_for_event;
- // RtemsModelEventsMgr1_Prepare( ctx );
+ ctx->this_test_number = 1;
+
+ // RtemsModelEventsMgr_Prepare( ctx );
ctx->events_to_send = 0;
ctx->send_status = RTEMS_INCORRECT_STATE;
ctx->received_events = 0xffffffff;
@@ -534,14 +304,14 @@ void RtemsModelEventsMgr1_Run(
ctx->receive_timeout = RTEMS_NO_TIMEOUT;
ctx->unsatisfied_pending = 0xffffffff;
memset( &ctx->thread_switch_log, 0, sizeof( ctx->thread_switch_log ) );
- T_eq_u32( GetPendingEvents( ctx ), 0 );
+ T_eq_u32( GetPending( ctx ), 0 );
_Thread_Wait_flags_set( ctx->runner_thread, THREAD_WAIT_FLAGS_INITIAL );
TestSegment0( ctx );
Runner( ctx );
- RtemsModelEventsMgr1_Cleanup( ctx );
+ RtemsModelEventsMgr_Cleanup( ctx );
T_log( T_NORMAL, "Run Pop Fixture" );
T_pop_fixture();
diff --git a/testsuites/validation/tr-model-events-mgr-2.c b/testsuites/validation/tr-model-events-mgr-2.c
index 9ebc89e108..eeeabb32c5 100644
--- a/testsuites/validation/tr-model-events-mgr-2.c
+++ b/testsuites/validation/tr-model-events-mgr-2.c
@@ -3,7 +3,7 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsModelEventsMgr2
+ * @ingroup RTEMSTestCaseRtemsModelEventsMgr
*/
/*
@@ -47,192 +47,8 @@
#include <rtems/score/threadimpl.h>
-#include "tr-model-events-mgr.h"
-
-#include <rtems/test.h>
-
-typedef enum {
- PRIO_HIGH = 1,
- PRIO_NORMAL,
- PRIO_LOW,
- PRIO_OTHER
-} Priorities;
-
-
-typedef struct {
- rtems_status_code ( *send )( rtems_id, rtems_event_set ); // copy of the
- // corresponding RtemsModelEventsMgr2_Run() parameter
- rtems_status_code ( *receive )
- ( rtems_event_set, rtems_option
- , rtems_interval, rtems_event_set * ); // copy of the
- // corresponding RtemsModelEventsMgr2_Run() parameter
- rtems_event_set ( *get_pending_events )( Thread_Control * ); // copy of the
- // corresponding RtemsModelEventsMgr2_Run() parameter
- unsigned int wait_class; // copy of the corresponding
- // RtemsModelEventsMgr2_Run() parameter
- int waiting_for_event; // copy of the corresponding
- // RtemsModelEventsMgr2_Run() parameter
- rtems_id receiver_id; // receiver ID used for the event send action.
- rtems_event_set events_to_send; // events to send for the event send action
- rtems_status_code send_status; // status of the event send action.
- rtems_option receive_option_set; // option set used for the event receive action
- rtems_interval receive_timeout; // timeout used for the event receive action
- rtems_event_set received_events; // events received by the event receive action
- rtems_status_code receive_status; // status of the event receive action
- rtems_event_set unsatisfied_pending; // pending events after an event send action
- // which did not satsify the event condition of the receiver
- Thread_Control *runner_thread; // TCB of the runner task
- rtems_id runner_id; // ID of the runner task
- rtems_id worker_id; // task ID of the worker task
- rtems_id worker_wakeup; // ID of the semaphore used to wake up the worker task
- rtems_id runner_wakeup; // ID of the semaphore used to wake up the runner task
- rtems_id runner_sched; // scheduler ID of scheduler used by the runner task
- rtems_id other_sched; // scheduler ID of another scheduler
- // which is not used by the runner task
- T_thread_switch_log_4 thread_switch_log; // thread switch log
-} RtemsModelEventsMgr2_Context;
-
-static RtemsModelEventsMgr2_Context
- RtemsModelEventsMgr2_Instance;
-
-static const char PromelaModelEventsMgr[] = "/PML-EventsMgr2";
-
-#define INPUT_EVENTS ( RTEMS_EVENT_5 | RTEMS_EVENT_23 )
-
-#define WORKER_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES
-
-#define MAX_TLS_SIZE RTEMS_ALIGN_UP( 64, RTEMS_TASK_STORAGE_ALIGNMENT )
-
-typedef RtemsModelEventsMgr2_Context Context;
-
-RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char WorkerStorage[
- RTEMS_TASK_STORAGE_SIZE(
- MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE,
- WORKER_ATTRIBUTES
- )
-];
-
-static const rtems_task_config WorkerConfig = {
- .name = rtems_build_name( 'W', 'O', 'R', 'K' ),
- .initial_priority = PRIO_LOW,
- .storage_area = WorkerStorage,
- .storage_size = sizeof( WorkerStorage ),
- .maximum_thread_local_storage_size = MAX_TLS_SIZE,
- .initial_modes = RTEMS_DEFAULT_MODES,
- .attributes = WORKER_ATTRIBUTES
-};
-static rtems_id CreateWakeupSema( void )
-{
- rtems_status_code sc;
- rtems_id id;
-
- sc = rtems_semaphore_create(
- rtems_build_name( 'W', 'K', 'U', 'P' ),
- 0,
- RTEMS_SIMPLE_BINARY_SEMAPHORE,
- 0,
- &id
- );
- T_assert_rsc_success( sc );
-
- return id;
-}
-
-static void DeleteWakeupSema( rtems_id id )
-{
- if ( id != 0 ) {
- rtems_status_code sc;
-
- sc = rtems_semaphore_delete( id );
- T_rsc_success( sc );
- }
-}
-
-static void Wait( rtems_id id )
-{
- rtems_status_code sc;
-
- sc = rtems_semaphore_obtain( id, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
- T_quiet_rsc_success( sc );
-}
-
-static void Wakeup( rtems_id id )
-{
- rtems_status_code sc;
-
- sc = rtems_semaphore_release( id );
- T_quiet_rsc_success( sc );
-}
-
-static rtems_event_set GetPendingEvents( Context *ctx )
-{
- rtems_event_set pending;
- rtems_status_code sc;
-
- sc = ( *ctx->receive )(
- RTEMS_PENDING_EVENTS,
- RTEMS_DEFAULT_OPTIONS,
- 0,
- &pending
- );
- T_quiet_rsc_success( sc );
-
- return pending;
-}
-
-
-static rtems_option mergeopts( bool wait, bool wantall )
-{
- rtems_option opts;
-
- if ( wait ) { opts = RTEMS_WAIT; }
- else { opts = RTEMS_NO_WAIT; } ;
- if ( wantall ) { opts |= RTEMS_EVENT_ALL; }
- else { opts |= RTEMS_EVENT_ANY; } ;
- return opts;
-}
-
-
-/*
- * Here we need a mapping from model "task numbers/names" to thread Id's here
- * Promela Process 3 corresponds to Task 0 (Worker), doing Send
- * Promela Process 4 corresponds to Task 1 (Runner), doing Receive
- */
-static rtems_id mapid( Context *ctx, int pid )
-{
- rtems_id mapped_id;
-
- switch ( pid ) {
- case 0 : mapped_id = ctx->worker_id ; break;
- case 1 : mapped_id = ctx->runner_id; break;
- default : mapped_id = 0xffffffff; break;
- }
- return mapped_id;
-}
-
-static void checkTaskIs( rtems_id expected_id )
-{
- rtems_id own_id;
-
- own_id = _Thread_Get_executing()->Object.id;
- T_eq_u32( own_id, expected_id );
-}
-
-static void initialise_pending( rtems_event_set pending[], int max )
-{
- int i;
-
- for( i=0; i < max; i++ ) {
- pending[i] = 0;
- }
-}
-
-static void initialise_semaphore( Context *ctx, rtems_id semaphore[] )
-{
- semaphore[0] = ctx->worker_wakeup;
- semaphore[1] = ctx->runner_wakeup;
-}
+#include "tr-model-events-mgr.h"
/* =============================================== */
@@ -284,11 +100,11 @@ static rtems_id semaphore[SEMA_MAX];
static void TestSegment0( Context* ctx ) {
/* Test Name is defined in the Test Case code (tc-model-events-mgr.c) */
-
+
T_log(T_NORMAL,"@@@ 0 INIT");
initialise_pending( pending, TASK_MAX );
initialise_semaphore( ctx, semaphore );
-
+
}
/* ===== TEST CODE SEGMENT 3 =====*/
@@ -298,17 +114,17 @@ static void TestSegment3( Context* ctx ) {
checkTaskIs( ctx->worker_id );
T_log(T_NORMAL,"@@@ 3 WAIT 0");
Wait( semaphore[0] );
-
- T_log(T_NORMAL,"@@@ 3 CALL event_send 0 1 15 sendrc");
- T_log( T_NORMAL, "Calling Send(%d,%d)", mapid( ctx, 1), 15 );
- sendrc = ( *ctx->send )( mapid( ctx, 1 ), 15 );
+
+ T_log(T_NORMAL,"@@@ 3 CALL event_send 0 1 14 sendrc");
+ T_log( T_NORMAL, "Calling Send(%d,%d)", mapid( ctx, 1), 14 );
+ sendrc = ( *ctx->send )( mapid( ctx, 1 ), 14 );
T_log( T_NORMAL, "Returned 0x%x from Send", sendrc );
-
+
T_log(T_NORMAL,"@@@ 3 SCALAR sendrc 0");
- T_rsc_success( sendrc );
+ T_rsc( sendrc, 0 );
T_log(T_NORMAL,"@@@ 3 SIGNAL 1");
Wakeup( semaphore[1] );
-
+
T_log(T_NORMAL,"@@@ 3 STATE 0 Zombie");
/* Code to check that Task 0 has terminated */
}
@@ -320,30 +136,30 @@ static void TestSegment4( Context* ctx ) {
checkTaskIs( ctx->runner_id );
T_log(T_NORMAL,"@@@ 4 SIGNAL 0");
Wakeup( semaphore[0] );
-
+
T_log(T_NORMAL,"@@@ 4 WAIT 1");
Wait( semaphore[1] );
-
- T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 15");
- pending[1] = GetPendingEvents( ctx );
- T_eq_int( pending[1], 15 );
-
+
+ T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 14");
+ pending[1] = GetPending( ctx );
+ T_eq_int( pending[1], 14 );
+
T_log(T_NORMAL,"@@@ 4 CALL event_receive 10 1 1 0 recout recrc");
T_log( T_NORMAL, "Calling Receive(%d,%d,%d,%d)", 10, mergeopts( 1, 1 ) ,0 ,&recout );
recrc = ( *ctx->receive )( 10, mergeopts( 1, 1 ), 0, &recout );
T_log( T_NORMAL, "Returned 0x%x from Receive", recrc );
-
+
T_log(T_NORMAL,"@@@ 4 SCALAR recrc 0");
- T_rsc_success( recrc );
+ T_rsc( recrc, 0 );
T_log(T_NORMAL,"@@@ 4 SCALAR recout 10");
T_eq_int( recout, 10 );
- T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 5");
- pending[1] = GetPendingEvents( ctx );
- T_eq_int( pending[1], 5 );
-
+ T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 4");
+ pending[1] = GetPending( ctx );
+ T_eq_int( pending[1], 4 );
+
T_log(T_NORMAL,"@@@ 4 SIGNAL 0");
Wakeup( semaphore[0] );
-
+
T_log(T_NORMAL,"@@@ 4 STATE 1 Zombie");
/* Code to check that Task 1 has terminated */
}
@@ -351,7 +167,15 @@ static void TestSegment4( Context* ctx ) {
/* =============================================== */
-static void Worker( rtems_task_argument arg )
+
+static void Runner( RtemsModelEventsMgr_Context *ctx )
+{
+ T_log( T_NORMAL, "Runner running" );
+ TestSegment4( ctx );
+ T_log( T_NORMAL, "Runner finished" );
+}
+
+static void Worker2( rtems_task_argument arg )
{
Context *ctx;
@@ -365,17 +189,26 @@ static void Worker( rtems_task_argument arg )
}
+RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char WorkerStorage2[
+ RTEMS_TASK_STORAGE_SIZE(
+ MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE,
+ WORKER_ATTRIBUTES
+ )
+];
-static void Runner( RtemsModelEventsMgr2_Context *ctx )
-{
- T_log( T_NORMAL, "Runner running" );
- TestSegment4( ctx );
- T_log( T_NORMAL, "Runner finished" );
-}
+static const rtems_task_config WorkerConfig2 = {
+ .name = rtems_build_name( 'W', 'O', 'R', 'K' ),
+ .initial_priority = PRIO_LOW,
+ .storage_area = WorkerStorage2,
+ .storage_size = sizeof( WorkerStorage2 ),
+ .maximum_thread_local_storage_size = MAX_TLS_SIZE,
+ .initial_modes = RTEMS_DEFAULT_MODES,
+ .attributes = WORKER_ATTRIBUTES
+};
-static void RtemsModelEventsMgr2_Setup(
- RtemsModelEventsMgr2_Context *ctx
+static void RtemsModelEventsMgr_Setup2(
+ RtemsModelEventsMgr_Context *ctx
)
{
rtems_status_code sc;
@@ -403,99 +236,39 @@ static void RtemsModelEventsMgr2_Setup(
T_rsc_success( sc );
T_eq_u32( prio, PRIO_HIGH );
- sc = rtems_task_construct( &WorkerConfig, &ctx->worker_id );
+ sc = rtems_task_construct( &WorkerConfig2, &ctx->worker_id );
T_log( T_NORMAL, "Construct Worker, sc = %x", sc );
T_assert_rsc_success( sc );
T_log( T_NORMAL, "Starting Worker..." );
- sc = rtems_task_start( ctx->worker_id, Worker, (rtems_task_argument) ctx );
+ sc = rtems_task_start( ctx->worker_id, Worker2, (rtems_task_argument) ctx );
T_log( T_NORMAL, "Started Worker, sc = %x", sc );
T_assert_rsc_success( sc );
}
-static void RtemsModelEventsMgr2_Setup_Wrap( void *arg )
-{
- RtemsModelEventsMgr2_Context *ctx;
-
- ctx = arg;
- RtemsModelEventsMgr2_Setup( ctx );
-}
-
-static void RtemsModelEventsMgr2_Teardown(
- RtemsModelEventsMgr2_Context *ctx
-)
-{
- rtems_status_code sc;
- rtems_task_priority prio;
-
- T_log( T_NORMAL, "Runner Teardown" );
-
- prio = 0;
- sc = rtems_task_set_priority( RTEMS_SELF, PRIO_HIGH, &prio );
- T_rsc_success( sc );
- T_eq_u32( prio, PRIO_NORMAL );
-
- if ( ctx->worker_id != 0 ) {
- sc = rtems_task_delete( ctx->worker_id );
- T_rsc_success( sc );
- }
- DeleteWakeupSema( ctx->worker_wakeup );
- DeleteWakeupSema( ctx->runner_wakeup );
-}
-
-static void RtemsModelEventsMgr2_Teardown_Wrap( void *arg )
+static void RtemsModelEventsMgr_Setup_Wrap2( void *arg )
{
- RtemsModelEventsMgr2_Context *ctx;
+ RtemsModelEventsMgr_Context *ctx;
ctx = arg;
- RtemsModelEventsMgr2_Teardown( ctx );
+ RtemsModelEventsMgr_Setup2( ctx );
}
-static size_t RtemsModelEventsMgr2_Scope( void *arg, char *buf, size_t n )
-{
- size_t pme_size;
- pme_size = strlen(PromelaModelEventsMgr);
- return T_str_copy(buf, PromelaModelEventsMgr, pme_size);
-}
+static RtemsModelEventsMgr_Context RtemsModelEventsMgr_Instance2;
-static T_fixture RtemsModelEventsMgr2_Fixture = {
- .setup = RtemsModelEventsMgr2_Setup_Wrap,
+static T_fixture RtemsModelEventsMgr_Fixture2 = {
+ .setup = RtemsModelEventsMgr_Setup_Wrap2,
.stop = NULL,
- .teardown = RtemsModelEventsMgr2_Teardown_Wrap,
- .scope = RtemsModelEventsMgr2_Scope,
- .initial_context = &RtemsModelEventsMgr2_Instance
+ .teardown = RtemsModelEventsMgr_Teardown_Wrap,
+ .scope = RtemsModelEventsMgr_Scope,
+ .initial_context = &RtemsModelEventsMgr_Instance2
};
+static T_fixture_node RtemsModelEventsMgr_Node2;
-
-static void RtemsModelEventsMgr2_Cleanup(
- RtemsModelEventsMgr2_Context *ctx
-)
-{
- rtems_status_code sc;
- rtems_event_set events;
-
- events = 0;
- sc = ( *ctx->receive )(
- RTEMS_ALL_EVENTS,
- RTEMS_NO_WAIT | RTEMS_EVENT_ANY,
- 0,
- &events
- );
- if ( sc == RTEMS_SUCCESSFUL ) {
- T_quiet_ne_u32( events, 0 );
- } else {
- T_quiet_rsc( sc, RTEMS_UNSATISFIED );
- T_quiet_eq_u32( events, 0 );
- }
-}
-
-
-static T_fixture_node RtemsModelEventsMgr2_Node;
-
-void RtemsModelEventsMgr2_Run(
+void RtemsModelEventsMgr_Run2(
rtems_status_code ( *send )( rtems_id, rtems_event_set ),
rtems_status_code ( *receive )( rtems_event_set, rtems_option, rtems_interval, rtems_event_set * ),
rtems_event_set ( *get_pending_events )( Thread_Control * ),
@@ -503,7 +276,7 @@ void RtemsModelEventsMgr2_Run(
int waiting_for_event
)
{
- RtemsModelEventsMgr2_Context *ctx;
+ RtemsModelEventsMgr_Context *ctx;
T_set_verbosity( T_NORMAL );
@@ -513,20 +286,24 @@ void RtemsModelEventsMgr2_Run(
T_log( T_NORMAL, "Pushing Test Fixture..." );
+
ctx = T_push_fixture(
- &RtemsModelEventsMgr2_Node,
- &RtemsModelEventsMgr2_Fixture
+ &RtemsModelEventsMgr_Node2,
+ &RtemsModelEventsMgr_Fixture2
);
T_log( T_NORMAL, "Test Fixture Pushed" );
+
ctx->send = send;
ctx->receive = receive;
ctx->get_pending_events = get_pending_events;
ctx->wait_class = wait_class;
ctx->waiting_for_event = waiting_for_event;
- // RtemsModelEventsMgr2_Prepare( ctx );
+ ctx->this_test_number = 2;
+
+ // RtemsModelEventsMgr_Prepare( ctx );
ctx->events_to_send = 0;
ctx->send_status = RTEMS_INCORRECT_STATE;
ctx->received_events = 0xffffffff;
@@ -534,14 +311,14 @@ void RtemsModelEventsMgr2_Run(
ctx->receive_timeout = RTEMS_NO_TIMEOUT;
ctx->unsatisfied_pending = 0xffffffff;
memset( &ctx->thread_switch_log, 0, sizeof( ctx->thread_switch_log ) );
- T_eq_u32( GetPendingEvents( ctx ), 0 );
+ T_eq_u32( GetPending( ctx ), 0 );
_Thread_Wait_flags_set( ctx->runner_thread, THREAD_WAIT_FLAGS_INITIAL );
TestSegment0( ctx );
Runner( ctx );
- RtemsModelEventsMgr2_Cleanup( ctx );
+ RtemsModelEventsMgr_Cleanup( ctx );
T_log( T_NORMAL, "Run Pop Fixture" );
T_pop_fixture();
diff --git a/testsuites/validation/tr-model-events-mgr-3.c b/testsuites/validation/tr-model-events-mgr-3.c
index 379fb98aa0..090a5aaee2 100644
--- a/testsuites/validation/tr-model-events-mgr-3.c
+++ b/testsuites/validation/tr-model-events-mgr-3.c
@@ -3,7 +3,7 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsModelEventsMgr3
+ * @ingroup RTEMSTestCaseRtemsModelEventsMgr
*/
/*
@@ -47,192 +47,8 @@
#include <rtems/score/threadimpl.h>
-#include "tr-model-events-mgr.h"
-
-#include <rtems/test.h>
-
-typedef enum {
- PRIO_HIGH = 1,
- PRIO_NORMAL,
- PRIO_LOW,
- PRIO_OTHER
-} Priorities;
-
-
-typedef struct {
- rtems_status_code ( *send )( rtems_id, rtems_event_set ); // copy of the
- // corresponding RtemsModelEventsMgr3_Run() parameter
- rtems_status_code ( *receive )
- ( rtems_event_set, rtems_option
- , rtems_interval, rtems_event_set * ); // copy of the
- // corresponding RtemsModelEventsMgr3_Run() parameter
- rtems_event_set ( *get_pending_events )( Thread_Control * ); // copy of the
- // corresponding RtemsModelEventsMgr3_Run() parameter
- unsigned int wait_class; // copy of the corresponding
- // RtemsModelEventsMgr3_Run() parameter
- int waiting_for_event; // copy of the corresponding
- // RtemsModelEventsMgr3_Run() parameter
- rtems_id receiver_id; // receiver ID used for the event send action.
- rtems_event_set events_to_send; // events to send for the event send action
- rtems_status_code send_status; // status of the event send action.
- rtems_option receive_option_set; // option set used for the event receive action
- rtems_interval receive_timeout; // timeout used for the event receive action
- rtems_event_set received_events; // events received by the event receive action
- rtems_status_code receive_status; // status of the event receive action
- rtems_event_set unsatisfied_pending; // pending events after an event send action
- // which did not satsify the event condition of the receiver
- Thread_Control *runner_thread; // TCB of the runner task
- rtems_id runner_id; // ID of the runner task
- rtems_id worker_id; // task ID of the worker task
- rtems_id worker_wakeup; // ID of the semaphore used to wake up the worker task
- rtems_id runner_wakeup; // ID of the semaphore used to wake up the runner task
- rtems_id runner_sched; // scheduler ID of scheduler used by the runner task
- rtems_id other_sched; // scheduler ID of another scheduler
- // which is not used by the runner task
- T_thread_switch_log_4 thread_switch_log; // thread switch log
-} RtemsModelEventsMgr3_Context;
-
-static RtemsModelEventsMgr3_Context
- RtemsModelEventsMgr3_Instance;
-
-static const char PromelaModelEventsMgr[] = "/PML-EventsMgr3";
-
-#define INPUT_EVENTS ( RTEMS_EVENT_5 | RTEMS_EVENT_23 )
-
-#define WORKER_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES
-
-#define MAX_TLS_SIZE RTEMS_ALIGN_UP( 64, RTEMS_TASK_STORAGE_ALIGNMENT )
-
-typedef RtemsModelEventsMgr3_Context Context;
-
-RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char WorkerStorage[
- RTEMS_TASK_STORAGE_SIZE(
- MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE,
- WORKER_ATTRIBUTES
- )
-];
-
-static const rtems_task_config WorkerConfig = {
- .name = rtems_build_name( 'W', 'O', 'R', 'K' ),
- .initial_priority = PRIO_LOW,
- .storage_area = WorkerStorage,
- .storage_size = sizeof( WorkerStorage ),
- .maximum_thread_local_storage_size = MAX_TLS_SIZE,
- .initial_modes = RTEMS_DEFAULT_MODES,
- .attributes = WORKER_ATTRIBUTES
-};
-static rtems_id CreateWakeupSema( void )
-{
- rtems_status_code sc;
- rtems_id id;
-
- sc = rtems_semaphore_create(
- rtems_build_name( 'W', 'K', 'U', 'P' ),
- 0,
- RTEMS_SIMPLE_BINARY_SEMAPHORE,
- 0,
- &id
- );
- T_assert_rsc_success( sc );
-
- return id;
-}
-
-static void DeleteWakeupSema( rtems_id id )
-{
- if ( id != 0 ) {
- rtems_status_code sc;
-
- sc = rtems_semaphore_delete( id );
- T_rsc_success( sc );
- }
-}
-
-static void Wait( rtems_id id )
-{
- rtems_status_code sc;
-
- sc = rtems_semaphore_obtain( id, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
- T_quiet_rsc_success( sc );
-}
-
-static void Wakeup( rtems_id id )
-{
- rtems_status_code sc;
-
- sc = rtems_semaphore_release( id );
- T_quiet_rsc_success( sc );
-}
-
-static rtems_event_set GetPendingEvents( Context *ctx )
-{
- rtems_event_set pending;
- rtems_status_code sc;
-
- sc = ( *ctx->receive )(
- RTEMS_PENDING_EVENTS,
- RTEMS_DEFAULT_OPTIONS,
- 0,
- &pending
- );
- T_quiet_rsc_success( sc );
-
- return pending;
-}
-
-
-static rtems_option mergeopts( bool wait, bool wantall )
-{
- rtems_option opts;
-
- if ( wait ) { opts = RTEMS_WAIT; }
- else { opts = RTEMS_NO_WAIT; } ;
- if ( wantall ) { opts |= RTEMS_EVENT_ALL; }
- else { opts |= RTEMS_EVENT_ANY; } ;
- return opts;
-}
-
-
-/*
- * Here we need a mapping from model "task numbers/names" to thread Id's here
- * Promela Process 3 corresponds to Task 0 (Worker), doing Send
- * Promela Process 4 corresponds to Task 1 (Runner), doing Receive
- */
-static rtems_id mapid( Context *ctx, int pid )
-{
- rtems_id mapped_id;
-
- switch ( pid ) {
- case 0 : mapped_id = ctx->worker_id ; break;
- case 1 : mapped_id = ctx->runner_id; break;
- default : mapped_id = 0xffffffff; break;
- }
- return mapped_id;
-}
-
-static void checkTaskIs( rtems_id expected_id )
-{
- rtems_id own_id;
-
- own_id = _Thread_Get_executing()->Object.id;
- T_eq_u32( own_id, expected_id );
-}
-
-static void initialise_pending( rtems_event_set pending[], int max )
-{
- int i;
-
- for( i=0; i < max; i++ ) {
- pending[i] = 0;
- }
-}
-
-static void initialise_semaphore( Context *ctx, rtems_id semaphore[] )
-{
- semaphore[0] = ctx->worker_wakeup;
- semaphore[1] = ctx->runner_wakeup;
-}
+#include "tr-model-events-mgr.h"
/* =============================================== */
@@ -284,11 +100,11 @@ static rtems_id semaphore[SEMA_MAX];
static void TestSegment0( Context* ctx ) {
/* Test Name is defined in the Test Case code (tc-model-events-mgr.c) */
-
+
T_log(T_NORMAL,"@@@ 0 INIT");
initialise_pending( pending, TASK_MAX );
initialise_semaphore( ctx, semaphore );
-
+
}
/* ===== TEST CODE SEGMENT 3 =====*/
@@ -298,17 +114,17 @@ static void TestSegment3( Context* ctx ) {
checkTaskIs( ctx->worker_id );
T_log(T_NORMAL,"@@@ 3 WAIT 0");
Wait( semaphore[0] );
-
- T_log(T_NORMAL,"@@@ 3 CALL event_send 0 1 15 sendrc");
- T_log( T_NORMAL, "Calling Send(%d,%d)", mapid( ctx, 1), 15 );
- sendrc = ( *ctx->send )( mapid( ctx, 1 ), 15 );
+
+ T_log(T_NORMAL,"@@@ 3 CALL event_send 0 1 11 sendrc");
+ T_log( T_NORMAL, "Calling Send(%d,%d)", mapid( ctx, 1), 11 );
+ sendrc = ( *ctx->send )( mapid( ctx, 1 ), 11 );
T_log( T_NORMAL, "Returned 0x%x from Send", sendrc );
-
+
T_log(T_NORMAL,"@@@ 3 SCALAR sendrc 0");
- T_rsc_success( sendrc );
+ T_rsc( sendrc, 0 );
T_log(T_NORMAL,"@@@ 3 SIGNAL 1");
Wakeup( semaphore[1] );
-
+
T_log(T_NORMAL,"@@@ 3 STATE 0 Zombie");
/* Code to check that Task 0 has terminated */
}
@@ -320,30 +136,30 @@ static void TestSegment4( Context* ctx ) {
checkTaskIs( ctx->runner_id );
T_log(T_NORMAL,"@@@ 4 SIGNAL 0");
Wakeup( semaphore[0] );
-
+
T_log(T_NORMAL,"@@@ 4 WAIT 1");
Wait( semaphore[1] );
-
- T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 15");
- pending[1] = GetPendingEvents( ctx );
- T_eq_int( pending[1], 15 );
-
- T_log(T_NORMAL,"@@@ 4 CALL event_receive 6 1 1 0 recout recrc");
- T_log( T_NORMAL, "Calling Receive(%d,%d,%d,%d)", 6, mergeopts( 1, 1 ) ,0 ,&recout );
- recrc = ( *ctx->receive )( 6, mergeopts( 1, 1 ), 0, &recout );
+
+ T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 11");
+ pending[1] = GetPending( ctx );
+ T_eq_int( pending[1], 11 );
+
+ T_log(T_NORMAL,"@@@ 4 CALL event_receive 10 1 1 0 recout recrc");
+ T_log( T_NORMAL, "Calling Receive(%d,%d,%d,%d)", 10, mergeopts( 1, 1 ) ,0 ,&recout );
+ recrc = ( *ctx->receive )( 10, mergeopts( 1, 1 ), 0, &recout );
T_log( T_NORMAL, "Returned 0x%x from Receive", recrc );
-
+
T_log(T_NORMAL,"@@@ 4 SCALAR recrc 0");
- T_rsc_success( recrc );
- T_log(T_NORMAL,"@@@ 4 SCALAR recout 6");
- T_eq_int( recout, 6 );
- T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 9");
- pending[1] = GetPendingEvents( ctx );
- T_eq_int( pending[1], 9 );
-
+ T_rsc( recrc, 0 );
+ T_log(T_NORMAL,"@@@ 4 SCALAR recout 10");
+ T_eq_int( recout, 10 );
+ T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 1");
+ pending[1] = GetPending( ctx );
+ T_eq_int( pending[1], 1 );
+
T_log(T_NORMAL,"@@@ 4 SIGNAL 0");
Wakeup( semaphore[0] );
-
+
T_log(T_NORMAL,"@@@ 4 STATE 1 Zombie");
/* Code to check that Task 1 has terminated */
}
@@ -351,7 +167,15 @@ static void TestSegment4( Context* ctx ) {
/* =============================================== */
-static void Worker( rtems_task_argument arg )
+
+static void Runner( RtemsModelEventsMgr_Context *ctx )
+{
+ T_log( T_NORMAL, "Runner running" );
+ TestSegment4( ctx );
+ T_log( T_NORMAL, "Runner finished" );
+}
+
+static void Worker3( rtems_task_argument arg )
{
Context *ctx;
@@ -365,17 +189,26 @@ static void Worker( rtems_task_argument arg )
}
+RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char WorkerStorage3[
+ RTEMS_TASK_STORAGE_SIZE(
+ MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE,
+ WORKER_ATTRIBUTES
+ )
+];
-static void Runner( RtemsModelEventsMgr3_Context *ctx )
-{
- T_log( T_NORMAL, "Runner running" );
- TestSegment4( ctx );
- T_log( T_NORMAL, "Runner finished" );
-}
+static const rtems_task_config WorkerConfig3 = {
+ .name = rtems_build_name( 'W', 'O', 'R', 'K' ),
+ .initial_priority = PRIO_LOW,
+ .storage_area = WorkerStorage3,
+ .storage_size = sizeof( WorkerStorage3 ),
+ .maximum_thread_local_storage_size = MAX_TLS_SIZE,
+ .initial_modes = RTEMS_DEFAULT_MODES,
+ .attributes = WORKER_ATTRIBUTES
+};
-static void RtemsModelEventsMgr3_Setup(
- RtemsModelEventsMgr3_Context *ctx
+static void RtemsModelEventsMgr_Setup3(
+ RtemsModelEventsMgr_Context *ctx
)
{
rtems_status_code sc;
@@ -403,99 +236,39 @@ static void RtemsModelEventsMgr3_Setup(
T_rsc_success( sc );
T_eq_u32( prio, PRIO_HIGH );
- sc = rtems_task_construct( &WorkerConfig, &ctx->worker_id );
+ sc = rtems_task_construct( &WorkerConfig3, &ctx->worker_id );
T_log( T_NORMAL, "Construct Worker, sc = %x", sc );
T_assert_rsc_success( sc );
T_log( T_NORMAL, "Starting Worker..." );
- sc = rtems_task_start( ctx->worker_id, Worker, (rtems_task_argument) ctx );
+ sc = rtems_task_start( ctx->worker_id, Worker3, (rtems_task_argument) ctx );
T_log( T_NORMAL, "Started Worker, sc = %x", sc );
T_assert_rsc_success( sc );
}
-static void RtemsModelEventsMgr3_Setup_Wrap( void *arg )
-{
- RtemsModelEventsMgr3_Context *ctx;
-
- ctx = arg;
- RtemsModelEventsMgr3_Setup( ctx );
-}
-
-static void RtemsModelEventsMgr3_Teardown(
- RtemsModelEventsMgr3_Context *ctx
-)
-{
- rtems_status_code sc;
- rtems_task_priority prio;
-
- T_log( T_NORMAL, "Runner Teardown" );
-
- prio = 0;
- sc = rtems_task_set_priority( RTEMS_SELF, PRIO_HIGH, &prio );
- T_rsc_success( sc );
- T_eq_u32( prio, PRIO_NORMAL );
-
- if ( ctx->worker_id != 0 ) {
- sc = rtems_task_delete( ctx->worker_id );
- T_rsc_success( sc );
- }
- DeleteWakeupSema( ctx->worker_wakeup );
- DeleteWakeupSema( ctx->runner_wakeup );
-}
-
-static void RtemsModelEventsMgr3_Teardown_Wrap( void *arg )
+static void RtemsModelEventsMgr_Setup_Wrap3( void *arg )
{
- RtemsModelEventsMgr3_Context *ctx;
+ RtemsModelEventsMgr_Context *ctx;
ctx = arg;
- RtemsModelEventsMgr3_Teardown( ctx );
+ RtemsModelEventsMgr_Setup3( ctx );
}
-static size_t RtemsModelEventsMgr3_Scope( void *arg, char *buf, size_t n )
-{
- size_t pme_size;
- pme_size = strlen(PromelaModelEventsMgr);
- return T_str_copy(buf, PromelaModelEventsMgr, pme_size);
-}
+static RtemsModelEventsMgr_Context RtemsModelEventsMgr_Instance3;
-static T_fixture RtemsModelEventsMgr3_Fixture = {
- .setup = RtemsModelEventsMgr3_Setup_Wrap,
+static T_fixture RtemsModelEventsMgr_Fixture3 = {
+ .setup = RtemsModelEventsMgr_Setup_Wrap3,
.stop = NULL,
- .teardown = RtemsModelEventsMgr3_Teardown_Wrap,
- .scope = RtemsModelEventsMgr3_Scope,
- .initial_context = &RtemsModelEventsMgr3_Instance
+ .teardown = RtemsModelEventsMgr_Teardown_Wrap,
+ .scope = RtemsModelEventsMgr_Scope,
+ .initial_context = &RtemsModelEventsMgr_Instance3
};
+static T_fixture_node RtemsModelEventsMgr_Node3;
-
-static void RtemsModelEventsMgr3_Cleanup(
- RtemsModelEventsMgr3_Context *ctx
-)
-{
- rtems_status_code sc;
- rtems_event_set events;
-
- events = 0;
- sc = ( *ctx->receive )(
- RTEMS_ALL_EVENTS,
- RTEMS_NO_WAIT | RTEMS_EVENT_ANY,
- 0,
- &events
- );
- if ( sc == RTEMS_SUCCESSFUL ) {
- T_quiet_ne_u32( events, 0 );
- } else {
- T_quiet_rsc( sc, RTEMS_UNSATISFIED );
- T_quiet_eq_u32( events, 0 );
- }
-}
-
-
-static T_fixture_node RtemsModelEventsMgr3_Node;
-
-void RtemsModelEventsMgr3_Run(
+void RtemsModelEventsMgr_Run3(
rtems_status_code ( *send )( rtems_id, rtems_event_set ),
rtems_status_code ( *receive )( rtems_event_set, rtems_option, rtems_interval, rtems_event_set * ),
rtems_event_set ( *get_pending_events )( Thread_Control * ),
@@ -503,7 +276,7 @@ void RtemsModelEventsMgr3_Run(
int waiting_for_event
)
{
- RtemsModelEventsMgr3_Context *ctx;
+ RtemsModelEventsMgr_Context *ctx;
T_set_verbosity( T_NORMAL );
@@ -513,20 +286,24 @@ void RtemsModelEventsMgr3_Run(
T_log( T_NORMAL, "Pushing Test Fixture..." );
+
ctx = T_push_fixture(
- &RtemsModelEventsMgr3_Node,
- &RtemsModelEventsMgr3_Fixture
+ &RtemsModelEventsMgr_Node3,
+ &RtemsModelEventsMgr_Fixture3
);
T_log( T_NORMAL, "Test Fixture Pushed" );
+
ctx->send = send;
ctx->receive = receive;
ctx->get_pending_events = get_pending_events;
ctx->wait_class = wait_class;
ctx->waiting_for_event = waiting_for_event;
- // RtemsModelEventsMgr3_Prepare( ctx );
+ ctx->this_test_number = 3;
+
+ // RtemsModelEventsMgr_Prepare( ctx );
ctx->events_to_send = 0;
ctx->send_status = RTEMS_INCORRECT_STATE;
ctx->received_events = 0xffffffff;
@@ -534,14 +311,14 @@ void RtemsModelEventsMgr3_Run(
ctx->receive_timeout = RTEMS_NO_TIMEOUT;
ctx->unsatisfied_pending = 0xffffffff;
memset( &ctx->thread_switch_log, 0, sizeof( ctx->thread_switch_log ) );
- T_eq_u32( GetPendingEvents( ctx ), 0 );
+ T_eq_u32( GetPending( ctx ), 0 );
_Thread_Wait_flags_set( ctx->runner_thread, THREAD_WAIT_FLAGS_INITIAL );
TestSegment0( ctx );
Runner( ctx );
- RtemsModelEventsMgr3_Cleanup( ctx );
+ RtemsModelEventsMgr_Cleanup( ctx );
T_log( T_NORMAL, "Run Pop Fixture" );
T_pop_fixture();
diff --git a/testsuites/validation/tr-model-events-mgr.c b/testsuites/validation/tr-model-events-mgr.c
index 4bb8f9773d..77a5d1a977 100644
--- a/testsuites/validation/tr-model-events-mgr.c
+++ b/testsuites/validation/tr-model-events-mgr.c
@@ -49,80 +49,11 @@
#include "tr-model-events-mgr.h"
-#include <rtems/test.h>
-
-typedef enum {
- PRIO_HIGH = 1,
- PRIO_NORMAL,
- PRIO_LOW,
- PRIO_OTHER
-} Priorities;
-
-
-typedef struct {
- rtems_status_code ( *send )( rtems_id, rtems_event_set ); // copy of the
- // corresponding RtemsModelEventsMgr_Run() parameter
- rtems_status_code ( *receive )
- ( rtems_event_set, rtems_option
- , rtems_interval, rtems_event_set * ); // copy of the
- // corresponding RtemsModelEventsMgr_Run() parameter
- rtems_event_set ( *get_pending_events )( Thread_Control * ); // copy of the
- // corresponding RtemsModelEventsMgr_Run() parameter
- unsigned int wait_class; // copy of the corresponding
- // RtemsModelEventsMgr_Run() parameter
- int waiting_for_event; // copy of the corresponding
- // RtemsModelEventsMgr_Run() parameter
- rtems_id receiver_id; // receiver ID used for the event send action.
- rtems_event_set events_to_send; // events to send for the event send action
- rtems_status_code send_status; // status of the event send action.
- rtems_option receive_option_set; // option set used for the event receive action
- rtems_interval receive_timeout; // timeout used for the event receive action
- rtems_event_set received_events; // events received by the event receive action
- rtems_status_code receive_status; // status of the event receive action
- rtems_event_set unsatisfied_pending; // pending events after an event send action
- // which did not satsify the event condition of the receiver
- Thread_Control *runner_thread; // TCB of the runner task
- rtems_id runner_id; // ID of the runner task
- rtems_id worker_id; // task ID of the worker task
- rtems_id worker_wakeup; // ID of the semaphore used to wake up the worker task
- rtems_id runner_wakeup; // ID of the semaphore used to wake up the runner task
- rtems_id runner_sched; // scheduler ID of scheduler used by the runner task
- rtems_id other_sched; // scheduler ID of another scheduler
- // which is not used by the runner task
- T_thread_switch_log_4 thread_switch_log; // thread switch log
-} RtemsModelEventsMgr_Context;
-
-static RtemsModelEventsMgr_Context
- RtemsModelEventsMgr_Instance;
-
static const char PromelaModelEventsMgr[] = "/PML-EventsMgr";
#define INPUT_EVENTS ( RTEMS_EVENT_5 | RTEMS_EVENT_23 )
-#define WORKER_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES
-
-#define MAX_TLS_SIZE RTEMS_ALIGN_UP( 64, RTEMS_TASK_STORAGE_ALIGNMENT )
-
-typedef RtemsModelEventsMgr_Context Context;
-
-RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char WorkerStorage[
- RTEMS_TASK_STORAGE_SIZE(
- MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE,
- WORKER_ATTRIBUTES
- )
-];
-
-static const rtems_task_config WorkerConfig = {
- .name = rtems_build_name( 'W', 'O', 'R', 'K' ),
- .initial_priority = PRIO_LOW,
- .storage_area = WorkerStorage,
- .storage_size = sizeof( WorkerStorage ),
- .maximum_thread_local_storage_size = MAX_TLS_SIZE,
- .initial_modes = RTEMS_DEFAULT_MODES,
- .attributes = WORKER_ATTRIBUTES
-};
-
-static rtems_id CreateWakeupSema( void )
+rtems_id CreateWakeupSema( void )
{
rtems_status_code sc;
rtems_id id;
@@ -139,7 +70,7 @@ static rtems_id CreateWakeupSema( void )
return id;
}
-static void DeleteWakeupSema( rtems_id id )
+void DeleteWakeupSema( rtems_id id )
{
if ( id != 0 ) {
rtems_status_code sc;
@@ -149,7 +80,7 @@ static void DeleteWakeupSema( rtems_id id )
}
}
-static void Wait( rtems_id id )
+void Wait( rtems_id id )
{
rtems_status_code sc;
@@ -157,7 +88,7 @@ static void Wait( rtems_id id )
T_quiet_rsc_success( sc );
}
-static void Wakeup( rtems_id id )
+void Wakeup( rtems_id id )
{
rtems_status_code sc;
@@ -165,7 +96,7 @@ static void Wakeup( rtems_id id )
T_quiet_rsc_success( sc );
}
-static rtems_event_set GetPendingEvents( Context *ctx )
+rtems_event_set GetPending( Context *ctx )
{
rtems_event_set pending;
rtems_status_code sc;
@@ -182,7 +113,7 @@ static rtems_event_set GetPendingEvents( Context *ctx )
}
-static rtems_option mergeopts( bool wait, bool wantall )
+rtems_option mergeopts( bool wait, bool wantall )
{
rtems_option opts;
@@ -199,7 +130,7 @@ static rtems_option mergeopts( bool wait, bool wantall )
* Promela Process 3 corresponds to Task 0 (Worker), doing Send
* Promela Process 4 corresponds to Task 1 (Runner), doing Receive
*/
-static rtems_id mapid( Context *ctx, int pid )
+rtems_id mapid( Context *ctx, int pid )
{
rtems_id mapped_id;
@@ -211,7 +142,7 @@ static rtems_id mapid( Context *ctx, int pid )
return mapped_id;
}
-static void checkTaskIs( rtems_id expected_id )
+void checkTaskIs( rtems_id expected_id )
{
rtems_id own_id;
@@ -219,7 +150,7 @@ static void checkTaskIs( rtems_id expected_id )
T_eq_u32( own_id, expected_id );
}
-static void initialise_pending( rtems_event_set pending[], int max )
+void initialise_pending( rtems_event_set pending[], int max )
{
int i;
@@ -228,198 +159,12 @@ static void initialise_pending( rtems_event_set pending[], int max )
}
}
-static void initialise_semaphore( Context *ctx, rtems_id semaphore[] )
+void initialise_semaphore( Context *ctx, rtems_id semaphore[] )
{
semaphore[0] = ctx->worker_wakeup;
semaphore[1] = ctx->runner_wakeup;
}
-/* =============================================== */
-
-// @@@ 0 NAME Event_Manager_TestGen
-// @@@ 0 DEF NO_OF_EVENTS 4
-#define NO_OF_EVENTS 4
-// @@@ 0 DEF EVTS_NONE 0
-#define EVTS_NONE 0
-// @@@ 0 DEF EVTS_PENDING 0
-#define EVTS_PENDING 0
-// @@@ 0 DEF EVT_0 1
-#define EVT_0 1
-// @@@ 0 DEF EVT_1 2
-#define EVT_1 2
-// @@@ 0 DEF EVT_2 4
-#define EVT_2 4
-// @@@ 0 DEF EVT_3 8
-#define EVT_3 8
-// @@@ 0 DEF NO_TIMEOUT 0
-#define NO_TIMEOUT 0
-// @@@ 0 DEF TASK_MAX 2
-#define TASK_MAX 2
-// @@@ 0 DEF BAD_ID 2
-#define BAD_ID 2
-// @@@ 0 DEF SEMA_MAX 2
-#define SEMA_MAX 2
-// @@@ 0 DEF RC_OK RTEMS_SUCCESSFUL
-#define RC_OK RTEMS_SUCCESSFUL
-// @@@ 0 DEF RC_InvId RTEMS_INVALID_ID
-#define RC_InvId RTEMS_INVALID_ID
-// @@@ 0 DEF RC_InvAddr RTEMS_INVALID_ADDRESS
-#define RC_InvAddr RTEMS_INVALID_ADDRESS
-// @@@ 0 DEF RC_Unsat RTEMS_UNSATISFIED
-#define RC_Unsat RTEMS_UNSATISFIED
-// @@@ 0 DEF RC_Timeout RTEMS_TIMEOUT
-#define RC_Timeout RTEMS_TIMEOUT
-// @@@ 0 DCLARRAY EvtSet pending TASK_MAX
-static rtems_event_set pending[TASK_MAX];
-// @@@ 0 DECL byte sendrc 0
-static rtems_status_code sendrc = 0;
-// @@@ 0 DECL byte recrc 0
-static rtems_status_code recrc = 0;
-// @@@ 0 DECL byte recout 0
-static rtems_event_set recout = 0;
-// @@@ 0 DCLARRAY Semaphore semaphore SEMA_MAX
-static rtems_id semaphore[SEMA_MAX];
-
-/* ===== TEST CODE SEGMENT 0 =====*/
-
-static void TestSegment0( Context* ctx ) {
- /* Test Name is defined in the Test Case code (tc-model-events-mgr.c) */
-
- T_log(T_NORMAL,"@@@ 0 INIT");
- initialise_pending( pending, TASK_MAX );
- initialise_semaphore( ctx, semaphore );
-
-}
-
-/* ===== TEST CODE SEGMENT 3 =====*/
-
-static void TestSegment3( Context* ctx ) {
- T_log(T_NORMAL,"@@@ 3 TASK Worker");
- checkTaskIs( ctx->worker_id );
- T_log(T_NORMAL,"@@@ 3 WAIT 0");
- Wait( semaphore[0] );
-
- T_log(T_NORMAL,"@@@ 3 CALL event_send 0 1 15 sendrc");
- T_log( T_NORMAL, "Calling Send(%d,%d)", mapid( ctx, 1), 15 );
- sendrc = ( *ctx->send )( mapid( ctx, 1 ), 15 );
- T_log( T_NORMAL, "Returned 0x%x from Send", sendrc );
-
- T_log(T_NORMAL,"@@@ 3 SCALAR sendrc 0");
- T_rsc_success( sendrc );
- T_log(T_NORMAL,"@@@ 3 SIGNAL 1");
- Wakeup( semaphore[1] );
-
- T_log(T_NORMAL,"@@@ 3 STATE 0 Zombie");
- /* Code to check that Task 0 has terminated */
-}
-
-/* ===== TEST CODE SEGMENT 4 =====*/
-
-static void TestSegment4( Context* ctx ) {
- T_log(T_NORMAL,"@@@ 4 TASK Runner");
- checkTaskIs( ctx->runner_id );
- T_log(T_NORMAL,"@@@ 4 SIGNAL 0");
- Wakeup( semaphore[0] );
-
- T_log(T_NORMAL,"@@@ 4 WAIT 1");
- Wait( semaphore[1] );
-
- T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 15");
- pending[1] = GetPendingEvents( ctx );
- T_eq_int( pending[1], 15 );
-
- T_log(T_NORMAL,"@@@ 4 CALL event_receive 6 1 1 0 recout recrc");
- T_log( T_NORMAL, "Calling Receive(%d,%d,%d,%d)", 6, mergeopts( 1, 1 ) ,0 ,&recout );
- recrc = ( *ctx->receive )( 6, mergeopts( 1, 1 ), 0, &recout );
- T_log( T_NORMAL, "Returned 0x%x from Receive", recrc );
-
- T_log(T_NORMAL,"@@@ 4 SCALAR recrc 0");
- T_rsc_success( recrc );
- T_log(T_NORMAL,"@@@ 4 SCALAR recout 6");
- T_eq_int( recout, 6 );
- T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 9");
- pending[1] = GetPendingEvents( ctx );
- T_eq_int( pending[1], 9 );
-
- T_log(T_NORMAL,"@@@ 4 SIGNAL 0");
- Wakeup( semaphore[0] );
-
- T_log(T_NORMAL,"@@@ 4 STATE 1 Zombie");
- /* Code to check that Task 1 has terminated */
-}
-
-/* =============================================== */
-
-
-static void Worker( rtems_task_argument arg )
-{
- Context *ctx;
-
- ctx = (Context *) arg;
-
- T_log( T_NORMAL, "Worker Running" );
- TestSegment3( ctx );
- T_log( T_NORMAL, "Worker finished" );
-
- rtems_task_exit();
-
-}
-
-
-static void Runner( RtemsModelEventsMgr_Context *ctx )
-{
- T_log( T_NORMAL, "Runner running" );
- TestSegment4( ctx );
- T_log( T_NORMAL, "Runner finished" );
-}
-
-
-static void RtemsModelEventsMgr_Setup(
- RtemsModelEventsMgr_Context *ctx
-)
-{
- rtems_status_code sc;
- rtems_task_priority prio;
-
- T_log( T_NORMAL, "Runner Setup" );
-
- memset( ctx, 0, sizeof( *ctx ) );
- ctx->runner_thread = _Thread_Get_executing();
- ctx->runner_id = ctx->runner_thread->Object.id;
- ctx->worker_wakeup = CreateWakeupSema();
- ctx->runner_wakeup = CreateWakeupSema();
-
- sc = rtems_task_get_scheduler( RTEMS_SELF, &ctx->runner_sched );
- T_rsc_success( sc );
-
- #if defined(RTEMS_SMP)
- sc = rtems_scheduler_ident_by_processor( 1, &ctx->other_sched );
- T_rsc_success( sc );
- T_ne_u32( ctx->runner_sched, ctx->other_sched );
- #endif
-
- prio = 0;
- sc = rtems_task_set_priority( RTEMS_SELF, PRIO_NORMAL, &prio );
- T_rsc_success( sc );
- T_eq_u32( prio, PRIO_HIGH );
-
- sc = rtems_task_construct( &WorkerConfig, &ctx->worker_id );
- T_log( T_NORMAL, "Construct Worker, sc = %x", sc );
- T_assert_rsc_success( sc );
-
- T_log( T_NORMAL, "Starting Worker..." );
- sc = rtems_task_start( ctx->worker_id, Worker, (rtems_task_argument) ctx );
- T_log( T_NORMAL, "Started Worker, sc = %x", sc );
- T_assert_rsc_success( sc );
-}
-
-static void RtemsModelEventsMgr_Setup_Wrap( void *arg )
-{
- RtemsModelEventsMgr_Context *ctx;
-
- ctx = arg;
- RtemsModelEventsMgr_Setup( ctx );
-}
static void RtemsModelEventsMgr_Teardown(
RtemsModelEventsMgr_Context *ctx
@@ -444,7 +189,7 @@ static void RtemsModelEventsMgr_Teardown(
DeleteWakeupSema( ctx->runner_wakeup );
}
-static void RtemsModelEventsMgr_Teardown_Wrap( void *arg )
+void RtemsModelEventsMgr_Teardown_Wrap( void *arg )
{
RtemsModelEventsMgr_Context *ctx;
@@ -452,25 +197,34 @@ static void RtemsModelEventsMgr_Teardown_Wrap( void *arg )
RtemsModelEventsMgr_Teardown( ctx );
}
-static size_t RtemsModelEventsMgr_Scope( void *arg, char *buf, size_t n )
+
+size_t RtemsModelEventsMgr_Scope( void *arg, char *buf, size_t n )
{
- size_t pme_size;
+ RtemsModelEventsMgr_Context *ctx;
+ size_t m;
+ int p10;
+ int tnum ;
+ char digit;
- pme_size = strlen(PromelaModelEventsMgr);
- return T_str_copy(buf, PromelaModelEventsMgr, pme_size);
+ ctx = arg;
+ p10 = POWER_OF_10;
+
+ m = T_str_copy(buf, PromelaModelEventsMgr, n);
+ buf += m;
+ tnum = ctx->this_test_number;
+ while( p10 > 0 && m < n )
+ {
+ digit = (char) ( (int) '0' + tnum / p10 );
+ buf[0] = digit;
+ ++buf;
+ ++m;
+ tnum = tnum % p10;
+ p10 /= 10;
+ }
+ return m;
}
-static T_fixture RtemsModelEventsMgr_Fixture = {
- .setup = RtemsModelEventsMgr_Setup_Wrap,
- .stop = NULL,
- .teardown = RtemsModelEventsMgr_Teardown_Wrap,
- .scope = RtemsModelEventsMgr_Scope,
- .initial_context = &RtemsModelEventsMgr_Instance
-};
-
-
-
-static void RtemsModelEventsMgr_Cleanup(
+void RtemsModelEventsMgr_Cleanup(
RtemsModelEventsMgr_Context *ctx
)
{
@@ -491,60 +245,3 @@ static void RtemsModelEventsMgr_Cleanup(
T_quiet_eq_u32( events, 0 );
}
}
-
-
-static T_fixture_node RtemsModelEventsMgr_Node;
-
-void RtemsModelEventsMgr_Run(
- rtems_status_code ( *send )( rtems_id, rtems_event_set ),
- rtems_status_code ( *receive )( rtems_event_set, rtems_option, rtems_interval, rtems_event_set * ),
- rtems_event_set ( *get_pending_events )( Thread_Control * ),
- unsigned int wait_class,
- int waiting_for_event
-)
-{
- RtemsModelEventsMgr_Context *ctx;
-
- T_set_verbosity( T_NORMAL );
-
- T_log( T_NORMAL, "Runner Invoked" );
- T_log( T_NORMAL, "Runner Wait Class: %d", wait_class );
- T_log( T_NORMAL, "Runner WaitForEvent: %d", waiting_for_event );
-
- T_log( T_NORMAL, "Pushing Test Fixture..." );
-
- ctx = T_push_fixture(
- &RtemsModelEventsMgr_Node,
- &RtemsModelEventsMgr_Fixture
- );
-
- T_log( T_NORMAL, "Test Fixture Pushed" );
-
- ctx->send = send;
- ctx->receive = receive;
- ctx->get_pending_events = get_pending_events;
- ctx->wait_class = wait_class;
- ctx->waiting_for_event = waiting_for_event;
-
- // RtemsModelEventsMgr_Prepare( ctx );
- ctx->events_to_send = 0;
- ctx->send_status = RTEMS_INCORRECT_STATE;
- ctx->received_events = 0xffffffff;
- ctx->receive_option_set = 0;
- ctx->receive_timeout = RTEMS_NO_TIMEOUT;
- ctx->unsatisfied_pending = 0xffffffff;
- memset( &ctx->thread_switch_log, 0, sizeof( ctx->thread_switch_log ) );
- T_eq_u32( GetPendingEvents( ctx ), 0 );
- _Thread_Wait_flags_set( ctx->runner_thread, THREAD_WAIT_FLAGS_INITIAL );
-
- TestSegment0( ctx );
-
- Runner( ctx );
-
- RtemsModelEventsMgr_Cleanup( ctx );
-
- T_log( T_NORMAL, "Run Pop Fixture" );
- T_pop_fixture();
-}
-
-/** @} */
diff --git a/testsuites/validation/tr-model-events-mgr.h b/testsuites/validation/tr-model-events-mgr.h
index 94daaa5c79..a15f2ddfa5 100644
--- a/testsuites/validation/tr-model-events-mgr.h
+++ b/testsuites/validation/tr-model-events-mgr.h
@@ -51,10 +51,93 @@
#include <rtems.h>
#include <rtems/score/thread.h>
+#include <rtems/test.h>
+
#ifdef __cplusplus
extern "C" {
#endif
+
+/*
+ * Run Setup/Cleanup structs/functions
+ */
+typedef struct {
+ rtems_status_code ( *send )( rtems_id, rtems_event_set ); // copy of the
+ // corresponding RtemsModelEventsMgr_Run() parameter
+ rtems_status_code ( *receive )
+ ( rtems_event_set, rtems_option
+ , rtems_interval, rtems_event_set * ); // copy of the
+ // corresponding RtemsModelEventsMgr_Run() parameter
+ rtems_event_set ( *get_pending_events )( Thread_Control * ); // copy of the
+ // corresponding RtemsModelEventsMgr_Run() parameter
+ unsigned int wait_class; // copy of the corresponding
+ // RtemsModelEventsMgr_Run() parameter
+ int waiting_for_event; // copy of the corresponding
+ // RtemsModelEventsMgr_Run() parameter
+ int this_test_number; // test number used to identify a test runner instance
+ rtems_id receiver_id; // receiver ID used for the event send action.
+ rtems_event_set events_to_send; // events to send for the event send action
+ rtems_status_code send_status; // status of the event send action.
+ rtems_option receive_option_set; // option set used for the event receive action
+ rtems_interval receive_timeout; // timeout used for the event receive action
+ rtems_event_set received_events; // events received by the event receive action
+ rtems_status_code receive_status; // status of the event receive action
+ rtems_event_set unsatisfied_pending; // pending events after an event send action
+ // which did not satsify the event condition of the receiver
+ Thread_Control *runner_thread; // TCB of the runner task
+ rtems_id runner_id; // ID of the runner task
+ rtems_id worker_id; // task ID of the worker task
+ rtems_id worker_wakeup; // ID of the semaphore used to wake up the worker task
+ rtems_id runner_wakeup; // ID of the semaphore used to wake up the runner task
+ rtems_id runner_sched; // scheduler ID of scheduler used by the runner task
+ rtems_id other_sched; // scheduler ID of another scheduler
+ // which is not used by the runner task
+ T_thread_switch_log_4 thread_switch_log; // thread switch log
+} RtemsModelEventsMgr_Context;
+
+typedef enum {
+ PRIO_HIGH = 1,
+ PRIO_NORMAL,
+ PRIO_LOW,
+ PRIO_OTHER
+} Priorities;
+
+#define POWER_OF_10 100
+
+#define WORKER_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES
+
+#define MAX_TLS_SIZE RTEMS_ALIGN_UP( 64, RTEMS_TASK_STORAGE_ALIGNMENT )
+
+typedef RtemsModelEventsMgr_Context Context;
+
+rtems_id CreateWakeupSema( void );
+
+void DeleteWakeupSema( rtems_id id );
+
+void Wait( rtems_id id );
+
+void Wakeup( rtems_id id ) ;
+
+rtems_event_set GetPending( Context *ctx );
+
+rtems_option mergeopts( bool wait, bool wantall );
+
+rtems_id mapid( Context *ctx, int pid ) ;
+
+void checkTaskIs( rtems_id expected_id ) ;
+
+void initialise_pending( rtems_event_set pending[], int max );
+
+void initialise_semaphore( Context *ctx, rtems_id semaphore[] );
+
+void RtemsModelEventsMgr_Setup_Wrap( void *arg ) ;
+
+void RtemsModelEventsMgr_Teardown_Wrap( void *arg ) ;
+
+size_t RtemsModelEventsMgr_Scope( void *arg, char *buf, size_t n ) ;
+
+void RtemsModelEventsMgr_Cleanup( RtemsModelEventsMgr_Context *ctx );
+
/**
* @addtogroup RTEMSTestCaseRtemsModelEventsMgr_Run
*
@@ -74,7 +157,8 @@ extern "C" {
*
* @param waiting_for_event is the thread waiting for event state.
*/
-void RtemsModelEventsMgr0_Run(
+
+void RtemsModelEventsMgr_Run0(
rtems_status_code ( *send )( rtems_id, rtems_event_set ),
rtems_status_code ( *receive )( rtems_event_set, rtems_option, rtems_interval, rtems_event_set * ),
rtems_event_set ( *get_pending_events )( Thread_Control * ),
@@ -82,7 +166,7 @@ void RtemsModelEventsMgr0_Run(
int waiting_for_event
);
-void RtemsModelEventsMgr1_Run(
+void RtemsModelEventsMgr_Run1(
rtems_status_code ( *send )( rtems_id, rtems_event_set ),
rtems_status_code ( *receive )( rtems_event_set, rtems_option, rtems_interval, rtems_event_set * ),
rtems_event_set ( *get_pending_events )( Thread_Control * ),
@@ -90,7 +174,7 @@ void RtemsModelEventsMgr1_Run(
int waiting_for_event
);
-void RtemsModelEventsMgr2_Run(
+void RtemsModelEventsMgr_Run2(
rtems_status_code ( *send )( rtems_id, rtems_event_set ),
rtems_status_code ( *receive )( rtems_event_set, rtems_option, rtems_interval, rtems_event_set * ),
rtems_event_set ( *get_pending_events )( Thread_Control * ),
@@ -98,7 +182,7 @@ void RtemsModelEventsMgr2_Run(
int waiting_for_event
);
-void RtemsModelEventsMgr3_Run(
+void RtemsModelEventsMgr_Run3(
rtems_status_code ( *send )( rtems_id, rtems_event_set ),
rtems_status_code ( *receive )( rtems_event_set, rtems_option, rtems_interval, rtems_event_set * ),
rtems_event_set ( *get_pending_events )( Thread_Control * ),