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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">suites: 4g: Parametrize handover.py test<br><br>Change-Id: I7de5acdaa6b905e52655786758bd51490add1d2b<br>---<br>A sysmocom/scenarios/suite-4g@.conf<br>M sysmocom/suites/4g/handover.py<br>M sysmocom/suites/4g/suite.conf<br>3 files changed, 47 insertions(+), 19 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/sysmocom/scenarios/suite-4g@.conf b/sysmocom/scenarios/suite-4g@.conf</span><br><span>new file mode 100644</span><br><span>index 0000000..6c36e4c</span><br><span>--- /dev/null</span><br><span>+++ b/sysmocom/scenarios/suite-4g@.conf</span><br><span>@@ -0,0 +1,6 @@</span><br><span style="color: hsl(120, 100%, 40%);">+config:</span><br><span style="color: hsl(120, 100%, 40%);">+  suite:</span><br><span style="color: hsl(120, 100%, 40%);">+    4g:</span><br><span style="color: hsl(120, 100%, 40%);">+      handover:</span><br><span style="color: hsl(120, 100%, 40%);">+        duration: ${param1}</span><br><span style="color: hsl(120, 100%, 40%);">+        threshold: ${param2}</span><br><span>diff --git a/sysmocom/suites/4g/handover.py b/sysmocom/suites/4g/handover.py</span><br><span>index 25b424b..a503465 100755</span><br><span>--- a/sysmocom/suites/4g/handover.py</span><br><span>+++ b/sysmocom/suites/4g/handover.py</span><br><span>@@ -1,10 +1,32 @@</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%);">-epc = suite.epc()</span><br><span style="color: hsl(0, 100%, 40%);">-enb = suite.enb()</span><br><span style="color: hsl(0, 100%, 40%);">-ue = suite.modem()</span><br><span style="color: hsl(0, 100%, 40%);">-iperf3srv = suite.iperf3srv({'addr': epc.tun_addr()})</span><br><span style="color: hsl(120, 100%, 40%);">+import time</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+test_config = tenv.config_test_specific()</span><br><span style="color: hsl(120, 100%, 40%);">+duration = int(test_config.get('duration', 0)) # 0 = one HO loop</span><br><span style="color: hsl(120, 100%, 40%);">+threshold = int(test_config.get('threshold', 2))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import pprint</span><br><span style="color: hsl(120, 100%, 40%);">+print("TEST_CONFIG:\n" + pprint.pformat(test_config))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# attenuation from 0 to 10, then back to 0</span><br><span style="color: hsl(120, 100%, 40%);">+cell1_att_li = list(range(0, 11, 1)) + list(range(9, -1, -1))</span><br><span style="color: hsl(120, 100%, 40%);">+# attenuation from 10 to 0, then back to 10</span><br><span style="color: hsl(120, 100%, 40%);">+cell2_att_li = list(range(10, 0, -1)) + list(range(0, 11, 1))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+def do_one_ho_loop(rfemu_cell1, rfemu_cell2):</span><br><span style="color: hsl(120, 100%, 40%);">+    step = 0</span><br><span style="color: hsl(120, 100%, 40%);">+    while step < len(cell1_att_li):</span><br><span style="color: hsl(120, 100%, 40%);">+        rfemu_cell1.set_attenuation(cell1_att_li[step])</span><br><span style="color: hsl(120, 100%, 40%);">+        rfemu_cell2.set_attenuation(cell2_att_li[step])</span><br><span style="color: hsl(120, 100%, 40%);">+        step += 1</span><br><span style="color: hsl(120, 100%, 40%);">+        sleep(1)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+epc = tenv.epc()</span><br><span style="color: hsl(120, 100%, 40%);">+enb = tenv.enb()</span><br><span style="color: hsl(120, 100%, 40%);">+ue = tenv.modem()</span><br><span style="color: hsl(120, 100%, 40%);">+iperf3srv = tenv.iperf3srv({'addr': epc.tun_addr()})</span><br><span> iperf3srv.set_run_node(epc.run_node())</span><br><span> iperf3cli = iperf3srv.create_client()</span><br><span> iperf3cli.set_run_node(ue.run_node())</span><br><span>@@ -21,7 +43,7 @@</span><br><span> ue.connect(enb)</span><br><span> </span><br><span> iperf3srv.start()</span><br><span style="color: hsl(0, 100%, 40%);">-proc = iperf3cli.prepare_test_proc(False, ue.netns(), 30)</span><br><span style="color: hsl(120, 100%, 40%);">+proc = iperf3cli.prepare_test_proc(False, ue.netns(), duration + 30)</span><br><span> </span><br><span> print('waiting for UE to attach...')</span><br><span> wait(ue.is_connected, None)</span><br><span>@@ -30,22 +52,17 @@</span><br><span> rfemu_cell1 = enb.get_rfemu(0)</span><br><span> rfemu_cell2 = enb.get_rfemu(1)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# attenuation from 0 to 10, then back to 0</span><br><span style="color: hsl(0, 100%, 40%);">-cell1_att_li = list(range(0, 11, 1)) + list(range(9, -1, -1))</span><br><span style="color: hsl(0, 100%, 40%);">-# attenuation from 10 to 0, then back to 10</span><br><span style="color: hsl(0, 100%, 40%);">-cell2_att_li = list(range(10, 0, -1)) + list(range(0, 11, 1))</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+print('Iterating for %d seconds to produce at least %d handovers...' % (duration, threshold))</span><br><span> try:</span><br><span>     proc.launch()</span><br><span style="color: hsl(0, 100%, 40%);">-    step = 0</span><br><span style="color: hsl(0, 100%, 40%);">-    while step < len(cell1_att_li):</span><br><span style="color: hsl(0, 100%, 40%);">-        rfemu_cell1.set_attenuation(cell1_att_li[step])</span><br><span style="color: hsl(0, 100%, 40%);">-        rfemu_cell2.set_attenuation(cell2_att_li[step])</span><br><span style="color: hsl(0, 100%, 40%);">-        step += 1</span><br><span style="color: hsl(0, 100%, 40%);">-        sleep(1)</span><br><span style="color: hsl(120, 100%, 40%);">+    t_end = time.time() + duration</span><br><span style="color: hsl(120, 100%, 40%);">+    if duration == 0:</span><br><span style="color: hsl(120, 100%, 40%);">+        t_end += 1 # allow loop to run once</span><br><span style="color: hsl(120, 100%, 40%);">+    while time.time() < t_end:</span><br><span style="color: hsl(120, 100%, 40%);">+        do_one_ho_loop(rfemu_cell1, rfemu_cell2)</span><br><span>     num_handovers = ue.get_counter('handover_success')</span><br><span style="color: hsl(0, 100%, 40%);">-    if num_handovers != 2:</span><br><span style="color: hsl(0, 100%, 40%);">-        raise Exception('Wrong number of handovers %d vs expected 2' % num_handovers)</span><br><span style="color: hsl(120, 100%, 40%);">+    if num_handovers < threshold:</span><br><span style="color: hsl(120, 100%, 40%);">+        raise Exception('Wrong number of handovers %d < threshold %d during %d seconds' % (num_handovers, threshold, duration))</span><br><span> except Exception as e:</span><br><span>     try:</span><br><span>         proc.terminate() # make sure we always terminate the process</span><br><span>@@ -53,7 +70,7 @@</span><br><span>             print("Exception while terminating process %r" % repr(process))</span><br><span>     raise e</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-rest_str = 'Got %d successful handovers' % num_handovers</span><br><span style="color: hsl(120, 100%, 40%);">+rest_str = 'Got %d successful handovers (>= %d) during %d seconds' % (num_handovers, threshold, duration)</span><br><span> print(res_str)</span><br><span> test.set_report_stdout(res_str)</span><br><span> proc.terminate()</span><br><span>diff --git a/sysmocom/suites/4g/suite.conf b/sysmocom/suites/4g/suite.conf</span><br><span>index e439e99..fbd81b6 100644</span><br><span>--- a/sysmocom/suites/4g/suite.conf</span><br><span>+++ b/sysmocom/suites/4g/suite.conf</span><br><span>@@ -8,5 +8,10 @@</span><br><span>     features:</span><br><span>     - 4g</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+schema:</span><br><span style="color: hsl(120, 100%, 40%);">+  handover:</span><br><span style="color: hsl(120, 100%, 40%);">+        duration: 'duration'</span><br><span style="color: hsl(120, 100%, 40%);">+        threshold: 'uint'</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> defaults:</span><br><span>   timeout: 180s</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/18089">change 18089</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/+/18089"/><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: I7de5acdaa6b905e52655786758bd51490add1d2b </div>
<div style="display:none"> Gerrit-Change-Number: 18089 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </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: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>