#!/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 class TestCLI(VppTestCase): """ CLI Test Case """ maxDiff = None @classmethod def setUpClass(cls): # using the framework default cls.vapi_response_timeout = 5 super(TestCLI, cls).setUpClass() @classmethod def tearDownClass(cls): super(TestCLI, cls).tearDownClass() def setUp(self): super(TestCLI, self).setUp() def tearDown(self): super(TestCLI, self).tearDown() def test_cli_retval(self): """ CLI inband retval """ rv = self.vapi.papi.cli_inband(cmd='this command does not exist') self.assertNotEqual(rv.retval, 0) 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)