summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--test/test_vhost.py74
-rw-r--r--test/vpp_papi_provider.py46
-rw-r--r--test/vpp_vhost_interface.py40
3 files changed, 160 insertions, 0 deletions
diff --git a/test/test_vhost.py b/test/test_vhost.py
new file mode 100644
index 00000000000..9ee92a91b2b
--- /dev/null
+++ b/test/test_vhost.py
@@ -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)
diff --git a/test/vpp_papi_provider.py b/test/vpp_papi_provider.py
index ad887e8c079..c55f6676c30 100644
--- a/test/vpp_papi_provider.py
+++ b/test/vpp_papi_provider.py
@@ -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
index 00000000000..2249b062a64
--- /dev/null
+++ b/test/vpp_vhost_interface.py
@@ -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