2 ##############################################################################
3 # Copyright (c) 2017 Orange, Inc. and others. All rights reserved.
5 # All rights reserved. This program and the accompanying materials
6 # are made available under the terms of the Apache License, Version 2.0
7 # which accompanies this distribution, and is available at
8 # http://www.apache.org/licenses/LICENSE-2.0
9 ##############################################################################
23 class TransportPCEFulltesting(unittest.TestCase):
26 honeynode_process1 = None
27 honeynode_process2 = None
28 honeynode_process3 = None
29 honeynode_process4 = None
30 restconf_baseurl = "http://localhost:8181/restconf"
31 WAITING = 20 #nominal value is 300
33 #START_IGNORE_XTESTING
36 def __start_honeynode1(cls):
37 executable = ("./honeynode/2.2.1/honeynode-distribution/target/honeynode-distribution-1.18.01-hc"
38 "/honeynode-distribution-1.18.01/honeycomb-tpce")
39 if os.path.isfile(executable):
40 with open('honeynode1.log', 'w') as outfile:
41 cls.honeynode_process1 = subprocess.Popen(
42 [executable, "17840", "sample_configs/openroadm/2.2.1/oper-XPDRA.xml"],
46 def __start_honeynode2(cls):
47 executable = ("./honeynode/2.2.1/honeynode-distribution/target/honeynode-distribution-1.18.01-hc"
48 "/honeynode-distribution-1.18.01/honeycomb-tpce")
49 if os.path.isfile(executable):
50 with open('honeynode2.log', 'w') as outfile:
51 cls.honeynode_process2 = subprocess.Popen(
52 [executable, "17841", "sample_configs/openroadm/2.2.1/oper-ROADMA.xml"],
56 def __start_honeynode3(cls):
57 executable = ("./honeynode/2.2.1/honeynode-distribution/target/honeynode-distribution-1.18.01-hc"
58 "/honeynode-distribution-1.18.01/honeycomb-tpce")
59 if os.path.isfile(executable):
60 with open('honeynode3.log', 'w') as outfile:
61 cls.honeynode_process3 = subprocess.Popen(
62 [executable, "17843", "sample_configs/openroadm/2.2.1/oper-ROADMC.xml"],
66 def __start_honeynode4(cls):
67 executable = ("./honeynode/2.2.1/honeynode-distribution/target/honeynode-distribution-1.18.01-hc"
68 "/honeynode-distribution-1.18.01/honeycomb-tpce")
69 if os.path.isfile(executable):
70 with open('honeynode4.log', 'w') as outfile:
71 cls.honeynode_process4 = subprocess.Popen(
72 [executable, "17844", "sample_configs/openroadm/2.2.1/oper-XPDRC.xml"],
77 executable = "../karaf/target/assembly/bin/karaf"
78 with open('odl.log', 'w') as outfile:
79 cls.odl_process = subprocess.Popen(
80 ["bash", executable, "server"], stdout=outfile,
81 stdin=open(os.devnull))
85 print ("starting honeynode1")
86 cls.__start_honeynode1()
88 print ("starting honeynode2")
89 cls.__start_honeynode2()
91 print ("starting honeynode3")
92 cls.__start_honeynode3()
94 print ("starting honeynode4")
95 cls.__start_honeynode4()
97 print ("starting opendaylight")
102 def tearDownClass(cls):
103 for child in psutil.Process(cls.odl_process.pid).children():
104 child.send_signal(signal.SIGINT)
106 cls.odl_process.send_signal(signal.SIGINT)
107 cls.odl_process.wait()
108 for child in psutil.Process(cls.honeynode_process1.pid).children():
109 child.send_signal(signal.SIGINT)
111 cls.honeynode_process1.send_signal(signal.SIGINT)
112 cls.honeynode_process1.wait()
113 for child in psutil.Process(cls.honeynode_process2.pid).children():
114 child.send_signal(signal.SIGINT)
116 cls.honeynode_process2.send_signal(signal.SIGINT)
117 cls.honeynode_process2.wait()
118 for child in psutil.Process(cls.honeynode_process3.pid).children():
119 child.send_signal(signal.SIGINT)
121 cls.honeynode_process3.send_signal(signal.SIGINT)
122 cls.honeynode_process3.wait()
123 for child in psutil.Process(cls.honeynode_process4.pid).children():
124 child.send_signal(signal.SIGINT)
126 cls.honeynode_process4.send_signal(signal.SIGINT)
127 cls.honeynode_process4.wait()
128 print ("all processes killed")
130 def setUp(self): # instruction executed before each test method
131 print ("execution of {}".format(self.id().split(".")[-1]))
135 # connect netconf devices
136 def test_01_connect_xpdrA(self):
137 url = ("{}/config/network-topology:"
138 "network-topology/topology/topology-netconf/node/XPDR-A1"
139 .format(self.restconf_baseurl))
141 "node-id": "XPDR-A1",
142 "netconf-node-topology:username": "admin",
143 "netconf-node-topology:password": "admin",
144 "netconf-node-topology:host": "127.0.0.1",
145 "netconf-node-topology:port": "17840",
146 "netconf-node-topology:tcp-only": "false",
147 "netconf-node-topology:pass-through": {}}]}
148 headers = {'content-type': 'application/json'}
149 response = requests.request(
150 "PUT", url, data=json.dumps(data), headers=headers,
151 auth=('admin', 'admin'))
152 self.assertEqual(response.status_code, requests.codes.created)
155 def test_02_connect_xpdrC(self):
156 url = ("{}/config/network-topology:"
157 "network-topology/topology/topology-netconf/node/XPDR-C1"
158 .format(self.restconf_baseurl))
160 "node-id": "XPDR-C1",
161 "netconf-node-topology:username": "admin",
162 "netconf-node-topology:password": "admin",
163 "netconf-node-topology:host": "127.0.0.1",
164 "netconf-node-topology:port": "17844",
165 "netconf-node-topology:tcp-only": "false",
166 "netconf-node-topology:pass-through": {}}]}
167 headers = {'content-type': 'application/json'}
168 response = requests.request(
169 "PUT", url, data=json.dumps(data), headers=headers,
170 auth=('admin', 'admin'))
171 self.assertEqual(response.status_code, requests.codes.created)
174 def test_03_connect_rdmA(self):
175 url = ("{}/config/network-topology:"
176 "network-topology/topology/topology-netconf/node/ROADM-A1"
177 .format(self.restconf_baseurl))
179 "node-id": "ROADM-A1",
180 "netconf-node-topology:username": "admin",
181 "netconf-node-topology:password": "admin",
182 "netconf-node-topology:host": "127.0.0.1",
183 "netconf-node-topology:port": "17841",
184 "netconf-node-topology:tcp-only": "false",
185 "netconf-node-topology:pass-through": {}}]}
186 headers = {'content-type': 'application/json'}
187 response = requests.request(
188 "PUT", url, data=json.dumps(data), headers=headers,
189 auth=('admin', 'admin'))
190 self.assertEqual(response.status_code, requests.codes.created)
193 def test_04_connect_rdmC(self):
194 url = ("{}/config/network-topology:"
195 "network-topology/topology/topology-netconf/node/ROADM-C1"
196 .format(self.restconf_baseurl))
198 "node-id": "ROADM-C1",
199 "netconf-node-topology:username": "admin",
200 "netconf-node-topology:password": "admin",
201 "netconf-node-topology:host": "127.0.0.1",
202 "netconf-node-topology:port": "17843",
203 "netconf-node-topology:tcp-only": "false",
204 "netconf-node-topology:pass-through": {}}]}
205 headers = {'content-type': 'application/json'}
206 response = requests.request(
207 "PUT", url, data=json.dumps(data), headers=headers,
208 auth=('admin', 'admin'))
209 self.assertEqual(response.status_code, requests.codes.created)
212 def test_05_connect_xprdA_N1_to_roadmA_PP1(self):
213 url = "{}/operations/transportpce-networkutils:init-xpdr-rdm-links".format(self.restconf_baseurl)
215 "networkutils:input": {
216 "networkutils:links-input": {
217 "networkutils:xpdr-node": "XPDR-A1",
218 "networkutils:xpdr-num": "1",
219 "networkutils:network-num": "1",
220 "networkutils:rdm-node": "ROADM-A1",
221 "networkutils:srg-num": "1",
222 "networkutils:termination-point-num": "SRG1-PP1-TXRX"
226 headers = {'content-type': 'application/json'}
227 response = requests.request(
228 "POST", url, data=json.dumps(data),
229 headers=headers, auth=('admin', 'admin'))
230 self.assertEqual(response.status_code, requests.codes.ok)
231 res = response.json()
232 self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
235 def test_06_connect_roadmA_PP1_to_xpdrA_N1(self):
236 url = "{}/operations/transportpce-networkutils:init-rdm-xpdr-links".format(self.restconf_baseurl)
238 "networkutils:input": {
239 "networkutils:links-input": {
240 "networkutils:xpdr-node": "XPDR-A1",
241 "networkutils:xpdr-num": "1",
242 "networkutils:network-num": "1",
243 "networkutils:rdm-node": "ROADM-A1",
244 "networkutils:srg-num": "1",
245 "networkutils:termination-point-num": "SRG1-PP1-TXRX"
249 headers = {'content-type': 'application/json'}
250 response = requests.request(
251 "POST", url, data=json.dumps(data),
252 headers=headers, auth=('admin', 'admin'))
253 self.assertEqual(response.status_code, requests.codes.ok)
254 res = response.json()
255 self.assertIn('Roadm Xponder links created successfully', res["output"]["result"])
259 def test_07_connect_xprdC_N1_to_roadmC_PP1(self):
260 url = "{}/operations/transportpce-networkutils:init-xpdr-rdm-links".format(self.restconf_baseurl)
262 "networkutils:input": {
263 "networkutils:links-input": {
264 "networkutils:xpdr-node": "XPDR-C1",
265 "networkutils:xpdr-num": "1",
266 "networkutils:network-num": "1",
267 "networkutils:rdm-node": "ROADM-C1",
268 "networkutils:srg-num": "1",
269 "networkutils:termination-point-num": "SRG1-PP1-TXRX"
273 headers = {'content-type': 'application/json'}
274 response = requests.request(
275 "POST", url, data=json.dumps(data),
276 headers=headers, auth=('admin', 'admin'))
277 self.assertEqual(response.status_code, requests.codes.ok)
278 res = response.json()
279 self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
283 def test_08_connect_roadmC_PP1_to_xpdrC_N1(self):
284 url = "{}/operations/transportpce-networkutils:init-rdm-xpdr-links".format(self.restconf_baseurl)
286 "networkutils:input": {
287 "networkutils:links-input": {
288 "networkutils:xpdr-node": "XPDR-C1",
289 "networkutils:xpdr-num": "1",
290 "networkutils:network-num": "1",
291 "networkutils:rdm-node": "ROADM-C1",
292 "networkutils:srg-num": "1",
293 "networkutils:termination-point-num": "SRG1-PP1-TXRX"
297 headers = {'content-type': 'application/json'}
298 response = requests.request(
299 "POST", url, data=json.dumps(data),
300 headers=headers, auth=('admin', 'admin'))
301 self.assertEqual(response.status_code, requests.codes.ok)
302 res = response.json()
303 self.assertIn('Roadm Xponder links created successfully', res["output"]["result"])
306 def test_09_add_omsAttributes_ROADMA_ROADMC(self):
307 # Config ROADMA-ROADMC oms-attributes
308 url = ("{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:"
309 "link/ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX/org-openroadm-network-topology:"
310 "OMS-attributes/span"
311 .format(self.restconf_baseurl))
314 "auto-spanloss": "true",
315 "spanloss-base": 11.4,
316 "spanloss-current": 12,
317 "engineered-spanloss": 12.2,
318 "link-concatenation": [{
321 "SRLG-length": 100000,
323 headers = {'content-type': 'application/json'}
324 response = requests.request(
325 "PUT", url, data=json.dumps(data), headers=headers,
326 auth=('admin', 'admin'))
327 self.assertEqual(response.status_code, requests.codes.created)
329 def test_10_add_omsAttributes_ROADMC_ROADMA(self):
330 # Config ROADMC-ROADMA oms-attributes
331 url = ("{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:"
332 "link/ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX/org-openroadm-network-topology:"
333 "OMS-attributes/span"
334 .format(self.restconf_baseurl))
337 "auto-spanloss": "true",
338 "spanloss-base": 11.4,
339 "spanloss-current": 12,
340 "engineered-spanloss": 12.2,
341 "link-concatenation": [{
344 "SRLG-length": 100000,
346 headers = {'content-type': 'application/json'}
347 response = requests.request(
348 "PUT", url, data=json.dumps(data), headers=headers,
349 auth=('admin', 'admin'))
350 self.assertEqual(response.status_code, requests.codes.created)
353 #test service-create for Eth service from xpdr to xpdr
354 def test_11_create_eth_service1(self):
355 url = ("{}/operations/org-openroadm-service:service-create"
356 .format(self.restconf_baseurl))
358 "sdnc-request-header": {
359 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
360 "rpc-action": "service-create",
361 "request-system-id": "appname",
362 "notification-url": "http://localhost:8585/NotificationServer/notify"
364 "service-name": "service1",
365 "common-id": "ASATT1234567",
366 "connection-type": "service",
368 "service-rate": "100",
369 "node-id": "XPDR-A1",
370 "service-format": "Ethernet",
371 "clli": "SNJSCAMCJP8",
374 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
375 "port-type": "router",
376 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
377 "port-rack": "000000.00",
381 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
382 "lgx-port-name": "LGX Back.3",
383 "lgx-port-rack": "000000.00",
384 "lgx-port-shelf": "00"
389 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
390 "port-type": "router",
391 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
392 "port-rack": "000000.00",
396 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
397 "lgx-port-name": "LGX Back.4",
398 "lgx-port-rack": "000000.00",
399 "lgx-port-shelf": "00"
405 "service-rate": "100",
406 "node-id": "XPDR-C1",
407 "service-format": "Ethernet",
408 "clli": "SNJSCAMCJT4",
411 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
412 "port-type": "router",
413 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
414 "port-rack": "000000.00",
418 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
419 "lgx-port-name": "LGX Back.29",
420 "lgx-port-rack": "000000.00",
421 "lgx-port-shelf": "00"
426 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
427 "port-type": "router",
428 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
429 "port-rack": "000000.00",
433 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
434 "lgx-port-name": "LGX Back.30",
435 "lgx-port-rack": "000000.00",
436 "lgx-port-shelf": "00"
441 "due-date": "2016-11-28T00:00:01Z",
442 "operator-contact": "pw1234"
445 headers = {'content-type': 'application/json',
446 "Accept": "application/json"}
447 response = requests.request(
448 "POST", url, data=json.dumps(data), headers=headers,
449 auth=('admin', 'admin'))
450 self.assertEqual(response.status_code, requests.codes.ok)
451 res = response.json()
452 self.assertIn('PCE calculation in progress',
453 res['output']['configuration-response-common']['response-message'])
454 time.sleep(self.WAITING)
456 def test_12_get_eth_service1(self):
457 url = ("{}/operational/org-openroadm-service:service-list/services/service1"
458 .format(self.restconf_baseurl))
459 headers = {'content-type': 'application/json',
460 "Accept": "application/json"}
461 response = requests.request(
462 "GET", url, headers=headers, auth=('admin', 'admin'))
463 self.assertEqual(response.status_code, requests.codes.ok)
464 res = response.json()
466 res['services'][0]['administrative-state'], 'inService')
468 res['services'][0]['service-name'], 'service1')
470 res['services'][0]['connection-type'], 'service')
472 res['services'][0]['lifecycle-state'], 'planned')
475 def test_13_check_xc1_ROADMA(self):
476 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
477 "node/ROADM-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
478 "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-1"
479 .format(self.restconf_baseurl))
480 headers = {'content-type': 'application/json'}
481 response = requests.request(
482 "GET", url, headers=headers, auth=('admin', 'admin'))
483 self.assertEqual(response.status_code, requests.codes.ok)
484 res = response.json()
485 self.assertDictContainsSubset(
486 {'connection-name': 'SRG1-PP1-TXRX-DEG2-TTP-TXRX-1',
487 'opticalControlMode': 'gainLoss',
488 'target-output-power': -3.0},
489 res['roadm-connections'][0])
490 self.assertDictEqual(
491 {'src-if': 'SRG1-PP1-TXRX-nmc-1'},
492 res['roadm-connections'][0]['source'])
493 self.assertDictEqual(
494 {'dst-if': 'DEG2-TTP-TXRX-nmc-1'},
495 res['roadm-connections'][0]['destination'])
498 def test_14_check_xc1_ROADMC(self):
499 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
500 "node/ROADM-C1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
501 "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-1"
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.ok)
507 res = response.json()
508 self.assertDictContainsSubset(
509 {'connection-name': 'SRG1-PP1-TXRX-DEG1-TTP-TXRX-1',
510 'opticalControlMode': 'gainLoss',
511 'target-output-power': -3.0},
512 res['roadm-connections'][0])
513 self.assertDictEqual(
514 {'src-if': 'SRG1-PP1-TXRX-nmc-1'},
515 res['roadm-connections'][0]['source'])
516 self.assertDictEqual(
517 {'dst-if': 'DEG1-TTP-TXRX-nmc-1'},
518 res['roadm-connections'][0]['destination'])
521 def test_15_check_topo_XPDRA(self):
522 url1 = ("{}/config/ietf-network:networks/network/openroadm-topology/node/XPDR-A1-XPDR1"
523 .format(self.restconf_baseurl))
524 response = requests.request(
525 "GET", url1, auth=('admin', 'admin'))
526 self.assertEqual(response.status_code, requests.codes.ok)
527 res = response.json()
528 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
530 if ele['tp-id'] == 'XPDR1-NETWORK1':
531 self.assertEqual({u'frequency': 196.1,
533 ele['org-openroadm-network-topology:xpdr-network-attributes']['wavelength'])
534 if ele['tp-id'] == 'XPDR1-CLIENT2' or ele['tp-id'] == 'XPDR1-CLIENT1':
535 self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-client-attributes']))
536 if ele['tp-id'] == 'XPDR1-NETWORK2':
537 self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-network-attributes']))
540 def test_16_check_topo_ROADMA_SRG1(self):
541 url1 = ("{}/config/ietf-network:networks/network/openroadm-topology/node/ROADM-A1-SRG1"
542 .format(self.restconf_baseurl))
543 response = requests.request(
544 "GET", url1, auth=('admin', 'admin'))
545 self.assertEqual(response.status_code, requests.codes.ok)
546 res = response.json()
547 self.assertNotIn({u'index': 1},
548 res['node'][0][u'org-openroadm-network-topology:srg-attributes']['available-wavelengths'])
549 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
551 if ele['tp-id'] == 'SRG1-PP1-TXRX':
552 self.assertIn({u'index': 1, u'frequency': 196.1,
554 ele['org-openroadm-network-topology:pp-attributes']['used-wavelength'])
555 if ele['tp-id'] == 'SRG1-PP2-TXRX':
556 self.assertNotIn('used-wavelength', dict.keys(ele))
559 def test_17_check_topo_ROADMA_DEG1(self):
560 url1 = ("{}/config/ietf-network:networks/network/openroadm-topology/node/ROADM-A1-DEG2"
561 .format(self.restconf_baseurl))
562 response = requests.request(
563 "GET", url1, auth=('admin', 'admin'))
564 self.assertEqual(response.status_code, requests.codes.ok)
565 res = response.json()
566 self.assertNotIn({u'index': 1},
567 res['node'][0][u'org-openroadm-network-topology:degree-attributes']['available-wavelengths'])
568 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
570 if ele['tp-id'] == 'DEG2-CTP-TXRX':
571 self.assertIn({u'index': 1, u'frequency': 196.1,
573 ele['org-openroadm-network-topology:ctp-attributes']['used-wavelengths'])
574 if ele['tp-id'] == 'DEG2-TTP-TXRX':
575 self.assertIn({u'index': 1, u'frequency': 196.1,
577 ele['org-openroadm-network-topology:tx-ttp-attributes']['used-wavelengths'])
580 def test_18_connect_xprdA_N2_to_roadmA_PP2(self):
581 url = "{}/operations/transportpce-networkutils:init-xpdr-rdm-links".format(self.restconf_baseurl)
583 "networkutils:input": {
584 "networkutils:links-input": {
585 "networkutils:xpdr-node": "XPDR-A1",
586 "networkutils:xpdr-num": "1",
587 "networkutils:network-num": "2",
588 "networkutils:rdm-node": "ROADM-A1",
589 "networkutils:srg-num": "1",
590 "networkutils:termination-point-num": "SRG1-PP2-TXRX"
594 headers = {'content-type': 'application/json'}
595 response = requests.request(
596 "POST", url, data=json.dumps(data),
597 headers=headers, auth=('admin', 'admin'))
598 self.assertEqual(response.status_code, requests.codes.ok)
599 res = response.json()
600 self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
603 def test_19_connect_roadmA_PP2_to_xpdrA_N2(self):
604 url = "{}/operations/transportpce-networkutils:init-rdm-xpdr-links".format(self.restconf_baseurl)
606 "networkutils:input": {
607 "networkutils:links-input": {
608 "networkutils:xpdr-node": "XPDR-A1",
609 "networkutils:xpdr-num": "1",
610 "networkutils:network-num": "2",
611 "networkutils:rdm-node": "ROADM-A1",
612 "networkutils:srg-num": "1",
613 "networkutils:termination-point-num": "SRG1-PP2-TXRX"
617 headers = {'content-type': 'application/json'}
618 response = requests.request(
619 "POST", url, data=json.dumps(data),
620 headers=headers, auth=('admin', 'admin'))
621 self.assertEqual(response.status_code, requests.codes.ok)
622 res = response.json()
623 self.assertIn('Roadm Xponder links created successfully', res["output"]["result"])
626 def test_20_connect_xprdC_N2_to_roadmC_PP2(self):
627 url = "{}/operations/transportpce-networkutils:init-xpdr-rdm-links".format(self.restconf_baseurl)
629 "networkutils:input": {
630 "networkutils:links-input": {
631 "networkutils:xpdr-node": "XPDR-C1",
632 "networkutils:xpdr-num": "1",
633 "networkutils:network-num": "2",
634 "networkutils:rdm-node": "ROADM-C1",
635 "networkutils:srg-num": "1",
636 "networkutils:termination-point-num": "SRG1-PP2-TXRX"
640 headers = {'content-type': 'application/json'}
641 response = requests.request(
642 "POST", url, data=json.dumps(data),
643 headers=headers, auth=('admin', 'admin'))
644 self.assertEqual(response.status_code, requests.codes.ok)
645 res = response.json()
646 self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
649 def test_21_connect_roadmC_PP2_to_xpdrC_N2(self):
650 url = "{}/operations/transportpce-networkutils:init-rdm-xpdr-links".format(self.restconf_baseurl)
652 "networkutils:input": {
653 "networkutils:links-input": {
654 "networkutils:xpdr-node": "XPDR-C1",
655 "networkutils:xpdr-num": "1",
656 "networkutils:network-num": "2",
657 "networkutils:rdm-node": "ROADM-C1",
658 "networkutils:srg-num": "1",
659 "networkutils:termination-point-num": "SRG1-PP2-TXRX"
663 headers = {'content-type': 'application/json'}
664 response = requests.request(
665 "POST", url, data=json.dumps(data),
666 headers=headers, auth=('admin', 'admin'))
667 self.assertEqual(response.status_code, requests.codes.ok)
668 res = response.json()
669 self.assertIn('Roadm Xponder links created successfully', res["output"]["result"])
672 def test_22_create_eth_service2(self):
673 url = ("{}/operations/org-openroadm-service:service-create"
674 .format(self.restconf_baseurl))
676 "sdnc-request-header": {
677 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
678 "rpc-action": "service-create",
679 "request-system-id": "appname",
680 "notification-url": "http://localhost:8585/NotificationServer/notify"
682 "service-name": "service2",
683 "common-id": "ASATT1234567",
684 "connection-type": "service",
686 "service-rate": "100",
687 "node-id": "XPDR-A1",
688 "service-format": "Ethernet",
689 "clli": "SNJSCAMCJP8",
692 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
693 "port-type": "router",
694 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
695 "port-rack": "000000.00",
699 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
700 "lgx-port-name": "LGX Back.3",
701 "lgx-port-rack": "000000.00",
702 "lgx-port-shelf": "00"
707 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
708 "port-type": "router",
709 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
710 "port-rack": "000000.00",
714 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
715 "lgx-port-name": "LGX Back.4",
716 "lgx-port-rack": "000000.00",
717 "lgx-port-shelf": "00"
723 "service-rate": "100",
724 "node-id": "XPDR-C1",
725 "service-format": "Ethernet",
726 "clli": "SNJSCAMCJT4",
729 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
730 "port-type": "router",
731 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
732 "port-rack": "000000.00",
736 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
737 "lgx-port-name": "LGX Back.29",
738 "lgx-port-rack": "000000.00",
739 "lgx-port-shelf": "00"
744 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
745 "port-type": "router",
746 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
747 "port-rack": "000000.00",
751 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
752 "lgx-port-name": "LGX Back.30",
753 "lgx-port-rack": "000000.00",
754 "lgx-port-shelf": "00"
759 "due-date": "2016-11-28T00:00:01Z",
760 "operator-contact": "pw1234"
763 headers = {'content-type': 'application/json',
764 "Accept": "application/json"}
765 response = requests.request(
766 "POST", url, data=json.dumps(data), headers=headers,
767 auth=('admin', 'admin'))
768 self.assertEqual(response.status_code, requests.codes.ok)
769 res = response.json()
770 self.assertIn('PCE calculation in progress',
771 res['output']['configuration-response-common']['response-message'])
772 time.sleep(self.WAITING)
774 def test_23_get_eth_service2(self):
775 url = ("{}/operational/org-openroadm-service:service-list/services/service2"
776 .format(self.restconf_baseurl))
777 headers = {'content-type': 'application/json',
778 "Accept": "application/json"}
779 response = requests.request(
780 "GET", url, headers=headers, auth=('admin', 'admin'))
781 self.assertEqual(response.status_code, requests.codes.ok)
782 res = response.json()
784 res['services'][0]['administrative-state'],
787 res['services'][0]['service-name'], 'service2')
789 res['services'][0]['connection-type'], 'service')
791 res['services'][0]['lifecycle-state'], 'planned')
794 def test_24_check_xc2_ROADMA(self):
795 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
796 "node/ROADM-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
797 "roadm-connections/DEG2-TTP-TXRX-SRG1-PP2-TXRX-2"
798 .format(self.restconf_baseurl))
799 headers = {'content-type': 'application/json'}
800 response = requests.request(
801 "GET", url, headers=headers, auth=('admin', 'admin'))
802 self.assertEqual(response.status_code, requests.codes.ok)
803 res = response.json()
804 self.assertDictContainsSubset(
805 {'connection-name': 'DEG2-TTP-TXRX-SRG1-PP2-TXRX-2',
806 'opticalControlMode': 'power'},
807 res['roadm-connections'][0])
808 self.assertDictEqual(
809 {'src-if': 'DEG2-TTP-TXRX-nmc-2'},
810 res['roadm-connections'][0]['source'])
811 self.assertDictEqual(
812 {'dst-if': 'SRG1-PP2-TXRX-nmc-2'},
813 res['roadm-connections'][0]['destination'])
815 def test_25_check_topo_XPDRA(self):
816 url1 = ("{}/config/ietf-network:networks/network/openroadm-topology/node/XPDR-A1-XPDR1"
817 .format(self.restconf_baseurl))
818 response = requests.request(
819 "GET", url1, auth=('admin', 'admin'))
820 self.assertEqual(response.status_code, requests.codes.ok)
821 res = response.json()
822 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
824 if ele['tp-id'] == 'XPDR1-NETWORK1':
825 self.assertEqual({u'frequency': 196.1,
827 ele['org-openroadm-network-topology:xpdr-network-attributes']['wavelength'])
828 if ele['tp-id'] == 'XPDR1-NETWORK2':
829 self.assertEqual({u'frequency': 196.05,
831 ele['org-openroadm-network-topology:xpdr-network-attributes']['wavelength'])
832 if ele['tp-id'] == 'XPDR1-CLIENT1' or ele['tp-id'] == 'XPDR1-CLIENT2':
833 self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-client-attributes']))
836 def test_26_check_topo_ROADMA_SRG1(self):
837 url1 = ("{}/config/ietf-network:networks/network/openroadm-topology/node/ROADM-A1-SRG1"
838 .format(self.restconf_baseurl))
839 response = requests.request(
840 "GET", url1, auth=('admin', 'admin'))
841 self.assertEqual(response.status_code, requests.codes.ok)
842 res = response.json()
843 self.assertNotIn({u'index': 1}, res['node'][0][u'org-openroadm-network-topology:srg-attributes']['available-wavelengths'])
844 self.assertNotIn({u'index': 2}, res['node'][0][u'org-openroadm-network-topology:srg-attributes']['available-wavelengths'])
845 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
847 if ele['tp-id'] == 'SRG1-PP1-TXRX':
848 self.assertIn({u'index': 1, u'frequency': 196.1,
850 ele['org-openroadm-network-topology:pp-attributes']['used-wavelength'])
851 self.assertNotIn({u'index': 2, u'frequency': 196.05,
853 ele['org-openroadm-network-topology:pp-attributes']['used-wavelength'])
854 if ele['tp-id'] == 'SRG1-PP2-TXRX':
855 self.assertIn({u'index': 2, u'frequency': 196.05, u'width': 40},
856 ele['org-openroadm-network-topology:pp-attributes']['used-wavelength'])
857 self.assertNotIn({u'index': 1, u'frequency': 196.1,
859 ele['org-openroadm-network-topology:pp-attributes']['used-wavelength'])
860 if ele['tp-id'] == 'SRG1-PP3-TXRX':
861 self.assertNotIn('org-openroadm-network-topology:pp-attributes', dict.keys(ele))
865 def test_27_check_topo_ROADMA_DEG2(self):
866 url1 = ("{}/config/ietf-network:networks/network/openroadm-topology/node/ROADM-A1-DEG2"
867 .format(self.restconf_baseurl))
868 response = requests.request(
869 "GET", url1, auth=('admin', 'admin'))
870 self.assertEqual(response.status_code, requests.codes.ok)
871 res = response.json()
872 self.assertNotIn({u'index': 1}, res['node'][0][u'org-openroadm-network-topology:degree-attributes']['available-wavelengths'])
873 self.assertNotIn({u'index': 2}, res['node'][0][u'org-openroadm-network-topology:degree-attributes']['available-wavelengths'])
874 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
876 if ele['tp-id'] == 'DEG2-CTP-TXRX':
877 self.assertIn({u'index': 1, u'frequency': 196.1,
879 ele['org-openroadm-network-topology:ctp-attributes']['used-wavelengths'])
880 self.assertIn({u'index': 2, u'frequency': 196.05, u'width': 40},
881 ele['org-openroadm-network-topology:ctp-attributes']['used-wavelengths'])
882 if ele['tp-id'] == 'DEG2-TTP-TXRX':
883 self.assertIn({u'index': 1, u'frequency': 196.1,
885 ele['org-openroadm-network-topology:tx-ttp-attributes']['used-wavelengths'])
886 self.assertIn({u'index': 2, u'frequency': 196.05, u'width': 40},
887 ele['org-openroadm-network-topology:tx-ttp-attributes']['used-wavelengths'])
890 # creation service test on a non-available resource
891 def test_28_create_eth_service3(self):
892 url = ("{}/operations/org-openroadm-service:service-create"
893 .format(self.restconf_baseurl))
895 "sdnc-request-header": {
896 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
897 "rpc-action": "service-create",
898 "request-system-id": "appname",
899 "notification-url": "http://localhost:8585/NotificationServer/notify"
901 "service-name": "service3",
902 "common-id": "ASATT1234567",
903 "connection-type": "service",
905 "service-rate": "100",
906 "node-id": "XPDR-A1",
907 "service-format": "Ethernet",
908 "clli": "SNJSCAMCJP8",
911 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
912 "port-type": "router",
913 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
914 "port-rack": "000000.00",
918 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
919 "lgx-port-name": "LGX Back.3",
920 "lgx-port-rack": "000000.00",
921 "lgx-port-shelf": "00"
926 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
927 "port-type": "router",
928 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
929 "port-rack": "000000.00",
933 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
934 "lgx-port-name": "LGX Back.4",
935 "lgx-port-rack": "000000.00",
936 "lgx-port-shelf": "00"
942 "service-rate": "100",
943 "node-id": "XPDR-C1",
944 "service-format": "Ethernet",
945 "clli": "SNJSCAMCJT4",
948 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
949 "port-type": "router",
950 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
951 "port-rack": "000000.00",
955 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
956 "lgx-port-name": "LGX Back.29",
957 "lgx-port-rack": "000000.00",
958 "lgx-port-shelf": "00"
963 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
964 "port-type": "router",
965 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
966 "port-rack": "000000.00",
970 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
971 "lgx-port-name": "LGX Back.30",
972 "lgx-port-rack": "000000.00",
973 "lgx-port-shelf": "00"
978 "due-date": "2016-11-28T00:00:01Z",
979 "operator-contact": "pw1234"
982 headers = {'content-type': 'application/json',
983 "Accept": "application/json"}
984 response = requests.request(
985 "POST", url, data=json.dumps(data), headers=headers,
986 auth=('admin', 'admin'))
987 self.assertEqual(response.status_code, requests.codes.ok)
988 res = response.json()
989 self.assertIn('PCE calculation in progress',
990 res['output']['configuration-response-common']['response-message'])
991 self.assertIn('200', res['output']['configuration-response-common']['response-code'])
992 time.sleep(self.WAITING)
994 # add a test that check the openroadm-service-list still only contains 2 elements
996 def test_29_delete_eth_service3(self):
997 url = ("{}/operations/org-openroadm-service:service-delete"
998 .format(self.restconf_baseurl))
1000 "sdnc-request-header": {
1001 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1002 "rpc-action": "service-delete",
1003 "request-system-id": "appname",
1004 "notification-url": "http://localhost:8585/NotificationServer/notify"
1006 "service-delete-req-info": {
1007 "service-name": "service3",
1008 "tail-retention": "no"
1012 headers = {'content-type': 'application/json'}
1013 response = requests.request(
1014 "POST", url, data=json.dumps(data), headers=headers,
1015 auth=('admin', 'admin'))
1016 self.assertEqual(response.status_code, requests.codes.ok)
1017 res = response.json()
1018 self.assertIn('Service \'service3\' does not exist in datastore',
1019 res['output']['configuration-response-common']['response-message'])
1020 self.assertIn('500', res['output']['configuration-response-common']['response-code'])
1023 def test_30_delete_eth_service1(self):
1024 url = ("{}/operations/org-openroadm-service:service-delete"
1025 .format(self.restconf_baseurl))
1027 "sdnc-request-header": {
1028 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1029 "rpc-action": "service-delete",
1030 "request-system-id": "appname",
1031 "notification-url": "http://localhost:8585/NotificationServer/notify"
1033 "service-delete-req-info": {
1034 "service-name": "service1",
1035 "tail-retention": "no"
1039 headers = {'content-type': 'application/json'}
1040 response = requests.request(
1041 "POST", url, data=json.dumps(data), headers=headers,
1042 auth=('admin', 'admin'))
1043 self.assertEqual(response.status_code, requests.codes.ok)
1044 res = response.json()
1045 self.assertIn('Renderer service delete in progress',
1046 res['output']['configuration-response-common']['response-message'])
1049 def test_31_delete_eth_service2(self):
1050 url = ("{}/operations/org-openroadm-service:service-delete"
1051 .format(self.restconf_baseurl))
1053 "sdnc-request-header": {
1054 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1055 "rpc-action": "service-delete",
1056 "request-system-id": "appname",
1057 "notification-url": "http://localhost:8585/NotificationServer/notify"
1059 "service-delete-req-info": {
1060 "service-name": "service2",
1061 "tail-retention": "no"
1065 headers = {'content-type': 'application/json'}
1066 response = requests.request(
1067 "POST", url, data=json.dumps(data), headers=headers,
1068 auth=('admin', 'admin'))
1069 self.assertEqual(response.status_code, requests.codes.ok)
1070 res = response.json()
1071 self.assertIn('Renderer service delete in progress',
1072 res['output']['configuration-response-common']['response-message'])
1075 def test_32_check_no_xc_ROADMA(self):
1076 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
1077 "node/ROADM-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
1078 .format(self.restconf_baseurl))
1079 response = requests.request(
1080 "GET", url, auth=('admin', 'admin'))
1081 res = response.json()
1082 self.assertEqual(response.status_code, requests.codes.ok)
1083 self.assertNotIn('roadm-connections', dict.keys(res['org-openroadm-device']))
1086 def test_33_check_topo_XPDRA(self):
1087 url1 = ("{}/config/ietf-network:networks/network/openroadm-topology/node/XPDR-A1-XPDR1"
1088 .format(self.restconf_baseurl))
1089 response = requests.request(
1090 "GET", url1, auth=('admin', 'admin'))
1091 self.assertEqual(response.status_code, requests.codes.ok)
1092 res = response.json()
1093 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
1094 for ele in liste_tp:
1095 if ele[u'org-openroadm-network-topology:tp-type'] == 'XPONDER-CLIENT':
1096 self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-client-attributes']))
1097 elif ele[u'org-openroadm-network-topology:tp-type'] == 'XPONDER-NETWORK':
1098 self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-network-attributes']))
1101 def test_34_check_topo_ROADMA_SRG1(self):
1102 url1 = ("{}/config/ietf-network:networks/network/openroadm-topology/node/ROADM-A1-SRG1"
1103 .format(self.restconf_baseurl))
1104 response = requests.request(
1105 "GET", url1, auth=('admin', 'admin'))
1106 self.assertEqual(response.status_code, requests.codes.ok)
1107 res = response.json()
1108 self.assertIn({u'index': 1}, res['node'][0][u'org-openroadm-network-topology:srg-attributes']['available-wavelengths'])
1109 self.assertIn({u'index': 2}, res['node'][0][u'org-openroadm-network-topology:srg-attributes']['available-wavelengths'])
1110 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
1111 for ele in liste_tp:
1112 if ele['tp-id'] == 'SRG1-PP1-TXRX' or ele['tp-id'] == 'SRG1-PP1-TXRX':
1113 self.assertNotIn('org-openroadm-network-topology:pp-attributes', dict.keys(ele))
1115 self.assertNotIn('org-openroadm-network-topology:pp-attributes', dict.keys(ele))
1118 def test_35_check_topo_ROADMA_DEG2(self):
1119 url1 = ("{}/config/ietf-network:networks/network/openroadm-topology/node/ROADM-A1-DEG2"
1120 .format(self.restconf_baseurl))
1121 response = requests.request(
1122 "GET", url1, auth=('admin', 'admin'))
1123 self.assertEqual(response.status_code, requests.codes.ok)
1124 res = response.json()
1125 self.assertIn({u'index': 1}, res['node'][0][u'org-openroadm-network-topology:degree-attributes']['available-wavelengths'])
1126 self.assertIn({u'index': 2}, res['node'][0][u'org-openroadm-network-topology:degree-attributes']['available-wavelengths'])
1127 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
1128 for ele in liste_tp:
1129 if ele['tp-id'] == 'DEG2-CTP-TXRX':
1130 self.assertNotIn('org-openroadm-network-topology:ctp-attributes', dict.keys(ele))
1131 if ele['tp-id'] == 'DEG2-TTP-TXRX':
1132 self.assertNotIn('org-openroadm-network-topology:tx-ttp-attributes', dict.keys(ele))
1136 # test service-create for Optical Channel (OC) service from srg-pp to srg-pp
1137 def test_36_create_oc_service1(self):
1138 url = ("{}/operations/org-openroadm-service:service-create"
1139 .format(self.restconf_baseurl))
1141 "sdnc-request-header": {
1142 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1143 "rpc-action": "service-create",
1144 "request-system-id": "appname",
1145 "notification-url": "http://localhost:8585/NotificationServer/notify"
1147 "service-name": "service1",
1148 "common-id": "ASATT1234567",
1149 "connection-type": "roadm-line",
1151 "service-rate": "100",
1152 "node-id": "ROADM-A1",
1153 "service-format": "OC",
1154 "clli": "SNJSCAMCJP8",
1157 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
1158 "port-type": "router",
1159 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
1160 "port-rack": "000000.00",
1164 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
1165 "lgx-port-name": "LGX Back.3",
1166 "lgx-port-rack": "000000.00",
1167 "lgx-port-shelf": "00"
1172 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
1173 "port-type": "router",
1174 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
1175 "port-rack": "000000.00",
1179 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
1180 "lgx-port-name": "LGX Back.4",
1181 "lgx-port-rack": "000000.00",
1182 "lgx-port-shelf": "00"
1185 "optic-type": "gray"
1188 "service-rate": "100",
1189 "node-id": "ROADM-C1",
1190 "service-format": "OC",
1191 "clli": "SNJSCAMCJT4",
1194 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
1195 "port-type": "router",
1196 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
1197 "port-rack": "000000.00",
1201 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
1202 "lgx-port-name": "LGX Back.29",
1203 "lgx-port-rack": "000000.00",
1204 "lgx-port-shelf": "00"
1209 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
1210 "port-type": "router",
1211 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
1212 "port-rack": "000000.00",
1216 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
1217 "lgx-port-name": "LGX Back.30",
1218 "lgx-port-rack": "000000.00",
1219 "lgx-port-shelf": "00"
1222 "optic-type": "gray"
1224 "due-date": "2016-11-28T00:00:01Z",
1225 "operator-contact": "pw1234"
1228 headers = {'content-type': 'application/json',
1229 "Accept": "application/json"}
1230 response = requests.request(
1231 "POST", url, data=json.dumps(data), headers=headers,
1232 auth=('admin', 'admin'))
1233 self.assertEqual(response.status_code, requests.codes.ok)
1234 res = response.json()
1235 self.assertIn('PCE calculation in progress',
1236 res['output']['configuration-response-common']['response-message'])
1237 time.sleep(self.WAITING)
1239 def test_37_get_oc_service1(self):
1240 url = ("{}/operational/org-openroadm-service:service-list/services/service1"
1241 .format(self.restconf_baseurl))
1242 headers = {'content-type': 'application/json',
1243 "Accept": "application/json"}
1244 response = requests.request(
1245 "GET", url, headers=headers, auth=('admin', 'admin'))
1246 self.assertEqual(response.status_code, requests.codes.ok)
1247 res = response.json()
1249 res['services'][0]['administrative-state'],
1252 res['services'][0]['service-name'], 'service1')
1254 res['services'][0]['connection-type'], 'roadm-line')
1256 res['services'][0]['lifecycle-state'], 'planned')
1259 def test_38_check_xc1_ROADMA(self):
1260 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
1261 "node/ROADM-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
1262 "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-1"
1263 .format(self.restconf_baseurl))
1264 headers = {'content-type': 'application/json'}
1265 response = requests.request(
1266 "GET", url, headers=headers, auth=('admin', 'admin'))
1267 self.assertEqual(response.status_code, requests.codes.ok)
1268 res = response.json()
1269 self.assertDictContainsSubset(
1270 {'connection-name': 'SRG1-PP1-TXRX-DEG2-TTP-TXRX-1',
1271 'opticalControlMode': 'gainLoss',
1272 'target-output-power': -3.0},
1273 res['roadm-connections'][0])
1274 self.assertDictEqual(
1275 {'src-if': 'SRG1-PP1-TXRX-nmc-1'},
1276 res['roadm-connections'][0]['source'])
1277 self.assertDictEqual(
1278 {'dst-if': 'DEG2-TTP-TXRX-nmc-1'},
1279 res['roadm-connections'][0]['destination'])
1282 def test_39_check_xc1_ROADMC(self):
1283 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
1284 "node/ROADM-C1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
1285 "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-1"
1286 .format(self.restconf_baseurl))
1287 headers = {'content-type': 'application/json'}
1288 response = requests.request(
1289 "GET", url, headers=headers, auth=('admin', 'admin'))
1290 self.assertEqual(response.status_code, requests.codes.ok)
1291 res = response.json()
1292 self.assertDictContainsSubset(
1293 {'connection-name': 'SRG1-PP1-TXRX-DEG1-TTP-TXRX-1',
1294 'opticalControlMode': 'gainLoss',
1295 'target-output-power': -3.0},
1296 res['roadm-connections'][0])
1297 self.assertDictEqual(
1298 {'src-if': 'SRG1-PP1-TXRX-nmc-1'},
1299 res['roadm-connections'][0]['source'])
1300 self.assertDictEqual(
1301 {'dst-if': 'DEG1-TTP-TXRX-nmc-1'},
1302 res['roadm-connections'][0]['destination'])
1305 def test_40_create_oc_service2(self):
1306 url = ("{}/operations/org-openroadm-service:service-create"
1307 .format(self.restconf_baseurl))
1309 "sdnc-request-header": {
1310 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1311 "rpc-action": "service-create",
1312 "request-system-id": "appname",
1313 "notification-url": "http://localhost:8585/NotificationServer/notify"
1315 "service-name": "service2",
1316 "common-id": "ASATT1234567",
1317 "connection-type": "roadm-line",
1319 "service-rate": "100",
1320 "node-id": "ROADM-A1",
1321 "service-format": "OC",
1322 "clli": "SNJSCAMCJP8",
1325 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
1326 "port-type": "router",
1327 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
1328 "port-rack": "000000.00",
1332 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
1333 "lgx-port-name": "LGX Back.3",
1334 "lgx-port-rack": "000000.00",
1335 "lgx-port-shelf": "00"
1340 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
1341 "port-type": "router",
1342 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
1343 "port-rack": "000000.00",
1347 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
1348 "lgx-port-name": "LGX Back.4",
1349 "lgx-port-rack": "000000.00",
1350 "lgx-port-shelf": "00"
1353 "optic-type": "gray"
1356 "service-rate": "100",
1357 "node-id": "ROADM-C1",
1358 "service-format": "OC",
1359 "clli": "SNJSCAMCJT4",
1362 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
1363 "port-type": "router",
1364 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
1365 "port-rack": "000000.00",
1369 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
1370 "lgx-port-name": "LGX Back.29",
1371 "lgx-port-rack": "000000.00",
1372 "lgx-port-shelf": "00"
1377 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
1378 "port-type": "router",
1379 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
1380 "port-rack": "000000.00",
1384 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
1385 "lgx-port-name": "LGX Back.30",
1386 "lgx-port-rack": "000000.00",
1387 "lgx-port-shelf": "00"
1390 "optic-type": "gray"
1392 "due-date": "2016-11-28T00:00:01Z",
1393 "operator-contact": "pw1234"
1396 headers = {'content-type': 'application/json',
1397 "Accept": "application/json"}
1398 response = requests.request(
1399 "POST", url, data=json.dumps(data), headers=headers,
1400 auth=('admin', 'admin'))
1401 self.assertEqual(response.status_code, requests.codes.ok)
1402 res = response.json()
1403 self.assertIn('PCE calculation in progress',
1404 res['output']['configuration-response-common']['response-message'])
1405 time.sleep(self.WAITING)
1407 def test_41_get_oc_service2(self):
1408 url = ("{}/operational/org-openroadm-service:service-list/services/service2"
1409 .format(self.restconf_baseurl))
1410 headers = {'content-type': 'application/json',
1411 "Accept": "application/json"}
1412 response = requests.request(
1413 "GET", url, headers=headers, auth=('admin', 'admin'))
1414 self.assertEqual(response.status_code, requests.codes.ok)
1415 res = response.json()
1417 res['services'][0]['administrative-state'],
1420 res['services'][0]['service-name'], 'service2')
1422 res['services'][0]['connection-type'], 'roadm-line')
1424 res['services'][0]['lifecycle-state'], 'planned')
1427 def test_42_check_xc2_ROADMA(self):
1428 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
1429 "node/ROADM-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
1430 "roadm-connections/SRG1-PP2-TXRX-DEG2-TTP-TXRX-2"
1431 .format(self.restconf_baseurl))
1432 headers = {'content-type': 'application/json'}
1433 response = requests.request(
1434 "GET", url, headers=headers, auth=('admin', 'admin'))
1435 self.assertEqual(response.status_code, requests.codes.ok)
1436 res = response.json()
1437 self.assertDictContainsSubset(
1438 {'connection-name': 'SRG1-PP2-TXRX-DEG2-TTP-TXRX-2',
1439 'opticalControlMode': 'gainLoss',
1440 'target-output-power': -3.0},
1441 res['roadm-connections'][0])
1442 self.assertDictEqual(
1443 {'src-if': 'SRG1-PP2-TXRX-nmc-2'},
1444 res['roadm-connections'][0]['source'])
1445 self.assertDictEqual(
1446 {'dst-if': 'DEG2-TTP-TXRX-nmc-2'},
1447 res['roadm-connections'][0]['destination'])
1450 def test_43_check_topo_ROADMA(self):
1451 self.test_26_check_topo_ROADMA_SRG1()
1452 self.test_27_check_topo_ROADMA_DEG2()
1456 def test_44_delete_oc_service1(self):
1457 url = ("{}/operations/org-openroadm-service:service-delete"
1458 .format(self.restconf_baseurl))
1460 "sdnc-request-header": {
1461 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1462 "rpc-action": "service-delete",
1463 "request-system-id": "appname",
1464 "notification-url": "http://localhost:8585/NotificationServer/notify"
1466 "service-delete-req-info": {
1467 "service-name": "service1",
1468 "tail-retention": "no"
1472 headers = {'content-type': 'application/json'}
1473 response = requests.request(
1474 "POST", url, data=json.dumps(data), headers=headers,
1475 auth=('admin', 'admin'))
1476 self.assertEqual(response.status_code, requests.codes.ok)
1477 res = response.json()
1478 self.assertIn('Renderer service delete in progress',
1479 res['output']['configuration-response-common']['response-message'])
1482 def test_45_delete_oc_service2(self):
1483 url = ("{}/operations/org-openroadm-service:service-delete"
1484 .format(self.restconf_baseurl))
1486 "sdnc-request-header": {
1487 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1488 "rpc-action": "service-delete",
1489 "request-system-id": "appname",
1490 "notification-url": "http://localhost:8585/NotificationServer/notify"
1492 "service-delete-req-info": {
1493 "service-name": "service2",
1494 "tail-retention": "no"
1498 headers = {'content-type': 'application/json'}
1499 response = requests.request(
1500 "POST", url, data=json.dumps(data), headers=headers,
1501 auth=('admin', 'admin'))
1502 self.assertEqual(response.status_code, requests.codes.ok)
1503 res = response.json()
1504 self.assertIn('Renderer service delete in progress',
1505 res['output']['configuration-response-common']['response-message'])
1508 def test_46_get_no_oc_services(self):
1509 print ("start test")
1510 url = ("{}/operational/org-openroadm-service:service-list"
1511 .format(self.restconf_baseurl))
1512 headers = {'content-type': 'application/json',
1513 "Accept": "application/json"}
1514 response = requests.request(
1515 "GET", url, headers=headers, auth=('admin', 'admin'))
1516 self.assertEqual(response.status_code, requests.codes.not_found)
1517 res = response.json()
1519 {"error-type":"application", "error-tag":"data-missing",
1520 "error-message":"Request could not be completed because the relevant data model content does not exist"},
1521 res['errors']['error'])
1524 def test_47_get_no_xc_ROADMA(self):
1525 url = ("{}/config/network-topology:network-topology/topology/topology-netconf"
1526 "/node/ROADM-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
1527 .format(self.restconf_baseurl))
1528 headers = {'content-type': 'application/json',
1529 "Accept": "application/json"}
1530 response = requests.request(
1531 "GET", url, headers=headers, auth=('admin', 'admin'))
1532 self.assertEqual(response.status_code, requests.codes.ok)
1533 res = response.json()
1534 self.assertNotIn(['roadm-connections'][0], res['org-openroadm-device'])
1537 def test_48_check_topo_ROADMA(self):
1538 self.test_34_check_topo_ROADMA_SRG1()
1539 self.test_35_check_topo_ROADMA_DEG2()
1541 @unittest.expectedFailure
1542 def test_49_loop_create_eth_service(self):
1543 for i in range(1,6):
1544 print ("trial number {}".format(i))
1545 print("eth service creation")
1546 self.test_11_create_eth_service1()
1547 print ("check xc in ROADM-A1")
1548 self.test_13_check_xc1_ROADMA()
1549 print ("check xc in ROADM-C1")
1550 self.test_14_check_xc1_ROADMC()
1551 print ("eth service deletion\n")
1552 self.test_30_delete_eth_service1()
1554 @unittest.expectedFailure
1555 def test_50_loop_create_oc_service(self):
1556 url = ("{}/operational/org-openroadm-service:service-list/services/service1"
1557 .format(self.restconf_baseurl))
1558 response = requests.request("GET", url, auth=('admin', 'admin'))
1559 if response.status_code != 404:
1560 url = ("{}/operations/org-openroadm-service:service-delete"
1561 .format(self.restconf_baseurl))
1563 "sdnc-request-header": {
1564 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1565 "rpc-action": "service-delete",
1566 "request-system-id": "appname",
1567 "notification-url": "http://localhost:8585/NotificationServer/notify"
1569 "service-delete-req-info": {
1570 "service-name": "service1",
1571 "tail-retention": "no"
1575 headers = {'content-type': 'application/json'}
1576 requests.request("POST", url, data=json.dumps(data), headers=headers, auth=('admin', 'admin'))
1579 for i in range(1,6):
1580 print ("trial number {}".format(i))
1581 print("oc service creation")
1582 self.test_36_create_oc_service1()
1583 print ("check xc in ROADM-A1")
1584 self.test_38_check_xc1_ROADMA()
1585 print ("check xc in ROADM-C1")
1586 self.test_39_check_xc1_ROADMC()
1587 print ("oc service deletion\n")
1588 self.test_44_delete_oc_service1()
1591 def test_51_disconnect_XPDRA(self):
1592 url = ("{}/config/network-topology:"
1593 "network-topology/topology/topology-netconf/node/XPDR-A1"
1594 .format(self.restconf_baseurl))
1595 headers = {'content-type': 'application/json'}
1596 response = requests.request(
1597 "DELETE", url, headers=headers,
1598 auth=('admin', 'admin'))
1599 self.assertEqual(response.status_code, requests.codes.ok)
1602 def test_52_disconnect_XPDRC(self):
1603 url = ("{}/config/network-topology:"
1604 "network-topology/topology/topology-netconf/node/XPDR-C1"
1605 .format(self.restconf_baseurl))
1606 headers = {'content-type': 'application/json'}
1607 response = requests.request(
1608 "DELETE", url, headers=headers,
1609 auth=('admin', 'admin'))
1610 self.assertEqual(response.status_code, requests.codes.ok)
1613 def test_53_disconnect_ROADMA(self):
1614 url = ("{}/config/network-topology:"
1615 "network-topology/topology/topology-netconf/node/ROADM-A1"
1616 .format(self.restconf_baseurl))
1617 headers = {'content-type': 'application/json'}
1618 response = requests.request(
1619 "DELETE", url, headers=headers,
1620 auth=('admin', 'admin'))
1621 self.assertEqual(response.status_code, requests.codes.ok)
1624 def test_54_disconnect_ROADMC(self):
1625 url = ("{}/config/network-topology:"
1626 "network-topology/topology/topology-netconf/node/ROADM-C1"
1627 .format(self.restconf_baseurl))
1628 headers = {'content-type': 'application/json'}
1629 response = requests.request(
1630 "DELETE", url, headers=headers,
1631 auth=('admin', 'admin'))
1632 self.assertEqual(response.status_code, requests.codes.ok)
1636 if __name__ == "__main__":
1637 unittest.main(verbosity=2)