2 Test suite to automatically test emulator functionalities.
3 Directly interacts with the emulator through the Mininet-like
6 Does not test API endpoints. This is done in separated test suites.
11 from emuvim
.dcemulator
.node
import EmulatorCompute
12 from emuvim
.test
.base
import SimpleTestTopology
15 #@unittest.skip("disabled topology tests for development")
16 class testEmulatorTopology( SimpleTestTopology
):
18 Tests to check the topology API of the emulator.
21 def testSingleDatacenter(self
):
23 Create a single data center and add check if its switch is up
24 by using manually added hosts. Tests especially the
25 data center specific addLink method.
28 self
.createNet(nswitches
=0, ndatacenter
=1, nhosts
=2, ndockers
=0)
30 self
.net
.addLink(self
.dc
[0], self
.h
[0])
31 self
.net
.addLink(self
.h
[1], self
.dc
[0])
32 # start Mininet network
34 # check number of running nodes
35 self
.assertTrue(len(self
.getDockernetContainers()) == 0)
36 self
.assertTrue(len(self
.net
.hosts
) == 2)
37 self
.assertTrue(len(self
.net
.switches
) == 1)
38 # check connectivity by using ping
39 self
.assertTrue(self
.net
.ping([self
.h
[0], self
.h
[1]]) <= 0.0)
40 # stop Mininet network
43 #@unittest.skip("disabled to test if CI fails because this is the first test.")
44 def testMultipleDatacenterDirect(self
):
46 Create a two data centers and interconnect them.
49 self
.createNet(nswitches
=0, ndatacenter
=2, nhosts
=2, ndockers
=0)
51 self
.net
.addLink(self
.dc
[0], self
.h
[0])
52 self
.net
.addLink(self
.h
[1], self
.dc
[1])
53 self
.net
.addLink(self
.dc
[0], self
.dc
[1])
54 # start Mininet network
56 # check number of running nodes
57 self
.assertTrue(len(self
.getDockernetContainers()) == 0)
58 self
.assertTrue(len(self
.net
.hosts
) == 2)
59 self
.assertTrue(len(self
.net
.switches
) == 2)
60 # check connectivity by using ping
61 self
.assertTrue(self
.net
.ping([self
.h
[0], self
.h
[1]]) <= 0.0)
62 # stop Mininet network
65 def testMultipleDatacenterWithIntermediateSwitches(self
):
67 Create a two data centers and interconnect them with additional
68 switches between them.
72 nswitches
=3, ndatacenter
=2, nhosts
=2, ndockers
=0,
73 autolinkswitches
=True)
75 self
.net
.addLink(self
.dc
[0], self
.h
[0])
76 self
.net
.addLink(self
.h
[1], self
.dc
[1])
77 self
.net
.addLink(self
.dc
[0], self
.s
[0])
78 self
.net
.addLink(self
.s
[2], self
.dc
[1])
79 # start Mininet network
81 # check number of running nodes
82 self
.assertTrue(len(self
.getDockernetContainers()) == 0)
83 self
.assertTrue(len(self
.net
.hosts
) == 2)
84 self
.assertTrue(len(self
.net
.switches
) == 5)
85 # check connectivity by using ping
86 self
.assertTrue(self
.net
.ping([self
.h
[0], self
.h
[1]]) <= 0.0)
87 # stop Mininet network
91 #@unittest.skip("disabled compute tests for development")
92 class testEmulatorCompute( SimpleTestTopology
):
94 Tests to check the emulator's API to add and remove
95 compute resources at runtime.
98 def testAddSingleComputeSingleDC(self
):
100 Adds a single compute instance to
101 a single DC and checks its connectivity with a
105 self
.createNet(nswitches
=0, ndatacenter
=1, nhosts
=1, ndockers
=0)
107 self
.net
.addLink(self
.dc
[0], self
.h
[0])
108 # start Mininet network
110 # add compute resources
111 vnf1
= self
.dc
[0].startCompute("vnf1")
112 # check number of running nodes
113 self
.assertTrue(len(self
.getDockernetContainers()) == 1)
114 self
.assertTrue(len(self
.net
.hosts
) == 2)
115 self
.assertTrue(len(self
.net
.switches
) == 1)
116 # check compute list result
117 self
.assertTrue(len(self
.dc
[0].listCompute()) == 1)
118 self
.assertTrue(isinstance(self
.dc
[0].listCompute()[0], EmulatorCompute
))
119 self
.assertTrue(self
.dc
[0].listCompute()[0].name
== "vnf1")
120 # check connectivity by using ping
121 self
.assertTrue(self
.net
.ping([self
.h
[0], vnf1
]) <= 0.0)
122 # stop Mininet network
125 def testRemoveSingleComputeSingleDC(self
):
127 Test stop method for compute instances.
128 Check that the instance is really removed.
131 self
.createNet(nswitches
=0, ndatacenter
=1, nhosts
=1, ndockers
=0)
133 self
.net
.addLink(self
.dc
[0], self
.h
[0])
134 # start Mininet network
136 # add compute resources
137 vnf1
= self
.dc
[0].startCompute("vnf1")
138 # check number of running nodes
139 self
.assertTrue(len(self
.getDockernetContainers()) == 1)
140 self
.assertTrue(len(self
.net
.hosts
) == 2)
141 self
.assertTrue(len(self
.net
.switches
) == 1)
142 # check compute list result
143 self
.assertTrue(len(self
.dc
[0].listCompute()) == 1)
144 # check connectivity by using ping
145 self
.assertTrue(self
.net
.ping([self
.h
[0], vnf1
]) <= 0.0)
146 # remove compute resources
147 self
.dc
[0].stopCompute("vnf1")
148 # check number of running nodes
149 self
.assertTrue(len(self
.getDockernetContainers()) == 0)
150 self
.assertTrue(len(self
.net
.hosts
) == 1)
151 self
.assertTrue(len(self
.net
.switches
) == 1)
152 # check compute list result
153 self
.assertTrue(len(self
.dc
[0].listCompute()) == 0)
154 # stop Mininet network
157 def testGetStatusSingleComputeSingleDC(self
):
159 Check if the getStatus functionality of EmulatorCompute
163 self
.createNet(nswitches
=0, ndatacenter
=1, nhosts
=1, ndockers
=0)
165 self
.net
.addLink(self
.dc
[0], self
.h
[0])
166 # start Mininet network
168 # add compute resources
169 vnf1
= self
.dc
[0].startCompute("vnf1")
170 # check number of running nodes
171 self
.assertTrue(len(self
.getDockernetContainers()) == 1)
172 self
.assertTrue(len(self
.net
.hosts
) == 2)
173 self
.assertTrue(len(self
.net
.switches
) == 1)
174 # check compute list result
175 self
.assertTrue(len(self
.dc
[0].listCompute()) == 1)
176 self
.assertTrue(isinstance(self
.dc
[0].listCompute()[0], EmulatorCompute
))
177 self
.assertTrue(self
.dc
[0].listCompute()[0].name
== "vnf1")
178 # check connectivity by using ping
179 self
.assertTrue(self
.net
.ping([self
.h
[0], vnf1
]) <= 0.0)
181 s
= self
.dc
[0].containers
.get("vnf1").getStatus()
182 self
.assertTrue(s
["name"] == "vnf1")
183 self
.assertTrue(s
["state"]["Running"])
184 # stop Mininet network
187 def testConnectivityMultiDC(self
):
189 Test if compute instances started in different data centers
190 are able to talk to each other.
194 nswitches
=3, ndatacenter
=2, nhosts
=0, ndockers
=0,
195 autolinkswitches
=True)
197 self
.net
.addLink(self
.dc
[0], self
.s
[0])
198 self
.net
.addLink(self
.dc
[1], self
.s
[2])
199 # start Mininet network
201 # add compute resources
202 vnf1
= self
.dc
[0].startCompute("vnf1")
203 vnf2
= self
.dc
[1].startCompute("vnf2")
204 # check number of running nodes
205 self
.assertTrue(len(self
.getDockernetContainers()) == 2)
206 self
.assertTrue(len(self
.net
.hosts
) == 2)
207 self
.assertTrue(len(self
.net
.switches
) == 5)
208 # check compute list result
209 self
.assertTrue(len(self
.dc
[0].listCompute()) == 1)
210 self
.assertTrue(len(self
.dc
[1].listCompute()) == 1)
211 # check connectivity by using ping
212 self
.assertTrue(self
.net
.ping([vnf1
, vnf2
]) <= 0.0)
213 # stop Mininet network
216 def testInterleavedAddRemoveMultiDC(self
):
218 Test multiple, interleaved add and remove operations and ensure
219 that always all expected compute instances are reachable.
223 nswitches
=3, ndatacenter
=2, nhosts
=0, ndockers
=0,
224 autolinkswitches
=True)
226 self
.net
.addLink(self
.dc
[0], self
.s
[0])
227 self
.net
.addLink(self
.dc
[1], self
.s
[2])
228 # start Mininet network
230 # add compute resources
231 vnf1
= self
.dc
[0].startCompute("vnf1")
232 vnf2
= self
.dc
[1].startCompute("vnf2")
233 # check number of running nodes
234 self
.assertTrue(len(self
.getDockernetContainers()) == 2)
235 self
.assertTrue(len(self
.net
.hosts
) == 2)
236 self
.assertTrue(len(self
.net
.switches
) == 5)
237 # check compute list result
238 self
.assertTrue(len(self
.dc
[0].listCompute()) == 1)
239 self
.assertTrue(len(self
.dc
[1].listCompute()) == 1)
240 # check connectivity by using ping
241 self
.assertTrue(self
.net
.ping([vnf1
, vnf2
]) <= 0.0)
242 # remove compute resources
243 self
.dc
[0].stopCompute("vnf1")
244 # check number of running nodes
245 self
.assertTrue(len(self
.getDockernetContainers()) == 1)
246 self
.assertTrue(len(self
.net
.hosts
) == 1)
247 self
.assertTrue(len(self
.net
.switches
) == 5)
248 # check compute list result
249 self
.assertTrue(len(self
.dc
[0].listCompute()) == 0)
250 self
.assertTrue(len(self
.dc
[1].listCompute()) == 1)
251 # add compute resources
252 vnf3
= self
.dc
[0].startCompute("vnf3")
253 vnf4
= self
.dc
[0].startCompute("vnf4")
254 # check compute list result
255 self
.assertTrue(len(self
.dc
[0].listCompute()) == 2)
256 self
.assertTrue(len(self
.dc
[1].listCompute()) == 1)
257 self
.assertTrue(self
.net
.ping([vnf3
, vnf2
]) <= 0.0)
258 self
.assertTrue(self
.net
.ping([vnf4
, vnf2
]) <= 0.0)
259 # remove compute resources
260 self
.dc
[0].stopCompute("vnf3")
261 self
.dc
[0].stopCompute("vnf4")
262 self
.dc
[1].stopCompute("vnf2")
263 # check compute list result
264 self
.assertTrue(len(self
.dc
[0].listCompute()) == 0)
265 self
.assertTrue(len(self
.dc
[1].listCompute()) == 0)
266 # stop Mininet network
269 if __name__
== '__main__':