From: peusterm Date: Sat, 12 Mar 2016 11:13:06 +0000 (+0100) Subject: restructured test files, and moved abstract test topo to base.py X-Git-Tag: v3.1~163^2~3 X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2Fvim-emu.git;a=commitdiff_plain;h=41006b7133d28c2f2c5a95fdeb37962037c305a0 restructured test files, and moved abstract test topo to base.py --- diff --git a/src/emuvim/test/__init__.py b/src/emuvim/test/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/emuvim/test/base.py b/src/emuvim/test/base.py new file mode 100644 index 0000000..f652259 --- /dev/null +++ b/src/emuvim/test/base.py @@ -0,0 +1,91 @@ +""" +Helper module that implements helpers for test implementations. +""" + +import unittest +import os +import subprocess +import docker +from emuvim.dcemulator.net import DCNetwork +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) \ No newline at end of file diff --git a/src/emuvim/test/test_emulator.py b/src/emuvim/test/test_emulator.py index 06e2da3..905b1c6 100755 --- a/src/emuvim/test/test_emulator.py +++ b/src/emuvim/test/test_emulator.py @@ -7,104 +7,12 @@ 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 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. """ @@ -179,7 +87,7 @@ class testEmulatorTopology( simpleTestTopology ): #@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.