[PATCH 2/6] vty: Add test to check vty node hierarchy and related commands

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/OpenBSC@lists.osmocom.org/.

Jacob Erlbeck jerlbeck at sysmocom.de
Fri Aug 30 16:33:59 UTC 2013


These tests check for the availability of 'exit' and 'end' in each
configuration node and for the node specific commands to traverse
the tree.
In addition, using these commands from within inner contexts is
checked. This will detect problems, when an outer command word is
a prefix of an inner command, like with 'mgcp' and
'mgcp-through-msc-ipa'.

Several assertions are disabled due to inconsistencies and missing
commands (see above).
---
 openbsc/tests/vty_test_runner.py |  156 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 153 insertions(+), 3 deletions(-)

diff --git a/openbsc/tests/vty_test_runner.py b/openbsc/tests/vty_test_runner.py
index 87a45bb..7b8498b 100644
--- a/openbsc/tests/vty_test_runner.py
+++ b/openbsc/tests/vty_test_runner.py
@@ -56,7 +56,53 @@ class TestVTYBase(unittest.TestCase):
         self.vty = None
         osmoutil.end_proc(self.proc)
 
-class TestVTYNITB(TestVTYBase):
+
+class TestVTYGenericBTS(TestVTYBase):
+
+    def checkForEndAndExit(self):
+        res = self.vty.command("list")
+        #print ('looking for "exit"\n')
+        self.assert_(res.find('  exit\r') > 0)
+        #print 'found "exit"\nlooking for "end"\n'
+        self.assert_(res.find('  end\r') > 0)
+        #print 'found "end"\n'
+
+    def ignoredCheckForEndAndExit(self):
+        sys.stderr.write('Going to ignore the next assertion(s) due to known bugs\n')
+        try:
+            self.checkForEndAndExit()
+        except BaseException as e:
+            sys.stderr.write('Expected and ignored failure: %s\n' % (str(e))) 
+
+    def notIgnoredTest(self):
+        sys.stderr.write('Going to ignore the next assertion(s) due to known bugs\n')
+        return False
+
+
+    def _testConfigNetworkTree(self):
+        self.vty.enable()
+        self.vty.verify("configure terminal",[''])
+        self.assertEquals(self.vty.node(), 'config')
+        # self.checkForEndAndExit()
+        self.vty.verify("network",[''])
+        self.assertEquals(self.vty.node(), 'config-net')
+        self.checkForEndAndExit()
+        self.vty.verify("bts 0",[''])
+        self.assertEquals(self.vty.node(), 'config-net-bts')
+        self.checkForEndAndExit()
+        self.vty.verify("trx 0",[''])
+        self.assertEquals(self.vty.node(), 'config-net-bts-trx')
+        self.checkForEndAndExit()
+        self.vty.verify("exit",[''])
+        self.assertEquals(self.vty.node(), 'config-net-bts')
+        self.vty.verify("exit",[''])
+        self.assertEquals(self.vty.node(), 'config-net')
+        self.vty.verify("exit",[''])
+        self.assertEquals(self.vty.node(), 'config')
+        self.vty.verify("exit",[''])
+        self.assertTrue(self.vty.node() is None)
+
+class TestVTYNITB(TestVTYGenericBTS):
 
     def vty_command(self):
         return ["./src/osmo-nitb/osmo-nitb", "-c",
@@ -65,6 +111,39 @@ class TestVTYNITB(TestVTYBase):
     def vty_app(self):
         return (4242, "./src/osmo-nitb/osmo-nitb", "OpenBSC", "nitb")
 
+    def testConfigNetworkTree(self):
+	self._testConfigNetworkTree()
+
+    def testVtyTree(self):
+        self.vty.enable()
+        self.vty.verify("configure terminal", [''])
+        self.assertEquals(self.vty.node(), 'config')
+        self.ignoredCheckForEndAndExit()
+        self.vty.verify('mncc-int', [''])
+        self.assertEquals(self.vty.node(), 'config-mncc-int')
+        self.checkForEndAndExit()
+        if self.notIgnoredTest():
+            self.vty.verify('exit', [''])
+            self.assertEquals(self.vty.node(), 'config')
+        else:
+            self.vty.verify("configure terminal", [''])
+        self.vty.verify('smpp', [''])
+        self.assertEquals(self.vty.node(), 'config-smpp')
+        self.ignoredCheckForEndAndExit()
+        self.vty.verify("exit", [''])
+        if self.notIgnoredTest():
+            self.assertEquals(self.vty.node(), 'config')
+            self.vty.verify("exit", [''])
+        self.assertTrue(self.vty.node() is None)
+
+        # Check searching for outer node's commands
+        self.vty.command("configure terminal")
+        self.vty.command('mncc-int')
+        self.vty.command('smpp')
+        self.assertEquals(self.vty.node(), 'config-smpp')
+        self.vty.command('mncc-int')
+        self.assertEquals(self.vty.node(), 'config-mncc-int')
+
     def testEnableDisablePeriodicLU(self):
         self.vty.enable()
         self.vty.command("configure terminal")
@@ -88,7 +167,7 @@ class TestVTYNITB(TestVTYBase):
         self.assertEquals(res.find('periodic location update 60'), -1)
         self.assert_(res.find('no periodic location update') > 0)
 
-class TestVTYBSC(TestVTYBase):
+class TestVTYBSC(TestVTYGenericBTS):
 
     def vty_command(self):
         return ["./src/osmo-bsc/osmo-bsc", "-c",
@@ -97,6 +176,41 @@ class TestVTYBSC(TestVTYBase):
     def vty_app(self):
         return (4242, "./src/osmo-bsc/osmo-bsc", "OsmoBSC", "bsc")
 
+    def testConfigNetworkTree(self):
+	self._testConfigNetworkTree()
+
+    def testVtyTree(self):
+        self.vty.enable()
+        self.vty.verify("configure terminal", [''])
+        self.assertEquals(self.vty.node(), 'config')
+        # self.ignoredCheckForEndAndExit()
+        self.vty.verify("msc 0", [''])
+        self.assertEquals(self.vty.node(), 'config-msc')
+        # self.ignoredCheckForEndAndExit()
+        self.vty.verify("exit", [''])
+        if self.notIgnoredTest():
+            self.assertEquals(self.vty.node(), 'config')
+        else:
+            self.vty.verify("configure terminal", [''])
+        self.vty.command("bsc")
+        self.assertEquals(self.vty.node(), 'config-bsc')
+        self.ignoredCheckForEndAndExit()
+        self.vty.verify("exit", [''])
+        if self.notIgnoredTest():
+            self.assertEquals(self.vty.node(), 'config')
+        else:
+            self.vty.verify("configure terminal", [''])
+        self.vty.verify("exit", [''])
+        self.assertTrue(self.vty.node() is None)
+
+        # Check searching for outer node's commands
+        self.vty.command("configure terminal")
+        self.vty.command('msc 0')
+        self.vty.command("bsc")
+        self.assertEquals(self.vty.node(), 'config-bsc')
+        self.vty.command("msc 0")
+        self.assertEquals(self.vty.node(), 'config-msc')
+
     def testUssdNotifications(self):
         self.vty.enable()
         self.vty.command("configure terminal")
@@ -128,7 +242,7 @@ class TestVTYBSC(TestVTYBase):
         self.assert_(res.find('no bsc-welcome-text') > 0)
         self.assertEquals(res.find('bsc-welcome-text Hello MS'), -1)
 
-class TestVTYNAT(TestVTYBase):
+class TestVTYNAT(TestVTYGenericBTS):
 
     def vty_command(self):
         return ["./src/osmo-bsc_nat/osmo-bsc_nat", "-c",
@@ -137,6 +251,42 @@ class TestVTYNAT(TestVTYBase):
     def vty_app(self):
         return (4244, "src/osmo-bsc_nat/osmo-bsc_nat",  "OsmoBSCNAT", "nat")
 
+    def testVtyTree(self):
+        self.vty.enable()
+        self.vty.verify('configure terminal', [''])
+        self.assertEquals(self.vty.node(), 'config')
+        # self.checkForEndAndExit()
+        self.vty.verify('mgcp', [''])
+        self.assertEquals(self.vty.node(), 'config-mgcp')
+        self.checkForEndAndExit()
+        self.vty.verify('exit', [''])
+        self.assertEquals(self.vty.node(), 'config')
+        self.vty.verify('nat', [''])
+        self.assertEquals(self.vty.node(), 'config-nat')
+        self.checkForEndAndExit()
+        self.vty.verify('bsc 0', [''])
+        self.assertEquals(self.vty.node(), 'config-nat-bsc')
+        self.checkForEndAndExit()
+        self.vty.verify('exit', [''])
+        self.assertEquals(self.vty.node(), 'config-nat')
+        self.vty.verify('exit', [''])
+        self.assertEquals(self.vty.node(), 'config')
+        self.vty.verify('exit', [''])
+        self.assertTrue(self.vty.node() is None)
+
+        # Check searching for outer node's commands
+        self.vty.command('configure terminal')
+        self.vty.command('mgcp')
+        self.vty.command('nat')
+        self.assertEquals(self.vty.node(), 'config-nat')
+        self.vty.command('line vty')
+        self.assertEquals(self.vty.node(), 'config-line')
+        self.vty.command('nat')
+        self.assertEquals(self.vty.node(), 'config-nat')
+        self.vty.command('bsc 0')
+        self.vty.command('line vty')
+        self.assertEquals(self.vty.node(), 'config-line')
+
     def testRewriteNoRewrite(self):
         self.vty.enable()
         res = self.vty.command("configure terminal")
-- 
1.7.9.5





More information about the OpenBSC mailing list