<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/21506">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc: add active lchan matching via vty<br><br>Will be used in upcoming handover_2G test suite in<br>I0b2671304165a1aaae2b386af46fbd8b098e3bd8, which needs to verify that a<br>handover actually ended up on the expected lchan.<br><br>Change-Id: I03df8f3ae2ee47930eee311c7ce104c36dbb3154<br>---<br>M src/osmo_gsm_tester/obj/bsc_osmo.py<br>1 file changed, 49 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-gsm-tester refs/changes/06/21506/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo_gsm_tester/obj/bsc_osmo.py b/src/osmo_gsm_tester/obj/bsc_osmo.py</span><br><span>index 24e639e..636514e 100644</span><br><span>--- a/src/osmo_gsm_tester/obj/bsc_osmo.py</span><br><span>+++ b/src/osmo_gsm_tester/obj/bsc_osmo.py</span><br><span>@@ -20,6 +20,7 @@</span><br><span> import os</span><br><span> import re</span><br><span> import pprint</span><br><span style="color: hsl(120, 100%, 40%);">+import re</span><br><span> </span><br><span> from ..core import log, util, config, template, process</span><br><span> from ..core import schema</span><br><span>@@ -153,6 +154,54 @@</span><br><span>     def vty(self):</span><br><span>         return OsmoBscVty(self)</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    def get_active_lchans(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        lchan_summary = self.vty().cmd('show lchan summary')</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        re_lchan_summary = re.compile('BTS ([0-9]+), TRX ([0-9]+), Timeslot ([0-9]+) *([^,]*), Lchan ([0-9]+),.* State ([A-Za-z_]+).*')</span><br><span style="color: hsl(120, 100%, 40%);">+        active_lchans = set()</span><br><span style="color: hsl(120, 100%, 40%);">+        for line in lchan_summary:</span><br><span style="color: hsl(120, 100%, 40%);">+            m = re_lchan_summary.match(line)</span><br><span style="color: hsl(120, 100%, 40%);">+            if m:</span><br><span style="color: hsl(120, 100%, 40%);">+                bts, trx, ts, lchan_type, subslot, state = m.groups()</span><br><span style="color: hsl(120, 100%, 40%);">+                active_lchans.add('%s-%s-%s-%s %s %s' % (bts, trx, ts, subslot, lchan_type, state))</span><br><span style="color: hsl(120, 100%, 40%);">+        if not active_lchans:</span><br><span style="color: hsl(120, 100%, 40%);">+            self.dbg('No active lchans')</span><br><span style="color: hsl(120, 100%, 40%);">+        else:</span><br><span style="color: hsl(120, 100%, 40%);">+            self.dbg('Active lchans:\n|', '\n| '.join(active_lchans), '\n');</span><br><span style="color: hsl(120, 100%, 40%);">+        return active_lchans</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    def active_lchans_match(self, expected=[], not_expected=[]):</span><br><span style="color: hsl(120, 100%, 40%);">+        active_lchans = self.get_active_lchans()</span><br><span style="color: hsl(120, 100%, 40%);">+        matches = []</span><br><span style="color: hsl(120, 100%, 40%);">+        mismatches = []</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        for expected_lchan in expected:</span><br><span style="color: hsl(120, 100%, 40%);">+            found = False</span><br><span style="color: hsl(120, 100%, 40%);">+            for active_lchan in active_lchans:</span><br><span style="color: hsl(120, 100%, 40%);">+                if active_lchan.startswith(expected_lchan):</span><br><span style="color: hsl(120, 100%, 40%);">+                    found = True</span><br><span style="color: hsl(120, 100%, 40%);">+                    break</span><br><span style="color: hsl(120, 100%, 40%);">+            if found:</span><br><span style="color: hsl(120, 100%, 40%);">+                matches.append(expected_lchan)</span><br><span style="color: hsl(120, 100%, 40%);">+            else:</span><br><span style="color: hsl(120, 100%, 40%);">+                mismatches.append('missing: ' + expected_lchan)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        for not_expected_lchan in not_expected:</span><br><span style="color: hsl(120, 100%, 40%);">+            found = False</span><br><span style="color: hsl(120, 100%, 40%);">+            for active_lchan in active_lchans:</span><br><span style="color: hsl(120, 100%, 40%);">+                if active_lchan.startswith(not_expected_lchan):</span><br><span style="color: hsl(120, 100%, 40%);">+                    found = True</span><br><span style="color: hsl(120, 100%, 40%);">+                    break</span><br><span style="color: hsl(120, 100%, 40%);">+            if not found:</span><br><span style="color: hsl(120, 100%, 40%);">+                matches.append('not: ' + not_expected_lchan)</span><br><span style="color: hsl(120, 100%, 40%);">+            else:</span><br><span style="color: hsl(120, 100%, 40%);">+                mismatches.append('unexpected: ' + not_expected_lchan)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        if matches:</span><br><span style="color: hsl(120, 100%, 40%);">+            self.log('Found matching lchan activity (%d of %d requirements):' % (len(matches), len(expected) + len(not_expected)), matches)</span><br><span style="color: hsl(120, 100%, 40%);">+        if mismatches:</span><br><span style="color: hsl(120, 100%, 40%);">+            self.err('Found unexpected lchan activity (%d of %d requirements):' % (len(mismatches), len(expected) + len(not_expected)), mismatches)</span><br><span style="color: hsl(120, 100%, 40%);">+        return not mismatches</span><br><span> </span><br><span> class OsmoBscCtrl(log.Origin):</span><br><span>     PORT = 4249</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/21506">change 21506</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/+/21506"/><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: I03df8f3ae2ee47930eee311c7ce104c36dbb3154 </div>
<div style="display:none"> Gerrit-Change-Number: 21506 </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>