From e8fa6209de1bf4f89cd57fcc09dfdc6086b92df9 Mon Sep 17 00:00:00 2001 From: Steven Date: Wed, 30 Aug 2017 14:36:45 -0700 Subject: [PATCH] vhost: add vhost interface add/delete/dump API test cases to make test 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 --- test/test_vhost.py | 74 +++++++++++++++++++++++++++++++++++++++++++++ test/vpp_papi_provider.py | 46 ++++++++++++++++++++++++++++ test/vpp_vhost_interface.py | 40 ++++++++++++++++++++++++ 3 files changed, 160 insertions(+) create mode 100644 test/test_vhost.py create mode 100644 test/vpp_vhost_interface.py 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 -- 2.16.6