[PATCH 1/2] validation: Use individual names for ident tests

Sebastian Huber sebastian.huber at embedded-brains.de
Tue Mar 29 15:21:12 UTC 2022


Make the task configuration reusable.

Update #3716.
---
 .../testsuites/validation/libvalidation.yml   |  1 +
 testsuites/validation/tc-barrier-ident.c      |  5 +-
 testsuites/validation/tc-message-ident.c      |  5 +-
 testsuites/validation/tc-part-ident.c         |  5 +-
 testsuites/validation/tc-ratemon-ident.c      |  5 +-
 testsuites/validation/tc-sem-ident.c          |  5 +-
 testsuites/validation/tc-task-ident.c         | 27 +-------
 testsuites/validation/tc-timer-ident.c        |  5 +-
 testsuites/validation/tc-userext-ident.c      |  5 +-
 testsuites/validation/tr-object-ident-local.c | 10 ++-
 testsuites/validation/tr-object-ident-local.h |  9 +--
 testsuites/validation/tr-object-ident.c       | 10 ++-
 testsuites/validation/tr-object-ident.h       |  9 +--
 .../validation/tx-default-task-config.c       | 61 +++++++++++++++++++
 testsuites/validation/tx-support.h            |  9 +++
 15 files changed, 130 insertions(+), 41 deletions(-)
 create mode 100644 testsuites/validation/tx-default-task-config.c

diff --git a/spec/build/testsuites/validation/libvalidation.yml b/spec/build/testsuites/validation/libvalidation.yml
index 37603f143e..1ea1976e7a 100644
--- a/spec/build/testsuites/validation/libvalidation.yml
+++ b/spec/build/testsuites/validation/libvalidation.yml
@@ -12,6 +12,7 @@ install-path: null
 links: []
 source:
 - testsuites/validation/tx-call-within-isr.c
+- testsuites/validation/tx-default-task-config.c
 - testsuites/validation/tx-interrupt.c
 - testsuites/validation/tx-io-relax.c
 - testsuites/validation/tx-memory-alloc.c
diff --git a/testsuites/validation/tc-barrier-ident.c b/testsuites/validation/tc-barrier-ident.c
index 71e7051f66..dcb4a1c273 100644
--- a/testsuites/validation/tc-barrier-ident.c
+++ b/testsuites/validation/tc-barrier-ident.c
@@ -71,6 +71,8 @@
  * @{
  */
 
+#define NAME_LOCAL_OBJECT rtems_build_name( 'B', 'A', 'R', 'R' )
+
 static rtems_status_code ClassicBarrierIdentAction(
   rtems_name name,
   rtems_id  *id
@@ -89,7 +91,7 @@ static void RtemsBarrierValIdent_Action_0( void )
   rtems_id          id_local_object;
 
   sc = rtems_barrier_create(
-    ClassicObjectLocalIdentName,
+    NAME_LOCAL_OBJECT,
     RTEMS_DEFAULT_ATTRIBUTES,
     1,
     &id_local_object
@@ -98,6 +100,7 @@ static void RtemsBarrierValIdent_Action_0( void )
 
   RtemsReqIdentLocal_Run(
     id_local_object,
+    NAME_LOCAL_OBJECT,
     ClassicBarrierIdentAction
   );
 
diff --git a/testsuites/validation/tc-message-ident.c b/testsuites/validation/tc-message-ident.c
index 74759b525e..70e7d53350 100644
--- a/testsuites/validation/tc-message-ident.c
+++ b/testsuites/validation/tc-message-ident.c
@@ -71,10 +71,12 @@
  * @{
  */
 
+#define NAME_LOCAL_OBJECT rtems_build_name( 'M', 'E', 'S', 'Q' )
+
 static RTEMS_MESSAGE_QUEUE_BUFFER( 1 ) ClassicMessageIdentBuffers[ 1 ];
 
 static rtems_message_queue_config ClassicObjectIdentConfig = {
-  .name = ClassicObjectIdentName,
+  .name = NAME_LOCAL_OBJECT,
   .maximum_pending_messages = RTEMS_ARRAY_SIZE( ClassicMessageIdentBuffers ),
   .maximum_message_size = 1,
   .storage_area = ClassicMessageIdentBuffers,
@@ -108,6 +110,7 @@ static void RtemsMessageValIdent_Action_0( void )
 
   RtemsReqIdent_Run(
     id_local_object,
+    NAME_LOCAL_OBJECT,
     ClassicMessageIdentAction
   );
 
diff --git a/testsuites/validation/tc-part-ident.c b/testsuites/validation/tc-part-ident.c
index 926c205970..fccdf9671c 100644
--- a/testsuites/validation/tc-part-ident.c
+++ b/testsuites/validation/tc-part-ident.c
@@ -71,6 +71,8 @@
  * @{
  */
 
+#define NAME_LOCAL_OBJECT rtems_build_name( 'P', 'A', 'R', 'T' )
+
 static rtems_status_code ClassicPartIdentAction(
   rtems_name name,
   uint32_t   node,
@@ -91,7 +93,7 @@ static void RtemsPartValIdent_Action_0( void )
   rtems_id                                               id_local_object;
 
   sc = rtems_partition_create(
-    ClassicObjectIdentName,
+    NAME_LOCAL_OBJECT,
     area,
     sizeof( area ),
     sizeof( area ),
@@ -102,6 +104,7 @@ static void RtemsPartValIdent_Action_0( void )
 
   RtemsReqIdent_Run(
     id_local_object,
+    NAME_LOCAL_OBJECT,
     ClassicPartIdentAction
   );
 
diff --git a/testsuites/validation/tc-ratemon-ident.c b/testsuites/validation/tc-ratemon-ident.c
index 1126fcacab..beeb0bfd14 100644
--- a/testsuites/validation/tc-ratemon-ident.c
+++ b/testsuites/validation/tc-ratemon-ident.c
@@ -71,6 +71,8 @@
  * @{
  */
 
+#define NAME_LOCAL_OBJECT rtems_build_name( 'R', 'A', 'T', 'E' )
+
 static rtems_status_code ClassicRatemonIdentAction(
   rtems_name name,
   rtems_id  *id
@@ -89,13 +91,14 @@ static void RtemsRatemonValIdent_Action_0( void )
   rtems_id          id_local_object;
 
   sc = rtems_rate_monotonic_create(
-    ClassicObjectLocalIdentName,
+    NAME_LOCAL_OBJECT,
     &id_local_object
   );
   T_assert_rsc_success( sc );
 
   RtemsReqIdentLocal_Run(
     id_local_object,
+    NAME_LOCAL_OBJECT,
     ClassicRatemonIdentAction
   );
 
diff --git a/testsuites/validation/tc-sem-ident.c b/testsuites/validation/tc-sem-ident.c
index 183680fee0..3014113189 100644
--- a/testsuites/validation/tc-sem-ident.c
+++ b/testsuites/validation/tc-sem-ident.c
@@ -71,6 +71,8 @@
  * @{
  */
 
+#define NAME_LOCAL_OBJECT rtems_build_name( 'S', 'E', 'M', 'A' )
+
 static rtems_status_code ClassicSemIdentAction(
   rtems_name name,
   uint32_t   node,
@@ -90,7 +92,7 @@ static void RtemsSemValIdent_Action_0( void )
   rtems_id          id_local_object;
 
   sc = rtems_semaphore_create(
-    ClassicObjectIdentName,
+    NAME_LOCAL_OBJECT,
     0,
     RTEMS_DEFAULT_ATTRIBUTES,
     0,
@@ -100,6 +102,7 @@ static void RtemsSemValIdent_Action_0( void )
 
   RtemsReqIdent_Run(
     id_local_object,
+    NAME_LOCAL_OBJECT,
     ClassicSemIdentAction
   );
 
diff --git a/testsuites/validation/tc-task-ident.c b/testsuites/validation/tc-task-ident.c
index a61b90330a..c4247f22cf 100644
--- a/testsuites/validation/tc-task-ident.c
+++ b/testsuites/validation/tc-task-ident.c
@@ -53,7 +53,7 @@
 #endif
 
 #include "tr-object-ident.h"
-#include "ts-config.h"
+#include "tx-support.h"
 
 #include <rtems/test.h>
 
@@ -147,28 +147,6 @@ static rtems_status_code ClassicTaskIdentAction(
   return rtems_task_ident( name, node, id );
 }
 
-#define TASK_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES
-
-#define MAX_TLS_SIZE RTEMS_ALIGN_UP( 64, RTEMS_TASK_STORAGE_ALIGNMENT )
-
-RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT )
-static char ClassicTaskIdentStorage[
-  RTEMS_TASK_STORAGE_SIZE(
-    MAX_TLS_SIZE + TEST_MINIMUM_STACK_SIZE,
-    TASK_ATTRIBUTES
-  )
-];
-
-static const rtems_task_config ClassicTaskIdentConfig = {
-  .name = ClassicObjectIdentName,
-  .initial_priority = 1,
-  .storage_area = ClassicTaskIdentStorage,
-  .storage_size = sizeof( ClassicTaskIdentStorage ),
-  .maximum_thread_local_storage_size = MAX_TLS_SIZE,
-  .initial_modes = RTEMS_DEFAULT_MODES,
-  .attributes = TASK_ATTRIBUTES
-};
-
 static void RtemsTaskReqIdent_Pre_Name_Prepare(
   RtemsTaskReqIdent_Context *ctx,
   RtemsTaskReqIdent_Pre_Name state
@@ -237,7 +215,7 @@ static void RtemsTaskReqIdent_Setup( RtemsTaskReqIdent_Context *ctx )
   rtems_status_code sc;
 
   sc = rtems_task_construct(
-    &ClassicTaskIdentConfig,
+    &DefaultTaskConfig,
     &ctx->id_local_object
   );
   T_assert_rsc_success( sc );
@@ -278,6 +256,7 @@ static void RtemsTaskReqIdent_Action( RtemsTaskReqIdent_Context *ctx )
   } else {
     RtemsReqIdent_Run(
       ctx->id_local_object,
+      DefaultTaskConfig.name,
       ClassicTaskIdentAction
     );
   }
diff --git a/testsuites/validation/tc-timer-ident.c b/testsuites/validation/tc-timer-ident.c
index 5f121fc55b..bdee3d89d2 100644
--- a/testsuites/validation/tc-timer-ident.c
+++ b/testsuites/validation/tc-timer-ident.c
@@ -71,6 +71,8 @@
  * @{
  */
 
+#define NAME_LOCAL_OBJECT rtems_build_name( 'T', 'I', 'M', 'R' )
+
 static rtems_status_code ClassicTimerIdentAction(
   rtems_name name,
   rtems_id  *id
@@ -89,13 +91,14 @@ static void RtemsTimerValIdent_Action_0( void )
   rtems_id          id_local_object;
 
   sc = rtems_timer_create(
-    ClassicObjectLocalIdentName,
+    NAME_LOCAL_OBJECT,
     &id_local_object
   );
   T_assert_rsc_success( sc );
 
   RtemsReqIdentLocal_Run(
     id_local_object,
+    NAME_LOCAL_OBJECT,
     ClassicTimerIdentAction
   );
 
diff --git a/testsuites/validation/tc-userext-ident.c b/testsuites/validation/tc-userext-ident.c
index d2adcb313e..2ece528953 100644
--- a/testsuites/validation/tc-userext-ident.c
+++ b/testsuites/validation/tc-userext-ident.c
@@ -71,6 +71,8 @@
  * @{
  */
 
+#define NAME_LOCAL_OBJECT rtems_build_name( 'U', 'E', 'X', 'T' )
+
 static rtems_status_code ClassicUserExtIdentAction(
   rtems_name name,
   rtems_id  *id
@@ -90,7 +92,7 @@ static void RtemsUserextValIdent_Action_0( void )
   rtems_id                            id_local_object;
 
   sc = rtems_extension_create(
-    ClassicObjectLocalIdentName,
+    NAME_LOCAL_OBJECT,
     &table,
     &id_local_object
   );
@@ -98,6 +100,7 @@ static void RtemsUserextValIdent_Action_0( void )
 
   RtemsReqIdentLocal_Run(
     id_local_object,
+    NAME_LOCAL_OBJECT,
     ClassicUserExtIdentAction
   );
 
diff --git a/testsuites/validation/tr-object-ident-local.c b/testsuites/validation/tr-object-ident-local.c
index 5ca8c08fab..1b3943fdb1 100644
--- a/testsuites/validation/tr-object-ident-local.c
+++ b/testsuites/validation/tr-object-ident-local.c
@@ -90,6 +90,12 @@ typedef struct {
    */
   rtems_id id_local_object;
 
+  /**
+   * @brief This member contains a copy of the corresponding
+   *   RtemsReqIdentLocal_Run() parameter.
+   */
+  rtems_name name_local_object;
+
   /**
    * @brief This member contains a copy of the corresponding
    *   RtemsReqIdentLocal_Run() parameter.
@@ -166,7 +172,7 @@ static void RtemsReqIdentLocal_Pre_Name_Prepare(
        * While the ``name`` parameter is associated with an active object of
        * the specified class .
        */
-      ctx->name = ClassicObjectLocalIdentName;
+      ctx->name = ctx->name_local_object;
       break;
     }
 
@@ -346,6 +352,7 @@ static T_fixture_node RtemsReqIdentLocal_Node;
 
 void RtemsReqIdentLocal_Run(
   rtems_id             id_local_object,
+  rtems_name           name_local_object,
   rtems_status_code ( *action )( rtems_name, rtems_id * )
 )
 {
@@ -353,6 +360,7 @@ void RtemsReqIdentLocal_Run(
 
   ctx = &RtemsReqIdentLocal_Instance;
   ctx->id_local_object = id_local_object;
+  ctx->name_local_object = name_local_object;
   ctx->action = action;
 
   ctx = T_push_fixture( &RtemsReqIdentLocal_Node, &RtemsReqIdentLocal_Fixture );
diff --git a/testsuites/validation/tr-object-ident-local.h b/testsuites/validation/tr-object-ident-local.h
index 13f6a09997..83ad7e7416 100644
--- a/testsuites/validation/tr-object-ident-local.h
+++ b/testsuites/validation/tr-object-ident-local.h
@@ -89,19 +89,20 @@ typedef enum {
   RtemsReqIdentLocal_Post_Id_NA
 } RtemsReqIdentLocal_Post_Id;
 
-#define ClassicObjectLocalIdentName \
-  rtems_build_name( 'I', 'D', 'N', 'T' )
-
 /**
  * @brief Runs the parameterized test case.
  *
  * @param id_local_object is the identifier of an active object of the class
- *   under test with the name ClassicObjectLocalIdentName.
+ *   under test.
+ *
+ * @param name_local_object is the name of the active object of the class under
+ *   test.
  *
  * @param action is the action handler.
  */
 void RtemsReqIdentLocal_Run(
   rtems_id             id_local_object,
+  rtems_name           name_local_object,
   rtems_status_code ( *action )( rtems_name, rtems_id * )
 );
 
diff --git a/testsuites/validation/tr-object-ident.c b/testsuites/validation/tr-object-ident.c
index fac8767175..438c1f3333 100644
--- a/testsuites/validation/tr-object-ident.c
+++ b/testsuites/validation/tr-object-ident.c
@@ -95,6 +95,12 @@ typedef struct {
    */
   rtems_id id_local_object;
 
+  /**
+   * @brief This member contains a copy of the corresponding
+   *   RtemsReqIdent_Run() parameter.
+   */
+  rtems_name name_local_object;
+
   /**
    * @brief This member contains a copy of the corresponding
    *   RtemsReqIdent_Run() parameter.
@@ -182,7 +188,7 @@ static void RtemsReqIdent_Pre_Name_Prepare(
        * While the ``name`` parameter is associated with an active object of
        * the specified class .
        */
-      ctx->name = ClassicObjectIdentName;
+      ctx->name = ctx->name_local_object;
       break;
     }
 
@@ -450,6 +456,7 @@ static T_fixture_node RtemsReqIdent_Node;
 
 void RtemsReqIdent_Run(
   rtems_id             id_local_object,
+  rtems_name           name_local_object,
   rtems_status_code ( *action )( rtems_name, uint32_t, rtems_id * )
 )
 {
@@ -457,6 +464,7 @@ void RtemsReqIdent_Run(
 
   ctx = &RtemsReqIdent_Instance;
   ctx->id_local_object = id_local_object;
+  ctx->name_local_object = name_local_object;
   ctx->action = action;
 
   ctx = T_push_fixture( &RtemsReqIdent_Node, &RtemsReqIdent_Fixture );
diff --git a/testsuites/validation/tr-object-ident.h b/testsuites/validation/tr-object-ident.h
index 2404665272..7917562eab 100644
--- a/testsuites/validation/tr-object-ident.h
+++ b/testsuites/validation/tr-object-ident.h
@@ -101,19 +101,20 @@ typedef enum {
   RtemsReqIdent_Post_Id_NA
 } RtemsReqIdent_Post_Id;
 
-#define ClassicObjectIdentName \
-  rtems_build_name( 'I', 'D', 'N', 'T' )
-
 /**
  * @brief Runs the parameterized test case.
  *
  * @param id_local_object is the identifier of an active object of the class
- *   under test with the name ClassicObjectIdentName.
+ *   under test.
+ *
+ * @param name_local_object is the name of the active object of the class under
+ *   test.
  *
  * @param action is the action handler.
  */
 void RtemsReqIdent_Run(
   rtems_id             id_local_object,
+  rtems_name           name_local_object,
   rtems_status_code ( *action )( rtems_name, uint32_t, rtems_id * )
 );
 
diff --git a/testsuites/validation/tx-default-task-config.c b/testsuites/validation/tx-default-task-config.c
new file mode 100644
index 0000000000..59a0fd0ed3
--- /dev/null
+++ b/testsuites/validation/tx-default-task-config.c
@@ -0,0 +1,61 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSTestSuites
+ *
+ * @brief This source file contains the definition of ::DefaultTaskConfig.
+ */
+
+/*
+ * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "tx-support.h"
+#include "ts-config.h"
+
+#define TASK_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES
+
+RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT )
+static char DefaultTaskStorage[
+  RTEMS_TASK_STORAGE_SIZE(
+    TEST_MAXIMUM_TLS_SIZE + TEST_MINIMUM_STACK_SIZE,
+    TASK_ATTRIBUTES
+  )
+];
+
+const rtems_task_config DefaultTaskConfig = {
+  .name = rtems_build_name( 'D', 'T', 'S', 'K' ),
+  .initial_priority = 1,
+  .storage_area = DefaultTaskStorage,
+  .storage_size = sizeof( DefaultTaskStorage ),
+  .maximum_thread_local_storage_size = TEST_MAXIMUM_TLS_SIZE,
+  .initial_modes = RTEMS_DEFAULT_MODES,
+  .attributes = TASK_ATTRIBUTES
+};
diff --git a/testsuites/validation/tx-support.h b/testsuites/validation/tx-support.h
index b647551b4e..592067ca26 100644
--- a/testsuites/validation/tx-support.h
+++ b/testsuites/validation/tx-support.h
@@ -590,6 +590,15 @@ static inline void ISRLockWaitForOthers(
 
 void *IdleBody( uintptr_t ignored );
 
+/**
+ * @brief This task configurations may be used to construct a task during
+ *   tests.
+ *
+ * Only one task shall use this configuration at a time, otherwise two tasks
+ * would share a stack.
+ */
+extern const rtems_task_config DefaultTaskConfig;
+
 /** @} */
 
 #ifdef __cplusplus
-- 
2.34.1



More information about the devel mailing list