restructured test files, and moved abstract test topo to base.py
[osm/vim-emu.git] / src / emuvim / test / base.py
1 """
2 Helper module that implements helpers for test implementations.
3 """
4
5 import unittest
6 import os
7 import subprocess
8 import docker
9 from emuvim.dcemulator.net import DCNetwork
10 from mininet.clean import cleanup
11
12 class SimpleTestTopology(unittest.TestCase):
13 """
14 Helper class to do basic test setups.
15 s1 -- s2 -- s3 -- ... -- sN
16 """
17
18 def __init__(self, *args, **kwargs):
19 self.net = None
20 self.s = [] # list of switches
21 self.h = [] # list of hosts
22 self.d = [] # list of docker containers
23 self.dc = [] # list of data centers
24 self.docker_cli = None
25 super(SimpleTestTopology, self).__init__(*args, **kwargs)
26
27 def createNet(
28 self,
29 nswitches=0, ndatacenter=0, nhosts=0, ndockers=0,
30 autolinkswitches=False):
31 """
32 Creates a Mininet instance and automatically adds some
33 nodes to it.
34 """
35 self.net = net = DCNetwork()
36
37 # add some switches
38 for i in range(0, nswitches):
39 self.s.append(self.net.addSwitch('s%d' % i))
40 # if specified, chain all switches
41 if autolinkswitches:
42 for i in range(0, len(self.s) - 1):
43 self.net.addLink(self.s[i], self.s[i + 1])
44 # add some data centers
45 for i in range(0, ndatacenter):
46 self.dc.append(
47 self.net.addDatacenter(
48 'datacenter%d' % i,
49 metadata={"unittest_dc": i}))
50 # add some hosts
51 for i in range(0, nhosts):
52 self.h.append(self.net.addHost('h%d' % i))
53 # add some dockers
54 for i in range(0, ndockers):
55 self.d.append(self.net.addDocker('d%d' % i, dimage="ubuntu"))
56
57 def startNet(self):
58 self.net.start()
59
60 def stopNet(self):
61 self.net.stop()
62
63 def getDockerCli(self):
64 """
65 Helper to interact with local docker instance.
66 """
67 if self.docker_cli is None:
68 self.docker_cli = docker.Client(
69 base_url='unix://var/run/docker.sock')
70 return self.docker_cli
71
72 def getDockernetContainers(self):
73 """
74 List the containers managed by dockernet
75 """
76 return self.getDockerCli().containers(filters={"label": "com.dockernet"})
77
78 @staticmethod
79 def setUp():
80 pass
81
82 @staticmethod
83 def tearDown():
84 cleanup()
85 # make sure that all pending docker containers are killed
86 with open(os.devnull, 'w') as devnull:
87 subprocess.call(
88 "sudo docker rm -f $(sudo docker ps --filter 'label=com.dockernet' -a -q)",
89 stdout=devnull,
90 stderr=devnull,
91 shell=True)