X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=src%2Femuvim%2Ftest%2Funittests%2Ftest_emulator.py;fp=src%2Femuvim%2Ftest%2Funittests%2Ftest_emulator.py;h=80ac1d1a24fc2a23890eb5d3e16de38f9c72d54c;hb=7fce49bc94c4ca2c6d478c6a662397a5d0c72ce5;hp=ad9896a5d4c94095a8d27eabc2913b4ce640e87e;hpb=e3e034e3124ea755e924dc667fd1232323cff70c;p=osm%2Fvim-emu.git diff --git a/src/emuvim/test/unittests/test_emulator.py b/src/emuvim/test/unittests/test_emulator.py index ad9896a..80ac1d1 100755 --- a/src/emuvim/test/unittests/test_emulator.py +++ b/src/emuvim/test/unittests/test_emulator.py @@ -137,6 +137,64 @@ class testEmulatorNetworking( SimpleTestTopology ): # stop Mininet network self.stopNet() + def testSDNChainingMultiService(self): + """ + Create a two data centers and interconnect them with additional + switches between them. + Uses Ryu SDN controller. + Setup 2 services and setup isolated paths between them + Delete only the first service, and check that other one still works + """ + # create network + self.createNet( + nswitches=3, ndatacenter=2, nhosts=0, ndockers=0, + autolinkswitches=True, + controller=RemoteController, + enable_learning=False) + # setup links + self.net.addLink(self.dc[0], self.s[0]) + self.net.addLink(self.s[2], self.dc[1]) + # start Mininet network + self.startNet() + + ## First Service + # add compute resources + vnf1 = self.dc[0].startCompute("vnf1", network=[{'id': 'intf1', 'ip': '10.0.10.1/24'}]) + vnf2 = self.dc[1].startCompute("vnf2", network=[{'id': 'intf2', 'ip': '10.0.10.2/24'}]) + # setup links + self.net.setChain('vnf1', 'vnf2', 'intf1', 'intf2', bidirectional=True, cmd='add-flow', cookie=1) + # check connectivity by using ping + self.assertTrue(self.net.ping([vnf1, vnf2]) <= 0.0) + + ## Second Service + # add compute resources + vnf11 = self.dc[0].startCompute("vnf11", network=[{'id': 'intf1', 'ip': '10.0.20.1/24'}]) + vnf22 = self.dc[1].startCompute("vnf22", network=[{'id': 'intf2', 'ip': '10.0.20.2/24'}]) + + # check number of running nodes + self.assertTrue(len(self.getContainernetContainers()) == 4) + self.assertTrue(len(self.net.hosts) == 4) + self.assertTrue(len(self.net.switches) == 5) + + # setup links + self.net.setChain('vnf11', 'vnf22', 'intf1', 'intf2', bidirectional=True, cmd='add-flow', cookie=2) + # check connectivity by using ping + self.assertTrue(self.net.ping([vnf11, vnf22]) <= 0.0) + # check first service cannot ping second service + self.assertTrue(self.net.ping([vnf1, vnf22]) > 0.0) + self.assertTrue(self.net.ping([vnf2, vnf11]) > 0.0) + + # delete the first service chain + self.net.setChain('vnf1', 'vnf2', 'intf1', 'intf2', bidirectional=True, cmd='del-flows', cookie=1) + # check connectivity of first service is down + self.assertTrue(self.net.ping([vnf1, vnf2]) > 0.0) + #time.sleep(100) + # check connectivity of second service is still up + self.assertTrue(self.net.ping([vnf11, vnf22]) <= 0.0) + + # stop Mininet network + self.stopNet() + #@unittest.skip("disabled compute tests for development") class testEmulatorCompute( SimpleTestTopology ): """