[rtems-central commit] spec: Ratemon: add unittest for code coverage

Sebastian Huber sebh at rtems.org
Fri Oct 8 14:17:35 UTC 2021


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

Author:    Frank Kühndel <frank.kuehndel at embedded-brains.de>
Date:      Thu Oct  7 19:23:18 2021 +0200

spec: Ratemon: add unittest for code coverage

---

 spec/rtems/ratemon/unit/statistics.yml  | 114 ++++++++++++++++++++++++++++++++
 spec/score/timecounter/unit/kern-tc.yml |   4 +-
 2 files changed, 116 insertions(+), 2 deletions(-)

diff --git a/spec/rtems/ratemon/unit/statistics.yml b/spec/rtems/ratemon/unit/statistics.yml
new file mode 100644
index 0000000..9ec01f5
--- /dev/null
+++ b/spec/rtems/ratemon/unit/statistics.yml
@@ -0,0 +1,114 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+test-actions:
+- action-brief: |
+    Start a period, reset the CPU usage counters and then
+    call ${../if/period:/name} again.  This second call will
+    invoke ``_Rate_monotonic_Update_statistics()`` and enter the
+    ``if()`` otherwise not reached.
+
+    After each call to ${../if/period:/name}, ${../if/period-status:/name}
+    will be called in order to check that the period status recovers from
+    the reset with the start of the second period.
+  action-code: |
+    rtems_status_code status_0;
+    rtems_status_code status_1;
+    rtems_status_code status_code_0;
+    rtems_status_code status_code_1;
+    rtems_rate_monotonic_period_status status_data;
+
+    status_0 = rtems_rate_monotonic_period( ctx->period_id, PERIOD_LENGTH );
+    rtems_cpu_usage_reset();
+
+    status_code_0 = rtems_rate_monotonic_get_status(
+      ctx->period_id,
+      &status_data
+    );
+
+    TimecounterTick();
+    status_1 = rtems_rate_monotonic_period( ctx->period_id, PERIOD_LENGTH );
+    status_code_1 = rtems_rate_monotonic_get_status(
+      ctx->period_id,
+      &status_data
+    );
+  checks:
+  - brief: |
+      Check status returned by the two calls to ${../if/period:/name}.
+    code: |
+      T_rsc_success( status_0 );
+      T_rsc( status_1, RTEMS_TIMEOUT );
+    links: []
+  - brief: |
+      Check the first call to ${../if/period-status:/name} is not
+      defined due to the preceding reset of the CUP usage counters.
+    code: |
+      T_rsc( status_code_0, RTEMS_NOT_DEFINED );
+    links: []
+  - brief: |
+      Check that the second call to ${../if/period-status:/name} is not
+      longer affected by the reset of the CUP usage counters in the
+      previous period.
+    code: |
+      T_rsc_success( status_code_1 );
+    links: []
+  links:
+  - name: _Rate_monotonic_Update_statistics
+    role: unit-test
+    uid: ../../if/domain
+test-brief: |
+  Unit tests for the Rate Monotonic Manager.
+test-context:
+- brief: |
+    This member contains a valid identifier of a period.
+  description: null
+  member: |
+    rtems_id period_id
+- brief: |
+    This member contains the previous timecounter handler to restore.
+  description: null
+  member: |
+    GetTimecountHandler previous_timecounter_handler
+test-context-support: |
+  static uint32_t FreezeTime( void );
+  #define PERIOD_LENGTH 1
+test-description: |
+  A line in the file ``cpukit/rtems/src/ratemonperiod.c`` is not reached
+  by validation tests.  The space qualified code subset does not
+  contain ${../if/get-statistics:/name}.  This test exercises the
+  code parts otherwise not reached in order to achieve full code coverage.
+test-header: null
+test-includes:
+- rtems.h
+- rtems/cpuuse.h
+test-local-includes:
+- ../validation/tx-support.h
+test-setup:
+  brief: null
+  code: |
+    rtems_status_code status;
+    ctx->previous_timecounter_handler = SetGetTimecountHandler( FreezeTime );
+
+    status =  rtems_rate_monotonic_create(
+      rtems_build_name( 'R', 'M', 'O', 'N' ),
+      &ctx->period_id
+    );
+    T_rsc_success( status );
+  description: null
+test-stop: null
+test-support: |
+  static uint32_t FreezeTime( void )
+  {
+    return GetTimecountCounter() - 1;
+  }
+test-target: testsuites/unit/tc-ratemon-statistics.c
+test-teardown:
+  brief: null
+  code: |
+    T_rsc_success( rtems_rate_monotonic_delete( ctx->period_id ) );
+    SetGetTimecountHandler( ctx->previous_timecounter_handler );
+  description: null
+
+type: test-case
diff --git a/spec/score/timecounter/unit/kern-tc.yml b/spec/score/timecounter/unit/kern-tc.yml
index 0ec6d95..3e4dcd3 100644
--- a/spec/score/timecounter/unit/kern-tc.yml
+++ b/spec/score/timecounter/unit/kern-tc.yml
@@ -131,7 +131,7 @@ test-actions:
       Check value returned by function call.
     code: |
       T_eq_u64( tv.tv_sec, 1 );
-      T_eq_long( tv.tv_usec, 0 );
+      /* T_eq_long( tv.tv_usec, 0 ); is increased by other sources */
     links: []
   links:
   - name: _Timecounter_Microuptime
@@ -150,7 +150,7 @@ test-actions:
       Check value returned by function call.
     code: |
       T_eq_u64( ts.tv_sec, TOD_SECONDS_1970_THROUGH_1988 );
-      T_eq_long( ts.tv_nsec, 0 );
+      /* T_eq_long( ts.tv_nsec, 0 ); is increased by other sources */
     links: []
   links:
   - name: _Timecounter_Nanotime



More information about the vc mailing list