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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">debian, osmoappdesc.py, tests: switch to python 3<br><br>Make build and external tests work with python3, so we can drop<br>the python2 dependency.<br><br>This should be merged shortly after osmo-python-tests was migrated to<br>python3, and the jenkins build slaves were (automatically) updated to<br>have the new osmo-python-tests installed.<br><br>Related: OS#2819<br>Depends: osmo-python-tests I3ffc3519bf6c22536a49dad7a966188ddad351a7<br>Change-Id: I438ca0c4b8e7957d0f347a5b2f5c4cb93f9325e6<br>---<br>M debian/control<br>M osmoappdesc.py<br>M tests/ctrl_test_runner.py<br>M tests/vty_test_runner.py<br>4 files changed, 226 insertions(+), 226 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/debian/control b/debian/control</span><br><span>index a6b8c02..93b8a55 100644</span><br><span>--- a/debian/control</span><br><span>+++ b/debian/control</span><br><span>@@ -9,7 +9,7 @@</span><br><span>                automake,</span><br><span>                libtool,</span><br><span>                pkg-config,</span><br><span style="color: hsl(0, 100%, 40%);">-               python-minimal,</span><br><span style="color: hsl(120, 100%, 40%);">+               python3-minimal,</span><br><span>                libcdk5-dev,</span><br><span>                libtalloc-dev,</span><br><span>                libosmocore-dev (>= 1.2.0),</span><br><span>diff --git a/osmoappdesc.py b/osmoappdesc.py</span><br><span>index f5f18b2..08c3252 100644</span><br><span>--- a/osmoappdesc.py</span><br><span>+++ b/osmoappdesc.py</span><br><span>@@ -1,4 +1,4 @@</span><br><span style="color: hsl(0, 100%, 40%);">-#!/usr/bin/env python</span><br><span style="color: hsl(120, 100%, 40%);">+#!/usr/bin/env python3</span><br><span> </span><br><span> # (C) 2013 by Katerina Barone-Adesi <kat.obsc@gmail.com></span><br><span> # This program is free software: you can redistribute it and/or modify</span><br><span>diff --git a/tests/ctrl_test_runner.py b/tests/ctrl_test_runner.py</span><br><span>index 4d87b74..e598273 100755</span><br><span>--- a/tests/ctrl_test_runner.py</span><br><span>+++ b/tests/ctrl_test_runner.py</span><br><span>@@ -1,4 +1,4 @@</span><br><span style="color: hsl(0, 100%, 40%);">-#!/usr/bin/env python2</span><br><span style="color: hsl(120, 100%, 40%);">+#!/usr/bin/env python3</span><br><span> </span><br><span> # (C) 2013 by Jacob Erlbeck <jerlbeck@sysmocom.de></span><br><span> # (C) 2014 by Holger Hans Peter Freyther</span><br><span>@@ -53,8 +53,8 @@</span><br><span>         try:</span><br><span>             self.proc = osmoutil.popen_devnull(osmo_ctrl_cmd)</span><br><span>         except OSError:</span><br><span style="color: hsl(0, 100%, 40%);">-            print >> sys.stderr, "Current directory: %s" % os.getcwd()</span><br><span style="color: hsl(0, 100%, 40%);">-            print >> sys.stderr, "Consider setting -b"</span><br><span style="color: hsl(120, 100%, 40%);">+            print("Current directory: %s" % os.getcwd(), file=sys.stderr)</span><br><span style="color: hsl(120, 100%, 40%);">+            print("Consider setting -b", file=sys.stderr)</span><br><span>         time.sleep(2)</span><br><span> </span><br><span>         appstring = self.ctrl_app()[2]</span><br><span>@@ -72,7 +72,7 @@</span><br><span> </span><br><span>     def connect(self, host, port):</span><br><span>         if verbose:</span><br><span style="color: hsl(0, 100%, 40%);">-            print "Connecting to host %s:%i" % (host, port)</span><br><span style="color: hsl(120, 100%, 40%);">+            print("Connecting to host %s:%i" % (host, port))</span><br><span> </span><br><span>         retries = 30</span><br><span>         while True:</span><br><span>@@ -92,7 +92,7 @@</span><br><span> </span><br><span>     def send(self, data):</span><br><span>         if verbose:</span><br><span style="color: hsl(0, 100%, 40%);">-            print "Sending \"%s\"" %(data)</span><br><span style="color: hsl(120, 100%, 40%);">+            print("Sending \"%s\"" %(data))</span><br><span>         data = Ctrl().add_header(data)</span><br><span>         return self.sock.send(data) == len(data)</span><br><span> </span><br><span>@@ -121,9 +121,9 @@</span><br><span>         data = self.sock.recv(4096)</span><br><span>         while (len(data)>0):</span><br><span>             (head, data) = IPA().split_combined(data)</span><br><span style="color: hsl(0, 100%, 40%);">-            answer = Ctrl().rem_header(head)</span><br><span style="color: hsl(120, 100%, 40%);">+            answer = Ctrl().rem_header(head).decode()</span><br><span>             if verbose:</span><br><span style="color: hsl(0, 100%, 40%);">-                print "Got message:", answer</span><br><span style="color: hsl(120, 100%, 40%);">+                print("Got message:", answer)</span><br><span>             (mtype, id, msg) = answer.split(None, 2)</span><br><span>             id = int(id)</span><br><span>             rsp = {'mtype': mtype, 'id': id}</span><br><span>@@ -139,7 +139,7 @@</span><br><span>             responses[id] = rsp</span><br><span> </span><br><span>         if verbose:</span><br><span style="color: hsl(0, 100%, 40%);">-            print "Decoded replies: ", responses</span><br><span style="color: hsl(120, 100%, 40%);">+            print("Decoded replies: ", responses)</span><br><span> </span><br><span>         return responses</span><br><span> </span><br><span>@@ -159,80 +159,80 @@</span><br><span> </span><br><span>     def testCtrlErrs(self):</span><br><span>         r = self.do_get('invalid')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'ERROR')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['error'], 'Command not found')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'ERROR')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['error'], 'Command not found')</span><br><span> </span><br><span>         r = self.do_set('rf_locked', '999')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'ERROR')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['error'], 'Value failed verification.')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'ERROR')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['error'], 'Value failed verification.')</span><br><span> </span><br><span>         r = self.do_get('bts')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'ERROR')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['error'], 'Error while parsing the index.')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'ERROR')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['error'], 'Error while parsing the index.')</span><br><span> </span><br><span>         r = self.do_get('bts.999')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'ERROR')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['error'], 'Error while resolving object')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'ERROR')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['error'], 'Error while resolving object')</span><br><span> </span><br><span>     def testBtsLac(self):</span><br><span>         r = self.do_get('bts.0.location-area-code')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'bts.0.location-area-code')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '1')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'bts.0.location-area-code')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '1')</span><br><span> </span><br><span>         r = self.do_set('bts.0.location-area-code', '23')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'bts.0.location-area-code')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '23')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'bts.0.location-area-code')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '23')</span><br><span> </span><br><span>         r = self.do_get('bts.0.location-area-code')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'bts.0.location-area-code')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '23')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'bts.0.location-area-code')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '23')</span><br><span> </span><br><span>         r = self.do_set('bts.0.location-area-code', '-1')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'ERROR')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['error'], 'Input not within the range')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'ERROR')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['error'], 'Input not within the range')</span><br><span> </span><br><span>     def testBtsCi(self):</span><br><span>         r = self.do_get('bts.0.cell-identity')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'bts.0.cell-identity')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '6969')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'bts.0.cell-identity')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '6969')</span><br><span> </span><br><span>         r = self.do_set('bts.0.cell-identity', '23')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'bts.0.cell-identity')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '23')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'bts.0.cell-identity')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '23')</span><br><span> </span><br><span>         r = self.do_get('bts.0.cell-identity')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'bts.0.cell-identity')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '23')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'bts.0.cell-identity')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '23')</span><br><span> </span><br><span>         r = self.do_set('bts.0.cell-identity', '-1')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'ERROR')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['error'], 'Input not within the range')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'ERROR')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['error'], 'Input not within the range')</span><br><span> </span><br><span>     def testBtsGenerateSystemInformation(self):</span><br><span>         r = self.do_get('bts.0.send-new-system-informations')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'ERROR')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['error'], 'Write Only attribute')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'ERROR')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['error'], 'Write Only attribute')</span><br><span> </span><br><span>         # No RSL links so it will fail</span><br><span>         r = self.do_set('bts.0.send-new-system-informations', '1')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'ERROR')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['error'], 'Failed to generate SI')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'ERROR')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['error'], 'Failed to generate SI')</span><br><span> </span><br><span>     def testBtsChannelLoad(self):</span><br><span>         r = self.do_set('bts.0.channel-load', '1')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'ERROR')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['error'], 'Read Only attribute')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'ERROR')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['error'], 'Read Only attribute')</span><br><span> </span><br><span>         # No RSL link so everything is 0</span><br><span>         r = self.do_get('bts.0.channel-load')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'],</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'],</span><br><span>          'CCCH+SDCCH4,0,0 TCH/F,0,0 TCH/H,0,0 SDCCH8,0,0'</span><br><span>             + ' TCH/F_PDCH,0,0 CCCH+SDCCH4+CBCH,0,0'</span><br><span>             + ' SDCCH8+CBCH,0,0 TCH/F_TCH/H_PDCH,0,0')</span><br><span>@@ -240,254 +240,254 @@</span><br><span>     def testBtsOmlConnectionState(self):</span><br><span>         """Check OML state. It will not be connected"""</span><br><span>         r = self.do_set('bts.0.oml-connection-state', '1')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'ERROR')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['error'], 'Read Only attribute')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'ERROR')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['error'], 'Read Only attribute')</span><br><span> </span><br><span>         # No RSL link so everything is 0</span><br><span>         r = self.do_get('bts.0.oml-connection-state')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], 'disconnected')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], 'disconnected')</span><br><span> </span><br><span>     def testTrxPowerRed(self):</span><br><span>         r = self.do_get('bts.0.trx.0.max-power-reduction')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'bts.0.trx.0.max-power-reduction')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '20')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'bts.0.trx.0.max-power-reduction')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '20')</span><br><span> </span><br><span>         r = self.do_set('bts.0.trx.0.max-power-reduction', '22')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'bts.0.trx.0.max-power-reduction')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '22')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'bts.0.trx.0.max-power-reduction')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '22')</span><br><span>         </span><br><span>         r = self.do_get('bts.0.trx.0.max-power-reduction')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'bts.0.trx.0.max-power-reduction')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '22')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'bts.0.trx.0.max-power-reduction')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '22')</span><br><span>         </span><br><span>         r = self.do_set('bts.0.trx.0.max-power-reduction', '1')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'ERROR')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['error'], 'Value must be even')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'ERROR')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['error'], 'Value must be even')</span><br><span> </span><br><span>     def testTrxArfcn(self):</span><br><span>         r = self.do_get('bts.0.trx.0.arfcn')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'bts.0.trx.0.arfcn')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '871')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'bts.0.trx.0.arfcn')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '871')</span><br><span> </span><br><span>         r = self.do_set('bts.0.trx.0.arfcn', '873')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'bts.0.trx.0.arfcn')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '873')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'bts.0.trx.0.arfcn')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '873')</span><br><span> </span><br><span>         r = self.do_get('bts.0.trx.0.arfcn')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'bts.0.trx.0.arfcn')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '873')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'bts.0.trx.0.arfcn')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '873')</span><br><span> </span><br><span>         r = self.do_set('bts.0.trx.0.arfcn', '2000')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'ERROR')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['error'], 'Input not within the range')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'ERROR')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['error'], 'Input not within the range')</span><br><span> </span><br><span>     def testRfLock(self):</span><br><span>         r = self.do_get('bts.0.rf_state')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'bts.0.rf_state')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], 'inoperational,unlocked,on')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'bts.0.rf_state')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], 'inoperational,unlocked,on')</span><br><span> </span><br><span>         r = self.do_set('rf_locked', '1')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'rf_locked')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '1')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'rf_locked')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '1')</span><br><span> </span><br><span>         time.sleep(1.5)</span><br><span> </span><br><span>         r = self.do_get('bts.0.rf_state')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'bts.0.rf_state')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], 'inoperational,locked,off')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'bts.0.rf_state')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], 'inoperational,locked,off')</span><br><span> </span><br><span>         r = self.do_get('rf_locked')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'rf_locked')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], 'state=off,policy=off')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'rf_locked')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], 'state=off,policy=off')</span><br><span> </span><br><span>         r = self.do_set('rf_locked', '0')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'rf_locked')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '0')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'rf_locked')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '0')</span><br><span> </span><br><span>         time.sleep(1.5)</span><br><span> </span><br><span>         r = self.do_get('bts.0.rf_state')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'bts.0.rf_state')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], 'inoperational,unlocked,on')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'bts.0.rf_state')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], 'inoperational,unlocked,on')</span><br><span> </span><br><span>         r = self.do_get('rf_locked')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'rf_locked')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], 'state=off,policy=on')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'rf_locked')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], 'state=off,policy=on')</span><br><span> </span><br><span>     def testTimezone(self):</span><br><span>         r = self.do_get('timezone')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'timezone')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], 'off')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'timezone')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], 'off')</span><br><span> </span><br><span>         r = self.do_set('timezone', '-2,15,2')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'timezone')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '-2,15,2')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'timezone')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '-2,15,2')</span><br><span> </span><br><span>         r = self.do_get('timezone')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'timezone')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '-2,15,2')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'timezone')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '-2,15,2')</span><br><span> </span><br><span>         # Test invalid input</span><br><span>         r = self.do_set('timezone', '-2,15,2,5,6,7')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'timezone')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '-2,15,2')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'timezone')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '-2,15,2')</span><br><span> </span><br><span>         r = self.do_set('timezone', '-2,15')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'ERROR')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'ERROR')</span><br><span>         r = self.do_set('timezone', '-2')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'ERROR')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'ERROR')</span><br><span>         r = self.do_set('timezone', '1')</span><br><span> </span><br><span>         r = self.do_set('timezone', 'off')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'timezone')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], 'off')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'timezone')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], 'off')</span><br><span> </span><br><span>         r = self.do_get('timezone')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'timezone')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], 'off')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'timezone')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], 'off')</span><br><span> </span><br><span>     def testMcc(self):</span><br><span>         r = self.do_set('mcc', '23')</span><br><span>         r = self.do_get('mcc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'mcc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '023')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'mcc')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '023')</span><br><span> </span><br><span>         r = self.do_set('mcc', '023')</span><br><span>         r = self.do_get('mcc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'mcc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '023')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'mcc')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '023')</span><br><span> </span><br><span>     def testMnc(self):</span><br><span>         r = self.do_set('mnc', '9')</span><br><span>         r = self.do_get('mnc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'mnc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '09')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'mnc')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '09')</span><br><span> </span><br><span>         r = self.do_set('mnc', '09')</span><br><span>         r = self.do_get('mnc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'mnc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '09')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'mnc')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '09')</span><br><span> </span><br><span>         r = self.do_set('mnc', '009')</span><br><span>         r = self.do_get('mnc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'mnc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '009')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'mnc')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '009')</span><br><span> </span><br><span> </span><br><span>     def testMccMncApply(self):</span><br><span>         # Test some invalid input</span><br><span>         r = self.do_set('mcc-mnc-apply', 'WRONG')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'ERROR')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'ERROR')</span><br><span> </span><br><span>         r = self.do_set('mcc-mnc-apply', '1,')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'ERROR')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'ERROR')</span><br><span> </span><br><span>         r = self.do_set('mcc-mnc-apply', '200,3')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'mcc-mnc-apply')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], 'Tried to drop the BTS')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'mcc-mnc-apply')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], 'Tried to drop the BTS')</span><br><span> </span><br><span>         # Set it again</span><br><span>         r = self.do_set('mcc-mnc-apply', '200,3')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'mcc-mnc-apply')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], 'Nothing changed')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'mcc-mnc-apply')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], 'Nothing changed')</span><br><span> </span><br><span>         # Change it</span><br><span>         r = self.do_set('mcc-mnc-apply', '200,4')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'mcc-mnc-apply')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], 'Tried to drop the BTS')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'mcc-mnc-apply')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], 'Tried to drop the BTS')</span><br><span> </span><br><span>         # Change it</span><br><span>         r = self.do_set('mcc-mnc-apply', '201,4')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'mcc-mnc-apply')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], 'Tried to drop the BTS')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'mcc-mnc-apply')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], 'Tried to drop the BTS')</span><br><span> </span><br><span>         # Verify</span><br><span>         r = self.do_get('mnc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'mnc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '04')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'mnc')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '04')</span><br><span> </span><br><span>         r = self.do_get('mcc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'mcc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '201')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'mcc')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '201')</span><br><span> </span><br><span>         # Change it</span><br><span>         r = self.do_set('mcc-mnc-apply', '202,03')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'mcc-mnc-apply')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], 'Tried to drop the BTS')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'mcc-mnc-apply')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], 'Tried to drop the BTS')</span><br><span> </span><br><span>         r = self.do_get('mnc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'mnc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '03')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'mnc')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '03')</span><br><span> </span><br><span>         r = self.do_get('mcc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'mcc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '202')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'mcc')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '202')</span><br><span> </span><br><span>         # Test MNC with 3 digits</span><br><span>         r = self.do_set('mcc-mnc-apply', '2,003')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'mcc-mnc-apply')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], 'Tried to drop the BTS')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'mcc-mnc-apply')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], 'Tried to drop the BTS')</span><br><span> </span><br><span>         r = self.do_get('mnc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'mnc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '003')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'mnc')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '003')</span><br><span> </span><br><span>         r = self.do_get('mcc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'mcc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '002')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'mcc')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '002')</span><br><span> </span><br><span>         # Set same MNC with 3 digits</span><br><span>         r = self.do_set('mcc-mnc-apply', '2,003')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'mcc-mnc-apply')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], 'Nothing changed')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'SET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'mcc-mnc-apply')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], 'Nothing changed')</span><br><span> </span><br><span>         r = self.do_get('mnc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'mnc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '003')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'mnc')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '003')</span><br><span> </span><br><span>         r = self.do_get('mcc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['var'], 'mcc')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(r['value'], '002')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['mtype'], 'GET_REPLY')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['var'], 'mcc')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(r['value'], '002')</span><br><span> </span><br><span> def add_bsc_test(suite, workdir):</span><br><span>     if not os.path.isfile(os.path.join(workdir, "src/osmo-bsc/osmo-bsc")):</span><br><span>@@ -522,9 +522,9 @@</span><br><span>     if args.p:</span><br><span>         confpath = args.p</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    print "confpath %s, workdir %s" % (confpath, workdir)</span><br><span style="color: hsl(120, 100%, 40%);">+    print("confpath %s, workdir %s" % (confpath, workdir))</span><br><span>     os.chdir(workdir)</span><br><span style="color: hsl(0, 100%, 40%);">-    print "Running tests for specific control commands"</span><br><span style="color: hsl(120, 100%, 40%);">+    print("Running tests for specific control commands")</span><br><span>     suite = unittest.TestSuite()</span><br><span>     add_bsc_test(suite, workdir)</span><br><span>     res = unittest.TextTestRunner(verbosity=verbose_level).run(suite)</span><br><span>diff --git a/tests/vty_test_runner.py b/tests/vty_test_runner.py</span><br><span>index d2b3da4..a99bf4b 100755</span><br><span>--- a/tests/vty_test_runner.py</span><br><span>+++ b/tests/vty_test_runner.py</span><br><span>@@ -1,4 +1,4 @@</span><br><span style="color: hsl(0, 100%, 40%);">-#!/usr/bin/env python2</span><br><span style="color: hsl(120, 100%, 40%);">+#!/usr/bin/env python3</span><br><span> </span><br><span> # (C) 2013 by Katerina Barone-Adesi <kat.obsc@gmail.com></span><br><span> # (C) 2013 by Holger Hans Peter Freyther</span><br><span>@@ -33,9 +33,9 @@</span><br><span>     def checkForEndAndExit(self):</span><br><span>         res = self.vty.command("list")</span><br><span>         #print ('looking for "exit"\n')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assert_(res.find('  exit\r') > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertTrue(res.find('  exit\r') > 0)</span><br><span>         #print 'found "exit"\nlooking for "end"\n'</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assert_(res.find('  end\r') > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertTrue(res.find('  end\r') > 0)</span><br><span>         #print 'found "end"\n'</span><br><span> </span><br><span>     def vty_command(self):</span><br><span>@@ -54,8 +54,8 @@</span><br><span>         try:</span><br><span>             self.proc = osmoutil.popen_devnull(osmo_vty_cmd)</span><br><span>         except OSError:</span><br><span style="color: hsl(0, 100%, 40%);">-            print >> sys.stderr, "Current directory: %s" % os.getcwd()</span><br><span style="color: hsl(0, 100%, 40%);">-            print >> sys.stderr, "Consider setting -b"</span><br><span style="color: hsl(120, 100%, 40%);">+            print("Current directory: %s" % os.getcwd(), file=sys.stderr)</span><br><span style="color: hsl(120, 100%, 40%);">+            print("Consider setting -b", file=sys.stderr)</span><br><span> </span><br><span>         appstring = self.vty_app()[2]</span><br><span>         appport = self.vty_app()[0]</span><br><span>@@ -73,34 +73,34 @@</span><br><span>     def _testConfigNetworkTree(self, include_bsc_items=True):</span><br><span>         self.vty.enable()</span><br><span>         self.assertTrue(self.vty.verify("configure terminal",['']))</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(self.vty.node(), 'config')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(self.vty.node(), 'config')</span><br><span>         self.checkForEndAndExit()</span><br><span>         self.assertTrue(self.vty.verify("network",['']))</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(self.vty.node(), 'config-net')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(self.vty.node(), 'config-net')</span><br><span>         self.checkForEndAndExit()</span><br><span>         self.assertTrue(self.vty.verify("bts 0",['']))</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(self.vty.node(), 'config-net-bts')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(self.vty.node(), 'config-net-bts')</span><br><span>         self.checkForEndAndExit()</span><br><span>         self.assertTrue(self.vty.verify("trx 0",['']))</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(self.vty.node(), 'config-net-bts-trx')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(self.vty.node(), 'config-net-bts-trx')</span><br><span>         self.checkForEndAndExit()</span><br><span>         self.vty.command("write terminal")</span><br><span>         self.assertTrue(self.vty.verify("exit",['']))</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(self.vty.node(), 'config-net-bts')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(self.vty.node(), 'config-net-bts')</span><br><span>         self.assertTrue(self.vty.verify("exit",['']))</span><br><span>         self.assertTrue(self.vty.verify("bts 1",['']))</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(self.vty.node(), 'config-net-bts')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(self.vty.node(), 'config-net-bts')</span><br><span>         self.checkForEndAndExit()</span><br><span>         self.assertTrue(self.vty.verify("trx 1",['']))</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(self.vty.node(), 'config-net-bts-trx')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(self.vty.node(), 'config-net-bts-trx')</span><br><span>         self.checkForEndAndExit()</span><br><span>         self.vty.command("write terminal")</span><br><span>         self.assertTrue(self.vty.verify("exit",['']))</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(self.vty.node(), 'config-net-bts')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(self.vty.node(), 'config-net-bts')</span><br><span>         self.assertTrue(self.vty.verify("exit",['']))</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(self.vty.node(), 'config-net')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(self.vty.node(), 'config-net')</span><br><span>         self.assertTrue(self.vty.verify("exit",['']))</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(self.vty.node(), 'config')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(self.vty.node(), 'config')</span><br><span>         self.assertTrue(self.vty.verify("exit",['']))</span><br><span>         self.assertTrue(self.vty.node() is None)</span><br><span> </span><br><span>@@ -120,18 +120,18 @@</span><br><span>     def testVtyTree(self):</span><br><span>         self.vty.enable()</span><br><span>         self.assertTrue(self.vty.verify("configure terminal", ['']))</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(self.vty.node(), 'config')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(self.vty.node(), 'config')</span><br><span>         self.checkForEndAndExit()</span><br><span>         self.assertTrue(self.vty.verify("msc 0", ['']))</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(self.vty.node(), 'config-msc')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(self.vty.node(), 'config-msc')</span><br><span>         self.checkForEndAndExit()</span><br><span>         self.assertTrue(self.vty.verify("exit", ['']))</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(self.vty.node(), 'config')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(self.vty.node(), 'config')</span><br><span>         self.assertTrue(self.vty.verify("bsc", ['']))</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(self.vty.node(), 'config-bsc')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(self.vty.node(), 'config-bsc')</span><br><span>         self.checkForEndAndExit()</span><br><span>         self.assertTrue(self.vty.verify("exit", ['']))</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(self.vty.node(), 'config')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(self.vty.node(), 'config')</span><br><span>         self.assertTrue(self.vty.verify("exit", ['']))</span><br><span>         self.assertTrue(self.vty.node() is None)</span><br><span> </span><br><span>@@ -152,12 +152,12 @@</span><br><span> </span><br><span>         # Verify settings</span><br><span>         res = self.vty.command("write terminal")</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assert_(res.find('bsc-msc-lost-text MSC disconnected') > 0)</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(res.find('no bsc-msc-lost-text'), -1)</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assert_(res.find('bsc-welcome-text Hello MS') > 0)</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(res.find('no bsc-welcome-text'), -1)</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assert_(res.find('bsc-grace-text In grace period') > 0)</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(res.find('no bsc-grace-text'), -1)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertTrue(res.find('bsc-msc-lost-text MSC disconnected') > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(res.find('no bsc-msc-lost-text'), -1)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertTrue(res.find('bsc-welcome-text Hello MS') > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(res.find('no bsc-welcome-text'), -1)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertTrue(res.find('bsc-grace-text In grace period') > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(res.find('no bsc-grace-text'), -1)</span><br><span> </span><br><span>         # Now disable it..</span><br><span>         self.vty.verify("no bsc-msc-lost-text", [''])</span><br><span>@@ -166,12 +166,12 @@</span><br><span> </span><br><span>         # Verify settings</span><br><span>         res = self.vty.command("write terminal")</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(res.find('bsc-msc-lost-text MSC disconnected'), -1)</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assert_(res.find('no bsc-msc-lost-text') > 0)</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(res.find('bsc-welcome-text Hello MS'), -1)</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assert_(res.find('no bsc-welcome-text') > 0)</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(res.find('bsc-grace-text In grace period'), -1)</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assert_(res.find('no bsc-grace-text') > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(res.find('bsc-msc-lost-text MSC disconnected'), -1)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertTrue(res.find('no bsc-msc-lost-text') > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(res.find('bsc-welcome-text Hello MS'), -1)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertTrue(res.find('no bsc-welcome-text') > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(res.find('bsc-grace-text In grace period'), -1)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertTrue(res.find('no bsc-grace-text') > 0)</span><br><span> </span><br><span>     def testUssdNotificationsBsc(self):</span><br><span>         self.vty.enable()</span><br><span>@@ -186,16 +186,16 @@</span><br><span> </span><br><span>         # Verify settings</span><br><span>         res = self.vty.command("write terminal")</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assert_(res.find('missing-msc-text No MSC found') > 0)</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(res.find('no missing-msc-text'), -1)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertTrue(res.find('missing-msc-text No MSC found') > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(res.find('no missing-msc-text'), -1)</span><br><span> </span><br><span>         # Now disable it..</span><br><span>         self.vty.verify("no missing-msc-text", [''])</span><br><span> </span><br><span>         # Verify settings</span><br><span>         res = self.vty.command("write terminal")</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(res.find('missing-msc-text No MSC found'), -1)</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assert_(res.find('no missing-msc-text') > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(res.find('missing-msc-text No MSC found'), -1)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertTrue(res.find('no missing-msc-text') > 0)</span><br><span> </span><br><span>     def testNetworkTimezone(self):</span><br><span>         self.vty.enable()</span><br><span>@@ -213,32 +213,32 @@</span><br><span> </span><br><span>         # Verify settings</span><br><span>         res = self.vty.command("write terminal")</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assert_(res.find('timezone 2 30') > 0)</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(res.find('timezone 2 30 '), -1)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertTrue(res.find('timezone 2 30') > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(res.find('timezone 2 30 '), -1)</span><br><span> </span><br><span>         # Set time zone with DST</span><br><span>         self.vty.verify("timezone 2 30 1", [''])</span><br><span> </span><br><span>         # Verify settings</span><br><span>         res = self.vty.command("write terminal")</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assert_(res.find('timezone 2 30 1') > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertTrue(res.find('timezone 2 30 1') > 0)</span><br><span> </span><br><span>         # Now disable it..</span><br><span>         self.vty.verify("no timezone", [''])</span><br><span> </span><br><span>         # Verify settings</span><br><span>         res = self.vty.command("write terminal")</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(res.find(' timezone'), -1)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(res.find(' timezone'), -1)</span><br><span> </span><br><span>     def testShowNetwork(self):</span><br><span>         res = self.vty.command("show network")</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assert_(res.startswith('BSC is on Country Code') >= 0)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertTrue(res.startswith('BSC is on Country Code') >= 0)</span><br><span> </span><br><span>     def testMscDataCoreLACCI(self):</span><br><span>         self.vty.enable()</span><br><span>         res = self.vty.command("show running-config")</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(res.find("core-location-area-code"), -1)</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assertEquals(res.find("core-cell-identity"), -1)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(res.find("core-location-area-code"), -1)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(res.find("core-cell-identity"), -1)</span><br><span> </span><br><span>         self.vty.command("configure terminal")</span><br><span>         self.vty.command("msc 0")</span><br><span>@@ -246,8 +246,8 @@</span><br><span>         self.vty.command("core-cell-identity 333")</span><br><span> </span><br><span>         res = self.vty.command("show running-config")</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assert_(res.find("core-location-area-code 666") > 0)</span><br><span style="color: hsl(0, 100%, 40%);">-        self.assert_(res.find("core-cell-identity 333") > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertTrue(res.find("core-location-area-code 666") > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertTrue(res.find("core-cell-identity 333") > 0)</span><br><span> </span><br><span> </span><br><span> def add_bsc_test(suite, workdir):</span><br><span>@@ -283,9 +283,9 @@</span><br><span>     if args.p:</span><br><span>         confpath = args.p</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    print "confpath %s, workdir %s" % (confpath, workdir)</span><br><span style="color: hsl(120, 100%, 40%);">+    print("confpath %s, workdir %s" % (confpath, workdir))</span><br><span>     os.chdir(workdir)</span><br><span style="color: hsl(0, 100%, 40%);">-    print "Running tests for specific VTY commands"</span><br><span style="color: hsl(120, 100%, 40%);">+    print("Running tests for specific VTY commands")</span><br><span>     suite = unittest.TestSuite()</span><br><span>     add_bsc_test(suite, workdir)</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/16545">change 16545</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-bsc/+/16545"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I438ca0c4b8e7957d0f347a5b2f5c4cb93f9325e6 </div>
<div style="display:none"> Gerrit-Change-Number: 16545 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>