X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2Fvim-emu.git;a=blobdiff_plain;f=src%2Femuvim%2Ftest%2Ftest_emulator.py;h=243f0501fd084293533c64ba4a37b071791214f4;hp=06e2da31acfa8560facf20cdb5dad8607ec27e7f;hb=5877ea26273aed77b51263efb19fc13b70087c25;hpb=9524ad314883db5445b27dfd2c61084a7e7329a2 diff --git a/src/emuvim/test/test_emulator.py b/src/emuvim/test/test_emulator.py index 06e2da3..243f050 100755 --- a/src/emuvim/test/test_emulator.py +++ b/src/emuvim/test/test_emulator.py @@ -6,105 +6,14 @@ Python API. Does not test API endpoints. This is done in separated test suites. """ -import unittest -import os import time -import subprocess -import docker -from emuvim.dcemulator.net import DCNetwork +import unittest from emuvim.dcemulator.node import EmulatorCompute -from mininet.node import Host, Controller, OVSSwitch, Docker -from mininet.link import TCLink -from mininet.topo import SingleSwitchTopo, LinearTopo -from mininet.log import setLogLevel -from mininet.util import quietRun -from mininet.clean import cleanup - - -class simpleTestTopology( unittest.TestCase ): - """ - Helper class to do basic test setups. - s1 -- s2 -- s3 -- ... -- sN - """ - - def __init__(self, *args, **kwargs): - self.net = None - self.s = [] # list of switches - self.h = [] # list of hosts - self.d = [] # list of docker containers - self.dc = [] # list of data centers - self.docker_cli = None - super(simpleTestTopology, self).__init__(*args, **kwargs) - - def createNet( - self, - nswitches=0, ndatacenter=0, nhosts=0, ndockers=0, - autolinkswitches=False): - """ - Creates a Mininet instance and automatically adds some - nodes to it. - """ - self.net = net = DCNetwork() - - # add some switches - for i in range(0, nswitches): - self.s.append(self.net.addSwitch('s%d' % i)) - # if specified, chain all switches - if autolinkswitches: - for i in range(0, len(self.s) - 1): - self.net.addLink(self.s[i], self.s[i + 1]) - # add some data centers - for i in range(0, ndatacenter): - self.dc.append( - self.net.addDatacenter( - 'datacenter%d' % i, - metadata={"unittest_dc": i})) - # add some hosts - for i in range(0, nhosts): - self.h.append(self.net.addHost('h%d' % i)) - # add some dockers - for i in range(0, ndockers): - self.d.append(self.net.addDocker('d%d' % i, dimage="ubuntu")) - - def startNet(self): - self.net.start() - - def stopNet(self): - self.net.stop() - - def getDockerCli(self): - """ - Helper to interact with local docker instance. - """ - if self.docker_cli is None: - self.docker_cli = docker.Client( - base_url='unix://var/run/docker.sock') - return self.docker_cli - - def getDockernetContainers(self): - """ - List the containers managed by dockernet - """ - return self.getDockerCli().containers(filters={"label": "com.dockernet"}) - - @staticmethod - def setUp(): - pass - - @staticmethod - def tearDown(): - cleanup() - # make sure that all pending docker containers are killed - with open(os.devnull, 'w') as devnull: - subprocess.call( - "sudo docker rm -f $(sudo docker ps --filter 'label=com.dockernet' -a -q)", - stdout=devnull, - stderr=devnull, - shell=True) +from emuvim.test.base import SimpleTestTopology #@unittest.skip("disabled topology tests for development") -class testEmulatorTopology( simpleTestTopology ): +class testEmulatorTopology( SimpleTestTopology ): """ Tests to check the topology API of the emulator. """ @@ -123,14 +32,15 @@ class testEmulatorTopology( simpleTestTopology ): # start Mininet network self.startNet() # check number of running nodes - assert(len(self.getDockernetContainers()) == 0) - assert(len(self.net.hosts) == 2) - assert(len(self.net.switches) == 1) + self.assertTrue(len(self.getContainernetContainers()) == 0) + self.assertTrue(len(self.net.hosts) == 2) + self.assertTrue(len(self.net.switches) == 1) # check connectivity by using ping - assert(self.net.ping([self.h[0], self.h[1]]) <= 0.0) + self.assertTrue(self.net.ping([self.h[0], self.h[1]]) <= 0.0) # stop Mininet network self.stopNet() + #@unittest.skip("disabled to test if CI fails because this is the first test.") def testMultipleDatacenterDirect(self): """ Create a two data centers and interconnect them. @@ -144,11 +54,11 @@ class testEmulatorTopology( simpleTestTopology ): # start Mininet network self.startNet() # check number of running nodes - assert(len(self.getDockernetContainers()) == 0) - assert(len(self.net.hosts) == 2) - assert(len(self.net.switches) == 2) + self.assertTrue(len(self.getContainernetContainers()) == 0) + self.assertTrue(len(self.net.hosts) == 2) + self.assertTrue(len(self.net.switches) == 2) # check connectivity by using ping - assert(self.net.ping([self.h[0], self.h[1]]) <= 0.0) + self.assertTrue(self.net.ping([self.h[0], self.h[1]]) <= 0.0) # stop Mininet network self.stopNet() @@ -169,17 +79,17 @@ class testEmulatorTopology( simpleTestTopology ): # start Mininet network self.startNet() # check number of running nodes - assert(len(self.getDockernetContainers()) == 0) - assert(len(self.net.hosts) == 2) - assert(len(self.net.switches) == 5) + self.assertTrue(len(self.getContainernetContainers()) == 0) + self.assertTrue(len(self.net.hosts) == 2) + self.assertTrue(len(self.net.switches) == 5) # check connectivity by using ping - assert(self.net.ping([self.h[0], self.h[1]]) <= 0.0) + self.assertTrue(self.net.ping([self.h[0], self.h[1]]) <= 0.0) # stop Mininet network self.stopNet() #@unittest.skip("disabled compute tests for development") -class testEmulatorCompute( simpleTestTopology ): +class testEmulatorCompute( SimpleTestTopology ): """ Tests to check the emulator's API to add and remove compute resources at runtime. @@ -200,15 +110,15 @@ class testEmulatorCompute( simpleTestTopology ): # add compute resources vnf1 = self.dc[0].startCompute("vnf1") # check number of running nodes - assert(len(self.getDockernetContainers()) == 1) - assert(len(self.net.hosts) == 2) - assert(len(self.net.switches) == 1) + self.assertTrue(len(self.getContainernetContainers()) == 1) + self.assertTrue(len(self.net.hosts) == 2) + self.assertTrue(len(self.net.switches) == 1) # check compute list result - assert(len(self.dc[0].listCompute()) == 1) - assert(isinstance(self.dc[0].listCompute()[0], EmulatorCompute)) - assert(self.dc[0].listCompute()[0].name == "vnf1") + self.assertTrue(len(self.dc[0].listCompute()) == 1) + self.assertTrue(isinstance(self.dc[0].listCompute()[0], EmulatorCompute)) + self.assertTrue(self.dc[0].listCompute()[0].name == "vnf1") # check connectivity by using ping - assert(self.net.ping([self.h[0], vnf1]) <= 0.0) + self.assertTrue(self.net.ping([self.h[0], vnf1]) <= 0.0) # stop Mininet network self.stopNet() @@ -226,21 +136,21 @@ class testEmulatorCompute( simpleTestTopology ): # add compute resources vnf1 = self.dc[0].startCompute("vnf1") # check number of running nodes - assert(len(self.getDockernetContainers()) == 1) - assert(len(self.net.hosts) == 2) - assert(len(self.net.switches) == 1) + self.assertTrue(len(self.getContainernetContainers()) == 1) + self.assertTrue(len(self.net.hosts) == 2) + self.assertTrue(len(self.net.switches) == 1) # check compute list result - assert(len(self.dc[0].listCompute()) == 1) + self.assertTrue(len(self.dc[0].listCompute()) == 1) # check connectivity by using ping - assert(self.net.ping([self.h[0], vnf1]) <= 0.0) + self.assertTrue(self.net.ping([self.h[0], vnf1]) <= 0.0) # remove compute resources self.dc[0].stopCompute("vnf1") # check number of running nodes - assert(len(self.getDockernetContainers()) == 0) - assert(len(self.net.hosts) == 1) - assert(len(self.net.switches) == 1) + self.assertTrue(len(self.getContainernetContainers()) == 0) + self.assertTrue(len(self.net.hosts) == 1) + self.assertTrue(len(self.net.switches) == 1) # check compute list result - assert(len(self.dc[0].listCompute()) == 0) + self.assertTrue(len(self.dc[0].listCompute()) == 0) # stop Mininet network self.stopNet() @@ -258,19 +168,19 @@ class testEmulatorCompute( simpleTestTopology ): # add compute resources vnf1 = self.dc[0].startCompute("vnf1") # check number of running nodes - assert(len(self.getDockernetContainers()) == 1) - assert(len(self.net.hosts) == 2) - assert(len(self.net.switches) == 1) + self.assertTrue(len(self.getContainernetContainers()) == 1) + self.assertTrue(len(self.net.hosts) == 2) + self.assertTrue(len(self.net.switches) == 1) # check compute list result - assert(len(self.dc[0].listCompute()) == 1) - assert(isinstance(self.dc[0].listCompute()[0], EmulatorCompute)) - assert(self.dc[0].listCompute()[0].name == "vnf1") + self.assertTrue(len(self.dc[0].listCompute()) == 1) + self.assertTrue(isinstance(self.dc[0].listCompute()[0], EmulatorCompute)) + self.assertTrue(self.dc[0].listCompute()[0].name == "vnf1") # check connectivity by using ping - assert(self.net.ping([self.h[0], vnf1]) <= 0.0) + self.assertTrue(self.net.ping([self.h[0], vnf1]) <= 0.0) # check get status s = self.dc[0].containers.get("vnf1").getStatus() - assert(s["name"] == "vnf1") - assert(s["state"]["Running"]) + self.assertTrue(s["name"] == "vnf1") + self.assertTrue(s["state"]["Running"]) # stop Mininet network self.stopNet() @@ -292,14 +202,14 @@ class testEmulatorCompute( simpleTestTopology ): vnf1 = self.dc[0].startCompute("vnf1") vnf2 = self.dc[1].startCompute("vnf2") # check number of running nodes - assert(len(self.getDockernetContainers()) == 2) - assert(len(self.net.hosts) == 2) - assert(len(self.net.switches) == 5) + self.assertTrue(len(self.getContainernetContainers()) == 2) + self.assertTrue(len(self.net.hosts) == 2) + self.assertTrue(len(self.net.switches) == 5) # check compute list result - assert(len(self.dc[0].listCompute()) == 1) - assert(len(self.dc[1].listCompute()) == 1) + self.assertTrue(len(self.dc[0].listCompute()) == 1) + self.assertTrue(len(self.dc[1].listCompute()) == 1) # check connectivity by using ping - assert(self.net.ping([vnf1, vnf2]) <= 0.0) + self.assertTrue(self.net.ping([vnf1, vnf2]) <= 0.0) # stop Mininet network self.stopNet() @@ -321,38 +231,38 @@ class testEmulatorCompute( simpleTestTopology ): vnf1 = self.dc[0].startCompute("vnf1") vnf2 = self.dc[1].startCompute("vnf2") # check number of running nodes - assert(len(self.getDockernetContainers()) == 2) - assert(len(self.net.hosts) == 2) - assert(len(self.net.switches) == 5) + self.assertTrue(len(self.getContainernetContainers()) == 2) + self.assertTrue(len(self.net.hosts) == 2) + self.assertTrue(len(self.net.switches) == 5) # check compute list result - assert(len(self.dc[0].listCompute()) == 1) - assert(len(self.dc[1].listCompute()) == 1) + self.assertTrue(len(self.dc[0].listCompute()) == 1) + self.assertTrue(len(self.dc[1].listCompute()) == 1) # check connectivity by using ping - assert(self.net.ping([vnf1, vnf2]) <= 0.0) + self.assertTrue(self.net.ping([vnf1, vnf2]) <= 0.0) # remove compute resources self.dc[0].stopCompute("vnf1") # check number of running nodes - assert(len(self.getDockernetContainers()) == 1) - assert(len(self.net.hosts) == 1) - assert(len(self.net.switches) == 5) + self.assertTrue(len(self.getContainernetContainers()) == 1) + self.assertTrue(len(self.net.hosts) == 1) + self.assertTrue(len(self.net.switches) == 5) # check compute list result - assert(len(self.dc[0].listCompute()) == 0) - assert(len(self.dc[1].listCompute()) == 1) + self.assertTrue(len(self.dc[0].listCompute()) == 0) + self.assertTrue(len(self.dc[1].listCompute()) == 1) # add compute resources vnf3 = self.dc[0].startCompute("vnf3") vnf4 = self.dc[0].startCompute("vnf4") # check compute list result - assert(len(self.dc[0].listCompute()) == 2) - assert(len(self.dc[1].listCompute()) == 1) - assert(self.net.ping([vnf3, vnf2]) <= 0.0) - assert(self.net.ping([vnf4, vnf2]) <= 0.0) + self.assertTrue(len(self.dc[0].listCompute()) == 2) + self.assertTrue(len(self.dc[1].listCompute()) == 1) + self.assertTrue(self.net.ping([vnf3, vnf2]) <= 0.0) + self.assertTrue(self.net.ping([vnf4, vnf2]) <= 0.0) # remove compute resources self.dc[0].stopCompute("vnf3") self.dc[0].stopCompute("vnf4") self.dc[1].stopCompute("vnf2") # check compute list result - assert(len(self.dc[0].listCompute()) == 0) - assert(len(self.dc[1].listCompute()) == 0) + self.assertTrue(len(self.dc[0].listCompute()) == 0) + self.assertTrue(len(self.dc[1].listCompute()) == 0) # stop Mininet network self.stopNet()