vxlan: vxlan/vxlan.api API cleanup
[vpp.git] / test / test_cli.py
index d3e69e9..a1ffbac 100644 (file)
@@ -1,7 +1,12 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 """CLI functional tests"""
 
+import datetime
+import time
 import unittest
+
+from vpp_papi import vpp_transport_shmem
+
 from framework import VppTestCase, VppTestRunner
 
 
@@ -11,6 +16,8 @@ class TestCLI(VppTestCase):
 
     @classmethod
     def setUpClass(cls):
+        # using the framework default
+        cls.vapi_response_timeout = 5
         super(TestCLI, cls).setUpClass()
 
     @classmethod
@@ -31,6 +38,52 @@ class TestCLI(VppTestCase):
         rv = self.vapi.papi.cli_inband(cmd='show version')
         self.assertEqual(rv.retval, 0)
 
+    def test_long_cli_delay(self):
+        """ Test that VppApiClient raises VppTransportShmemIOError if timeout."""  # noqa
+        with self.assertRaises(
+                vpp_transport_shmem.VppTransportShmemIOError) as ctx:
+            rv = self.vapi.papi.cli_inband(cmd='wait 10')
+
+    def test_long_cli_delay_override(self):
+        """ Test per-command _timeout option."""  # noqa
+        rv = self.vapi.papi.cli_inband(cmd='wait 10', _timeout=15)
+        self.assertEqual(rv.retval, 0)
+
+
+class TestCLIExtendedVapiTimeout(VppTestCase):
+    maxDiff = None
+
+    @classmethod
+    def setUpClass(cls):
+        cls.vapi_response_timeout = 15
+        cls.__doc__ = " CLI Test Case w/ Extended (%ssec) Vapi Timeout " \
+                      % cls.vapi_response_timeout
+        super(TestCLIExtendedVapiTimeout, cls).setUpClass()
+
+    @classmethod
+    def tearDownClass(cls):
+        super(TestCLIExtendedVapiTimeout, cls).tearDownClass()
+
+    def setUp(self):
+        super(TestCLIExtendedVapiTimeout, self).setUp()
+
+    def tearDown(self):
+        super(TestCLIExtendedVapiTimeout, self).tearDown()
+
+    def test_long_cli_delay(self):
+        """ Test that delayed result returns with extended timeout."""
+        wait_secs = self.vapi_response_timeout - 1
+
+        # get vpp time as float
+        start = self.vapi.papi.show_vpe_system_time(
+            _no_type_conversion=True).vpe_system_time
+        rv = self.vapi.papi.cli_inband(cmd='wait %s' % wait_secs)
+        now = self.vapi.papi.show_vpe_system_time(
+            _no_type_conversion=True).vpe_system_time
+
+        # assume that the overhead of the measurement is not more that .5 sec.
+        self.assertEqual(round(now - start), wait_secs)
+
 
 if __name__ == '__main__':
     unittest.main(testRunner=VppTestRunner)