X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Ftest_vhost.py;h=b9cc1102d5d350b1f661ff80a6f9fe12d8d23773;hb=73aff479bd7fcf8583e5193405e43faa822194c8;hp=9ee92a91b2b40385a2ac1634258463a82dce3746;hpb=e8fa6209de1bf4f89cd57fcc09dfdc6086b92df9;p=vpp.git diff --git a/test/test_vhost.py b/test/test_vhost.py index 9ee92a91b2b..b9cc1102d5d 100644 --- a/test/test_vhost.py +++ b/test/test_vhost.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import unittest @@ -11,25 +11,39 @@ class TesVhostInterface(VppTestCase): """Vhost User Test Case """ + @classmethod + def setUpClass(cls): + super(TesVhostInterface, cls).setUpClass() + + @classmethod + def tearDownClass(cls): + super(TesVhostInterface, cls).tearDownClass() + + def tearDown(self): + super(TesVhostInterface, self).tearDown() + if not self.vpp_dead: + if_dump = self.vapi.sw_interface_vhost_user_dump() + for ifc in if_dump: + self.vapi.delete_vhost_user_if(ifc.sw_if_index) 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 = VppVhostInterface(self, sock_filename=b'/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 = VppVhostInterface(self, sock_filename=b'/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) + self.assertIn('VirtualEthernet0/0/0', ifs) + self.assertIn('VirtualEthernet0/0/1', ifs) # verify they are in the dump also if_dump = self.vapi.sw_interface_vhost_user_dump() @@ -44,10 +58,10 @@ class TesVhostInterface(VppTestCase): ifs = self.vapi.cli("show interface") # verify VirtualEthernet0/0/0 still in the show - self.assertNotEqual(ifs.find('VirtualEthernet0/0/0'), -1) + self.assertIn('VirtualEthernet0/0/0', ifs) # verify VirtualEthernet0/0/1 not in the show - self.assertEqual(ifs.find('VirtualEthernet0/0/1'), -1) + self.assertNotIn('VirtualEthernet0/0/1', ifs) # verify VirtualEthernet0/0/1 is not in the dump if_dump = self.vapi.sw_interface_vhost_user_dump() @@ -64,11 +78,46 @@ class TesVhostInterface(VppTestCase): # verify VirtualEthernet0/0/0 not in the show ifs = self.vapi.cli("show interface") - self.assertEqual(ifs.find('VirtualEthernet0/0/0'), -1) + self.assertNotIn('VirtualEthernet0/0/0', ifs) # 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)) + def test_vhost_interface_state(self): + """ Vhost User interface states and events test """ + + self.vapi.want_interface_events() + + # clear outstanding events + # (like delete interface events from other tests) + self.vapi.collect_events() + + vhost_if = VppVhostInterface(self, sock_filename=b'/tmp/sock1') + + # create vhost interface + vhost_if.add_vpp_config() + self.sleep(0.1) + events = self.vapi.collect_events() + # creating interface does now create events + self.assert_equal(len(events), 1, "number of events") + + vhost_if.admin_up() + vhost_if.assert_interface_state(1, 0, expect_event=True) + + vhost_if.admin_down() + vhost_if.assert_interface_state(0, 0, expect_event=True) + + # delete vhost interface + vhost_if.remove_vpp_config() + event = self.vapi.wait_for_event(timeout=1) + self.assert_equal(event.sw_if_index, vhost_if.sw_if_index, + "sw_if_index") + self.assert_equal(event.deleted, 1, "deleted flag") + + # verify there are no more events + events = self.vapi.collect_events() + self.assert_equal(len(events), 0, "number of events") + if __name__ == '__main__': unittest.main(testRunner=VppTestRunner)