[rtems-central commit] spec: Simplify message queue construct validation

Sebastian Huber sebh at rtems.org
Mon Feb 22 07:36:33 UTC 2021


Module:    rtems-central
Branch:    master
Commit:    fdb04fd82b822a914010ac74d0445c8448718260
Changeset: http://git.rtems.org/rtems-central/commit/?id=fdb04fd82b822a914010ac74d0445c8448718260

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Sun Feb 21 17:30:38 2021 +0100

spec: Simplify message queue construct validation

---

 spec/rtems/message/req/construct-errors.yml | 116 +++++++++++-----------------
 1 file changed, 46 insertions(+), 70 deletions(-)

diff --git a/spec/rtems/message/req/construct-errors.yml b/spec/rtems/message/req/construct-errors.yml
index f8dc995..40bc9c6 100644
--- a/spec/rtems/message/req/construct-errors.yml
+++ b/spec/rtems/message/req/construct-errors.yml
@@ -146,55 +146,23 @@ pre-conditions:
       storage area size overflows.
   test-epilogue: null
   test-prologue: null
-- name: Queues
+- name: Free
   states:
-  - name: Avail
+  - name: 'Yes'
     test-code: |
       /* Nothing to do */
     text: |
       The system shall have at least one inactive message queue object
       available.
-  - name: None
+  - name: 'No'
     test-code: |
-      memset( &config, 0, sizeof( config ) );
-      config.name = rtems_build_name( 'M', 'S', 'G', 'Q' );
-      config.maximum_pending_messages = MAX_PENDING_MESSAGES;
-      config.maximum_message_size = MAX_MESSAGE_SIZE;
-      config.storage_size = sizeof( exhaust_buffers[ 0 ] );
-      config.attributes = RTEMS_DEFAULT_ATTRIBUTES;
-
       i = 0;
-
-      while ( i < MAX_MESSAGE_QUEUES ) {
-        rtems_status_code sc;
-        rtems_id          id;
-
-        config.storage_area = exhaust_buffers[ i ];
-
-        sc = rtems_message_queue_construct( &config, &id );
-
-        if ( sc == RTEMS_SUCCESSFUL ) {
-          Objects_Control           *obj;
-          const Objects_Information *info;
-
-          info = _Objects_Get_information_id( id );
-          T_quiet_assert_not_null( info );
-          obj = _Objects_Get_no_protection( id, info );
-          T_quiet_assert_not_null( obj );
-          _Chain_Append_unprotected( &ctx->message_queues, &obj->Node );
-        } else {
-          T_quiet_rsc( sc, RTEMS_TOO_MANY );
-          break;
-        }
-
-        ++i;
-      }
+      ctx->seized_objects = T_seize_objects( Create, &i );
     text: |
       The system shall have no inactive message queue object available.
   test-epilogue: null
   test-prologue: |
-    rtems_message_queue_config config;
-    size_t                     i;
+    size_t i;
 - name: Area
   states:
   - name: Valid
@@ -235,16 +203,7 @@ test-action: |
   ctx->status = rtems_message_queue_construct( &ctx->config, ctx->id );
 test-brief: null
 test-cleanup: |
-  Chain_Node *node;
-
-  while ( ( node = _Chain_Get_unprotected( &ctx->message_queues ) ) ) {
-    Objects_Control   *obj;
-    rtems_status_code  sc;
-
-    obj = (Objects_Control *) node;
-    sc = rtems_message_queue_delete( obj->id );
-    T_quiet_rsc_success( sc );
-  }
+  T_surrender_objects( &ctx->seized_objects, rtems_message_queue_delete );
 test-context:
 - brief: null
   description: null
@@ -265,7 +224,7 @@ test-context:
 - brief: null
   description: null
   member: |
-    Chain_Control message_queues
+    void *seized_objects
 test-context-support: null
 test-description: null
 test-header: null
@@ -278,11 +237,7 @@ test-local-includes: []
 test-prepare: |
   ctx->id_value = 0xffffffff;
   memset( &ctx->config, 0, sizeof( ctx->config ) );
-test-setup:
-  brief: null
-  code: |
-    _Chain_Initialize_empty( &ctx->message_queues );
-  description: null
+test-setup: null
 test-stop: null
 test-support: |
   #define MAX_MESSAGE_QUEUES 4
@@ -292,10 +247,31 @@ test-support: |
   #define MAX_MESSAGE_SIZE 1
 
   static RTEMS_MESSAGE_QUEUE_BUFFER( MAX_MESSAGE_SIZE )
-    exhaust_buffers[ MAX_MESSAGE_QUEUES ][ MAX_PENDING_MESSAGES ];
+    buffers_to_seize[ MAX_MESSAGE_QUEUES ][ MAX_PENDING_MESSAGES ];
 
   static RTEMS_MESSAGE_QUEUE_BUFFER( MAX_MESSAGE_SIZE )
     buffers[ MAX_PENDING_MESSAGES ];
+
+  static rtems_status_code Create( void *arg, uint32_t *id )
+  {
+    rtems_message_queue_config config;
+    size_t                    *i;
+
+    i = arg;
+    T_quiet_lt_sz( *i, MAX_MESSAGE_QUEUES );
+
+    memset( &config, 0, sizeof( config ) );
+    config.name = rtems_build_name( 'S', 'I', 'Z', 'E' );
+    config.maximum_pending_messages = MAX_PENDING_MESSAGES;
+    config.maximum_message_size = MAX_MESSAGE_SIZE;
+    config.storage_size = sizeof( buffers_to_seize[ *i ] );
+    config.storage_area = buffers_to_seize[ *i ];
+    config.attributes = RTEMS_DEFAULT_ATTRIBUTES;
+
+    ++(*i);
+
+    return rtems_message_queue_construct( &config, id );
+  }
 test-target: testsuites/validation/tc-message-construct-errors.c
 test-teardown: null
 text: ${.:text-template}
@@ -316,8 +292,8 @@ transition-map:
     - Valid
     Name:
     - Valid
-    Queues:
-    - Avail
+    Free:
+    - 'Yes'
 - enabled-by: true
   post-conditions:
     Status: InvName
@@ -329,7 +305,7 @@ transition-map:
     MaxSize: all
     Name:
     - Invalid
-    Queues: all
+    Free: all
 - enabled-by: true
   post-conditions:
     Status: InvAddr
@@ -342,7 +318,7 @@ transition-map:
     MaxSize: all
     Name:
     - Valid
-    Queues: all
+    Free: all
 - enabled-by: true
   post-conditions:
     Status: InvNum
@@ -356,7 +332,7 @@ transition-map:
     MaxSize: all
     Name:
     - Valid
-    Queues: all
+    Free: all
 - enabled-by: true
   post-conditions:
     Status: InvSize
@@ -372,7 +348,7 @@ transition-map:
     - Zero
     Name:
     - Valid
-    Queues: all
+    Free: all
 - enabled-by: true
   post-conditions:
     Status: TooMany
@@ -389,8 +365,8 @@ transition-map:
     - Big
     Name:
     - Valid
-    Queues:
-    - None
+    Free:
+    - 'No'
 - enabled-by: true
   post-conditions:
     Status: InvNum
@@ -405,8 +381,8 @@ transition-map:
     - Valid
     Name:
     - Valid
-    Queues:
-    - Avail
+    Free:
+    - 'Yes'
 - enabled-by: true
   post-conditions:
     Status: InvSize
@@ -422,8 +398,8 @@ transition-map:
     - Big
     Name:
     - Valid
-    Queues:
-    - Avail
+    Free:
+    - 'Yes'
 - enabled-by: true
   post-conditions:
     Status: Unsat
@@ -439,8 +415,8 @@ transition-map:
     - Valid
     Name:
     - Valid
-    Queues:
-    - Avail
+    Free:
+    - 'Yes'
 - enabled-by: true
   post-conditions:
     Status: Unsat
@@ -457,6 +433,6 @@ transition-map:
     - Valid
     Name:
     - Valid
-    Queues:
-    - Avail
+    Free:
+    - 'Yes'
 type: requirement



More information about the vc mailing list