<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-mgw/+/15134">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">mgcp_test: extend / rewrite test_mgcp_codec_pt_translate()<br><br>Instead of manually entering codec values, use mgcp_codec_add() to populate<br>test conns with codecs. The idea is to better test what actually happens when<br>parsing SDP codec strings.<br><br>Rewrite current test_mgcp_codec_pt_translate() from procedural to a data model<br>with human readable stdout logging.<br><br>This prepares to enable interpreting codec strings like "FOO/8000/1" as<br>equivalent with "FOO/8000": the SDP standard defines the final "/1", indicating<br>the nr of channels, as optional for a single channel, but osmo-mgw currently is<br>unable to match these two formats as identical. So prepare the<br>test_mgcp_codec_pt_translate() so that upcoming patches can incorporate strings<br>with and without the final "/1" by extending the struct arrays.<br><br>Change-Id: I888000d77512cfecb0f199b86ef6003e7fc0e6cb<br>---<br>M tests/mgcp/mgcp_test.c<br>1 file changed, 166 insertions(+), 86 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-mgw refs/changes/34/15134/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/tests/mgcp/mgcp_test.c b/tests/mgcp/mgcp_test.c</span><br><span>index 39fe5d0..2c1e690 100644</span><br><span>--- a/tests/mgcp/mgcp_test.c</span><br><span>+++ b/tests/mgcp/mgcp_test.c</span><br><span>@@ -1711,98 +1711,178 @@</span><br><span>       OSMO_ASSERT(check_local_cx_options(ctx, ",,,") == -1);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void test_mgcp_codec_pt_translate_pars(struct mgcp_rtp_codec *c)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-       c->rate = 8000;</span><br><span style="color: hsl(0, 100%, 40%);">-      c->channels = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-     c->frame_duration_num = 23;</span><br><span style="color: hsl(0, 100%, 40%);">-  c->frame_duration_den = 42;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(120, 100%, 40%);">+static const struct mgcp_codec_param amr_param_octet_aligned_true = {</span><br><span style="color: hsl(120, 100%, 40%);">+        .amr_octet_aligned_present = true,</span><br><span style="color: hsl(120, 100%, 40%);">+    .amr_octet_aligned = true,</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%);">+#if 0</span><br><span style="color: hsl(120, 100%, 40%);">+static const struct mgcp_codec_param amr_param_octet_aligned_false = {</span><br><span style="color: hsl(120, 100%, 40%);">+       .amr_octet_aligned_present = true,</span><br><span style="color: hsl(120, 100%, 40%);">+    .amr_octet_aligned = false,</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%);">+static const struct mgcp_codec_param amr_param_octet_aligned_unset = {</span><br><span style="color: hsl(120, 100%, 40%);">+     .amr_octet_aligned_present = false,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct testcase_mgcp_codec_pt_translate_codec {</span><br><span style="color: hsl(120, 100%, 40%);">+    int payload_type;</span><br><span style="color: hsl(120, 100%, 40%);">+     const char *audio_name;</span><br><span style="color: hsl(120, 100%, 40%);">+       const struct mgcp_codec_param *param;</span><br><span style="color: hsl(120, 100%, 40%);">+ int expect_rc;</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%);">+struct testcase_mgcp_codec_pt_translate_expect {</span><br><span style="color: hsl(120, 100%, 40%);">+        bool end;</span><br><span style="color: hsl(120, 100%, 40%);">+     int payload_type_map[2];</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%);">+struct testcase_mgcp_codec_pt_translate {</span><br><span style="color: hsl(120, 100%, 40%);">+     const char *descr;</span><br><span style="color: hsl(120, 100%, 40%);">+    /* two conns on an endpoint, each with N configured codecs */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct testcase_mgcp_codec_pt_translate_codec codecs[2][10];</span><br><span style="color: hsl(120, 100%, 40%);">+  struct testcase_mgcp_codec_pt_translate_expect expect[32];</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%);">+static const struct testcase_mgcp_codec_pt_translate test_mgcp_codec_pt_translate_cases[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+       {</span><br><span style="color: hsl(120, 100%, 40%);">+             .descr = "same order, but differing payload type numbers",</span><br><span style="color: hsl(120, 100%, 40%);">+          .codecs = {</span><br><span style="color: hsl(120, 100%, 40%);">+                   {</span><br><span style="color: hsl(120, 100%, 40%);">+                             { 112, "AMR/8000/1", &amr_param_octet_aligned_true, },</span><br><span style="color: hsl(120, 100%, 40%);">+                          { 0, "PCMU/8000/1", NULL, },</span><br><span style="color: hsl(120, 100%, 40%);">+                                { 111, "GSM-HR-08/8000/1", NULL, },</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%);">+                             { 96, "AMR/8000/1", &amr_param_octet_aligned_true, },</span><br><span style="color: hsl(120, 100%, 40%);">+                           { 0, "PCMU/8000/1", NULL, },</span><br><span style="color: hsl(120, 100%, 40%);">+                                { 97, "GSM-HR-08/8000/1", NULL, },</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%);">+            .expect = {</span><br><span style="color: hsl(120, 100%, 40%);">+                   { .payload_type_map = {112, 96}, },</span><br><span style="color: hsl(120, 100%, 40%);">+                   { .payload_type_map = {0, 0}, },</span><br><span style="color: hsl(120, 100%, 40%);">+                      { .payload_type_map = {111, 97} },</span><br><span style="color: hsl(120, 100%, 40%);">+                    { .payload_type_map = {123, -EINVAL} },</span><br><span style="color: hsl(120, 100%, 40%);">+                       { .end = true },</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%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             .descr = "conn0 has no codecs",</span><br><span style="color: hsl(120, 100%, 40%);">+             .codecs = {</span><br><span style="color: hsl(120, 100%, 40%);">+                   {</span><br><span style="color: hsl(120, 100%, 40%);">+                             /* no codecs */</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%);">+                             { 96, "AMR/8000/1", &amr_param_octet_aligned_true, },</span><br><span style="color: hsl(120, 100%, 40%);">+                           { 0, "PCMU/8000/1", NULL, },</span><br><span style="color: hsl(120, 100%, 40%);">+                                { 97, "GSM-HR-08/8000/1", NULL, },</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%);">+            .expect = {</span><br><span style="color: hsl(120, 100%, 40%);">+                   { .payload_type_map = {112, -EINVAL}, },</span><br><span style="color: hsl(120, 100%, 40%);">+                      { .payload_type_map = {0, -EINVAL}, },</span><br><span style="color: hsl(120, 100%, 40%);">+                        { .payload_type_map = {111, -EINVAL} },</span><br><span style="color: hsl(120, 100%, 40%);">+                       { .end = true },</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%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             .descr = "conn1 has no codecs",</span><br><span style="color: hsl(120, 100%, 40%);">+             .codecs = {</span><br><span style="color: hsl(120, 100%, 40%);">+                   {</span><br><span style="color: hsl(120, 100%, 40%);">+                             { 112, "AMR/8000/1", &amr_param_octet_aligned_true, },</span><br><span style="color: hsl(120, 100%, 40%);">+                          { 0, "PCMU/8000/1", NULL, },</span><br><span style="color: hsl(120, 100%, 40%);">+                                { 111, "GSM-HR-08/8000/1", NULL, },</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%);">+                             /* no codecs */</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%);">+            .expect = {</span><br><span style="color: hsl(120, 100%, 40%);">+                   { .payload_type_map = {112, -EINVAL}, },</span><br><span style="color: hsl(120, 100%, 40%);">+                      { .payload_type_map = {0, -EINVAL}, },</span><br><span style="color: hsl(120, 100%, 40%);">+                        { .payload_type_map = {111, -EINVAL} },</span><br><span style="color: hsl(120, 100%, 40%);">+                       { .end = true },</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%);">+};</span><br><span> </span><br><span> static void test_mgcp_codec_pt_translate(void)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-       struct mgcp_conn_rtp conn_src;</span><br><span style="color: hsl(0, 100%, 40%);">-  struct mgcp_conn_rtp conn_dst;</span><br><span style="color: hsl(0, 100%, 40%);">-  int pt_dst;</span><br><span style="color: hsl(120, 100%, 40%);">+   int i;</span><br><span style="color: hsl(120, 100%, 40%);">+        bool ok = true;</span><br><span style="color: hsl(120, 100%, 40%);">+       printf("\nTesting mgcp_codec_pt_translate()\n");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  /* Setup a realistic set of codec configurations on both</span><br><span style="color: hsl(0, 100%, 40%);">-         * ends. AMR and HR will use different payload types. PCMU</span><br><span style="color: hsl(0, 100%, 40%);">-       * must use 0 on both ends since this is not a dynamic payload</span><br><span style="color: hsl(0, 100%, 40%);">-   * type */</span><br><span style="color: hsl(0, 100%, 40%);">-      test_mgcp_codec_pt_translate_pars(&conn_src.end.codecs[0]);</span><br><span style="color: hsl(0, 100%, 40%);">- test_mgcp_codec_pt_translate_pars(&conn_dst.end.codecs[0]);</span><br><span style="color: hsl(0, 100%, 40%);">- test_mgcp_codec_pt_translate_pars(&conn_src.end.codecs[1]);</span><br><span style="color: hsl(0, 100%, 40%);">- test_mgcp_codec_pt_translate_pars(&conn_dst.end.codecs[1]);</span><br><span style="color: hsl(0, 100%, 40%);">- test_mgcp_codec_pt_translate_pars(&conn_src.end.codecs[2]);</span><br><span style="color: hsl(0, 100%, 40%);">- test_mgcp_codec_pt_translate_pars(&conn_dst.end.codecs[2]);</span><br><span style="color: hsl(0, 100%, 40%);">- conn_src.end.codecs[0].payload_type = 112;</span><br><span style="color: hsl(0, 100%, 40%);">-      conn_dst.end.codecs[0].payload_type = 96;</span><br><span style="color: hsl(0, 100%, 40%);">-       conn_src.end.codecs[1].payload_type = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        conn_dst.end.codecs[1].payload_type = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        conn_src.end.codecs[2].payload_type = 111;</span><br><span style="color: hsl(0, 100%, 40%);">-      conn_dst.end.codecs[2].payload_type = 97;</span><br><span style="color: hsl(0, 100%, 40%);">-       conn_src.end.codecs[0].audio_name = "AMR/8000/1";</span><br><span style="color: hsl(0, 100%, 40%);">-     conn_dst.end.codecs[0].audio_name = "AMR/8000/1";</span><br><span style="color: hsl(0, 100%, 40%);">-     conn_src.end.codecs[1].audio_name = "PCMU/8000/1";</span><br><span style="color: hsl(0, 100%, 40%);">-    conn_dst.end.codecs[1].audio_name = "PCMU/8000/1";</span><br><span style="color: hsl(0, 100%, 40%);">-    conn_src.end.codecs[2].audio_name = "GSM-HR-08/8000/1";</span><br><span style="color: hsl(0, 100%, 40%);">-       conn_dst.end.codecs[2].audio_name = "GSM-HR-08/8000/1";</span><br><span style="color: hsl(0, 100%, 40%);">-       conn_src.end.codecs[0].subtype_name = "AMR";</span><br><span style="color: hsl(0, 100%, 40%);">-  conn_dst.end.codecs[0].subtype_name = "AMR";</span><br><span style="color: hsl(0, 100%, 40%);">-  conn_src.end.codecs[1].subtype_name = "PCMU";</span><br><span style="color: hsl(0, 100%, 40%);">- conn_dst.end.codecs[1].subtype_name = "PCMU";</span><br><span style="color: hsl(0, 100%, 40%);">- conn_src.end.codecs[2].subtype_name = "GSM-HR-08";</span><br><span style="color: hsl(0, 100%, 40%);">-    conn_dst.end.codecs[2].subtype_name = "GSM-HR-08";</span><br><span style="color: hsl(0, 100%, 40%);">-    conn_src.end.codecs_assigned = 3;</span><br><span style="color: hsl(0, 100%, 40%);">-       conn_dst.end.codecs_assigned = 3;</span><br><span style="color: hsl(120, 100%, 40%);">+     for (i = 0; i < ARRAY_SIZE(test_mgcp_codec_pt_translate_cases); i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+             const struct testcase_mgcp_codec_pt_translate *t = &test_mgcp_codec_pt_translate_cases[i];</span><br><span style="color: hsl(120, 100%, 40%);">+                struct mgcp_conn_rtp conn[2] = {};</span><br><span style="color: hsl(120, 100%, 40%);">+            int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+               int conn_i;</span><br><span style="color: hsl(120, 100%, 40%);">+           int c;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      /* We expect the function to find the PT we must use when we send the</span><br><span style="color: hsl(0, 100%, 40%);">-    * packet out to the destination. All we know is the context for both</span><br><span style="color: hsl(0, 100%, 40%);">-    * connections and the payload type from the source packet */</span><br><span style="color: hsl(0, 100%, 40%);">-   pt_dst =</span><br><span style="color: hsl(0, 100%, 40%);">-            mgcp_codec_pt_translate(&conn_src, &conn_dst,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   conn_src.end.codecs[0].payload_type);</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_ASSERT(pt_dst == conn_dst.end.codecs[0].payload_type);</span><br><span style="color: hsl(0, 100%, 40%);">-     pt_dst =</span><br><span style="color: hsl(0, 100%, 40%);">-            mgcp_codec_pt_translate(&conn_src, &conn_dst,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   conn_src.end.codecs[1].payload_type);</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_ASSERT(pt_dst == conn_dst.end.codecs[1].payload_type);</span><br><span style="color: hsl(0, 100%, 40%);">-     pt_dst =</span><br><span style="color: hsl(0, 100%, 40%);">-            mgcp_codec_pt_translate(&conn_src, &conn_dst,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   conn_src.end.codecs[2].payload_type);</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_ASSERT(pt_dst == conn_dst.end.codecs[2].payload_type);</span><br><span style="color: hsl(120, 100%, 40%);">+           printf("#%d: %s\n", i, t->descr);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      /* Try some constellations that must fail */</span><br><span style="color: hsl(0, 100%, 40%);">-    pt_dst = mgcp_codec_pt_translate(&conn_src, &conn_dst, 123);</span><br><span style="color: hsl(0, 100%, 40%);">-    OSMO_ASSERT(pt_dst == -EINVAL);</span><br><span style="color: hsl(0, 100%, 40%);">- conn_src.end.codecs_assigned = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-       conn_dst.end.codecs_assigned = 3;</span><br><span style="color: hsl(0, 100%, 40%);">-       pt_dst =</span><br><span style="color: hsl(0, 100%, 40%);">-            mgcp_codec_pt_translate(&conn_src, &conn_dst,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   conn_src.end.codecs[0].payload_type);</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_ASSERT(pt_dst == -EINVAL);</span><br><span style="color: hsl(0, 100%, 40%);">- pt_dst =</span><br><span style="color: hsl(0, 100%, 40%);">-            mgcp_codec_pt_translate(&conn_src, &conn_dst,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   conn_src.end.codecs[1].payload_type);</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_ASSERT(pt_dst == -EINVAL);</span><br><span style="color: hsl(0, 100%, 40%);">- pt_dst =</span><br><span style="color: hsl(0, 100%, 40%);">-            mgcp_codec_pt_translate(&conn_src, &conn_dst,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   conn_src.end.codecs[2].payload_type);</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_ASSERT(pt_dst == -EINVAL);</span><br><span style="color: hsl(0, 100%, 40%);">- conn_src.end.codecs_assigned = 3;</span><br><span style="color: hsl(0, 100%, 40%);">-       conn_dst.end.codecs_assigned = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-       pt_dst =</span><br><span style="color: hsl(0, 100%, 40%);">-            mgcp_codec_pt_translate(&conn_src, &conn_dst,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   conn_src.end.codecs[0].payload_type);</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_ASSERT(pt_dst == -EINVAL);</span><br><span style="color: hsl(0, 100%, 40%);">- pt_dst =</span><br><span style="color: hsl(0, 100%, 40%);">-            mgcp_codec_pt_translate(&conn_src, &conn_dst,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   conn_src.end.codecs[1].payload_type);</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_ASSERT(pt_dst == -EINVAL);</span><br><span style="color: hsl(0, 100%, 40%);">- pt_dst =</span><br><span style="color: hsl(0, 100%, 40%);">-            mgcp_codec_pt_translate(&conn_src, &conn_dst,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   conn_src.end.codecs[2].payload_type);</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_ASSERT(pt_dst == -EINVAL);</span><br><span style="color: hsl(120, 100%, 40%);">+               for (conn_i = 0; conn_i < 2; conn_i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   printf(" - add codecs on conn%d:\n", conn_i);</span><br><span style="color: hsl(120, 100%, 40%);">+                       for (c = 0; c < ARRAY_SIZE(t->codecs[conn_i]); c++) {</span><br><span style="color: hsl(120, 100%, 40%);">+                           const struct testcase_mgcp_codec_pt_translate_codec *codec = &t->codecs[conn_i][c];</span><br><span style="color: hsl(120, 100%, 40%);">+                            if (!codec->audio_name)</span><br><span style="color: hsl(120, 100%, 40%);">+                                    break;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                              rc = mgcp_codec_add(&conn[conn_i], codec->payload_type, codec->audio_name, codec->param);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                              printf("   %2d: %3d %s%s  -> rc=%d\n", c, codec->payload_type, codec->audio_name,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 codec->param ?</span><br><span style="color: hsl(120, 100%, 40%);">+                                             (codec->param->amr_octet_aligned_present?</span><br><span style="color: hsl(120, 100%, 40%);">+                                                        (codec->param->amr_octet_aligned ?</span><br><span style="color: hsl(120, 100%, 40%);">+                                                              " octet-aligned=1" : " octet-aligned=0")</span><br><span style="color: hsl(120, 100%, 40%);">+                                                  : " octet-aligned=unset")</span><br><span style="color: hsl(120, 100%, 40%);">+                                           : "",</span><br><span style="color: hsl(120, 100%, 40%);">+                                               rc);</span><br><span style="color: hsl(120, 100%, 40%);">+                          if (rc != codec->expect_rc) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                      printf("     ERROR: expected rc=%d\n", codec->expect_rc);</span><br><span style="color: hsl(120, 100%, 40%);">+                                        ok = false;</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%);">+                     if (!c)</span><br><span style="color: hsl(120, 100%, 40%);">+                               printf("    (none)\n");</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%);">+           for (c = 0; c < ARRAY_SIZE(t->expect); c++) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   const struct testcase_mgcp_codec_pt_translate_expect *expect = &t->expect[c];</span><br><span style="color: hsl(120, 100%, 40%);">+                  int result;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                 if (expect->end)</span><br><span style="color: hsl(120, 100%, 40%);">+                           break;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                      result = mgcp_codec_pt_translate(&conn[0], &conn[1], expect->payload_type_map[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+                 printf(" - mgcp_codec_pt_translate(conn0, conn1, %d) -> %d\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                          expect->payload_type_map[0], result);</span><br><span style="color: hsl(120, 100%, 40%);">+                       if (result != expect->payload_type_map[1]) {</span><br><span style="color: hsl(120, 100%, 40%);">+                               printf("     ERROR: expected -> %d\n", expect->payload_type_map[1]);</span><br><span style="color: hsl(120, 100%, 40%);">+                          ok = false;</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%);">+                   /* If the expected result is an error, don't do reverse map test */</span><br><span style="color: hsl(120, 100%, 40%);">+                       if (expect->payload_type_map[1] < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                            continue;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                   result = mgcp_codec_pt_translate(&conn[1], &conn[0], expect->payload_type_map[1]);</span><br><span style="color: hsl(120, 100%, 40%);">+                 printf(" - mgcp_codec_pt_translate(conn1, conn0, %d) -> %d\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                          expect->payload_type_map[1], result);</span><br><span style="color: hsl(120, 100%, 40%);">+                       if (result != expect->payload_type_map[0]) {</span><br><span style="color: hsl(120, 100%, 40%);">+                               printf("     ERROR: expected -> %d\n", expect->payload_type_map[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+                          ok = false;</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           for (conn_i = 0; conn_i < 2; conn_i++)</span><br><span style="color: hsl(120, 100%, 40%);">+                     mgcp_codec_reset_all(&conn[conn_i]);</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_ASSERT(ok);</span><br><span> }</span><br><span> </span><br><span> void test_conn_id_matching()</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-mgw/+/15134">change 15134</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/osmo-mgw/+/15134"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-mgw </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I888000d77512cfecb0f199b86ef6003e7fc0e6cb </div>
<div style="display:none"> Gerrit-Change-Number: 15134 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>