diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-08-04 08:51:17 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-08-05 08:17:15 +0200 |
commit | d03280cce4ec926505925882c4ad28185533dbbe (patch) | |
tree | 76d09b0c219300a73dce56cf5bcc0fb6e146f275 | |
parent | spec: Improve test cases (diff) | |
download | rtems-central-d03280cce4ec926505925882c4ad28185533dbbe.tar.bz2 |
spec: Improve user extension specification
-rw-r--r-- | spec/rtems/userext/req/fatal-iterate-remove.yml | 16 | ||||
-rw-r--r-- | spec/rtems/userext/req/fatal-order.yml | 15 | ||||
-rw-r--r-- | spec/score/interr/req/terminate-userext.yml | 6 | ||||
-rw-r--r-- | spec/score/interr/val/terminate.yml | 55 |
4 files changed, 79 insertions, 13 deletions
diff --git a/spec/rtems/userext/req/fatal-iterate-remove.yml b/spec/rtems/userext/req/fatal-iterate-remove.yml new file mode 100644 index 00000000..0621a825 --- /dev/null +++ b/spec/rtems/userext/req/fatal-iterate-remove.yml @@ -0,0 +1,16 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 +copyrights: +- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: requirement-refinement + uid: ../if/group +functional-type: function +rationale: null +references: [] +requirement-type: functional +text: | + While the ${/glossary/userextensions:/term} are iterated to invoke the fatal + extensions, when an extension set is removed, the removed extension set shall + not be a next extension set for any iteration in progress after the removal. +type: requirement diff --git a/spec/rtems/userext/req/fatal-order.yml b/spec/rtems/userext/req/fatal-order.yml new file mode 100644 index 00000000..caf3fd3b --- /dev/null +++ b/spec/rtems/userext/req/fatal-order.yml @@ -0,0 +1,15 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 +copyrights: +- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: requirement-refinement + uid: ../if/group +functional-type: function +rationale: null +references: [] +requirement-type: functional +text: | + The fatal ${/glossary/userextensions:/term} shall be invoked in + ${/glossary/extension-forward-order:/term}. +type: requirement diff --git a/spec/score/interr/req/terminate-userext.yml b/spec/score/interr/req/terminate-userext.yml index ba880d1a..c4392bef 100644 --- a/spec/score/interr/req/terminate-userext.yml +++ b/spec/score/interr/req/terminate-userext.yml @@ -10,7 +10,7 @@ rationale: null references: [] requirement-type: functional text: | - When ${../if/terminate:/name} is called, the fatal extensions shall be - invoked in ${/glossary/extension-forward-order:/term} with the fatal source - and fatal code specified by the respective parameter. + When ${../if/terminate:/name} is called, the fatal + ${/glossary/userextensions:/term} shall be invoked with the fatal source and + fatal code specified by the respective parameter. type: requirement diff --git a/spec/score/interr/val/terminate.yml b/spec/score/interr/val/terminate.yml index 9aa2a2bb..4cb94657 100644 --- a/spec/score/interr/val/terminate.yml +++ b/spec/score/interr/val/terminate.yml @@ -5,8 +5,9 @@ enabled-by: true links: [] test-actions: - action-brief: | - Create two dynamic extensions. Call the system termination procedure. - Delete the two dynamic extensions. + Create three dynamic extensions. Call the system termination procedure. + Delete one dynamic extension during the fatal extension invocation. Delete + the two remaining dynamic extensions. action-code: | rtems_status_code sc; rtems_extensions_table table; @@ -38,6 +39,14 @@ test-actions: ); T_step_rsc_success( ${step}, sc ); + table.fatal = FatalExtension4; + sc = rtems_extension_create( + rtems_build_name( ' ', ' ', ' ', '4' ), + &table, + &extension_id_4 + ); + T_step_rsc_success( ${step}, sc ); + test_case_active = true; if ( setjmp( before_terminate ) == 0 ) { @@ -53,8 +62,7 @@ test-actions: T_step_rsc_success( ${step}, sc ); checks: - brief: | - Check that the fatal user extensions were called with the expected - source. + Check that the fatal extensions were invoked with the expected source. code: | T_step_eq_int( ${step}, @@ -80,8 +88,8 @@ test-actions: - role: validation uid: ../req/terminate-userext - brief: | - Check that the fatal user extensions were called with the expected always - set to false argument. + Check that the fatal extensions were invoked with the expected always set + to false argument. code: | T_step_false( ${step}, info[ 0 ].always_set_to_false ); T_step_false( ${step}, info[ 1 ].always_set_to_false ); @@ -91,7 +99,7 @@ test-actions: - role: validation uid: ../req/terminate-userext - brief: | - Check that the fatal user extensions were called with the expected code. + Check that the fatal extensions were invoked with the expected code. code: | T_step_eq_ulong( ${step}, info[ 0 ].code, 123456 ); T_step_eq_ulong( ${step}, info[ 1 ].code, 123456 ); @@ -101,7 +109,7 @@ test-actions: - role: validation uid: ../req/terminate-userext - brief: | - Check that the fatal user extensions were called in forward order. + Check that the fatal extensions were invoked in forward order. code: | T_step_eq_uint( ${step}, info[ 0 ].counter, 1 ); T_step_eq_uint( ${step}, info[ 1 ].counter, 2 ); @@ -109,7 +117,18 @@ test-actions: T_step_eq_uint( ${step}, info[ 3 ].counter, 4 ); links: - role: validation - uid: ../req/terminate-userext + uid: /rtems/userext/req/fatal-order + - brief: | + Check that the fatal extension in the deleted extension set was not + invoked. + code: | + T_step_eq_int( ${step}, info[ 4 ].source, 0 ); + T_step_false( ${step}, info[ 4 ].always_set_to_false ); + T_step_eq_ulong( ${step}, info[ 4 ].code, 0 ); + T_step_eq_uint( ${step}, info[ 4 ].counter, 0 ); + links: + - role: validation + uid: /rtems/userext/req/fatal-iterate-remove - brief: | Check that the system state is terminated. code: | @@ -187,7 +206,7 @@ test-support: | static Atomic_Uint counter; - static FatalInfo info[ 4 ]; + static FatalInfo info[ 5 ]; static bool test_case_active; @@ -201,6 +220,8 @@ test-support: | static rtems_fatal_code halt_code; + static rtems_id extension_id_4; + static unsigned int GetCounter( void ) { return _Atomic_Fetch_add_uint( &counter, 1, ATOMIC_ORDER_RELAXED ) + 1; @@ -272,6 +293,20 @@ test-support: | rtems_fatal_code code ) { + rtems_status_code sc; + + FatalExtension( source, always_set_to_false, code, 3 ); + + sc = rtems_extension_delete( extension_id_4 ); + T_quiet_rsc_success( sc ); + } + + static void FatalExtension4( + rtems_fatal_source source, + bool always_set_to_false, + rtems_fatal_code code + ) + { FatalExtension( source, always_set_to_false, code, 3 ); } test-target: testsuites/validation/tc-terminate.c |