<p>Pau Espin Pedrol <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/12143">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  Harald Welte: Looks good to me, but someone else must approve
  Pau Espin Pedrol: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">test: cs_paging_gprs_active: Make sure gprs data (TBF) is ongoing<br><br>PACCH is used for paging only if the MS is actively using a PDCH, and<br>the only way to be sure that's happening is to place some data through<br>the GPRS path so MS has TBF in use when the call is placed.<br><br>Change-Id: Id29391d75101d94e2cd58f444b383f4c5217ab6a<br>---<br>M suites/gprs/cs_paging_gprs_active.py<br>M suites/gprs/lib/testlib.py<br>2 files changed, 30 insertions(+), 73 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/suites/gprs/cs_paging_gprs_active.py b/suites/gprs/cs_paging_gprs_active.py</span><br><span>index fc0e160..b7dead2 100755</span><br><span>--- a/suites/gprs/cs_paging_gprs_active.py</span><br><span>+++ b/suites/gprs/cs_paging_gprs_active.py</span><br><span>@@ -5,79 +5,34 @@</span><br><span> </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%);">-pcu = bts.pcu()</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%);">-ggsn = suite.ggsn()</span><br><span style="color: hsl(0, 100%, 40%);">-sgsn = suite.sgsn(hlr, ggsn)</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 setup_run_iperf3_test_parallel</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-bsc.bts_add(bts)</span><br><span style="color: hsl(0, 100%, 40%);">-sgsn.bts_add(bts)</span><br><span style="color: hsl(120, 100%, 40%);">+def ready_cb_place_voicecall(ms_li):</span><br><span style="color: hsl(120, 100%, 40%);">+    print('waiting a few secs to make sure iperf3 test is running')</span><br><span style="color: hsl(120, 100%, 40%);">+    sleep(2)</span><br><span style="color: hsl(120, 100%, 40%);">+    # At this point in time, TBF should be enabled on both MS since they are sending/receiving data.</span><br><span style="color: hsl(120, 100%, 40%);">+    print('iperf3 running, let\'s place a call')</span><br><span style="color: hsl(120, 100%, 40%);">+    ms_mo = ms_li[0]</span><br><span style="color: hsl(120, 100%, 40%);">+    ms_mt = ms_li[1]</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> </span><br><span style="color: hsl(0, 100%, 40%);">-print('start network...')</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%);">-ggsn.start()</span><br><span style="color: hsl(0, 100%, 40%);">-sgsn.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%);">-bsc.start()</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> </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%);">-print('Waiting for bts to be ready...')</span><br><span style="color: hsl(0, 100%, 40%);">-wait(bts.ready_for_pcu)</span><br><span style="color: hsl(0, 100%, 40%);">-pcu.start()</span><br><span style="color: hsl(120, 100%, 40%);">+    sleep(5) # maintain the call active for 5 seconds</span><br><span> </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(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> </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%);">-ms_mo.attach()</span><br><span style="color: hsl(0, 100%, 40%);">-ms_mt.attach()</span><br><span> </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%);">-print('waiting for modems to attach to data services...')</span><br><span style="color: hsl(0, 100%, 40%);">-wait(ms_mo.is_attached)</span><br><span style="color: hsl(0, 100%, 40%);">-wait(ms_mt.is_attached)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-# We need to use inet46 since ofono qmi only uses ipv4v6 eua (OS#2713)</span><br><span style="color: hsl(0, 100%, 40%);">-ctx_id_v4_mo = ms_mo.activate_context(apn='inet46', protocol=ms_mo.CTX_PROT_IPv4)</span><br><span style="color: hsl(0, 100%, 40%);">-ctx_id_v4_mt = ms_mt.activate_context(apn='inet46', protocol=ms_mt.CTX_PROT_IPv4)</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(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-ms_mo.deactivate_context(ctx_id_v4_mo)</span><br><span style="color: hsl(0, 100%, 40%);">-ms_mt.deactivate_context(ctx_id_v4_mt)</span><br><span style="color: hsl(120, 100%, 40%);">+setup_run_iperf3_test_parallel(2, ready_cb=ready_cb_place_voicecall)</span><br><span>diff --git a/suites/gprs/lib/testlib.py b/suites/gprs/lib/testlib.py</span><br><span>index 13a6671..ac3a847 100644</span><br><span>--- a/suites/gprs/lib/testlib.py</span><br><span>+++ b/suites/gprs/lib/testlib.py</span><br><span>@@ -11,7 +11,7 @@</span><br><span>     print("\tSEND: %d KB, %d kbps, %d seconds" % (cli_sent['bytes']/1000, cli_sent['bits_per_second']/1000, cli_sent['seconds']))</span><br><span>     print("\tRECV: %d KB, %d kbps, %d seconds" % (cli_recv['bytes']/1000, cli_recv['bits_per_second']/1000, cli_recv['seconds']))</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-def run_iperf3_cli_parallel(iperf3clients, ms_li):</span><br><span style="color: hsl(120, 100%, 40%);">+def run_iperf3_cli_parallel(iperf3clients, ms_li, ready_cb):</span><br><span>     assert len(iperf3clients) == len(ms_li)</span><br><span>     procs = []</span><br><span>     for i in range(len(iperf3clients)):</span><br><span>@@ -20,6 +20,8 @@</span><br><span>     try:</span><br><span>         for proc in procs:</span><br><span>             proc.launch()</span><br><span style="color: hsl(120, 100%, 40%);">+        if ready_cb:</span><br><span style="color: hsl(120, 100%, 40%);">+            ready_cb(ms_li)</span><br><span>         for proc in procs:</span><br><span>             proc.wait()</span><br><span>     except Exception as e:</span><br><span>@@ -28,7 +30,7 @@</span><br><span>         raise e</span><br><span> </span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-def setup_run_iperf3_test_parallel(num_ms):</span><br><span style="color: hsl(120, 100%, 40%);">+def setup_run_iperf3_test_parallel(num_ms, ready_cb=None):</span><br><span>     hlr = suite.hlr()</span><br><span>     bts = suite.bts()</span><br><span>     pcu = bts.pcu()</span><br><span>@@ -98,7 +100,7 @@</span><br><span>         ms.setup_context_data_plane(ctx_id_v4)</span><br><span>         setattr(ms, 'tmp_ctx_id', ctx_id_v4)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    run_iperf3_cli_parallel(clients, ms_li)</span><br><span style="color: hsl(120, 100%, 40%);">+    run_iperf3_cli_parallel(clients, ms_li, ready_cb)</span><br><span> </span><br><span>     for i in range(num_ms):</span><br><span>         servers[i].stop()</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12143">change 12143</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/12143"/><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-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: Id29391d75101d94e2cd58f444b383f4c5217ab6a </div>
<div style="display:none"> Gerrit-Change-Number: 12143 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Pau Espin Pedrol <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>
<div style="display:none"> Gerrit-Reviewer: Pau Espin Pedrol <pespin@sysmocom.de> </div>