<p>laforge <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/15574">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  pespin: Looks good to me, but someone else must approve
  fixeria: Looks good to me, but someone else must approve
  laforge: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ecu_fr: increase test coverage for FR ECU implementation<br><br>The ECU implementation for FR is currently tested by calling the related<br>functions directly and by using the generic ECU abstraction layer. However,<br>the test "test_fr_concealment" only tests directly. Lets add a version<br>that uses the generic ECU abstraction layer as well.<br><br>The generic ECU abstraction layer obsolets the public API functions<br>osmo_ecu_fr_reset() and osmo_ecu_fr_conceal(), lets tag those functions<br>as dprecated.<br><br>Change-Id: Ib0c8a9b164f14ea4fa00688f760a76cdb4890af4<br>---<br>M include/osmocom/codec/ecu.h<br>M tests/codec/codec_ecu_fr_test.c<br>M tests/codec/codec_ecu_fr_test.ok<br>3 files changed, 88 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/codec/ecu.h b/include/osmocom/codec/ecu.h</span><br><span>index 927ca0d..99b1430 100644</span><br><span>--- a/include/osmocom/codec/ecu.h</span><br><span>+++ b/include/osmocom/codec/ecu.h</span><br><span>@@ -11,8 +11,10 @@</span><br><span>        uint8_t frame_backup[GSM_FR_BYTES];</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void osmo_ecu_fr_reset(struct osmo_ecu_fr_state *state, const uint8_t *frame);</span><br><span style="color: hsl(0, 100%, 40%);">-int osmo_ecu_fr_conceal(struct osmo_ecu_fr_state *state, uint8_t *frame);</span><br><span style="color: hsl(120, 100%, 40%);">+void osmo_ecu_fr_reset(struct osmo_ecu_fr_state *state, const uint8_t *frame)</span><br><span style="color: hsl(120, 100%, 40%);">+   OSMO_DEPRECATED("Use generic ECU abstraction layer instead");</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_ecu_fr_conceal(struct osmo_ecu_fr_state *state, uint8_t *frame)</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_DEPRECATED("Use generic ECU abstraction layer instead");</span><br><span> </span><br><span> enum osmo_ecu_codec {</span><br><span>         OSMO_ECU_CODEC_HR,</span><br><span>diff --git a/tests/codec/codec_ecu_fr_test.c b/tests/codec/codec_ecu_fr_test.c</span><br><span>index 7ebc558..4040ce9 100644</span><br><span>--- a/tests/codec/codec_ecu_fr_test.c</span><br><span>+++ b/tests/codec/codec_ecu_fr_test.c</span><br><span>@@ -142,6 +142,46 @@</span><br><span>   }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Same as test_fr_concealment() but using generic core */</span><br><span style="color: hsl(120, 100%, 40%);">+void test_fr_concealment_core(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        struct osmo_ecu_state *state = osmo_ecu_init(NULL, OSMO_ECU_CODEC_FR);</span><br><span style="color: hsl(120, 100%, 40%);">+        uint8_t frame[GSM_FR_BYTES];</span><br><span style="color: hsl(120, 100%, 40%);">+  uint64_t xmaxc[4];</span><br><span style="color: hsl(120, 100%, 40%);">+    int i, rc;</span><br><span style="color: hsl(120, 100%, 40%);">+    int j = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  printf("=> Testing FR concealment (simple, consecutive bad frames)\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        while (sample_frame_hex[j] != NULL) {</span><br><span style="color: hsl(120, 100%, 40%);">+         /* Parse frame from string to hex */</span><br><span style="color: hsl(120, 100%, 40%);">+          osmo_hexparse(sample_frame_hex[j], frame, GSM_FR_BYTES);</span><br><span style="color: hsl(120, 100%, 40%);">+              parse_xmaxc_frame(frame, xmaxc);</span><br><span style="color: hsl(120, 100%, 40%);">+              printf("Start with: %s, XMAXC: [%"PRIx64", %"PRIx64", %"PRIx64", %"PRIx64"]\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                    sample_frame_hex[j], xmaxc[0], xmaxc[1], xmaxc[2], xmaxc[3]);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                /* Reset the ECU with the proposed known good frame */</span><br><span style="color: hsl(120, 100%, 40%);">+                osmo_ecu_frame_in(state, false, frame, GSM_FR_BYTES);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Now pretend that we do not receive any good frames anymore */</span><br><span style="color: hsl(120, 100%, 40%);">+              for (i = 0; i < 20; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                       rc = osmo_ecu_frame_out(state, frame);</span><br><span style="color: hsl(120, 100%, 40%);">+                        OSMO_ASSERT(rc == GSM_FR_BYTES);</span><br><span style="color: hsl(120, 100%, 40%);">+                      parse_xmaxc_frame(frame, xmaxc);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                    printf("conceal: %02i, result: %s XMAXC: [%"PRIx64", %"PRIx64", %"PRIx64", %"PRIx64"]\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                          i, osmo_hexdump_nospc(frame, GSM_FR_BYTES),</span><br><span style="color: hsl(120, 100%, 40%);">+                           xmaxc[0], xmaxc[1], xmaxc[2], xmaxc[3]);</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           /* Go to the next frame */</span><br><span style="color: hsl(120, 100%, 40%);">+            j++;</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   osmo_ecu_destroy(state);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Simulate a real life situation: voice frames with a few dropouts */</span><br><span> void test_fr_concealment_realistic()</span><br><span> {</span><br><span>@@ -224,6 +264,7 @@</span><br><span> {</span><br><span>      /* Perform actual tests */</span><br><span>   test_fr_concealment();</span><br><span style="color: hsl(120, 100%, 40%);">+        test_fr_concealment_core();</span><br><span>  test_fr_concealment_realistic();</span><br><span>     test_fr_concealment_realistic_core();</span><br><span> </span><br><span>diff --git a/tests/codec/codec_ecu_fr_test.ok b/tests/codec/codec_ecu_fr_test.ok</span><br><span>index 30163a9..d925e28 100644</span><br><span>--- a/tests/codec/codec_ecu_fr_test.ok</span><br><span>+++ b/tests/codec/codec_ecu_fr_test.ok</span><br><span>@@ -41,6 +41,49 @@</span><br><span> conceal: 17, result: d00000000000000000000000000000000000000000000000000000000000000000 XMAXC: [0, 0, 0, 0]</span><br><span> conceal: 18, result: d00000000000000000000000000000000000000000000000000000000000000000 XMAXC: [0, 0, 0, 0]</span><br><span> conceal: 19, result: d00000000000000000000000000000000000000000000000000000000000000000 XMAXC: [0, 0, 0, 0]</span><br><span style="color: hsl(120, 100%, 40%);">+=> Testing FR concealment (simple, consecutive bad frames)</span><br><span style="color: hsl(120, 100%, 40%);">+Start with: d9ec9be212901f802335598c501f805bad3d4ba01f809b69df5a501f809cd1b4da, XMAXC: [3f, 3f, 3f, 3f]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 00, result: d9ec9be212901f802335598c501f805bad3d4ba01f809b69df5a501f809cd1b4da XMAXC: [3f, 3f, 3f, 3f]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 01, result: d9ec9be212901d802335598c501d805bad3d4ba01d809b69df5a501d809cd1b4da XMAXC: [3b, 3b, 3b, 3b]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 02, result: d9ec9be212901b802335598c501b805bad3d4ba01b809b69df5a501b809cd1b4da XMAXC: [37, 37, 37, 37]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 03, result: d9ec9be2129019802335598c5019805bad3d4ba019809b69df5a5019809cd1b4da XMAXC: [33, 33, 33, 33]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 04, result: d9ec9be2129017802335598c5017805bad3d4ba017809b69df5a5017809cd1b4da XMAXC: [2f, 2f, 2f, 2f]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 05, result: d9ec9be2129015802335598c5015805bad3d4ba015809b69df5a5015809cd1b4da XMAXC: [2b, 2b, 2b, 2b]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 06, result: d9ec9be2129013802335598c5013805bad3d4ba013809b69df5a5013809cd1b4da XMAXC: [27, 27, 27, 27]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 07, result: d9ec9be2129011802335598c5011805bad3d4ba011809b69df5a5011809cd1b4da XMAXC: [23, 23, 23, 23]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 08, result: d9ec9be212900f802335598c500f805bad3d4ba00f809b69df5a500f809cd1b4da XMAXC: [1f, 1f, 1f, 1f]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 09, result: d9ec9be212900d802335598c500d805bad3d4ba00d809b69df5a500d809cd1b4da XMAXC: [1b, 1b, 1b, 1b]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 10, result: d9ec9be212900b802335598c500b805bad3d4ba00b809b69df5a500b809cd1b4da XMAXC: [17, 17, 17, 17]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 11, result: d9ec9be2129009802335598c5009805bad3d4ba009809b69df5a5009809cd1b4da XMAXC: [13, 13, 13, 13]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 12, result: d9ec9be2129007802335598c5007805bad3d4ba007809b69df5a5007809cd1b4da XMAXC: [f, f, f, f]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 13, result: d9ec9be2129005802335598c5005805bad3d4ba005809b69df5a5005809cd1b4da XMAXC: [b, b, b, b]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 14, result: d9ec9be2129003802335598c5003805bad3d4ba003809b69df5a5003809cd1b4da XMAXC: [7, 7, 7, 7]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 15, result: d9ec9be2129001802335598c5001805bad3d4ba001809b69df5a5001809cd1b4da XMAXC: [3, 3, 3, 3]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 16, result: d00000000000000000000000000000000000000000000000000000000000000000 XMAXC: [0, 0, 0, 0]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 17, result: d00000000000000000000000000000000000000000000000000000000000000000 XMAXC: [0, 0, 0, 0]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 18, result: d00000000000000000000000000000000000000000000000000000000000000000 XMAXC: [0, 0, 0, 0]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 19, result: d00000000000000000000000000000000000000000000000000000000000000000 XMAXC: [0, 0, 0, 0]</span><br><span style="color: hsl(120, 100%, 40%);">+Start with: d9ec9be212901d802335598c5013805bad3d4ba01f809b69df5a5019809cd1b4da, XMAXC: [3b, 27, 3f, 33]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 00, result: d9ec9be212901d802335598c5013805bad3d4ba01f809b69df5a5019809cd1b4da XMAXC: [3b, 27, 3f, 33]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 01, result: d9ec9be212901b802335598c5011805bad3d4ba01d809b69df5a5017809cd1b4da XMAXC: [37, 23, 3b, 2f]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 02, result: d9ec9be2129019802335598c500f805bad3d4ba01b809b69df5a5015809cd1b4da XMAXC: [33, 1f, 37, 2b]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 03, result: d9ec9be2129017802335598c500d805bad3d4ba019809b69df5a5013809cd1b4da XMAXC: [2f, 1b, 33, 27]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 04, result: d9ec9be2129015802335598c500b805bad3d4ba017809b69df5a5011809cd1b4da XMAXC: [2b, 17, 2f, 23]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 05, result: d9ec9be2129013802335598c5009805bad3d4ba015809b69df5a500f809cd1b4da XMAXC: [27, 13, 2b, 1f]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 06, result: d9ec9be2129011802335598c5007805bad3d4ba013809b69df5a500d809cd1b4da XMAXC: [23, f, 27, 1b]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 07, result: d9ec9be212900f802335598c5005805bad3d4ba011809b69df5a500b809cd1b4da XMAXC: [1f, b, 23, 17]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 08, result: d9ec9be212900d802335598c5003805bad3d4ba00f809b69df5a5009809cd1b4da XMAXC: [1b, 7, 1f, 13]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 09, result: d9ec9be212900b802335598c5001805bad3d4ba00d809b69df5a5007809cd1b4da XMAXC: [17, 3, 1b, f]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 10, result: d9ec9be2129009802335598c5000005bad3d4ba00b809b69df5a5005809cd1b4da XMAXC: [13, 0, 17, b]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 11, result: d9ec9be2129007802335598c5000005bad3d4ba009809b69df5a5003809cd1b4da XMAXC: [f, 0, 13, 7]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 12, result: d9ec9be2129005802335598c5000005bad3d4ba007809b69df5a5001809cd1b4da XMAXC: [b, 0, f, 3]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 13, result: d9ec9be2129003802335598c5000005bad3d4ba005809b69df5a5000009cd1b4da XMAXC: [7, 0, b, 0]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 14, result: d9ec9be2129001802335598c5000005bad3d4ba003809b69df5a5000009cd1b4da XMAXC: [3, 0, 7, 0]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 15, result: d9ec9be2129000002335598c5000005bad3d4ba001809b69df5a5000009cd1b4da XMAXC: [0, 0, 3, 0]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 16, result: d00000000000000000000000000000000000000000000000000000000000000000 XMAXC: [0, 0, 0, 0]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 17, result: d00000000000000000000000000000000000000000000000000000000000000000 XMAXC: [0, 0, 0, 0]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 18, result: d00000000000000000000000000000000000000000000000000000000000000000 XMAXC: [0, 0, 0, 0]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 19, result: d00000000000000000000000000000000000000000000000000000000000000000 XMAXC: [0, 0, 0, 0]</span><br><span> </span><br><span> => Testing FR concealment (realistic, various bad frames)</span><br><span> Frame No. 000:</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/15574">change 15574</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/libosmocore/+/15574"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ib0c8a9b164f14ea4fa00688f760a76cdb4890af4 </div>
<div style="display:none"> Gerrit-Change-Number: 15574 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>