1eab98b5b0158d2b8206e3173584e06a7d792563
[osm/vim-emu.git] / src / emuvim / test / test_sonata_dummy_gatekeeper.py
1 import time
2 import requests
3 import subprocess
4 import os
5 from emuvim.test.base import SimpleTestTopology
6 from emuvim.api.sonata import SonataDummyGatekeeperEndpoint
7
8
9
10 class testSonataDummyGatekeeper(SimpleTestTopology):
11
12 def testAPI(self):
13 # ATTENTION: DEACTIVATED this test in CI env. due to Docker build errors that will disappear as soon as the new
14 # demo package with pre-build containers becomes available
15 if os.environ.get("SON_EMU_IN_DOCKER") is not None:
16 return
17 # create network
18 self.createNet(nswitches=0, ndatacenter=2, nhosts=2, ndockers=0)
19 # setup links
20 self.net.addLink(self.dc[0], self.h[0])
21 self.net.addLink(self.dc[0], self.dc[1])
22 self.net.addLink(self.h[1], self.dc[1])
23 # connect dummy GK to data centers
24 sdkg1 = SonataDummyGatekeeperEndpoint("0.0.0.0", 5000)
25 sdkg1.connectDatacenter(self.dc[0])
26 sdkg1.connectDatacenter(self.dc[1])
27 # run the dummy gatekeeper (in another thread, don't block)
28 sdkg1.start()
29 # start Mininet network
30 self.startNet()
31 time.sleep(1)
32
33 # download example from GitHub
34 print "downloading latest son-demo.son from GitHub"
35 subprocess.call(
36 ["wget",
37 "http://github.com/sonata-nfv/son-schema/blob/master/package-descriptor/examples/sonata-demo.son?raw=true",
38 "-O",
39 "son-demo.son"]
40 )
41
42 print "starting tests"
43 # board package
44 files = {"package": open("son-demo.son", "rb")}
45 r = requests.post("http://127.0.0.1:5000/packages", files=files)
46 self.assertEqual(r.status_code, 200)
47 self.assertTrue(r.json().get("service_uuid") is not None)
48 os.remove("son-demo.son")
49
50 # instantiate service
51 service_uuid = r.json().get("service_uuid")
52 r2 = requests.post("http://127.0.0.1:5000/instantiations", json={"service_uuid": service_uuid})
53 self.assertEqual(r2.status_code, 200)
54
55 # give the emulator some time to instantiate everything
56 time.sleep(2)
57
58 # check get request APIs
59 r3 = requests.get("http://127.0.0.1:5000/packages")
60 self.assertEqual(len(r3.json().get("service_uuid_list")), 1)
61 r4 = requests.get("http://127.0.0.1:5000/instantiations")
62 self.assertEqual(len(r4.json().get("service_instance_list")), 1)
63
64 # check number of running nodes
65 self.assertTrue(len(self.getDockernetContainers()) == 3)
66 self.assertTrue(len(self.net.hosts) == 5)
67 self.assertTrue(len(self.net.switches) == 2)
68 # check compute list result
69 self.assertTrue(len(self.dc[0].listCompute()) == 3)
70 # check connectivity by using ping
71 for vnf in self.dc[0].listCompute():
72 self.assertTrue(self.net.ping([self.h[0], vnf]) <= 0.0)
73 # stop Mininet network
74 self.stopNet()
75
76