validation: Add comments to barrier tests

Unify code sections across tests.
This commit is contained in:
Sebastian Huber
2021-02-24 17:59:32 +01:00
parent 08cbd4ba20
commit 34f279aa19
4 changed files with 207 additions and 3 deletions

View File

@@ -54,8 +54,6 @@
#include <rtems.h>
#include <string.h>
#include <rtems/score/chainimpl.h>
#include <rtems/score/objectimpl.h>
#include <rtems/test.h>
@@ -252,11 +250,17 @@ static void RtemsBarrierReqCreate_Pre_Name_Prepare(
{
switch ( state ) {
case RtemsBarrierReqCreate_Pre_Name_Valid: {
/*
* The ``name`` parameter shall be valid.
*/
ctx->name = NAME;
break;
}
case RtemsBarrierReqCreate_Pre_Name_Invalid: {
/*
* The ``name`` parameter shall be invalid.
*/
ctx->name = 0;
break;
}
@@ -273,16 +277,28 @@ static void RtemsBarrierReqCreate_Pre_Class_Prepare(
{
switch ( state ) {
case RtemsBarrierReqCreate_Pre_Class_Default: {
/*
* The ``attribute_set`` parameter shall specify the default
* class.
*/
/* Nothing to do */
break;
}
case RtemsBarrierReqCreate_Pre_Class_Manual: {
/*
* The ``attribute_set`` parameter shall specify the manual
* release class.
*/
ctx->attribute_set |= RTEMS_BARRIER_MANUAL_RELEASE;
break;
}
case RtemsBarrierReqCreate_Pre_Class_Auto: {
/*
* The ``attribute_set`` parameter shall specify the
* automatic release class.
*/
ctx->attribute_set |= RTEMS_BARRIER_AUTOMATIC_RELEASE;
break;
}
@@ -299,11 +315,17 @@ static void RtemsBarrierReqCreate_Pre_MaxWait_Prepare(
{
switch ( state ) {
case RtemsBarrierReqCreate_Pre_MaxWait_Zero: {
/*
* The ``maximum_waiters`` parameter shall be zero.
*/
ctx->maximum_waiters = 0;
break;
}
case RtemsBarrierReqCreate_Pre_MaxWait_Positive: {
/*
* The ``maximum_waiters`` parameter shall be positive.
*/
ctx->maximum_waiters = 1;
break;
}
@@ -320,11 +342,19 @@ static void RtemsBarrierReqCreate_Pre_Id_Prepare(
{
switch ( state ) {
case RtemsBarrierReqCreate_Pre_Id_Valid: {
/*
* The ``id`` parameter shall reference an object
* identifier value.
*/
ctx->id = &ctx->id_value;
break;
}
case RtemsBarrierReqCreate_Pre_Id_Null: {
/*
* The ``id`` parameter shall be
* NULL.
*/
ctx->id = NULL;
break;
}
@@ -341,11 +371,17 @@ static void RtemsBarrierReqCreate_Pre_Free_Prepare(
{
switch ( state ) {
case RtemsBarrierReqCreate_Pre_Free_Yes: {
/*
* The system shall have at least one inactive barrier object available.
*/
/* Nothing to do */
break;
}
case RtemsBarrierReqCreate_Pre_Free_No: {
/*
* The system shall have no inactive partition object available.
*/
ctx->seized_objects = T_seize_objects( Create, NULL );
break;
}
@@ -362,26 +398,46 @@ static void RtemsBarrierReqCreate_Post_Status_Check(
{
switch ( state ) {
case RtemsBarrierReqCreate_Post_Status_Ok: {
/*
* The return status of rtems_barrier_create() shall be
* RTEMS_SUCCESSFUL.
*/
T_rsc_success( ctx->status );
break;
}
case RtemsBarrierReqCreate_Post_Status_InvName: {
/*
* The return status of rtems_barrier_create() shall be
* RTEMS_INVALID_NAME.
*/
T_rsc( ctx->status, RTEMS_INVALID_NAME );
break;
}
case RtemsBarrierReqCreate_Post_Status_InvAddr: {
/*
* The return status of rtems_barrier_create() shall be
* RTEMS_INVALID_ADDRESS.
*/
T_rsc( ctx->status, RTEMS_INVALID_ADDRESS );
break;
}
case RtemsBarrierReqCreate_Post_Status_InvNum: {
/*
* The return status of rtems_barrier_create() shall be
* RTEMS_INVALID_NUMBER.
*/
T_rsc( ctx->status, RTEMS_INVALID_NUMBER );
break;
}
case RtemsBarrierReqCreate_Post_Status_TooMany: {
/*
* The return status of rtems_barrier_create() shall be
* RTEMS_TOO_MANY.
*/
T_rsc( ctx->status, RTEMS_TOO_MANY );
break;
}
@@ -401,7 +457,11 @@ static void RtemsBarrierReqCreate_Post_Name_Check(
switch ( state ) {
case RtemsBarrierReqCreate_Post_Name_Valid: {
id = INVALID_ID;
/*
* The unique object name shall identify the barrier created by the
* rtems_barrier_create() call.
*/
id = 0;
sc = rtems_barrier_ident( NAME, &id );
T_rsc_success( sc );
T_eq_u32( id, ctx->id_value );
@@ -409,6 +469,9 @@ static void RtemsBarrierReqCreate_Post_Name_Check(
}
case RtemsBarrierReqCreate_Post_Name_Invalid: {
/*
* The unique object name shall not identify a barrier.
*/
sc = rtems_barrier_ident( NAME, &id );
T_rsc( sc, RTEMS_INVALID_NAME );
break;
@@ -428,11 +491,17 @@ static void RtemsBarrierReqCreate_Post_Class_Check(
switch ( state ) {
case RtemsBarrierReqCreate_Post_Class_NoObj: {
/*
* The barrier class is not applicable since there was no barrier created.
*/
/* Not applicable */
break;
}
case RtemsBarrierReqCreate_Post_Class_Manual: {
/*
* The class of the barrier shall be manual release.
*/
sc = rtems_barrier_wait( ctx->id_value, RTEMS_NO_TIMEOUT );
T_rsc_success( sc );
@@ -442,6 +511,9 @@ static void RtemsBarrierReqCreate_Post_Class_Check(
}
case RtemsBarrierReqCreate_Post_Class_Auto: {
/*
* The class of the barrier shall be automatic release.
*/
sc = rtems_barrier_wait( ctx->id_value, RTEMS_NO_TIMEOUT );
T_rsc_success( sc );
@@ -461,12 +533,20 @@ static void RtemsBarrierReqCreate_Post_IdValue_Check(
{
switch ( state ) {
case RtemsBarrierReqCreate_Post_IdValue_Assigned: {
/*
* The value of the object identifier variable shall be equal to the object
* identifier of the barrier created by the rtems_barrier_create() call.
*/
T_eq_ptr( ctx->id, &ctx->id_value );
T_ne_u32( ctx->id_value, INVALID_ID );
break;
}
case RtemsBarrierReqCreate_Post_IdValue_Unchanged: {
/*
* The value of the object identifier variable shall be unchanged by the
* rtems_barrier_create() call.
*/
T_eq_u32( ctx->id_value, INVALID_ID );
break;
}

View File

@@ -183,11 +183,18 @@ static void RtemsBarrierReqDelete_Pre_Id_Prepare(
{
switch ( state ) {
case RtemsBarrierReqDelete_Pre_Id_Valid: {
/*
* The ``id`` parameter shall be associated with
* the barrier.
*/
ctx->id = ctx->barrier_id;
break;
}
case RtemsBarrierReqDelete_Pre_Id_Invalid: {
/*
* The ``id`` parameter shall be invalid.
*/
ctx->id = 0;
break;
}
@@ -204,12 +211,20 @@ static void RtemsBarrierReqDelete_Post_Status_Check(
{
switch ( state ) {
case RtemsBarrierReqDelete_Post_Status_Ok: {
/*
* The return status of rtems_barrier_delete() shall be
* RTEMS_SUCCESSFUL.
*/
ctx->barrier_id = 0;
T_rsc_success( ctx->status );
break;
}
case RtemsBarrierReqDelete_Post_Status_InvId: {
/*
* The return status of rtems_barrier_delete() shall be
* RTEMS_INVALID_ID.
*/
T_rsc( ctx->status, RTEMS_INVALID_ID );
break;
}
@@ -229,6 +244,9 @@ static void RtemsBarrierReqDelete_Post_Id_Check(
switch ( state ) {
case RtemsBarrierReqDelete_Post_Id_Valid: {
/*
* The unique object name shall identify the barrier.
*/
id = 0;
sc = rtems_barrier_ident( NAME, &id );
T_rsc_success( sc );
@@ -237,6 +255,9 @@ static void RtemsBarrierReqDelete_Post_Id_Check(
}
case RtemsBarrierReqDelete_Post_Id_Invalid: {
/*
* The unique object name shall not identify the barrier.
*/
sc = rtems_barrier_ident( NAME, &id );
T_rsc( sc, RTEMS_INVALID_NAME );
break;
@@ -254,12 +275,18 @@ static void RtemsBarrierReqDelete_Post_Flush_Check(
{
switch ( state ) {
case RtemsBarrierReqDelete_Post_Flush_Yes: {
/*
* Tasks waiting at the barrier shall be unblocked.
*/
++ctx->wait_expected;
T_eq_u32( ctx->wait_done, ctx->wait_expected );
break;
}
case RtemsBarrierReqDelete_Post_Flush_No: {
/*
* Tasks waiting at the barrier shall remain blocked.
*/
T_eq_u32( ctx->wait_done, ctx->wait_expected );
break;
}

View File

@@ -213,16 +213,27 @@ static void RtemsBarrierReqRelease_Pre_Barrier_Prepare(
{
switch ( state ) {
case RtemsBarrierReqRelease_Pre_Barrier_NoObj: {
/*
* The ``id`` parameter shall be invalid.
*/
ctx->id = 0xffffffff;
break;
}
case RtemsBarrierReqRelease_Pre_Barrier_Manual: {
/*
* The ``id`` parameter shall be associated with a
* manual release barrier.
*/
ctx->id = ctx->manual_release_id;
break;
}
case RtemsBarrierReqRelease_Pre_Barrier_Auto: {
/*
* The ``id`` parameter shall be associated with an
* automatic release barrier.
*/
ctx->id = ctx->auto_release_id;
break;
}
@@ -241,11 +252,18 @@ static void RtemsBarrierReqRelease_Pre_Released_Prepare(
switch ( state ) {
case RtemsBarrierReqRelease_Pre_Released_Valid: {
/*
* The ``released`` parameter shall reference an integer variable.
*/
ctx->released = &ctx->released_value;
break;
}
case RtemsBarrierReqRelease_Pre_Released_Null: {
/*
* The ``released`` parameter shall be
* NULL.
*/
ctx->released = NULL;
break;
}
@@ -262,11 +280,17 @@ static void RtemsBarrierReqRelease_Pre_Waiting_Prepare(
{
switch ( state ) {
case RtemsBarrierReqRelease_Pre_Waiting_Zero: {
/*
* The number of tasks waiting at the barrier shall be zero.
*/
ctx->waiting_tasks = 0;
break;
}
case RtemsBarrierReqRelease_Pre_Waiting_Positive: {
/*
* The number of tasks waiting at the barrier shall be positive.
*/
ctx->waiting_tasks = 1;
SendEvents( ctx->worker_id, EVENT_WAIT );
break;
@@ -284,16 +308,28 @@ static void RtemsBarrierReqRelease_Post_Status_Check(
{
switch ( state ) {
case RtemsBarrierReqRelease_Post_Status_Ok: {
/*
* The return status of rtems_barrier_release() shall be
* RTEMS_SUCCESSFUL.
*/
T_rsc_success( ctx->status );
break;
}
case RtemsBarrierReqRelease_Post_Status_InvId: {
/*
* The return status of rtems_barrier_release() shall be
* RTEMS_INVALID_ID.
*/
T_rsc( ctx->status, RTEMS_INVALID_ID );
break;
}
case RtemsBarrierReqRelease_Post_Status_InvAddr: {
/*
* The return status of rtems_barrier_release() shall be
* RTEMS_INVALID_ADDRESS.
*/
T_rsc( ctx->status, RTEMS_INVALID_ADDRESS );
break;
}
@@ -310,11 +346,19 @@ static void RtemsBarrierReqRelease_Post_Released_Check(
{
switch ( state ) {
case RtemsBarrierReqRelease_Post_Released_Valid: {
/*
* The value of the variable for the number of released tasks shall equal
* the number of tasks released by the rtems_barrier_release() call.
*/
T_eq_u32( ctx->released_value, ctx->waiting_tasks );
break;
}
case RtemsBarrierReqRelease_Post_Released_Unchanged: {
/*
* The value of variable for the number of released tasks shall be unchanged
* by the rtems_barrier_release() call.
*/
T_eq_u32( ctx->released_value, RELEASED_INVALID_VALUE );
break;
}

View File

@@ -263,16 +263,27 @@ static void RtemsBarrierReqWait_Pre_Barrier_Prepare(
{
switch ( state ) {
case RtemsBarrierReqWait_Pre_Barrier_NoObj: {
/*
* The ``id`` parameter shall be invalid.
*/
ctx->id = 0xffffffff;
break;
}
case RtemsBarrierReqWait_Pre_Barrier_Manual: {
/*
* The ``id`` parameter shall be associated with a
* manual release barrier.
*/
ctx->id = ctx->manual_release_id;
break;
}
case RtemsBarrierReqWait_Pre_Barrier_Auto: {
/*
* The ``id`` parameter shall be associated with an
* automatic release barrier.
*/
ctx->id = ctx->auto_release_id;
break;
}
@@ -289,11 +300,19 @@ static void RtemsBarrierReqWait_Pre_Timeout_Prepare(
{
switch ( state ) {
case RtemsBarrierReqWait_Pre_Timeout_Ticks: {
/*
* The ``released`` parameter shall be a clock tick
* interval.
*/
ctx->timeout = 2;
break;
}
case RtemsBarrierReqWait_Pre_Timeout_Forever: {
/*
* The ``released`` parameter shall be
* RTEMS_NO_TIMEOUT.
*/
ctx->timeout = RTEMS_NO_TIMEOUT;
break;
}
@@ -310,6 +329,10 @@ static void RtemsBarrierReqWait_Pre_Satisfy_Prepare(
{
switch ( state ) {
case RtemsBarrierReqWait_Pre_Satisfy_Never: {
/*
* While the calling task waits at the barrier, the barrier shall not be
* released or deleted.
*/
if ( ctx->timeout == RTEMS_NO_TIMEOUT ) {
SendEvents( ctx->low_worker_id, EVENT_CHECK_TIMER | EVENT_RELEASE );
}
@@ -317,16 +340,27 @@ static void RtemsBarrierReqWait_Pre_Satisfy_Prepare(
}
case RtemsBarrierReqWait_Pre_Satisfy_Wait: {
/*
* Calling the directive shall release the barrier.
*/
SendEvents( ctx->high_worker_id, EVENT_WAIT );
break;
}
case RtemsBarrierReqWait_Pre_Satisfy_Release: {
/*
* While the calling task waits at the barrier, the barrier shall be
* released.
*/
SendEvents( ctx->low_worker_id, EVENT_RELEASE );
break;
}
case RtemsBarrierReqWait_Pre_Satisfy_Delete: {
/*
* While the calling task waits at the barrier, the barrier shall be
* deleted.
*/
SendEvents( ctx->low_worker_id, EVENT_DELETE );
break;
}
@@ -343,26 +377,45 @@ static void RtemsBarrierReqWait_Post_Status_Check(
{
switch ( state ) {
case RtemsBarrierReqWait_Post_Status_Ok: {
/*
* The return status of rtems_barrier_wait() shall be
* RTEMS_SUCCESSFUL.
*/
T_rsc_success( ctx->status );
break;
}
case RtemsBarrierReqWait_Post_Status_InvId: {
/*
* The return status of rtems_barrier_wait() shall be
* RTEMS_INVALID_ID.
*/
T_rsc( ctx->status, RTEMS_INVALID_ID );
break;
}
case RtemsBarrierReqWait_Post_Status_Timeout: {
/*
* The return status of rtems_barrier_wait() shall be
* RTEMS_TIMEOUT.
*/
T_rsc( ctx->status, RTEMS_TIMEOUT );
break;
}
case RtemsBarrierReqWait_Post_Status_ObjDel: {
/*
* The return status of rtems_barrier_wait() shall be
* RTEMS_OBJECT_WAS_DELETED.
*/
T_rsc( ctx->status, RTEMS_OBJECT_WAS_DELETED );
break;
}
case RtemsBarrierReqWait_Post_Status_NoReturn: {
/*
* The call to rtems_barrier_wait() shall not return to the calling task.
*/
T_rsc_success( ctx->status );
break;
}