vhost: add vhost interface add/delete/dump API test cases to make test 61/8261/5
authorSteven <sluong@cisco.com>
Wed, 30 Aug 2017 21:36:45 +0000 (14:36 -0700)
committerFlorin Coras <florin.coras@gmail.com>
Sun, 15 Apr 2018 00:15:08 +0000 (00:15 +0000)
The vhost binary APIs for add/delete/dump interface were available long ago.
But no unit tests were ever added in make test. This patch is to retrofit
the missing unit tests.

Change-Id: I489521b5ae359a1168ac5880a1f13a5f7e93ce4a
Signed-off-by: Steven <sluong@cisco.com>
test/test_vhost.py [new file with mode: 0644]
test/vpp_papi_provider.py
test/vpp_vhost_interface.py [new file with mode: 0644]

diff --git a/test/test_vhost.py b/test/test_vhost.py
new file mode 100644 (file)
index 0000000..9ee92a9
--- /dev/null
@@ -0,0 +1,74 @@
+#!/usr/bin/env python
+
+import unittest
+
+from framework import VppTestCase, VppTestRunner
+
+from vpp_vhost_interface import VppVhostInterface
+
+
+class TesVhostInterface(VppTestCase):
+    """Vhost User Test Case
+
+    """
+
+    def test_vhost(self):
+        """ Vhost User add/delete interface test """
+        self.logger.info("Vhost User add interfaces")
+
+        # create interface 1 (VirtualEthernet0/0/0)
+        vhost_if1 = VppVhostInterface(self, sock_filename='/tmp/sock1')
+        vhost_if1.add_vpp_config()
+        vhost_if1.admin_up()
+
+        # create interface 2 (VirtualEthernet0/0/1)
+        vhost_if2 = VppVhostInterface(self, sock_filename='/tmp/sock2')
+        vhost_if2.add_vpp_config()
+        vhost_if2.admin_up()
+
+        # verify both interfaces in the show
+        ifs = self.vapi.cli("show interface")
+        self.assertNotEqual(ifs.find('VirtualEthernet0/0/0'), -1)
+        self.assertNotEqual(ifs.find('VirtualEthernet0/0/1'), -1)
+
+        # verify they are in the dump also
+        if_dump = self.vapi.sw_interface_vhost_user_dump()
+        self.assertTrue(vhost_if1.is_interface_config_in_dump(if_dump))
+        self.assertTrue(vhost_if2.is_interface_config_in_dump(if_dump))
+
+        # delete VirtualEthernet0/0/1
+        self.logger.info("Deleting VirtualEthernet0/0/1")
+        vhost_if2.remove_vpp_config()
+
+        self.logger.info("Verifying VirtualEthernet0/0/1 is deleted")
+
+        ifs = self.vapi.cli("show interface")
+        # verify VirtualEthernet0/0/0 still in the show
+        self.assertNotEqual(ifs.find('VirtualEthernet0/0/0'), -1)
+
+        # verify VirtualEthernet0/0/1 not in the show
+        self.assertEqual(ifs.find('VirtualEthernet0/0/1'), -1)
+
+        # verify VirtualEthernet0/0/1 is not in the dump
+        if_dump = self.vapi.sw_interface_vhost_user_dump()
+        self.assertFalse(vhost_if2.is_interface_config_in_dump(if_dump))
+
+        # verify VirtualEthernet0/0/0 is still in the dump
+        self.assertTrue(vhost_if1.is_interface_config_in_dump(if_dump))
+
+        # delete VirtualEthernet0/0/0
+        self.logger.info("Deleting VirtualEthernet0/0/0")
+        vhost_if1.remove_vpp_config()
+
+        self.logger.info("Verifying VirtualEthernet0/0/0 is deleted")
+
+        # verify VirtualEthernet0/0/0 not in the show
+        ifs = self.vapi.cli("show interface")
+        self.assertEqual(ifs.find('VirtualEthernet0/0/0'), -1)
+
+        # verify VirtualEthernet0/0/0 is not in the dump
+        if_dump = self.vapi.sw_interface_vhost_user_dump()
+        self.assertFalse(vhost_if1.is_interface_config_in_dump(if_dump))
+
+if __name__ == '__main__':
+    unittest.main(testRunner=VppTestRunner)
index ad887e8..c55f667 100644 (file)
@@ -3486,3 +3486,49 @@ class VppPapiProvider(object):
         """
         return self.api(self.papi.sw_interface_bond_dump,
                         {})
+
+    def create_vhost_user_if(
+            self,
+            is_server,
+            sock_filename,
+            renumber,
+            custom_dev_instance,
+            use_custom_mac,
+            mac_address,
+            tag=''):
+        """
+        :param is_server: is server
+        :param sock_filename: socket name
+        :param renumber: renumber
+        :param custom_dev_instance: custom dev instance
+        :param use_custom_mac: use custom mac
+        :param mac_address: mac address
+        :param tag: tag (default ''
+        """
+        return self.api(
+            self.papi.create_vhost_user_if,
+            {'is_server': is_server,
+             'sock_filename': sock_filename,
+             'renumber': renumber,
+             'custom_dev_instance': custom_dev_instance,
+             'use_custom_mac': use_custom_mac,
+             'mac_address': mac_address,
+             'tag': tag
+             })
+
+    def delete_vhost_user_if(
+            self,
+            sw_if_index):
+        """
+        :param sw_if_index: interface the operation is applied to
+        """
+        return self.api(self.papi.delete_vhost_user_if,
+                        {'sw_if_index': sw_if_index, })
+
+    def sw_interface_vhost_user_dump(
+            self):
+        """
+
+        """
+        return self.api(self.papi.sw_interface_vhost_user_dump,
+                        {})
diff --git a/test/vpp_vhost_interface.py b/test/vpp_vhost_interface.py
new file mode 100644 (file)
index 0000000..2249b06
--- /dev/null
@@ -0,0 +1,40 @@
+from vpp_interface import VppInterface
+
+
+class VppVhostInterface(VppInterface):
+    """VPP vhost interface."""
+
+    def __init__(self, test, sock_filename, is_server=0, renumber=0,
+                 custom_dev_instance=0, use_custom_mac=0, mac_address='',
+                 tag=''):
+
+        """ Create VPP Vhost interface """
+        self._test = test
+        self.is_server = is_server
+        self.sock_filename = sock_filename
+        self.renumber = renumber
+        self.custom_dev_instance = custom_dev_instance
+        self.use_custom_mac = use_custom_mac
+        self.mac_address = mac_address
+        self.tag = tag
+
+    def add_vpp_config(self):
+        r = self.test.vapi.create_vhost_user_if(self.is_server,
+                                                self.sock_filename,
+                                                self.renumber,
+                                                self.custom_dev_instance,
+                                                self.use_custom_mac,
+                                                self.mac_address,
+                                                self.tag)
+        self._sw_if_index = r.sw_if_index
+        super(VppVhostInterface, self).__init__(self._test)
+
+    def remove_vpp_config(self):
+        self.test.vapi.delete_vhost_user_if(self.sw_if_index)
+
+    def is_interface_config_in_dump(self, dump):
+        for i in dump:
+            if i.sw_if_index == self.sw_if_index:
+                return True
+        else:
+            return False