blob: 7530f15d6513e505a22104f3c564f7b384e7217b [file] [log] [blame]
peusterm72f09882018-05-15 17:10:27 +02001# Copyright (c) 2015 SONATA-NFV and Paderborn University
2# ALL RIGHTS RESERVED.
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16# Neither the name of the SONATA-NFV, Paderborn University
17# nor the names of its contributors may be used to endorse or promote
18# products derived from this software without specific prior written
19# permission.
20#
21# This work has been performed in the framework of the SONATA project,
22# funded by the European Commission under Grant number 671517 through
23# the Horizon 2020 and 5G-PPP programmes. The authors would like to
24# acknowledge the contributions of their colleagues of the SONATA
25# partner consortium (www.sonata-nfv.eu).
peustermf27a5922017-05-17 08:48:54 +020026import os
27import unittest
28import requests
29import simplejson as json
peustermdd559512017-09-21 16:29:34 +020030import yaml
peustermf27a5922017-05-17 08:48:54 +020031
32from emuvim.test.api_base_openstack import ApiBaseOpenStack
33
34
35class testRestApi(ApiBaseOpenStack):
36 """
37 Tests to check the REST API endpoints of the emulator.
38 """
39
40 def setUp(self):
41 # create network
peusterm72f09882018-05-15 17:10:27 +020042 self.createNet(nswitches=3, ndatacenter=2, nhosts=2,
43 ndockers=0, autolinkswitches=True)
peustermf27a5922017-05-17 08:48:54 +020044
45 # setup links
46 self.net.addLink(self.dc[0], self.h[0])
47 self.net.addLink(self.h[1], self.dc[1])
48 self.net.addLink(self.dc[0], self.dc[1])
49
50 # start api
51 self.startApi()
52
53 # start Mininet network
54 self.startNet()
peustermf27a5922017-05-17 08:48:54 +020055
peustermf27a5922017-05-17 08:48:54 +020056 def testNovaDummy(self):
57 print('->>>>>>> test Nova Dummy Class->>>>>>>>>>>>>>>')
58 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
59 print(" ")
60
61 headers = {'Content-type': 'application/json'}
peusterm72f09882018-05-15 17:10:27 +020062 test_heatapi_template_create_stack = open(os.path.join(os.path.dirname(
63 __file__), "templates/test_heatapi_template_create_stack.yml")).read()
peusterme22979a2017-05-18 13:28:38 +020064 url = "http://0.0.0.0:18004/v1/tenantabc123/stacks"
peustermdd559512017-09-21 16:29:34 +020065 requests.post(url, data=json.dumps(yaml.load(test_heatapi_template_create_stack)),
peustermf27a5922017-05-17 08:48:54 +020066 headers=headers)
67
68 print('->>>>>>> test Nova List Versions ->>>>>>>>>>>>>>>')
69 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +020070 url = "http://0.0.0.0:18774/"
peustermf27a5922017-05-17 08:48:54 +020071 listapiversionnovaresponse = requests.get(url, headers=headers)
72 self.assertEqual(listapiversionnovaresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +020073 self.assertEqual(json.loads(listapiversionnovaresponse.content)[
74 "versions"][0]["id"], "v2.1")
75 self.assertEqual(json.loads(listapiversionnovaresponse.content)[
76 "versions"][0]["status"], "CURRENT")
77 self.assertEqual(json.loads(listapiversionnovaresponse.content)[
78 "versions"][0]["version"], "2.38")
79 self.assertEqual(json.loads(listapiversionnovaresponse.content)[
80 "versions"][0]["min_version"], "2.1")
81 self.assertEqual(json.loads(listapiversionnovaresponse.content)[
82 "versions"][0]["updated"], "2013-07-23T11:33:21Z")
peustermf27a5922017-05-17 08:48:54 +020083 print(" ")
84
85 print('->>>>>>> test Nova Version Show ->>>>>>>>>>>>>>>')
86 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +020087 url = "http://0.0.0.0:18774/v2.1/id_bla"
peustermf27a5922017-05-17 08:48:54 +020088 listapiversion21novaresponse = requests.get(url, headers=headers)
89 self.assertEqual(listapiversion21novaresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +020090 self.assertEqual(json.loads(listapiversion21novaresponse.content)[
91 "version"]["id"], "v2.1")
92 self.assertEqual(json.loads(listapiversion21novaresponse.content)[
93 "version"]["status"], "CURRENT")
94 self.assertEqual(json.loads(listapiversion21novaresponse.content)[
95 "version"]["version"], "2.38")
96 self.assertEqual(json.loads(listapiversion21novaresponse.content)[
97 "version"]["min_version"], "2.1")
98 self.assertEqual(json.loads(listapiversion21novaresponse.content)[
99 "version"]["updated"], "2013-07-23T11:33:21Z")
peustermf27a5922017-05-17 08:48:54 +0200100 print(" ")
101
102 print('->>>>>>> test Nova Version List Server APIs ->>>>>>>>>>>>>>>')
103 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200104 url = "http://0.0.0.0:18774/v2.1/id_bla/servers"
peustermf27a5922017-05-17 08:48:54 +0200105 listserverapisnovaresponse = requests.get(url, headers=headers)
106 self.assertEqual(listserverapisnovaresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200107 self.assertNotEqual(json.loads(listserverapisnovaresponse.content)[
108 "servers"][0]["name"], "")
peustermf27a5922017-05-17 08:48:54 +0200109 print(" ")
110
111 print('->>>>>>> test Nova Delete Server APIs ->>>>>>>>>>>>>>>')
112 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterm72f09882018-05-15 17:10:27 +0200113 url = "http://0.0.0.0:18774/v2.1/id_bla/servers/%s" % (
114 json.loads(listserverapisnovaresponse.content)["servers"][0]["id"])
peustermf27a5922017-05-17 08:48:54 +0200115 deleteserverapisnovaresponse = requests.delete(url, headers=headers)
116 self.assertEqual(deleteserverapisnovaresponse.status_code, 204)
117 print(" ")
118
119 print('->>>>>>> test Nova Delete Non-Existing Server APIs ->>>>>>>>>>>>>>>')
120 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200121 url = "http://0.0.0.0:18774/v2.1/id_bla/servers/non-existing-ix"
peustermf27a5922017-05-17 08:48:54 +0200122 deleteserverapisnovaresponse = requests.delete(url, headers=headers)
123 self.assertEqual(deleteserverapisnovaresponse.status_code, 404)
124 print(" ")
125
peustermf27a5922017-05-17 08:48:54 +0200126 print('->>>>>>> testNovaVersionListServerAPIs_withPortInformation ->>>>>>>>>>>>>>>')
127 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200128 url = "http://0.0.0.0:18774/v2.1/id_bla/servers/andPorts"
peustermf27a5922017-05-17 08:48:54 +0200129 listserverapisnovaresponse = requests.get(url, headers=headers)
130 self.assertEqual(listserverapisnovaresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200131 self.assertNotEqual(json.loads(listserverapisnovaresponse.content)[
132 "servers"][0]["name"], "")
peustermf27a5922017-05-17 08:48:54 +0200133 print(" ")
134
135 print('->>>>>>> test Nova List Flavors ->>>>>>>>>>>>>>>')
136 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200137 url = "http://0.0.0.0:18774/v2.1/id_bla/flavors"
peustermf27a5922017-05-17 08:48:54 +0200138 listflavorsresponse = requests.get(url, headers=headers)
139 self.assertEqual(listflavorsresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200140 self.assertIn(json.loads(listflavorsresponse.content)["flavors"][0]["name"], [
141 "m1.nano", "m1.tiny", "m1.micro", "m1.small"])
142 self.assertIn(json.loads(listflavorsresponse.content)["flavors"][1]["name"], [
143 "m1.nano", "m1.tiny", "m1.micro", "m1.small"])
144 self.assertIn(json.loads(listflavorsresponse.content)["flavors"][2]["name"], [
145 "m1.nano", "m1.tiny", "m1.micro", "m1.small"])
peustermf27a5922017-05-17 08:48:54 +0200146 print(" ")
147
148 print('->>>>>>> testNovaAddFlavors ->>>>>>>>>>>>>>>')
149 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200150 url = "http://0.0.0.0:18774/v2.1/id_bla/flavors"
peustermf27a5922017-05-17 08:48:54 +0200151 addflavorsresponse = requests.post(url,
152 data='{"flavor":{"name": "testFlavor", "vcpus": "test_vcpus", "ram": 1024, "disk": 10}}',
153 headers=headers)
154 self.assertEqual(addflavorsresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200155 self.assertIsNotNone(json.loads(
156 addflavorsresponse.content)["flavor"]["id"])
157 self.assertIsNotNone(json.loads(addflavorsresponse.content)[
158 "flavor"]["links"][0]['href'])
peustermf27a5922017-05-17 08:48:54 +0200159 print(" ")
160
161 print('->>>>>>> test Nova List Flavors Detail ->>>>>>>>>>>>>>>')
162 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200163 url = "http://0.0.0.0:18774/v2.1/id_bla/flavors/detail"
peustermf27a5922017-05-17 08:48:54 +0200164 listflavorsdetailresponse = requests.get(url, headers=headers)
165 self.assertEqual(listflavorsdetailresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200166 self.assertIn(json.loads(listflavorsdetailresponse.content)[
167 "flavors"][0]["name"], ["m1.nano", "m1.tiny", "m1.micro", "m1.small"])
168 self.assertIn(json.loads(listflavorsdetailresponse.content)[
169 "flavors"][1]["name"], ["m1.nano", "m1.tiny", "m1.micro", "m1.small"])
170 self.assertIn(json.loads(listflavorsdetailresponse.content)[
171 "flavors"][2]["name"], ["m1.nano", "m1.tiny", "m1.micro", "m1.small"])
peustermf27a5922017-05-17 08:48:54 +0200172 print(" ")
173
174 print('->>>>>>> testNovaAddFlavors ->>>>>>>>>>>>>>>')
175 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200176 url = "http://0.0.0.0:18774/v2.1/id_bla/flavors/detail"
peustermf27a5922017-05-17 08:48:54 +0200177 addflavorsresponse = requests.post(url,
178 data='{"flavor":{"name": "testFlavor", "vcpus": "test_vcpus", "ram": 1024, "disk": 10}}',
179 headers=headers)
180 self.assertEqual(addflavorsresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200181 self.assertIsNotNone(json.loads(
182 addflavorsresponse.content)["flavor"]["id"])
183 self.assertIsNotNone(json.loads(addflavorsresponse.content)[
184 "flavor"]["links"][0]['href'])
peustermf27a5922017-05-17 08:48:54 +0200185 print(" ")
186
187 print('->>>>>>> test Nova List Flavor By Id ->>>>>>>>>>>>>>>')
188
189 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterm72f09882018-05-15 17:10:27 +0200190 url = "http://0.0.0.0:18774/v2.1/id_bla/flavors/%s" % (
191 json.loads(listflavorsdetailresponse.content)["flavors"][0]["name"])
peustermf27a5922017-05-17 08:48:54 +0200192 listflavorsbyidresponse = requests.get(url, headers=headers)
193 self.assertEqual(listflavorsbyidresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200194 self.assertEqual(json.loads(listflavorsbyidresponse.content)[
195 "flavor"]["id"], json.loads(listflavorsdetailresponse.content)["flavors"][0]["id"])
peustermf27a5922017-05-17 08:48:54 +0200196 print(" ")
197
198 print('->>>>>>> test Nova List Images ->>>>>>>>>>>>>>>')
199 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200200 url = "http://0.0.0.0:18774/v2.1/id_bla/images"
peustermf27a5922017-05-17 08:48:54 +0200201 listimagesresponse = requests.get(url, headers=headers)
202 self.assertEqual(listimagesresponse.status_code, 200)
203 print(listimagesresponse.content)
peustermf27a5922017-05-17 08:48:54 +0200204 print(" ")
205
206 print('->>>>>>> test Nova List Images Details ->>>>>>>>>>>>>>>')
207 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200208 url = "http://0.0.0.0:18774/v2.1/id_bla/images/detail"
peustermf27a5922017-05-17 08:48:54 +0200209 listimagesdetailsresponse = requests.get(url, headers=headers)
210 self.assertEqual(listimagesdetailsresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200211 self.assertEqual(json.loads(listimagesdetailsresponse.content)[
212 "images"][0]["metadata"]["architecture"], "x86_64")
peustermf27a5922017-05-17 08:48:54 +0200213 print(" ")
214
215 print('->>>>>>> test Nova List Image By Id ->>>>>>>>>>>>>>>')
216 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterm72f09882018-05-15 17:10:27 +0200217 url = "http://0.0.0.0:18774/v2.1/id_bla/images/%s" % (
218 json.loads(listimagesdetailsresponse.content)["images"][0]["id"])
peustermf27a5922017-05-17 08:48:54 +0200219 listimagebyidresponse = requests.get(url, headers=headers)
220 self.assertEqual(listimagebyidresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200221 self.assertEqual(json.loads(listimagebyidresponse.content)[
222 "image"]["id"], json.loads(listimagesdetailsresponse.content)["images"][0]["id"])
peustermf27a5922017-05-17 08:48:54 +0200223 print(" ")
224
225 print('->>>>>>> test Nova List Image By Non-Existend Id ->>>>>>>>>>>>>>>')
226 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200227 url = "http://0.0.0.0:18774/v2.1/id_bla/images/non_existing_id"
peustermf27a5922017-05-17 08:48:54 +0200228 listimagebynonexistingidresponse = requests.get(url, headers=headers)
229 self.assertEqual(listimagebynonexistingidresponse.status_code, 404)
230 print(" ")
231
peusterm72f09882018-05-15 17:10:27 +0200232 # find ubuntu id
peustermf27a5922017-05-17 08:48:54 +0200233 for image in json.loads(listimagesresponse.content)["images"]:
234 if image["name"] == "ubuntu:trusty":
235 ubuntu_image_id = image["id"]
236
peustermf27a5922017-05-17 08:48:54 +0200237 print('->>>>>>> test Nova Create Server Instance ->>>>>>>>>>>>>>>')
238 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200239 url = "http://0.0.0.0:18774/v2.1/id_bla/servers"
peusterm72f09882018-05-15 17:10:27 +0200240 data = '{"server": {"name": "X", "flavorRef": "%s", "imageRef":"%s"}}' % (
241 json.loads(listflavorsresponse.content)["flavors"][0]["id"], ubuntu_image_id)
peustermf27a5922017-05-17 08:48:54 +0200242 createserverinstance = requests.post(url, data=data, headers=headers)
243 self.assertEqual(createserverinstance.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200244 self.assertEqual(json.loads(createserverinstance.content)[
245 "server"]["image"]["id"], ubuntu_image_id)
peustermf27a5922017-05-17 08:48:54 +0200246 print(" ")
247
248 print('->>>>>>> test Nova Create Server Instance With Already Existing Name ->>>>>>>>>>>>>>>')
249 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200250 url = "http://0.0.0.0:18774/v2.1/id_bla/servers"
peusterm72f09882018-05-15 17:10:27 +0200251 data = '{"server": {"name": "X", "flavorRef": "%s", "imageRef":"%s"}}' % (
252 json.loads(listflavorsresponse.content)["flavors"][0]["id"], ubuntu_image_id)
peustermf27a5922017-05-17 08:48:54 +0200253 createserverinstance = requests.post(url, data=data, headers=headers)
254 self.assertEqual(createserverinstance.status_code, 409)
255 print(" ")
256
257 print('->>>>>>> test Nova Version List Server APIs Detailed ->>>>>>>>>>>>>>>')
258 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200259 url = "http://0.0.0.0:18774/v2.1/id_bla/servers/detail"
peustermf27a5922017-05-17 08:48:54 +0200260 listserverapisdetailedresponse = requests.get(url, headers=headers)
261 self.assertEqual(listserverapisdetailedresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200262 self.assertEqual(json.loads(listserverapisdetailedresponse.content)[
263 "servers"][0]["status"], "ACTIVE")
peustermf27a5922017-05-17 08:48:54 +0200264 print(" ")
265
266 print('->>>>>>> test Nova Show Server Details ->>>>>>>>>>>>>>>')
267 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterm72f09882018-05-15 17:10:27 +0200268 url = "http://0.0.0.0:18774/v2.1/id_bla/servers/%s" % (
269 json.loads(listserverapisdetailedresponse.content)["servers"][0]["id"])
peustermf27a5922017-05-17 08:48:54 +0200270 listserverdetailsresponse = requests.get(url, headers=headers)
271 self.assertEqual(listserverdetailsresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200272 self.assertEqual(json.loads(listserverdetailsresponse.content)[
273 "server"]["flavor"]["links"][0]["rel"], "bookmark")
peustermf27a5922017-05-17 08:48:54 +0200274 print(" ")
275
276 print('->>>>>>> test Nova Show Non-Existing Server Details ->>>>>>>>>>>>>>>')
277 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200278 url = "http://0.0.0.0:18774/v2.1/id_bla/servers/non_existing_server_id"
peusterm72f09882018-05-15 17:10:27 +0200279 listnonexistingserverdetailsresponse = requests.get(
280 url, headers=headers)
peustermf27a5922017-05-17 08:48:54 +0200281 self.assertEqual(listnonexistingserverdetailsresponse.status_code, 404)
282 print(" ")
283
peustermf27a5922017-05-17 08:48:54 +0200284 def testNeutronDummy(self):
285 print('->>>>>>> test Neutron Dummy Class->>>>>>>>>>>>>>>')
286 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
287 print(" ")
288
289 headers = {'Content-type': 'application/json'}
peusterm72f09882018-05-15 17:10:27 +0200290 test_heatapi_template_create_stack = open(os.path.join(os.path.dirname(
291 __file__), "templates/test_heatapi_template_create_stack.yml")).read()
peusterme22979a2017-05-18 13:28:38 +0200292 url = "http://0.0.0.0:18004/v1/tenantabc123/stacks"
peusterm72f09882018-05-15 17:10:27 +0200293 requests.post(url, data=json.dumps(
294 yaml.load(test_heatapi_template_create_stack)), headers=headers)
peustermf27a5922017-05-17 08:48:54 +0200295 # test_heatapi_keystone_get_token = open("test_heatapi_keystone_get_token.json").read()
296
297 print('->>>>>>> test Neutron List Versions ->>>>>>>>>>>>>>>')
298 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200299 url = "http://0.0.0.0:19696/"
peustermf27a5922017-05-17 08:48:54 +0200300 listapiversionstackresponse = requests.get(url, headers=headers)
301 self.assertEqual(listapiversionstackresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200302 self.assertEqual(json.loads(listapiversionstackresponse.content)[
303 "versions"][0]["id"], "v2.0")
peustermf27a5922017-05-17 08:48:54 +0200304 print(" ")
305
306 print('->>>>>>> test Neutron Show API v2.0 ->>>>>>>>>>>>>>>')
307 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200308 url = "http://0.0.0.0:19696/v2.0"
peustermf27a5922017-05-17 08:48:54 +0200309 listapiversionv20response = requests.get(url, headers=headers)
310 self.assertEqual(listapiversionv20response.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200311 self.assertEqual(json.loads(listapiversionv20response.content)[
312 "resources"][0]["name"], "subnet")
313 self.assertEqual(json.loads(listapiversionv20response.content)[
314 "resources"][1]["name"], "network")
315 self.assertEqual(json.loads(listapiversionv20response.content)[
316 "resources"][2]["name"], "ports")
peustermf27a5922017-05-17 08:48:54 +0200317 print(" ")
318
319 print('->>>>>>> test Neutron List Networks ->>>>>>>>>>>>>>>')
320 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200321 url = "http://0.0.0.0:19696/v2.0/networks"
peustermf27a5922017-05-17 08:48:54 +0200322 listnetworksesponse1 = requests.get(url, headers=headers)
323 self.assertEqual(listnetworksesponse1.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200324 self.assertEqual(json.loads(listnetworksesponse1.content)[
325 "networks"][0]["status"], "ACTIVE")
326 listNetworksId = json.loads(listnetworksesponse1.content)[
327 "networks"][0]["id"]
328 listNetworksName = json.loads(listnetworksesponse1.content)[
329 "networks"][0]["name"]
330 listNetworksId2 = json.loads(listnetworksesponse1.content)[
331 "networks"][1]["id"]
peustermf27a5922017-05-17 08:48:54 +0200332 print(" ")
333
334 print('->>>>>>> test Neutron List Non-Existing Networks ->>>>>>>>>>>>>>>')
335 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200336 url = "http://0.0.0.0:19696/v2.0/networks?name=non_existent_network_name"
peusterm72f09882018-05-15 17:10:27 +0200337 listnetworksesponse2 = requests.get(url, headers=headers)
peustermf27a5922017-05-17 08:48:54 +0200338 self.assertEqual(listnetworksesponse2.status_code, 404)
339 print(" ")
340
341 print('->>>>>>> test Neutron List Networks By Name ->>>>>>>>>>>>>>>')
342 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterm72f09882018-05-15 17:10:27 +0200343 # tcpdump-vnf:input:net:9df6a98f-9e11-4cb7-b3c0-InAdUnitTest
344 url = "http://0.0.0.0:19696/v2.0/networks?name=" + listNetworksName
peustermf27a5922017-05-17 08:48:54 +0200345 listnetworksesponse3 = requests.get(url, headers=headers)
346 self.assertEqual(listnetworksesponse3.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200347 self.assertEqual(json.loads(listnetworksesponse3.content)[
348 "networks"][0]["name"], listNetworksName)
peustermf27a5922017-05-17 08:48:54 +0200349 print(" ")
350
351 print('->>>>>>> test Neutron List Networks By Id ->>>>>>>>>>>>>>>')
352 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterm72f09882018-05-15 17:10:27 +0200353 # tcpdump-vnf:input:net:9df6a98f-9e11-4cb7-b3c0-InAdUnitTest
354 url = "http://0.0.0.0:19696/v2.0/networks?id=" + listNetworksId
peustermf27a5922017-05-17 08:48:54 +0200355 listnetworksesponse4 = requests.get(url, headers=headers)
356 self.assertEqual(listnetworksesponse4.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200357 self.assertEqual(json.loads(listnetworksesponse4.content)[
358 "networks"][0]["id"], listNetworksId)
peustermf27a5922017-05-17 08:48:54 +0200359 print(" ")
360
361 print('->>>>>>> test Neutron List Networks By Multiple Ids ->>>>>>>>>>>>>>>')
362 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterm72f09882018-05-15 17:10:27 +0200363 url = "http://0.0.0.0:19696/v2.0/networks?id=" + listNetworksId + "&id=" + \
364 listNetworksId2 # tcpdump-vnf:input:net:9df6a98f-9e11-4cb7-b3c0-InAdUnitTest
peustermf27a5922017-05-17 08:48:54 +0200365 listnetworksesponse5 = requests.get(url, headers=headers)
366 self.assertEqual(listnetworksesponse5.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200367 self.assertEqual(json.loads(listnetworksesponse5.content)[
368 "networks"][0]["id"], listNetworksId)
369 self.assertEqual(json.loads(listnetworksesponse5.content)[
370 "networks"][1]["id"], listNetworksId2)
peustermf27a5922017-05-17 08:48:54 +0200371 print(" ")
372
373 print('->>>>>>> test Neutron Show Network ->>>>>>>>>>>>>>>')
374 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterm72f09882018-05-15 17:10:27 +0200375 url = "http://0.0.0.0:19696/v2.0/networks/" + listNetworksId
peustermf27a5922017-05-17 08:48:54 +0200376 shownetworksesponse = requests.get(url, headers=headers)
377 self.assertEqual(shownetworksesponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200378 self.assertEqual(json.loads(shownetworksesponse.content)[
379 "network"]["status"], "ACTIVE")
peustermf27a5922017-05-17 08:48:54 +0200380 print(" ")
381
382 print('->>>>>>> test Neutron Show Network Non-ExistendNetwork ->>>>>>>>>>>>>>>')
383 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200384 url = "http://0.0.0.0:19696/v2.0/networks/non_existent_network_id"
peustermf27a5922017-05-17 08:48:54 +0200385 shownetworksesponse2 = requests.get(url, headers=headers)
386 self.assertEqual(shownetworksesponse2.status_code, 404)
387 print(" ")
388
389 print('->>>>>>> test Neutron Create Network ->>>>>>>>>>>>>>>')
390 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200391 url = "http://0.0.0.0:19696/v2.0/networks"
peusterm72f09882018-05-15 17:10:27 +0200392 createnetworkresponse = requests.post(
393 url, data='{"network": {"name": "sample_network","admin_state_up": true}}', headers=headers)
peustermf27a5922017-05-17 08:48:54 +0200394 self.assertEqual(createnetworkresponse.status_code, 201)
peusterm72f09882018-05-15 17:10:27 +0200395 self.assertEqual(json.loads(createnetworkresponse.content)[
396 "network"]["status"], "ACTIVE")
peustermf27a5922017-05-17 08:48:54 +0200397 print(" ")
398
399 print('->>>>>>> test Neutron Create Network With Existing Name ->>>>>>>>>>>>>>>')
400 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200401 url = "http://0.0.0.0:19696/v2.0/networks"
peusterm72f09882018-05-15 17:10:27 +0200402 createnetworkresponsefailure = requests.post(
403 url, data='{"network": {"name": "sample_network","admin_state_up": true}}', headers=headers)
peustermf27a5922017-05-17 08:48:54 +0200404 self.assertEqual(createnetworkresponsefailure.status_code, 400)
405 print(" ")
406
407 print('->>>>>>> test Neutron Update Network ->>>>>>>>>>>>>>>')
408 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterm72f09882018-05-15 17:10:27 +0200409 url = "http://0.0.0.0:19696/v2.0/networks/%s" % (
410 json.loads(createnetworkresponse.content)["network"]["id"])
411 updatenetworkresponse = requests.put(
412 url, data='{"network": {"status": "ACTIVE", "admin_state_up":true, "tenant_id":"abcd123", "name": "sample_network_new_name", "shared":false}}', headers=headers)
peustermf27a5922017-05-17 08:48:54 +0200413 self.assertEqual(updatenetworkresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200414 self.assertEqual(json.loads(updatenetworkresponse.content)[
415 "network"]["name"], "sample_network_new_name")
416 self.assertEqual(json.loads(updatenetworkresponse.content)[
417 "network"]["tenant_id"], "abcd123")
peustermf27a5922017-05-17 08:48:54 +0200418 print(" ")
419
420 print('->>>>>>> test Neutron Update Non-Existing Network ->>>>>>>>>>>>>>>')
421 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200422 url = "http://0.0.0.0:19696/v2.0/networks/non-existing-name123"
peusterm72f09882018-05-15 17:10:27 +0200423 updatenetworkresponse = requests.put(
424 url, data='{"network": {"name": "sample_network_new_name"}}', headers=headers)
peustermf27a5922017-05-17 08:48:54 +0200425 self.assertEqual(updatenetworkresponse.status_code, 404)
426 print(" ")
427
428 print('->>>>>>> test Neutron List Subnets ->>>>>>>>>>>>>>>')
429 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200430 url = "http://0.0.0.0:19696/v2.0/subnets"
peustermf27a5922017-05-17 08:48:54 +0200431 listsubnetsresponse = requests.get(url, headers=headers)
peusterm72f09882018-05-15 17:10:27 +0200432 listSubnetName = json.loads(listsubnetsresponse.content)[
433 "subnets"][0]["name"]
434 listSubnetId = json.loads(listsubnetsresponse.content)[
435 "subnets"][0]["id"]
436 listSubnetId2 = json.loads(listsubnetsresponse.content)[
437 "subnets"][1]["id"]
peustermf27a5922017-05-17 08:48:54 +0200438 self.assertEqual(listsubnetsresponse.status_code, 200)
439 self.assertNotIn('None', listSubnetName)
440 print(" ")
441
442 print('->>>>>>> test Neutron List Subnets By Name ->>>>>>>>>>>>>>>')
443 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterm72f09882018-05-15 17:10:27 +0200444 url = "http://0.0.0.0:19696/v2.0/subnets?name=" + listSubnetName
peustermf27a5922017-05-17 08:48:54 +0200445 listsubnetByNameresponse = requests.get(url, headers=headers)
446 self.assertEqual(listsubnetByNameresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200447 self.assertNotIn('None', json.loads(
448 listsubnetByNameresponse.content)["subnets"][0]["name"])
peustermf27a5922017-05-17 08:48:54 +0200449 print(" ")
450
451 print('->>>>>>> test Neutron List Subnets By Id ->>>>>>>>>>>>>>>')
452 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200453 url = "http://0.0.0.0:19696/v2.0/subnets?id=" + listSubnetId
peustermf27a5922017-05-17 08:48:54 +0200454 listsubnetsbyidresponse = requests.get(url, headers=headers)
455 self.assertEqual(listsubnetsbyidresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200456 self.assertNotIn("None", json.loads(
457 listsubnetsbyidresponse.content)["subnets"][0]["name"])
peustermf27a5922017-05-17 08:48:54 +0200458 print(" ")
459
460 print('->>>>>>> test Neutron List Subnets By Multiple Id ->>>>>>>>>>>>>>>')
461 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterm72f09882018-05-15 17:10:27 +0200462 url = "http://0.0.0.0:19696/v2.0/subnets?id=" + \
463 listSubnetId + "&id=" + listSubnetId2
peustermf27a5922017-05-17 08:48:54 +0200464 listsubnetsbymultipleidsresponse = requests.get(url, headers=headers)
465 self.assertEqual(listsubnetsbymultipleidsresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200466 self.assertNotIn("None", json.loads(
467 listsubnetsbymultipleidsresponse.content)["subnets"][0]["name"])
peustermf27a5922017-05-17 08:48:54 +0200468 print(" ")
469
peustermf27a5922017-05-17 08:48:54 +0200470 print('->>>>>>> test Neutron Show Subnet->>>>>>>>>>>>>>>')
471 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterm72f09882018-05-15 17:10:27 +0200472 url = "http://0.0.0.0:19696/v2.0/subnets/%s" % (
473 json.loads(listsubnetsresponse.content)["subnets"][0]["id"])
peustermf27a5922017-05-17 08:48:54 +0200474 showsubnetsresponse = requests.get(url, headers=headers)
475 self.assertEqual(showsubnetsresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200476 self.assertNotIn("None", json.loads(
477 showsubnetsresponse.content)["subnet"]["name"])
peustermf27a5922017-05-17 08:48:54 +0200478 print(" ")
479
480 print('->>>>>>> test Neutron Show Non-Existing Subnet->>>>>>>>>>>>>>>')
481 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200482 url = "http://0.0.0.0:19696/v2.0/subnets/non-existing-id123"
peustermf27a5922017-05-17 08:48:54 +0200483 showsubnetsresponse = requests.get(url, headers=headers)
484 self.assertEqual(showsubnetsresponse.status_code, 404)
485 print(" ")
486
peustermf27a5922017-05-17 08:48:54 +0200487 print('->>>>>>> test Neutron Create Subnet ->>>>>>>>>>>>>>>')
488 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200489 url = "http://0.0.0.0:19696/v2.0/subnets"
peusterm72f09882018-05-15 17:10:27 +0200490 createsubnetdata = '{"subnet": {"name": "new_subnet", "network_id": "%s","ip_version": 4,"cidr": "10.0.0.1/24"} }' % (
491 json.loads(createnetworkresponse.content)["network"]["id"])
492 createsubnetresponse = requests.post(
493 url, data=createsubnetdata, headers=headers)
peustermf27a5922017-05-17 08:48:54 +0200494 self.assertEqual(createsubnetresponse.status_code, 201)
peusterm72f09882018-05-15 17:10:27 +0200495 self.assertEqual(json.loads(createsubnetresponse.content)[
496 "subnet"]["name"], "new_subnet")
peustermf27a5922017-05-17 08:48:54 +0200497 print(" ")
498
499 print('->>>>>>> test Neutron Create Second Subnet ->>>>>>>>>>>>>>>')
500 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200501 url = "http://0.0.0.0:19696/v2.0/subnets"
peusterm72f09882018-05-15 17:10:27 +0200502 createsubnetdata = '{"subnet": {"name": "new_subnet", "network_id": "%s","ip_version": 4,"cidr": "10.0.0.1/24"} }' % (
503 json.loads(createnetworkresponse.content)["network"]["id"])
504 createsubnetfailureresponse = requests.post(
505 url, data=createsubnetdata, headers=headers)
peustermf27a5922017-05-17 08:48:54 +0200506 self.assertEqual(createsubnetfailureresponse.status_code, 409)
507 print(" ")
508
509 print('->>>>>>> test Neutron Update Subnet ->>>>>>>>>>>>>>>')
510 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterm72f09882018-05-15 17:10:27 +0200511 url = "http://0.0.0.0:19696/v2.0/subnets/%s" % (
512 json.loads(createsubnetresponse.content)["subnet"]["id"])
peustermf27a5922017-05-17 08:48:54 +0200513 updatesubnetdata = '{"subnet": {"name": "new_subnet_new_name", "network_id":"some_id", "tenant_id":"new_tenant_id", "allocation_pools":"change_me", "gateway_ip":"192.168.1.120", "ip_version":4, "cidr":"10.0.0.1/24", "id":"some_new_id", "enable_dhcp":true} }'
peusterm72f09882018-05-15 17:10:27 +0200514 updatesubnetresponse = requests.put(
515 url, data=updatesubnetdata, headers=headers)
peustermf27a5922017-05-17 08:48:54 +0200516 self.assertEqual(updatesubnetresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200517 self.assertEqual(json.loads(updatesubnetresponse.content)[
518 "subnet"]["name"], "new_subnet_new_name")
peustermf27a5922017-05-17 08:48:54 +0200519 print(" ")
520
521 print('->>>>>>> test Neutron Update Non-Existing Subnet ->>>>>>>>>>>>>>>')
522 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200523 url = "http://0.0.0.0:19696/v2.0/subnets/non-existing-subnet-12345"
peustermf27a5922017-05-17 08:48:54 +0200524 updatenonexistingsubnetdata = '{"subnet": {"name": "new_subnet_new_name"} }'
peusterm72f09882018-05-15 17:10:27 +0200525 updatenonexistingsubnetresponse = requests.put(
526 url, data=updatenonexistingsubnetdata, headers=headers)
peustermf27a5922017-05-17 08:48:54 +0200527 self.assertEqual(updatenonexistingsubnetresponse.status_code, 404)
528 print(" ")
529
peustermf27a5922017-05-17 08:48:54 +0200530 print('->>>>>>> test Neutron List Ports ->>>>>>>>>>>>>>>')
531 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200532 url = "http://0.0.0.0:19696/v2.0/ports"
peustermf27a5922017-05-17 08:48:54 +0200533 listportsesponse = requests.get(url, headers=headers)
534 self.assertEqual(listportsesponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200535 self.assertEqual(json.loads(listportsesponse.content)
536 ["ports"][0]["status"], "ACTIVE")
537 listPortsName = json.loads(listportsesponse.content)[
538 "ports"][0]["name"]
peustermf27a5922017-05-17 08:48:54 +0200539 listPortsId1 = json.loads(listportsesponse.content)["ports"][0]["id"]
540 listPortsId2 = json.loads(listportsesponse.content)["ports"][1]["id"]
541 print(" ")
542
543 print('->>>>>>> test Neutron List Ports By Name ->>>>>>>>>>>>>>>')
544 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200545 url = "http://0.0.0.0:19696/v2.0/ports?name=" + listPortsName
peustermf27a5922017-05-17 08:48:54 +0200546 listportsbynameesponse = requests.get(url, headers=headers)
547 self.assertEqual(listportsbynameesponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200548 self.assertEqual(json.loads(listportsbynameesponse.content)[
549 "ports"][0]["name"], listPortsName)
peustermf27a5922017-05-17 08:48:54 +0200550 print(" ")
551
552 print('->>>>>>> test Neutron List Ports By Id ->>>>>>>>>>>>>>>')
553 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200554 url = "http://0.0.0.0:19696/v2.0/ports?id=" + listPortsId1
peustermf27a5922017-05-17 08:48:54 +0200555 listportsbyidesponse = requests.get(url, headers=headers)
556 self.assertEqual(listportsbyidesponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200557 self.assertEqual(json.loads(listportsbyidesponse.content)[
558 "ports"][0]["id"], listPortsId1)
peustermf27a5922017-05-17 08:48:54 +0200559 print(" ")
560
561 print('->>>>>>> test Neutron List Ports By Multiple Ids ->>>>>>>>>>>>>>>')
562 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterm72f09882018-05-15 17:10:27 +0200563 url = "http://0.0.0.0:19696/v2.0/ports?id=" + \
564 listPortsId1 + "&id=" + listPortsId2
peustermf27a5922017-05-17 08:48:54 +0200565 listportsbymultipleidsesponse = requests.get(url, headers=headers)
566 self.assertEqual(listportsbymultipleidsesponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200567 self.assertEqual(json.loads(listportsbymultipleidsesponse.content)[
568 "ports"][0]["id"], listPortsId1)
peustermf27a5922017-05-17 08:48:54 +0200569 print(" ")
570
schillingec3d1e252019-01-30 20:17:54 +0100571 print('->>>>>>> test Neutron List Ports By Device ->>>>>>>>>>>>>>>')
572 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
573 server_url = "http://0.0.0.0:18774/v2.1/id_bla/servers/firewall1:9df6a98f-9e11-4cb7-b3c0-InAdUnitTest"
574 server_response = requests.get(server_url, headers=headers)
575 firewall1_server = json.loads(server_response.content)["server"]
576 device_id = firewall1_server["id"]
577 url = "http://0.0.0.0:19696/v2.0/ports?device_id=%s" % device_id
578 list_ports_by_device_id_response = requests.get(url, headers=headers)
579 self.assertEqual(list_ports_by_device_id_response.status_code, 200)
580 list_ports_by_device_id_ports = json.loads(list_ports_by_device_id_response.content)["ports"]
581
582 self.assertTrue(any(list_ports_by_device_id_ports), "Expected at least one port for device")
583 for port in list_ports_by_device_id_ports:
584 self.assertTrue(port["name"].startswith("firewall1:"), "Expected all ports to belong to firewall1")
585 print(" ")
586
peustermf27a5922017-05-17 08:48:54 +0200587 print('->>>>>>> test Neutron List Non-Existing Ports ->>>>>>>>>>>>>>>')
588 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200589 url = "http://0.0.0.0:19696/v2.0/ports?id=non-existing-port-id"
peustermf27a5922017-05-17 08:48:54 +0200590 listportsbynonexistingidsesponse = requests.get(url, headers=headers)
591 self.assertEqual(listportsbynonexistingidsesponse.status_code, 404)
592 print(" ")
593
594 print('->>>>>>> test Neutron Show Port ->>>>>>>>>>>>>>>')
595 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterm72f09882018-05-15 17:10:27 +0200596 url = "http://0.0.0.0:19696/v2.0/ports/%s" % (
597 json.loads(listportsesponse.content)["ports"][0]["id"])
peustermf27a5922017-05-17 08:48:54 +0200598 showportresponse = requests.get(url, headers=headers)
599 self.assertEqual(showportresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200600 self.assertEqual(json.loads(showportresponse.content)
601 ["port"]["status"], "ACTIVE")
peustermf27a5922017-05-17 08:48:54 +0200602 print(" ")
603
604 print('->>>>>>> test Neutron Show Non-Existing Port ->>>>>>>>>>>>>>>')
605 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200606 url = "http://0.0.0.0:19696/v2.0/ports/non-existing-portid123"
peustermf27a5922017-05-17 08:48:54 +0200607 shownonexistingportresponse = requests.get(url, headers=headers)
608 self.assertEqual(shownonexistingportresponse.status_code, 404)
609 print(" ")
610
611 print('->>>>>>> test Neutron Create Port In Non-Existing Network ->>>>>>>>>>>>>>>')
612 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200613 url = "http://0.0.0.0:19696/v2.0/ports"
peustermf27a5922017-05-17 08:48:54 +0200614 createnonexistingportdata = '{"port": {"name": "new_port", "network_id": "non-existing-id"} }'
peusterm72f09882018-05-15 17:10:27 +0200615 createnonexistingnetworkportresponse = requests.post(
616 url, data=createnonexistingportdata, headers=headers)
peustermf27a5922017-05-17 08:48:54 +0200617 self.assertEqual(createnonexistingnetworkportresponse.status_code, 404)
618 print(" ")
619
620 print('->>>>>>> test Neutron Create Port ->>>>>>>>>>>>>>>')
621 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200622 url = "http://0.0.0.0:19696/v2.0/ports"
peusterm72f09882018-05-15 17:10:27 +0200623 createportdata = '{"port": {"name": "new_port", "network_id": "%s", "admin_state_up":true, "device_id":"device_id123", "device_owner":"device_owner123", "fixed_ips":"change_me","id":"new_id1234", "mac_address":"12:34:56:78:90", "status":"change_me", "tenant_id":"tenant_id123"} }' % (json.loads(createnetworkresponse.content)[
624 "network"]["id"])
625 createportresponse = requests.post(
626 url, data=createportdata, headers=headers)
peustermf27a5922017-05-17 08:48:54 +0200627 self.assertEqual(createportresponse.status_code, 201)
peusterm72f09882018-05-15 17:10:27 +0200628 print(createportresponse.content)
schillinge0e108192019-01-30 17:48:27 +0100629 createport = json.loads(createportresponse.content)["port"]
630 self.assertEqual(createport["name"], "new_port")
peustermf27a5922017-05-17 08:48:54 +0200631 print(" ")
632
633 print('->>>>>>> test Neutron Create Port With Existing Name ->>>>>>>>>>>>>>>')
634 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200635 url = "http://0.0.0.0:19696/v2.0/ports"
schillinge0e108192019-01-30 17:48:27 +0100636 network_id = json.loads(createnetworkresponse.content)["network"]["id"]
637 createportwithexistingnamedata = '{"port": {"name": "duplicate_port_name", "network_id": "%s"} }' % network_id
638 createportwithexistingnameresponse1 = requests.post(
peusterm72f09882018-05-15 17:10:27 +0200639 url, data=createportwithexistingnamedata, headers=headers)
schillinge0e108192019-01-30 17:48:27 +0100640 createportwithexistingnameresponse2 = requests.post(
641 url, data=createportwithexistingnamedata, headers=headers)
642 createportwithexistingname1 = json.loads(createportwithexistingnameresponse1.content)["port"]
643 createportwithexistingname2 = json.loads(createportwithexistingnameresponse2.content)["port"]
644 self.assertEqual(createportwithexistingnameresponse1.status_code, 201)
645 self.assertEqual(createportwithexistingnameresponse2.status_code, 201)
646 self.assertEqual(createportwithexistingname1["name"], "duplicate_port_name")
647 self.assertEqual(createportwithexistingname2["name"], "duplicate_port_name")
648 self.assertNotEqual(createportwithexistingname1["id"], createportwithexistingname2["id"], "Duplicate port should have different id")
peustermf27a5922017-05-17 08:48:54 +0200649 print(" ")
650
651 print('->>>>>>> test Neutron Create Port Without Name ->>>>>>>>>>>>>>>')
652 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200653 url = "http://0.0.0.0:19696/v2.0/ports"
peusterm72f09882018-05-15 17:10:27 +0200654 createportdatawithoutname = '{"port": {"network_id": "%s"} }' % (
655 json.loads(createnetworkresponse.content)["network"]["id"])
656 createportwithoutnameresponse = requests.post(
657 url, data=createportdatawithoutname, headers=headers)
peustermf27a5922017-05-17 08:48:54 +0200658 self.assertEqual(createportwithoutnameresponse.status_code, 201)
peusterm72f09882018-05-15 17:10:27 +0200659 self.assertIn("port:cp", json.loads(
660 createportwithoutnameresponse.content)["port"]["name"])
peustermf27a5922017-05-17 08:48:54 +0200661 print(" ")
662
663 print('->>>>>>> test Neutron Update Port ->>>>>>>>>>>>>>>')
664 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
665 print(json.loads(createportresponse.content)["port"]["name"])
peusterm72f09882018-05-15 17:10:27 +0200666 url = "http://0.0.0.0:19696/v2.0/ports/%s" % (
667 json.loads(createportresponse.content)["port"]["name"])
peustermf27a5922017-05-17 08:48:54 +0200668 updateportdata = '{"port": {"name": "new_port_new_name", "admin_state_up":true, "device_id":"device_id123", "device_owner":"device_owner123", "fixed_ips":"change_me","mac_address":"12:34:56:78:90", "status":"change_me", "tenant_id":"tenant_id123", "network_id":"network_id123"} }'
peusterm72f09882018-05-15 17:10:27 +0200669 updateportresponse = requests.put(
670 url, data=updateportdata, headers=headers)
peustermf27a5922017-05-17 08:48:54 +0200671 self.assertEqual(updateportresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200672 self.assertEqual(json.loads(updateportresponse.content)[
673 "port"]["name"], "new_port_new_name")
peustermf27a5922017-05-17 08:48:54 +0200674 print(" ")
675
676 print('->>>>>>> test Neutron Update Non-Existing Port ->>>>>>>>>>>>>>>')
677 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200678 url = "http://0.0.0.0:19696/v2.0/ports/non-existing-port-ip"
peustermf27a5922017-05-17 08:48:54 +0200679 updatenonexistingportdata = '{"port": {"name": "new_port_new_name"} }'
peusterm72f09882018-05-15 17:10:27 +0200680 updatenonexistingportresponse = requests.put(
681 url, data=updatenonexistingportdata, headers=headers)
peustermf27a5922017-05-17 08:48:54 +0200682 self.assertEqual(updatenonexistingportresponse.status_code, 404)
683 print(" ")
684
685 print('->>>>>>> test Neutron Delete Port ->>>>>>>>>>>>>>>')
686 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterm72f09882018-05-15 17:10:27 +0200687 righturl = "http://0.0.0.0:19696/v2.0/ports/%s" % (
688 json.loads(createportresponse.content)["port"]["id"])
peustermf27a5922017-05-17 08:48:54 +0200689 deleterightportresponse = requests.delete(righturl, headers=headers)
690 self.assertEqual(deleterightportresponse.status_code, 204)
691 print(" ")
692
peustermf27a5922017-05-17 08:48:54 +0200693 print('->>>>>>> test Neutron Delete Non-Existing Port ->>>>>>>>>>>>>>>')
694 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200695 wrongurl = "http://0.0.0.0:19696/v2.0/ports/unknownid"
peustermf27a5922017-05-17 08:48:54 +0200696 deletewrongportresponse = requests.delete(wrongurl, headers=headers)
697 self.assertEqual(deletewrongportresponse.status_code, 404)
698 print(" ")
699
700 print('->>>>>>> test Neutron Delete Subnet ->>>>>>>>>>>>>>>')
701 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200702 wrongurl = "http://0.0.0.0:19696/v2.0/subnets/unknownid"
peusterm72f09882018-05-15 17:10:27 +0200703 righturl = "http://0.0.0.0:19696/v2.0/subnets/%s" % (
704 json.loads(updatesubnetresponse.content)["subnet"]["id"])
peustermf27a5922017-05-17 08:48:54 +0200705 deletewrongsubnetresponse = requests.delete(wrongurl, headers=headers)
706 deleterightsubnetresponse = requests.delete(righturl, headers=headers)
707 self.assertEqual(deletewrongsubnetresponse.status_code, 404)
708 self.assertEqual(deleterightsubnetresponse.status_code, 204)
709 print(" ")
710
711 print('->>>>>>> test Neutron Delete Network ->>>>>>>>>>>>>>>')
712 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterm72f09882018-05-15 17:10:27 +0200713 righturl = "http://0.0.0.0:19696/v2.0/networks/%s" % (
714 json.loads(createnetworkresponse.content)["network"]["id"])
peustermf27a5922017-05-17 08:48:54 +0200715 deleterightnetworkresponse = requests.delete(righturl, headers=headers)
716 self.assertEqual(deleterightnetworkresponse.status_code, 204)
717 print(" ")
718
719 print('->>>>>>> test Neutron Delete Non-Existing Network ->>>>>>>>>>>>>>>')
720 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200721 wrongurl = "http://0.0.0.0:19696/v2.0/networks/unknownid"
peustermf27a5922017-05-17 08:48:54 +0200722 deletewrongnetworkresponse = requests.delete(wrongurl, headers=headers)
723 self.assertEqual(deletewrongnetworkresponse.status_code, 404)
724 print(" ")
725
726 def testKeystomeDummy(self):
727 print('->>>>>>> test Keystone Dummy Class->>>>>>>>>>>>>>>')
728 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
729 print(" ")
730
731 headers = {'Content-type': 'application/json'}
peusterm72f09882018-05-15 17:10:27 +0200732 test_heatapi_keystone_get_token = open(os.path.join(os.path.dirname(
733 __file__), "templates/test_heatapi_keystone_get_token.yml")).read()
peustermf27a5922017-05-17 08:48:54 +0200734
735 print('->>>>>>> test Keystone List Versions ->>>>>>>>>>>>>>>')
736 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200737 url = "http://0.0.0.0:15000/"
peustermf27a5922017-05-17 08:48:54 +0200738 listapiversionstackresponse = requests.get(url, headers=headers)
739 self.assertEqual(listapiversionstackresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200740 self.assertEqual(json.loads(listapiversionstackresponse.content)[
741 "versions"]["values"][0]["id"], "v2.0")
peustermf27a5922017-05-17 08:48:54 +0200742 print(" ")
743
744 print('->>>>>>> test Keystone Show ApiV2 ->>>>>>>>>>>>>>>')
745 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200746 url = "http://0.0.0.0:15000/v2.0"
peustermf27a5922017-05-17 08:48:54 +0200747 showapiversionstackresponse = requests.get(url, headers=headers)
748 self.assertEqual(showapiversionstackresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200749 self.assertEqual(json.loads(showapiversionstackresponse.content)[
750 "version"]["id"], "v2.0")
peustermf27a5922017-05-17 08:48:54 +0200751 print(" ")
752
753 print('->>>>>>> test Keystone Get Token ->>>>>>>>>>>>>>>')
754 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200755 url = "http://0.0.0.0:15000/v2.0/tokens"
peusterm72f09882018-05-15 17:10:27 +0200756 gettokenstackresponse = requests.post(url, data=json.dumps(
757 yaml.load(test_heatapi_keystone_get_token)), headers=headers)
peustermf27a5922017-05-17 08:48:54 +0200758 self.assertEqual(gettokenstackresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200759 self.assertEqual(json.loads(gettokenstackresponse.content)[
760 "access"]["user"]["name"], "tenantName")
peustermf27a5922017-05-17 08:48:54 +0200761 print(" ")
762
peustermf27a5922017-05-17 08:48:54 +0200763 def testHeatDummy(self):
764 print('->>>>>>> test Heat Dummy Class->>>>>>>>>>>>>>>')
765 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
766 print(" ")
767
768 headers = {'Content-type': 'application/json'}
peusterm72f09882018-05-15 17:10:27 +0200769 test_heatapi_template_create_stack = open(os.path.join(os.path.dirname(
770 __file__), "templates/test_heatapi_template_create_stack.yml")).read()
771 test_heatapi_template_update_stack = open(os.path.join(os.path.dirname(
772 __file__), "templates/test_heatapi_template_update_stack.yml")).read()
peustermf27a5922017-05-17 08:48:54 +0200773
774 print('->>>>>>> test Heat List API Versions Stack ->>>>>>>>>>>>>>>')
775 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200776 url = "http://0.0.0.0:18004/"
peustermf27a5922017-05-17 08:48:54 +0200777 listapiversionstackresponse = requests.get(url, headers=headers)
778 self.assertEqual(listapiversionstackresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200779 self.assertEqual(json.loads(listapiversionstackresponse.content)[
780 "versions"][0]["id"], "v1.0")
peustermf27a5922017-05-17 08:48:54 +0200781 print(" ")
782
783 print('->>>>>>> test Create Stack ->>>>>>>>>>>>>>>')
784 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200785 url = "http://0.0.0.0:18004/v1/tenantabc123/stacks"
peusterm72f09882018-05-15 17:10:27 +0200786 createstackresponse = requests.post(url, data=json.dumps(
787 yaml.load(test_heatapi_template_create_stack)), headers=headers)
peustermf27a5922017-05-17 08:48:54 +0200788 self.assertEqual(createstackresponse.status_code, 201)
peusterm72f09882018-05-15 17:10:27 +0200789 self.assertNotEqual(json.loads(
790 createstackresponse.content)["stack"]["id"], "")
peustermf27a5922017-05-17 08:48:54 +0200791 print(" ")
792
793 print('->>>>>>> test Create Stack With Existing Name ->>>>>>>>>>>>>>>')
794 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200795 url = "http://0.0.0.0:18004/v1/tenantabc123/stacks"
peusterm72f09882018-05-15 17:10:27 +0200796 createstackwithexistingnameresponse = requests.post(
797 url, data='{"stack_name" : "s1"}', headers=headers)
peustermf27a5922017-05-17 08:48:54 +0200798 self.assertEqual(createstackwithexistingnameresponse.status_code, 409)
799 print(" ")
800
801 print('->>>>>>> test Create Stack With Unsupported Version ->>>>>>>>>>>>>>>')
802 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200803 url = "http://0.0.0.0:18004/v1/tenantabc123/stacks"
peusterm72f09882018-05-15 17:10:27 +0200804 createstackwitheunsupportedversionresponse = requests.post(
805 url, data='{"stack_name" : "stackname123", "template" : {"heat_template_version": "2015-04-29"}}', headers=headers)
806 self.assertEqual(
807 createstackwitheunsupportedversionresponse.status_code, 400)
peustermf27a5922017-05-17 08:48:54 +0200808 print(" ")
809
peustermf27a5922017-05-17 08:48:54 +0200810 print('->>>>>>> test List Stack ->>>>>>>>>>>>>>>')
811 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200812 url = "http://0.0.0.0:18004/v1/tenantabc123/stacks"
peustermf27a5922017-05-17 08:48:54 +0200813 liststackresponse = requests.get(url, headers=headers)
814 self.assertEqual(liststackresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200815 self.assertEqual(json.loads(liststackresponse.content)[
816 "stacks"][0]["stack_status"], "CREATE_COMPLETE")
peustermf27a5922017-05-17 08:48:54 +0200817 print(" ")
818
peustermf27a5922017-05-17 08:48:54 +0200819 print('->>>>>>> test Show Stack ->>>>>>>>>>>>>>>')
820 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterm72f09882018-05-15 17:10:27 +0200821 url = "http://0.0.0.0:18004/v1/tenantabc123showStack/stacks/%s" % json.loads(
822 createstackresponse.content)['stack']['id']
peustermf27a5922017-05-17 08:48:54 +0200823 liststackdetailsresponse = requests.get(url, headers=headers)
824 self.assertEqual(liststackdetailsresponse.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200825 self.assertEqual(json.loads(liststackdetailsresponse.content)[
826 "stack"]["stack_status"], "CREATE_COMPLETE")
peustermf27a5922017-05-17 08:48:54 +0200827 print(" ")
828
829 print('->>>>>>> test Show Non-Exisitng Stack ->>>>>>>>>>>>>>>')
830 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200831 url = "http://0.0.0.0:18004/v1/tenantabc123showStack/stacks/non_exisitng_id123"
peusterm72f09882018-05-15 17:10:27 +0200832 listnonexistingstackdetailsresponse = requests.get(
833 url, headers=headers)
peustermf27a5922017-05-17 08:48:54 +0200834 self.assertEqual(listnonexistingstackdetailsresponse.status_code, 404)
835 print(" ")
836
837 print('->>>>>>> test Update Stack ->>>>>>>>>>>>>>>')
838 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterm72f09882018-05-15 17:10:27 +0200839 url = "http://0.0.0.0:18004/v1/tenantabc123updateStack/stacks/%s" % json.loads(
840 createstackresponse.content)['stack']['id']
peustermdd559512017-09-21 16:29:34 +0200841 updatestackresponse = requests.put(url, data=json.dumps(yaml.load(test_heatapi_template_update_stack)),
peusterm72f09882018-05-15 17:10:27 +0200842 headers=headers)
peustermf27a5922017-05-17 08:48:54 +0200843 self.assertEqual(updatestackresponse.status_code, 202)
844 liststackdetailsresponse = requests.get(url, headers=headers)
peusterm72f09882018-05-15 17:10:27 +0200845 self.assertEqual(json.loads(liststackdetailsresponse.content)[
846 "stack"]["stack_status"], "UPDATE_COMPLETE")
peustermf27a5922017-05-17 08:48:54 +0200847 print(" ")
848
849 print('->>>>>>> test Update Non-Existing Stack ->>>>>>>>>>>>>>>')
850 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200851 url = "http://0.0.0.0:18004/v1/tenantabc123updateStack/stacks/non_existing_id_1234"
peusterm72f09882018-05-15 17:10:27 +0200852 updatenonexistingstackresponse = requests.put(
853 url, data={"non": "sense"}, headers=headers)
peustermf27a5922017-05-17 08:48:54 +0200854 self.assertEqual(updatenonexistingstackresponse.status_code, 404)
855 print(" ")
856
857 print('->>>>>>> test Delete Stack ->>>>>>>>>>>>>>>')
858 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
peusterme22979a2017-05-18 13:28:38 +0200859 url = "http://0.0.0.0:18004/v1/tenantabc123showStack/stacks/%s" % \
peustermf27a5922017-05-17 08:48:54 +0200860 json.loads(createstackresponse.content)['stack']['id']
861 deletestackdetailsresponse = requests.delete(url, headers=headers)
862 self.assertEqual(deletestackdetailsresponse.status_code, 204)
863 print(" ")
864
splietker7b38ee12017-06-28 17:24:01 +0200865 def testNeutronSFC(self):
866 """
867 Tests the Neutron Service Function Chaining implementation. As Some functions build up on others, a
868 complete environment is created here:
869
870 Ports: p1, p2, p3, p4
871 Port Pairs: pp1(p1, p2), pp2(p3, p4)
872 Port Pair Groups: ppg1(pp1, pp2)
873 Flow Classifiers: fc1
874 Port Chain: pc1(ppg1, fc1)
875 """
876
877 headers = {'Content-type': 'application/json'}
878
879 print('->>>>>>> Create ports p1 - p4 ->>>>>>>>>>>>>>>')
880 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
881 # Get network id
peusterm72f09882018-05-15 17:10:27 +0200882 network_resp = requests.get(
883 "http://0.0.0.0:19696/v2.0/networks?name=default", headers=headers)
splietker7b38ee12017-06-28 17:24:01 +0200884 self.assertEqual(network_resp.status_code, 200)
885 network_id = json.loads(network_resp.content)["networks"][0]["id"]
886
887 url = "http://0.0.0.0:19696/v2.0/ports"
888 port_request = '{"port": {"name": "%s", "network_id": "%s"}}'
peusterm72f09882018-05-15 17:10:27 +0200889 p1_resp = requests.post(url, data=port_request %
890 ("p1", network_id), headers=headers)
splietker7b38ee12017-06-28 17:24:01 +0200891 self.assertEqual(p1_resp.status_code, 201)
peusterm72f09882018-05-15 17:10:27 +0200892 p2_resp = requests.post(url, data=port_request %
893 ("p2", network_id), headers=headers)
splietker7b38ee12017-06-28 17:24:01 +0200894 self.assertEqual(p2_resp.status_code, 201)
peusterm72f09882018-05-15 17:10:27 +0200895 p3_resp = requests.post(url, data=port_request %
896 ("p3", network_id), headers=headers)
splietker7b38ee12017-06-28 17:24:01 +0200897 self.assertEqual(p3_resp.status_code, 201)
peusterm72f09882018-05-15 17:10:27 +0200898 p4_resp = requests.post(url, data=port_request %
899 ("p4", network_id), headers=headers)
splietker7b38ee12017-06-28 17:24:01 +0200900 self.assertEqual(p4_resp.status_code, 201)
901
902 p1_id = json.loads(p1_resp.content)["port"]["id"]
903 p2_id = json.loads(p2_resp.content)["port"]["id"]
904 p3_id = json.loads(p3_resp.content)["port"]["id"]
905 p4_id = json.loads(p4_resp.content)["port"]["id"]
906
907 print('->>>>>>> test Neutron SFC Port Pair Create ->>>>>>>>>>>>>>>')
908 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
909 url = "http://0.0.0.0:19696/v2.0/sfc/port_pairs"
peusterm72f09882018-05-15 17:10:27 +0200910 pp1_resp = requests.post(url, data='{"port_pair": {"name": "pp1", "ingress": "%s", "egress": "%s"}}' % (
911 p1_id, p2_id), headers=headers)
splietker7b38ee12017-06-28 17:24:01 +0200912 self.assertEqual(pp1_resp.status_code, 201)
peusterm72f09882018-05-15 17:10:27 +0200913 pp2_resp = requests.post(url, data='{"port_pair": {"name": "pp2", "ingress": "%s", "egress": "%s"}}' % (
914 p3_id, p4_id), headers=headers)
splietker7b38ee12017-06-28 17:24:01 +0200915 self.assertEqual(pp2_resp.status_code, 201)
peusterm72f09882018-05-15 17:10:27 +0200916 pp3_resp = requests.post(url, data='{"port_pair": {"name": "pp3", "ingress": "%s", "egress": "%s"}}' % (
917 p3_id, p4_id), headers=headers)
splietker7b38ee12017-06-28 17:24:01 +0200918 self.assertEqual(pp3_resp.status_code, 201)
919
920 pp1_id = json.loads(pp1_resp.content)["port_pair"]["id"]
921 pp2_id = json.loads(pp2_resp.content)["port_pair"]["id"]
922 pp3_id = json.loads(pp3_resp.content)["port_pair"]["id"]
923
924 print('->>>>>>> test Neutron SFC Port Pair Update ->>>>>>>>>>>>>>>')
925 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
926 url = "http://0.0.0.0:19696/v2.0/sfc/port_pairs/%s" % pp3_id
peusterm72f09882018-05-15 17:10:27 +0200927 pp3_update_resp = requests.put(
928 url, data='{"port_pair": {"description": "port_pair_update"}}', headers=headers)
splietker7b38ee12017-06-28 17:24:01 +0200929 self.assertEqual(pp3_update_resp.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200930 self.assertEqual(json.loads(pp3_update_resp.content)[
931 "port_pair"]["description"], "port_pair_update")
splietker7b38ee12017-06-28 17:24:01 +0200932
933 print('->>>>>>> test Neutron SFC Port Pair Delete ->>>>>>>>>>>>>>>')
934 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
935 url = "http://0.0.0.0:19696/v2.0/sfc/port_pairs/%s" % pp3_id
936 pp3_delete_resp = requests.delete(url, headers=headers)
937 self.assertEqual(pp3_delete_resp.status_code, 204)
938
939 print('->>>>>>> test Neutron SFC Port Pair List ->>>>>>>>>>>>>>>')
940 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
941 url = "http://0.0.0.0:19696/v2.0/sfc/port_pairs"
942 pp_list_resp = requests.get(url, headers=headers)
943 self.assertEqual(pp_list_resp.status_code, 200)
schillingeae8ad412019-01-30 21:45:37 +0100944 pp_list = json.loads(pp_list_resp.content)["port_pairs"]
peusterm72f09882018-05-15 17:10:27 +0200945 # only pp1 and pp2 should be left
schillingeae8ad412019-01-30 21:45:37 +0100946 self.assertEqual(len(pp_list), 2)
947
948 print('->>>>>>> test Neutron SFC Port Pair List filtered by id ->>>>>>>>>>>>>>>')
949 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
950 url = "http://0.0.0.0:19696/v2.0/sfc/port_pairs?id=%s" % pp_list[0]["id"]
951 pp_list_filtered_by_id_resp = requests.get(url, headers=headers)
952 pp_list_filtered_by_id = json.loads(pp_list_filtered_by_id_resp.content)["port_pairs"]
953 self.assertEqual(pp_list_filtered_by_id_resp.status_code, 200)
954 self.assertEqual(len(pp_list_filtered_by_id), 1)
955 self.assertEqual(pp_list_filtered_by_id[0], pp_list[0])
splietker7b38ee12017-06-28 17:24:01 +0200956
957 print('->>>>>>> test Neutron SFC Port Pair Show ->>>>>>>>>>>>>>>')
958 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
959 url = "http://0.0.0.0:19696/v2.0/sfc/port_pairs/%s" % pp2_id
960 pp2_show_resp = requests.get(url, headers=headers)
961 self.assertEqual(pp2_show_resp.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200962 self.assertEqual(json.loads(pp2_show_resp.content)
963 ["port_pair"]["name"], "pp2")
splietker7b38ee12017-06-28 17:24:01 +0200964
965 print('->>>>>>> test Neutron SFC Port Pair Group Create ->>>>>>>>>>>>>>>')
966 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
967 url = "http://0.0.0.0:19696/v2.0/sfc/port_pair_groups"
peusterm72f09882018-05-15 17:10:27 +0200968 ppg1_resp = requests.post(
969 url, data='{"port_pair_group": {"name": "ppg1", "port_pairs": ["%s"]}}' % (pp1_id), headers=headers)
splietker7b38ee12017-06-28 17:24:01 +0200970 self.assertEqual(ppg1_resp.status_code, 201)
peusterm72f09882018-05-15 17:10:27 +0200971 ppg2_resp = requests.post(
972 url, data='{"port_pair_group": {"name": "ppg2", "port_pairs": ["%s"]}}' % (pp2_id), headers=headers)
splietker7b38ee12017-06-28 17:24:01 +0200973 self.assertEqual(ppg2_resp.status_code, 201)
peusterm72f09882018-05-15 17:10:27 +0200974 ppg3_resp = requests.post(
975 url, data='{"port_pair_group": {"name": "ppg3", "port_pairs": ["%s"]}}' % (pp2_id), headers=headers)
splietker7b38ee12017-06-28 17:24:01 +0200976 self.assertEqual(ppg3_resp.status_code, 201)
977
978 ppg1_id = json.loads(ppg1_resp.content)["port_pair_group"]["id"]
979 ppg2_id = json.loads(ppg2_resp.content)["port_pair_group"]["id"]
980 ppg3_id = json.loads(ppg3_resp.content)["port_pair_group"]["id"]
981
982 print('->>>>>>> test Neutron SFC Port Pair Group Update ->>>>>>>>>>>>>>>')
983 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
984 url = "http://0.0.0.0:19696/v2.0/sfc/port_pair_groups/%s" % ppg3_id
peusterm72f09882018-05-15 17:10:27 +0200985 ppg3_update_resp = requests.put(
986 url, data='{"port_pair_group": {"description": "port_pair_group_update"}}', headers=headers)
splietker7b38ee12017-06-28 17:24:01 +0200987 self.assertEqual(ppg3_update_resp.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +0200988 self.assertEqual(json.loads(ppg3_update_resp.content)[
989 "port_pair_group"]["description"], "port_pair_group_update")
splietker7b38ee12017-06-28 17:24:01 +0200990
991 print('->>>>>>> test Neutron SFC Port Pair Group Delete ->>>>>>>>>>>>>>>')
992 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
993 url = "http://0.0.0.0:19696/v2.0/sfc/port_pair_groups/%s" % ppg3_id
994 ppg3_delete_resp = requests.delete(url, headers=headers)
995 self.assertEqual(ppg3_delete_resp.status_code, 204)
996
997 print('->>>>>>> test Neutron SFC Port Pair Group List ->>>>>>>>>>>>>>>')
998 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
999 url = "http://0.0.0.0:19696/v2.0/sfc/port_pair_groups"
1000 ppg_list_resp = requests.get(url, headers=headers)
1001 self.assertEqual(ppg_list_resp.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +02001002 # only ppg1 and ppg2 should be left
1003 self.assertEqual(
1004 len(json.loads(ppg_list_resp.content)["port_pair_groups"]), 2)
splietker7b38ee12017-06-28 17:24:01 +02001005
1006 print('->>>>>>> test Neutron SFC Port Pair Group Show ->>>>>>>>>>>>>>>')
1007 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
1008 url = "http://0.0.0.0:19696/v2.0/sfc/port_pair_groups/%s" % ppg2_id
1009 ppg2_show_resp = requests.get(url, headers=headers)
1010 self.assertEqual(ppg2_show_resp.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +02001011 self.assertEqual(json.loads(ppg2_show_resp.content)[
1012 "port_pair_group"]["name"], "ppg2")
splietker7b38ee12017-06-28 17:24:01 +02001013
splietker7b38ee12017-06-28 17:24:01 +02001014 print('->>>>>>> test Neutron SFC Flow Classifier Create ->>>>>>>>>>>>>>>')
1015 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
1016 url = "http://0.0.0.0:19696/v2.0/sfc/flow_classifiers"
peusterm72f09882018-05-15 17:10:27 +02001017 fc1_resp = requests.post(
1018 url, data='{"flow_classifier": {"name": "fc1", "source_port_range_min": 22, "source_port_range_max": 4000}}', headers=headers)
splietker7b38ee12017-06-28 17:24:01 +02001019 self.assertEqual(fc1_resp.status_code, 201)
peusterm72f09882018-05-15 17:10:27 +02001020 fc2_resp = requests.post(
1021 url, data='{"flow_classifier": {"name": "fc2", "source_port_range_min": 22, "source_port_range_max": 4000}}', headers=headers)
splietker7b38ee12017-06-28 17:24:01 +02001022 self.assertEqual(fc2_resp.status_code, 201)
1023
1024 fc1_id = json.loads(fc1_resp.content)["flow_classifier"]["id"]
1025 fc2_id = json.loads(fc2_resp.content)["flow_classifier"]["id"]
1026
1027 print('->>>>>>> test Neutron SFC Flow Classifier Update ->>>>>>>>>>>>>>>')
1028 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
1029 url = "http://0.0.0.0:19696/v2.0/sfc/flow_classifiers/%s" % fc2_id
peusterm72f09882018-05-15 17:10:27 +02001030 fc2_update_resp = requests.put(
1031 url, data='{"flow_classifier": {"description": "flow_classifier_update"}}', headers=headers)
splietker7b38ee12017-06-28 17:24:01 +02001032 self.assertEqual(fc2_update_resp.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +02001033 self.assertEqual(json.loads(fc2_update_resp.content)[
1034 "flow_classifier"]["description"], "flow_classifier_update")
splietker7b38ee12017-06-28 17:24:01 +02001035
1036 print('->>>>>>> test Neutron SFC Flow Classifier Delete ->>>>>>>>>>>>>>>')
1037 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
1038 url = "http://0.0.0.0:19696/v2.0/sfc/flow_classifiers/%s" % fc2_id
1039 fc2_delete_resp = requests.delete(url, headers=headers)
1040 self.assertEqual(fc2_delete_resp.status_code, 204)
1041
1042 print('->>>>>>> test Neutron SFC Flow Classifier List ->>>>>>>>>>>>>>>')
1043 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
1044 url = "http://0.0.0.0:19696/v2.0/sfc/flow_classifiers"
1045 fc_list_resp = requests.get(url, headers=headers)
1046 self.assertEqual(fc_list_resp.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +02001047 self.assertEqual(len(json.loads(fc_list_resp.content)
1048 ["flow_classifiers"]), 1) # only fc1
splietker7b38ee12017-06-28 17:24:01 +02001049
1050 print('->>>>>>> test Neutron SFC Flow Classifier Show ->>>>>>>>>>>>>>>')
1051 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
1052 url = "http://0.0.0.0:19696/v2.0/sfc/flow_classifiers/%s" % fc1_id
1053 fc1_show_resp = requests.get(url, headers=headers)
1054 self.assertEqual(fc1_show_resp.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +02001055 self.assertEqual(json.loads(fc1_show_resp.content)[
1056 "flow_classifier"]["name"], "fc1")
splietker7b38ee12017-06-28 17:24:01 +02001057
1058 print('->>>>>>> test Neutron SFC Port Chain Create ->>>>>>>>>>>>>>>')
1059 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
1060 url = "http://0.0.0.0:19696/v2.0/sfc/port_chains"
peusterm72f09882018-05-15 17:10:27 +02001061 pc1_resp = requests.post(url, data='{"port_chain": {"name": "pc1", "port_pair_groups": ["%s"], "flow_classifiers": ["%s"]}}' % (
1062 ppg1_id, fc1_id), headers=headers)
splietker7b38ee12017-06-28 17:24:01 +02001063 self.assertEqual(pc1_resp.status_code, 201)
peusterm72f09882018-05-15 17:10:27 +02001064 pc2_resp = requests.post(url, data='{"port_chain": {"name": "pc2", "port_pair_groups": ["%s"], "flow_classifiers": ["%s"]}}' % (
1065 ppg1_id, fc1_id), headers=headers)
splietker7b38ee12017-06-28 17:24:01 +02001066 self.assertEqual(pc2_resp.status_code, 201)
1067
1068 pc1_id = json.loads(pc1_resp.content)["port_chain"]["id"]
1069 pc2_id = json.loads(pc2_resp.content)["port_chain"]["id"]
1070
1071 print('->>>>>>> test Neutron SFC Port Chain Update ->>>>>>>>>>>>>>>')
1072 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
1073 url = "http://0.0.0.0:19696/v2.0/sfc/port_chains/%s" % pc2_id
peusterm72f09882018-05-15 17:10:27 +02001074 pc2_update_resp = requests.put(
1075 url, data='{"port_chain": {"description": "port_chain_update"}}', headers=headers)
splietker7b38ee12017-06-28 17:24:01 +02001076 self.assertEqual(pc2_update_resp.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +02001077 self.assertEqual(json.loads(pc2_update_resp.content)[
1078 "port_chain"]["description"], "port_chain_update")
splietker7b38ee12017-06-28 17:24:01 +02001079
1080 print('->>>>>>> test Neutron SFC Port Chain Delete ->>>>>>>>>>>>>>>')
1081 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
1082 url = "http://0.0.0.0:19696/v2.0/sfc/port_chains/%s" % pc2_id
1083 pc2_delete_resp = requests.delete(url, headers=headers)
1084 self.assertEqual(pc2_delete_resp.status_code, 204)
1085
1086 print('->>>>>>> test Neutron SFC Port Chain List ->>>>>>>>>>>>>>>')
1087 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
1088 url = "http://0.0.0.0:19696/v2.0/sfc/port_chains"
1089 pc_list_resp = requests.get(url, headers=headers)
1090 self.assertEqual(pc_list_resp.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +02001091 self.assertEqual(len(json.loads(pc_list_resp.content)
1092 ["port_chains"]), 1) # only pc1
splietker7b38ee12017-06-28 17:24:01 +02001093
1094 print('->>>>>>> test Neutron SFC Port Chain Show ->>>>>>>>>>>>>>>')
1095 print('->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
1096 url = "http://0.0.0.0:19696/v2.0/sfc/port_chains/%s" % pc1_id
1097 pc1_show_resp = requests.get(url, headers=headers)
1098 self.assertEqual(pc1_show_resp.status_code, 200)
peusterm72f09882018-05-15 17:10:27 +02001099 self.assertEqual(json.loads(pc1_show_resp.content)
1100 ["port_chain"]["name"], "pc1")
1101
peustermf27a5922017-05-17 08:48:54 +02001102
1103if __name__ == '__main__':
1104 unittest.main()