<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>