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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">tests: voice: Add voice call test with Osmux enabled<br><br>Change-Id: Ie4f360a77f6fcbc74f140a7fcb5feef2d94ac734<br>---<br>M src/osmo_gsm_tester/templates/osmo-mgw.cfg.tmpl<br>A suites/voice/lib/testlib.py<br>M suites/voice/mo_mt_call.py<br>A suites/voice/mo_mt_call_osmux.py<br>4 files changed, 81 insertions(+), 52 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo_gsm_tester/templates/osmo-mgw.cfg.tmpl b/src/osmo_gsm_tester/templates/osmo-mgw.cfg.tmpl</span><br><span>index f91ab30..5f351a4 100644</span><br><span>--- a/src/osmo_gsm_tester/templates/osmo-mgw.cfg.tmpl</span><br><span>+++ b/src/osmo_gsm_tester/templates/osmo-mgw.cfg.tmpl</span><br><span>@@ -15,3 +15,4 @@</span><br><span>  rtcp-omit</span><br><span>  rtp-accept-all 1</span><br><span>  osmux ${mgw.use_osmux}</span><br><span style="color: hsl(120, 100%, 40%);">+ osmux bind-ip ${mgw.ip_address.addr}</span><br><span>diff --git a/suites/voice/lib/testlib.py b/suites/voice/lib/testlib.py</span><br><span>new file mode 100644</span><br><span>index 0000000..7d934f1</span><br><span>--- /dev/null</span><br><span>+++ b/suites/voice/lib/testlib.py</span><br><span>@@ -0,0 +1,68 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#!/usr/bin/env python3</span><br><span style="color: hsl(120, 100%, 40%);">+from osmo_gsm_tester.testenv import *</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+def test_mo_mt_call(use_osmux=False, force_osmux=False):</span><br><span style="color: hsl(120, 100%, 40%);">+    hlr = suite.hlr()</span><br><span style="color: hsl(120, 100%, 40%);">+    bts = suite.bts()</span><br><span style="color: hsl(120, 100%, 40%);">+    mgw_msc = suite.mgw()</span><br><span style="color: hsl(120, 100%, 40%);">+    mgw_bsc = suite.mgw()</span><br><span style="color: hsl(120, 100%, 40%);">+    stp = suite.stp()</span><br><span style="color: hsl(120, 100%, 40%);">+    msc = suite.msc(hlr, mgw_msc, stp)</span><br><span style="color: hsl(120, 100%, 40%);">+    bsc = suite.bsc(msc, mgw_bsc, stp)</span><br><span style="color: hsl(120, 100%, 40%);">+    ms_mo = suite.modem()</span><br><span style="color: hsl(120, 100%, 40%);">+    ms_mt = suite.modem()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    hlr.start()</span><br><span style="color: hsl(120, 100%, 40%);">+    stp.start()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    msc.set_use_osmux(use_osmux, force_osmux)</span><br><span style="color: hsl(120, 100%, 40%);">+    msc.start()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    # osmo-msc still doesn't support linking 2 internal leg calls through Osmux</span><br><span style="color: hsl(120, 100%, 40%);">+    # if both calls are using Osmux. Currently, RTP is always used between the 2</span><br><span style="color: hsl(120, 100%, 40%);">+    # endpoints of the MGW. See OS#4065.</span><br><span style="color: hsl(120, 100%, 40%);">+    mgw_msc.set_use_osmux(use_osmux, False)</span><br><span style="color: hsl(120, 100%, 40%);">+    mgw_msc.start()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    # We don't want to force Osmux in BSC_MGW since in MGW BTS-side is still RTP.</span><br><span style="color: hsl(120, 100%, 40%);">+    mgw_bsc.set_use_osmux(use_osmux, False)</span><br><span style="color: hsl(120, 100%, 40%);">+    mgw_bsc.start()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    bsc.set_use_osmux(use_osmux, force_osmux)</span><br><span style="color: hsl(120, 100%, 40%);">+    bsc.bts_add(bts)</span><br><span style="color: hsl(120, 100%, 40%);">+    bsc.start()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    bts.start()</span><br><span style="color: hsl(120, 100%, 40%);">+    wait(bsc.bts_is_connected, bts)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    hlr.subscriber_add(ms_mo)</span><br><span style="color: hsl(120, 100%, 40%);">+    hlr.subscriber_add(ms_mt)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    ms_mo.connect(msc.mcc_mnc())</span><br><span style="color: hsl(120, 100%, 40%);">+    ms_mt.connect(msc.mcc_mnc())</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    ms_mo.log_info()</span><br><span style="color: hsl(120, 100%, 40%);">+    ms_mt.log_info()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    print('waiting for modems to attach...')</span><br><span style="color: hsl(120, 100%, 40%);">+    wait(ms_mo.is_connected, msc.mcc_mnc())</span><br><span style="color: hsl(120, 100%, 40%);">+    wait(ms_mt.is_connected, msc.mcc_mnc())</span><br><span style="color: hsl(120, 100%, 40%);">+    wait(msc.subscriber_attached, ms_mo, ms_mt)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    assert len(ms_mo.call_id_list()) == 0 and len(ms_mt.call_id_list()) == 0</span><br><span style="color: hsl(120, 100%, 40%);">+    mo_cid = ms_mo.call_dial(ms_mt)</span><br><span style="color: hsl(120, 100%, 40%);">+    mt_cid = ms_mt.call_wait_incoming(ms_mo)</span><br><span style="color: hsl(120, 100%, 40%);">+    print('dial success')</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    assert not ms_mo.call_is_active(mo_cid) and not ms_mt.call_is_active(mt_cid)</span><br><span style="color: hsl(120, 100%, 40%);">+    ms_mt.call_answer(mt_cid)</span><br><span style="color: hsl(120, 100%, 40%);">+    wait(ms_mo.call_is_active, mo_cid)</span><br><span style="color: hsl(120, 100%, 40%);">+    wait(ms_mt.call_is_active, mt_cid)</span><br><span style="color: hsl(120, 100%, 40%);">+    print('answer success, call established and ongoing')</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    sleep(5) # maintain the call active for 5 seconds</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    assert ms_mo.call_is_active(mo_cid) and ms_mt.call_is_active(mt_cid)</span><br><span style="color: hsl(120, 100%, 40%);">+    ms_mt.call_hangup(mt_cid)</span><br><span style="color: hsl(120, 100%, 40%);">+    wait(lambda: len(ms_mo.call_id_list()) == 0 and len(ms_mt.call_id_list()) == 0)</span><br><span style="color: hsl(120, 100%, 40%);">+    print('hangup success')</span><br><span>diff --git a/suites/voice/mo_mt_call.py b/suites/voice/mo_mt_call.py</span><br><span>index aeda80d..740b1fe 100755</span><br><span>--- a/suites/voice/mo_mt_call.py</span><br><span>+++ b/suites/voice/mo_mt_call.py</span><br><span>@@ -1,56 +1,8 @@</span><br><span> #!/usr/bin/env python3</span><br><span> from osmo_gsm_tester.testenv import *</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-hlr = suite.hlr()</span><br><span style="color: hsl(0, 100%, 40%);">-bts = suite.bts()</span><br><span style="color: hsl(0, 100%, 40%);">-mgw_msc = suite.mgw()</span><br><span style="color: hsl(0, 100%, 40%);">-mgw_bsc = suite.mgw()</span><br><span style="color: hsl(0, 100%, 40%);">-stp = suite.stp()</span><br><span style="color: hsl(0, 100%, 40%);">-msc = suite.msc(hlr, mgw_msc, stp)</span><br><span style="color: hsl(0, 100%, 40%);">-bsc = suite.bsc(msc, mgw_bsc, stp)</span><br><span style="color: hsl(0, 100%, 40%);">-ms_mo = suite.modem()</span><br><span style="color: hsl(0, 100%, 40%);">-ms_mt = suite.modem()</span><br><span style="color: hsl(120, 100%, 40%);">+import testlib</span><br><span style="color: hsl(120, 100%, 40%);">+suite.test_import_modules_register_for_cleanup(testlib)</span><br><span style="color: hsl(120, 100%, 40%);">+from testlib import test_mo_mt_call</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-hlr.start()</span><br><span style="color: hsl(0, 100%, 40%);">-stp.start()</span><br><span style="color: hsl(0, 100%, 40%);">-msc.start()</span><br><span style="color: hsl(0, 100%, 40%);">-mgw_msc.start()</span><br><span style="color: hsl(0, 100%, 40%);">-mgw_bsc.start()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-bsc.bts_add(bts)</span><br><span style="color: hsl(0, 100%, 40%);">-bsc.start()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-bts.start()</span><br><span style="color: hsl(0, 100%, 40%);">-wait(bsc.bts_is_connected, bts)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-hlr.subscriber_add(ms_mo)</span><br><span style="color: hsl(0, 100%, 40%);">-hlr.subscriber_add(ms_mt)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-ms_mo.connect(msc.mcc_mnc())</span><br><span style="color: hsl(0, 100%, 40%);">-ms_mt.connect(msc.mcc_mnc())</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-ms_mo.log_info()</span><br><span style="color: hsl(0, 100%, 40%);">-ms_mt.log_info()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-print('waiting for modems to attach...')</span><br><span style="color: hsl(0, 100%, 40%);">-wait(ms_mo.is_connected, msc.mcc_mnc())</span><br><span style="color: hsl(0, 100%, 40%);">-wait(ms_mt.is_connected, msc.mcc_mnc())</span><br><span style="color: hsl(0, 100%, 40%);">-wait(msc.subscriber_attached, ms_mo, ms_mt)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-assert len(ms_mo.call_id_list()) == 0 and len(ms_mt.call_id_list()) == 0</span><br><span style="color: hsl(0, 100%, 40%);">-mo_cid = ms_mo.call_dial(ms_mt)</span><br><span style="color: hsl(0, 100%, 40%);">-mt_cid = ms_mt.call_wait_incoming(ms_mo)</span><br><span style="color: hsl(0, 100%, 40%);">-print('dial success')</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-assert not ms_mo.call_is_active(mo_cid) and not ms_mt.call_is_active(mt_cid)</span><br><span style="color: hsl(0, 100%, 40%);">-ms_mt.call_answer(mt_cid)</span><br><span style="color: hsl(0, 100%, 40%);">-wait(ms_mo.call_is_active, mo_cid)</span><br><span style="color: hsl(0, 100%, 40%);">-wait(ms_mt.call_is_active, mt_cid)</span><br><span style="color: hsl(0, 100%, 40%);">-print('answer success, call established and ongoing')</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-sleep(5) # maintain the call active for 5 seconds</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-assert ms_mo.call_is_active(mo_cid) and ms_mt.call_is_active(mt_cid)</span><br><span style="color: hsl(0, 100%, 40%);">-ms_mt.call_hangup(mt_cid)</span><br><span style="color: hsl(0, 100%, 40%);">-wait(lambda: len(ms_mo.call_id_list()) == 0 and len(ms_mt.call_id_list()) == 0)</span><br><span style="color: hsl(0, 100%, 40%);">-print('hangup success')</span><br><span style="color: hsl(120, 100%, 40%);">+test_mo_mt_call(False, False)</span><br><span>diff --git a/suites/voice/mo_mt_call_osmux.py b/suites/voice/mo_mt_call_osmux.py</span><br><span>new file mode 100755</span><br><span>index 0000000..acf7d71</span><br><span>--- /dev/null</span><br><span>+++ b/suites/voice/mo_mt_call_osmux.py</span><br><span>@@ -0,0 +1,8 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#!/usr/bin/env python3</span><br><span style="color: hsl(120, 100%, 40%);">+from osmo_gsm_tester.testenv import *</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import testlib</span><br><span style="color: hsl(120, 100%, 40%);">+suite.test_import_modules_register_for_cleanup(testlib)</span><br><span style="color: hsl(120, 100%, 40%);">+from testlib import test_mo_mt_call</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+test_mo_mt_call(True, True)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/14548">change 14548</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-gsm-tester/+/14548"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-gsm-tester </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ie4f360a77f6fcbc74f140a7fcb5feef2d94ac734 </div>
<div style="display:none"> Gerrit-Change-Number: 14548 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </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>