3 #############################################################################
4 # Copyright (c) 2017 Orange, Inc. and others. All rights reserved.
6 # All rights reserved. This program and the accompanying materials
7 # are made available under the terms of the Apache License, Version 2.0
8 # which accompanies this distribution, and is available at
9 # http://www.apache.org/licenses/LICENSE-2.0
10 #############################################################################
21 from unittest.result import failfast
25 class TransportPCERendererTesting(unittest.TestCase):
27 honeynode_process1 = None
28 honeynode_process2 = None
30 restconf_baseurl = "http://localhost:8181/restconf"
32 # START_IGNORE_XTESTING
36 print("starting honeynode1...")
37 cls.honeynode_process1 = test_utils.start_xpdra_honeynode()
40 print("starting honeynode2...")
41 cls.honeynode_process2 = test_utils.start_roadma_honeynode()
43 print("all honeynodes started")
45 print("starting opendaylight...")
46 cls.odl_process = test_utils.start_tpce()
48 print("opendaylight started")
51 def tearDownClass(cls):
52 for child in psutil.Process(cls.odl_process.pid).children():
53 child.send_signal(signal.SIGINT)
55 cls.odl_process.send_signal(signal.SIGINT)
56 cls.odl_process.wait()
57 for child in psutil.Process(cls.honeynode_process1.pid).children():
58 child.send_signal(signal.SIGINT)
60 cls.honeynode_process1.send_signal(signal.SIGINT)
61 cls.honeynode_process1.wait()
62 for child in psutil.Process(cls.honeynode_process2.pid).children():
63 child.send_signal(signal.SIGINT)
65 cls.honeynode_process2.send_signal(signal.SIGINT)
66 cls.honeynode_process2.wait()
69 print("execution of {}".format(self.id().split(".")[-1]))
74 def test_01_rdm_device_connected(self):
75 url = ("{}/config/network-topology:"
76 "network-topology/topology/topology-netconf/node/ROADM-A1"
77 .format(self.restconf_baseurl))
79 "node-id": "ROADM-A1",
80 "netconf-node-topology:username": "admin",
81 "netconf-node-topology:password": "admin",
82 "netconf-node-topology:host": "127.0.0.1",
83 "netconf-node-topology:port": "17841",
84 "netconf-node-topology:tcp-only": "false",
85 "netconf-node-topology:pass-through": {}}]}
86 headers = {'content-type': 'application/json'}
87 response = requests.request(
88 "PUT", url, data=json.dumps(data), headers=headers,
89 auth=('admin', 'admin'))
90 self.assertIn(response.status_code, [requests.codes.created,
92 # self.assertEqual(response.status_code, requests.codes.created)
95 def test_02_xpdr_device_connected(self):
96 url = ("{}/config/network-topology:"
97 "network-topology/topology/topology-netconf/node/XPDR-A1"
98 .format(self.restconf_baseurl))
100 "node-id": "XPDR-A1",
101 "netconf-node-topology:username": "admin",
102 "netconf-node-topology:password": "admin",
103 "netconf-node-topology:host": "127.0.0.1",
104 "netconf-node-topology:port": "17840",
105 "netconf-node-topology:tcp-only": "false",
106 "netconf-node-topology:pass-through": {}}]}
107 headers = {'content-type': 'application/json'}
108 response = requests.request(
109 "PUT", url, data=json.dumps(data), headers=headers,
110 auth=('admin', 'admin'))
111 # self.assertEqual(response.status_code, requests.codes.created)
112 self.assertIn(response.status_code, [requests.codes.created,
116 def test_03_rdm_portmapping(self):
117 url = ("{}/config/transportpce-portmapping:network/"
119 .format(self.restconf_baseurl))
120 headers = {'content-type': 'application/json'}
121 response = requests.request(
122 "GET", url, headers=headers, auth=('admin', 'admin'))
123 self.assertEqual(response.status_code, requests.codes.ok)
124 res = response.json()
126 {'supporting-port': 'L1', 'supporting-circuit-pack-name': '1/0',
127 'logical-connection-point': 'DEG1-TTP-TXRX', 'port-direction': 'bidirectional'},
128 res['nodes'][0]['mapping'])
130 {'supporting-port': 'C3', 'supporting-circuit-pack-name': '3/0',
131 'logical-connection-point': 'SRG1-PP3-TXRX', 'port-direction': 'bidirectional'},
132 res['nodes'][0]['mapping'])
134 def test_04_xpdr_portmapping(self):
135 url = ("{}/config/transportpce-portmapping:network/"
137 .format(self.restconf_baseurl))
138 headers = {'content-type': 'application/json'}
139 response = requests.request(
140 "GET", url, headers=headers, auth=('admin', 'admin'))
141 self.assertEqual(response.status_code, requests.codes.ok)
142 res = response.json()
144 {'supported-interface-capability': ['org-openroadm-port-types:if-OCH'],
145 'supporting-port': '1', 'supporting-circuit-pack-name': '1/0/1-PLUG-NET',
146 'logical-connection-point': 'XPDR1-NETWORK1', 'port-qual': 'xpdr-network',
147 'port-direction': 'bidirectional', 'connection-map-lcp': 'XPDR1-CLIENT1',
148 'lcp-hash-val': '8e128ba57560403cfd4ffafae38cd941'},
149 res['nodes'][0]['mapping'])
151 {'supported-interface-capability': ['org-openroadm-port-types:if-100GE'],
152 'supporting-port': 'C1',
153 'supporting-circuit-pack-name': '1/0/1-PLUG-CLIENT',
154 'logical-connection-point': 'XPDR1-CLIENT1', 'port-direction': 'bidirectional',
155 'connection-map-lcp': 'XPDR1-NETWORK1', 'port-qual': 'xpdr-client',
156 'lcp-hash-val': '3ed8ed1336784ac7c2f66c22f2f03d8'},
157 res['nodes'][0]['mapping'])
159 def test_05_service_path_create(self):
160 url = "{}/operations/transportpce-device-renderer:service-path".format(self.restconf_baseurl)
161 data = {"renderer:input": {
162 "renderer:service-name": "service_test",
163 "renderer:wave-number": "7",
164 "renderer:modulation-format": "qpsk",
165 "renderer:operation": "create",
167 {"renderer:node-id": "ROADM-A1",
168 "renderer:src-tp": "SRG1-PP3-TXRX",
169 "renderer:dest-tp": "DEG1-TTP-TXRX"},
170 {"renderer:node-id": "XPDR-A1",
171 "renderer:src-tp": "XPDR1-CLIENT1",
172 "renderer:dest-tp": "XPDR1-NETWORK1"}]}}
173 headers = {'content-type': 'application/json'}
174 response = requests.request(
175 "POST", url, data=json.dumps(data),
176 headers=headers, auth=('admin', 'admin'))
177 self.assertEqual(response.status_code, requests.codes.ok)
178 res = response.json()
179 self.assertIn('Roadm-connection successfully created for nodes: ROADM-A1', res["output"]["result"])
181 def test_06_service_path_create_rdm_check(self):
182 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
183 "node/ROADM-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
184 "interface/DEG1-TTP-TXRX-nmc-7"
185 .format(self.restconf_baseurl))
186 headers = {'content-type': 'application/json'}
187 response = requests.request(
188 "GET", url, headers=headers, auth=('admin', 'admin'))
189 self.assertEqual(response.status_code, requests.codes.ok)
190 res = response.json()
191 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
192 self.assertDictEqual(
194 'name': 'DEG1-TTP-TXRX-nmc-7',
195 'administrative-state': 'inService',
196 'supporting-circuit-pack-name': '1/0',
197 'type': 'org-openroadm-interfaces:networkMediaChannelConnectionTerminationPoint',
198 'supporting-port': 'L1'
199 }, **res['interface'][0]),
202 self.assertDictEqual(
203 {u'frequency': 195.8, u'width': 40},
204 res['interface'][0]['org-openroadm-network-media-channel-interfaces:nmc-ctp'])
206 def test_07_service_path_create_rdm_check(self):
207 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
208 "node/ROADM-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
209 "interface/DEG1-TTP-TXRX-mc-7"
210 .format(self.restconf_baseurl))
211 headers = {'content-type': 'application/json'}
212 response = requests.request(
213 "GET", url, headers=headers, auth=('admin', 'admin'))
214 self.assertEqual(response.status_code, requests.codes.ok)
215 res = response.json()
216 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
217 self.assertDictEqual(
219 'name': 'DEG1-TTP-TXRX-mc-7',
220 'administrative-state': 'inService',
221 'supporting-circuit-pack-name': '1/0',
222 'type': 'org-openroadm-interfaces:mediaChannelTrailTerminationPoint',
223 'supporting-port': 'L1'
224 }, **res['interface'][0]),
227 self.assertDictEqual(
228 {u'min-freq': 195.775, u'max-freq': 195.825},
229 res['interface'][0]['org-openroadm-media-channel-interfaces:mc-ttp'])
231 def test_08_service_path_create_rdm_check(self):
232 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
233 "node/ROADM-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
234 "interface/SRG1-PP3-TXRX-nmc-7"
235 .format(self.restconf_baseurl))
236 headers = {'content-type': 'application/json'}
237 response = requests.request(
238 "GET", url, headers=headers, auth=('admin', 'admin'))
239 self.assertEqual(response.status_code, requests.codes.ok)
240 res = response.json()
241 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
242 self.assertDictEqual(
244 'name': 'SRG1-PP3-TXRX-nmc-7',
245 'administrative-state': 'inService',
246 'supporting-circuit-pack-name': '3/0',
247 'type': 'org-openroadm-interfaces:networkMediaChannelConnectionTerminationPoint',
248 'supporting-port': 'C3'
249 }, **res['interface'][0]),
252 self.assertDictEqual(
253 {u'frequency': 195.8, u'width': 40},
254 res['interface'][0]['org-openroadm-network-media-channel-interfaces:nmc-ctp'])
256 # -mc supporting interfaces must not be created for SRG, only degrees
257 def test_09_service_path_create_rdm_check(self):
258 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
259 "node/ROADM-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
260 "interface/SRG1-PP3-TXRX-mc-7"
261 .format(self.restconf_baseurl))
262 headers = {'content-type': 'application/json'}
263 response = requests.request(
264 "GET", url, headers=headers, auth=('admin', 'admin'))
265 self.assertEqual(response.status_code, requests.codes.not_found)
266 res = response.json()
268 {"error-type": "application", "error-tag": "data-missing",
269 "error-message": "Request could not be completed because the relevant data model content does not exist"},
270 res['errors']['error'])
272 def test_10_service_path_create_rdm_check(self):
273 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
274 "node/ROADM-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
275 "roadm-connections/SRG1-PP3-TXRX-DEG1-TTP-TXRX-7"
276 .format(self.restconf_baseurl))
277 headers = {'content-type': 'application/json'}
278 response = requests.request(
279 "GET", url, headers=headers, auth=('admin', 'admin'))
280 self.assertEqual(response.status_code, requests.codes.ok)
281 res = response.json()
282 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
283 self.assertDictEqual(
285 'connection-name': 'SRG1-PP3-TXRX-DEG1-TTP-TXRX-7',
286 'opticalControlMode': 'off'
287 }, **res['roadm-connections'][0]),
288 res['roadm-connections'][0]
290 self.assertDictEqual(
291 {'src-if': 'SRG1-PP3-TXRX-nmc-7'},
292 res['roadm-connections'][0]['source'])
293 self.assertDictEqual(
294 {'dst-if': 'DEG1-TTP-TXRX-nmc-7'},
295 res['roadm-connections'][0]['destination'])
297 def test_11_service_path_create_xpdr_check(self):
298 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
299 "node/XPDR-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
300 "interface/XPDR1-NETWORK1-7"
301 .format(self.restconf_baseurl))
302 headers = {'content-type': 'application/json'}
303 response = requests.request(
304 "GET", url, headers=headers, auth=('admin', 'admin'))
305 self.assertEqual(response.status_code, requests.codes.ok)
306 res = response.json()
307 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
308 self.assertDictEqual(
310 'name': 'XPDR1-NETWORK1-7',
311 'administrative-state': 'inService',
312 'supporting-circuit-pack-name': '1/0/1-PLUG-NET',
313 'type': 'org-openroadm-interfaces:opticalChannel',
314 'supporting-port': '1'
315 }, **res['interface'][0]),
318 self.assertDictEqual(
319 {u'rate': u'org-openroadm-common-types:R100G',
320 u'transmit-power': -5,
321 u'frequency': 195.8},
322 res['interface'][0]['org-openroadm-optical-channel-interfaces:och'])
324 def test_12_service_path_create_xpdr_check(self):
325 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
326 "node/XPDR-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
327 "interface/XPDR1-NETWORK1-OTU"
328 .format(self.restconf_baseurl))
329 headers = {'content-type': 'application/json'}
330 response = requests.request(
331 "GET", url, headers=headers, auth=('admin', 'admin'))
332 self.assertEqual(response.status_code, requests.codes.ok)
333 res = response.json()
334 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
335 self.assertDictEqual(
337 'name': 'XPDR1-NETWORK1-OTU',
338 'administrative-state': 'inService',
339 'supporting-circuit-pack-name': '1/0/1-PLUG-NET',
340 'type': 'org-openroadm-interfaces:otnOtu',
341 'supporting-port': '1',
342 'supporting-interface': 'XPDR1-NETWORK1-7'
343 }, **res['interface'][0]),
346 self.assertDictEqual(
347 {u'rate': u'org-openroadm-otn-common-types:OTU4',
349 res['interface'][0]['org-openroadm-otn-otu-interfaces:otu'])
351 def test_13_service_path_create_xpdr_check(self):
352 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
353 "node/XPDR-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
354 "interface/XPDR1-NETWORK1-ODU"
355 .format(self.restconf_baseurl))
356 headers = {'content-type': 'application/json'}
357 response = requests.request(
358 "GET", url, headers=headers, auth=('admin', 'admin'))
359 self.assertEqual(response.status_code, requests.codes.ok)
360 res = response.json()
361 # the 2 following statements replace self.assertDictContainsSubset deprecated in python 3.2
362 self.assertDictEqual(
364 'name': 'XPDR1-NETWORK1-ODU',
365 'administrative-state': 'inService',
366 'supporting-circuit-pack-name': '1/0/1-PLUG-NET',
367 'type': 'org-openroadm-interfaces:otnOdu',
368 'supporting-port': '1',
369 'supporting-interface': 'XPDR1-NETWORK1-OTU'
370 }, **res['interface'][0]),
373 self.assertDictEqual(
375 'rate': 'org-openroadm-otn-common-types:ODU4',
376 u'monitoring-mode': u'terminated'
377 }, **res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
378 res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']
380 self.assertDictEqual({u'exp-payload-type': u'07', u'payload-type': u'07'},
381 res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
383 def test_14_service_path_create_xpdr_check(self):
384 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
385 "node/XPDR-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
386 "interface/XPDR1-CLIENT1-ETHERNET"
387 .format(self.restconf_baseurl))
388 headers = {'content-type': 'application/json'}
389 response = requests.request(
390 "GET", url, headers=headers, auth=('admin', 'admin'))
391 self.assertEqual(response.status_code, requests.codes.ok)
392 res = response.json()
393 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
394 self.assertDictEqual(
396 'name': 'XPDR1-CLIENT1-ETHERNET',
397 'administrative-state': 'inService',
398 'supporting-circuit-pack-name': '1/0/1-PLUG-CLIENT',
399 'type': 'org-openroadm-interfaces:ethernetCsmacd',
400 'supporting-port': 'C1'
401 }, **res['interface'][0]),
404 self.assertDictEqual(
405 {u'fec': u'off', u'speed': 100000},
406 res['interface'][0]['org-openroadm-ethernet-interfaces:ethernet'])
408 def test_15_service_path_create_xpdr_check(self):
409 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
410 "node/XPDR-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
411 "circuit-packs/1%2F0%2F1-PLUG-NET"
412 .format(self.restconf_baseurl))
413 headers = {'content-type': 'application/json'}
414 response = requests.request(
415 "GET", url, headers=headers, auth=('admin', 'admin'))
416 self.assertEqual(response.status_code, requests.codes.ok)
417 res = response.json()
418 self.assertIn('not-reserved-inuse', res['circuit-packs'][0]["equipment-state"])
420 def test_16_service_path_create_xpdr_check(self):
421 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
422 "node/XPDR-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
423 "circuit-packs/1%2F0%2F1-PLUG-CLIENT"
424 .format(self.restconf_baseurl))
425 headers = {'content-type': 'application/json'}
426 response = requests.request(
427 "GET", url, headers=headers, auth=('admin', 'admin'))
428 self.assertEqual(response.status_code, requests.codes.ok)
429 res = response.json()
430 self.assertIn('not-reserved-inuse', res['circuit-packs'][0]["equipment-state"])
432 def test_17_service_path_delete(self):
433 url = "{}/operations/transportpce-device-renderer:service-path".format(self.restconf_baseurl)
434 data = {"renderer:input": {
435 "renderer:service-name": "service_test",
436 "renderer:wave-number": "7",
437 "renderer:operation": "delete",
439 {"renderer:node-id": "ROADM-A1",
440 "renderer:src-tp": "SRG1-PP3-TXRX",
441 "renderer:dest-tp": "DEG1-TTP-TXRX"},
442 {"renderer:node-id": "XPDR-A1",
443 "renderer:src-tp": "XPDR1-CLIENT1",
444 "renderer:dest-tp": "XPDR1-NETWORK1"}]}}
445 headers = {'content-type': 'application/json'}
446 response = requests.request(
447 "POST", url, data=json.dumps(data),
448 headers=headers, auth=('admin', 'admin'))
449 self.assertEqual(response.status_code, requests.codes.ok)
450 self.assertEqual(response.json(), {
451 'output': {'result': 'Request processed', 'success': True}})
453 def test_18_service_path_delete_rdm_check(self):
454 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
455 "node/ROADM-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
456 "interface/DEG1-TTP-TXRX-mc-7"
457 .format(self.restconf_baseurl))
458 headers = {'content-type': 'application/json'}
459 response = requests.request(
460 "GET", url, headers=headers, auth=('admin', 'admin'))
461 self.assertEqual(response.status_code, requests.codes.not_found)
462 res = response.json()
464 {"error-type": "application", "error-tag": "data-missing",
465 "error-message": "Request could not be completed because the relevant data model content does not exist"},
466 res['errors']['error'])
468 def test_19_service_path_delete_rdm_check(self):
469 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
470 "node/ROADM-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
471 "interface/DEG1-TTP-TXRX-nmc-7"
472 .format(self.restconf_baseurl))
473 headers = {'content-type': 'application/json'}
474 response = requests.request(
475 "GET", url, headers=headers, auth=('admin', 'admin'))
476 self.assertEqual(response.status_code, requests.codes.not_found)
477 res = response.json()
479 {"error-type": "application", "error-tag": "data-missing",
480 "error-message": "Request could not be completed because the relevant data model content does not exist"},
481 res['errors']['error'])
483 def test_20_service_path_delete_rdm_check(self):
484 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
485 "node/ROADM-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
486 "interface/SRG1-PP3-TXRX-mc-7"
487 .format(self.restconf_baseurl))
488 headers = {'content-type': 'application/json'}
489 response = requests.request(
490 "GET", url, headers=headers, auth=('admin', 'admin'))
491 self.assertEqual(response.status_code, requests.codes.not_found)
492 res = response.json()
494 {"error-type": "application", "error-tag": "data-missing",
495 "error-message": "Request could not be completed because the relevant data model content does not exist"},
496 res['errors']['error'])
498 def test_21_service_path_delete_rdm_check(self):
499 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
500 "node/ROADM-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
501 "interface/SRG1-PP3-TXRX-nmc-7"
502 .format(self.restconf_baseurl))
503 headers = {'content-type': 'application/json'}
504 response = requests.request(
505 "GET", url, headers=headers, auth=('admin', 'admin'))
506 self.assertEqual(response.status_code, requests.codes.not_found)
507 res = response.json()
509 {"error-type": "application", "error-tag": "data-missing",
510 "error-message": "Request could not be completed because the relevant data model content does not exist"},
511 res['errors']['error'])
513 def test_22_service_path_delete_rdm_check(self):
514 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
515 "node/ROADM-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
516 "roadm-connections/SRG1-PP3-TXRX-DEG1-TTP-TXRX-7"
517 .format(self.restconf_baseurl))
518 headers = {'content-type': 'application/json'}
519 response = requests.request(
520 "GET", url, headers=headers, auth=('admin', 'admin'))
521 self.assertEqual(response.status_code, requests.codes.not_found)
522 res = response.json()
524 {"error-type": "application", "error-tag": "data-missing",
525 "error-message": "Request could not be completed because the relevant data model content does not exist"},
526 res['errors']['error'])
528 def test_23_service_path_delete_xpdr_check(self):
529 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
530 "node/XPDR-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
531 "interface/XPDR1-NETWORK1-7"
532 .format(self.restconf_baseurl))
533 headers = {'content-type': 'application/json'}
534 response = requests.request(
535 "GET", url, headers=headers, auth=('admin', 'admin'))
536 self.assertEqual(response.status_code, requests.codes.not_found)
537 res = response.json()
539 {"error-type": "application", "error-tag": "data-missing",
540 "error-message": "Request could not be completed because the relevant data model content does not exist"},
541 res['errors']['error'])
543 def test_24_service_path_delete_xpdr_check(self):
544 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
545 "node/XPDR-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
546 "interface/XPDR1-NETWORK1-OTU"
547 .format(self.restconf_baseurl))
548 headers = {'content-type': 'application/json'}
549 response = requests.request(
550 "GET", url, headers=headers, auth=('admin', 'admin'))
551 self.assertEqual(response.status_code, requests.codes.not_found)
552 res = response.json()
554 {"error-type": "application", "error-tag": "data-missing",
555 "error-message": "Request could not be completed because the relevant data model content does not exist"},
556 res['errors']['error'])
558 def test_25_service_path_delete_xpdr_check(self):
559 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
560 "node/XPDR-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
561 "interface/XPDR1-NETWORK1-ODU"
562 .format(self.restconf_baseurl))
563 headers = {'content-type': 'application/json'}
564 response = requests.request(
565 "GET", url, headers=headers, auth=('admin', 'admin'))
566 self.assertEqual(response.status_code, requests.codes.not_found)
567 res = response.json()
569 {"error-type": "application", "error-tag": "data-missing",
570 "error-message": "Request could not be completed because the relevant data model content does not exist"},
571 res['errors']['error'])
573 def test_26_service_path_delete_xpdr_check(self):
574 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
575 "node/XPDR-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
576 "interface/XPDR1-CLIENT1-ETHERNET"
577 .format(self.restconf_baseurl))
578 headers = {'content-type': 'application/json'}
579 response = requests.request(
580 "GET", url, headers=headers, auth=('admin', 'admin'))
581 self.assertEqual(response.status_code, requests.codes.not_found)
582 res = response.json()
584 {"error-type": "application", "error-tag": "data-missing",
585 "error-message": "Request could not be completed because the relevant data model content does not exist"},
586 res['errors']['error'])
588 def test_27_service_path_delete_xpdr_check(self):
589 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
590 "node/XPDR-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
591 "circuit-packs/1%2F0%2F1-PLUG-NET"
592 .format(self.restconf_baseurl))
593 headers = {'content-type': 'application/json'}
594 response = requests.request(
595 "GET", url, headers=headers, auth=('admin', 'admin'))
596 self.assertEqual(response.status_code, requests.codes.ok)
597 res = response.json()
598 self.assertEqual('not-reserved-available', res["circuit-packs"][0]['equipment-state'])
600 def test_28_service_path_delete_xpdr_check(self):
601 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
602 "node/XPDR-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
603 "circuit-packs/1%2F0%2F1-PLUG-CLIENT"
604 .format(self.restconf_baseurl))
605 headers = {'content-type': 'application/json'}
606 response = requests.request(
607 "GET", url, headers=headers, auth=('admin', 'admin'))
608 self.assertEqual(response.status_code, requests.codes.ok)
609 res = response.json()
610 self.assertEqual('not-reserved-available', res["circuit-packs"][0]['equipment-state'])
612 def test_29_rdm_device_disconnected(self):
613 url = ("{}/config/network-topology:"
614 "network-topology/topology/topology-netconf/node/ROADM-A1"
615 .format(self.restconf_baseurl))
616 headers = {'content-type': 'application/json'}
617 response = requests.request(
618 "DELETE", url, headers=headers,
619 auth=('admin', 'admin'))
620 self.assertEqual(response.status_code, requests.codes.ok)
623 def test_30_xpdr_device_disconnected(self):
624 url = ("{}/config/network-topology:"
625 "network-topology/topology/topology-netconf/node/XPDR-A1"
626 .format(self.restconf_baseurl))
627 headers = {'content-type': 'application/json'}
628 response = requests.request(
629 "DELETE", url, headers=headers,
630 auth=('admin', 'admin'))
631 self.assertEqual(response.status_code, requests.codes.ok)
635 if __name__ == "__main__":
636 unittest.main(verbosity=2, failfast=True)