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 ##############################################################################
17 from common import test_utils
20 class TransportPCEFulltesting(unittest.TestCase):
22 WAITING = 20 # nominal value is 300
28 cls.processes = test_utils.start_tpce()
29 cls.processes = test_utils.start_sims(['xpdra', 'roadma-full', 'roadmc-full', 'xpdrc'])
32 def tearDownClass(cls):
33 for process in cls.processes:
34 test_utils.shutdown_process(process)
35 print("all processes killed")
37 def setUp(self): # instruction executed before each test method
38 print("execution of {}".format(self.id().split(".")[-1]))
40 # connect netconf devices
41 def test_01_connect_xpdrA(self):
42 response = test_utils.mount_device("XPDRA01", 'xpdra')
43 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
45 def test_02_connect_xpdrC(self):
46 response = test_utils.mount_device("XPDRC01", 'xpdrc')
47 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
49 def test_03_connect_rdmA(self):
50 response = test_utils.mount_device("ROADMA01", 'roadma-full')
51 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
53 def test_04_connect_rdmC(self):
54 response = test_utils.mount_device("ROADMC01", 'roadmc-full')
55 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
57 def test_05_connect_xprdA_N1_to_roadmA_PP1(self):
58 response = test_utils.connect_xpdr_to_rdm_request("XPDRA01", "1", "1",
59 "ROADMA01", "1", "SRG1-PP1-TXRX")
60 self.assertEqual(response.status_code, requests.codes.ok)
62 self.assertIn('Xponder Roadm Link created successfully',
63 res["output"]["result"])
66 def test_06_connect_roadmA_PP1_to_xpdrA_N1(self):
67 url = "{}/operations/transportpce-networkutils:init-rdm-xpdr-links"
69 "networkutils:input": {
70 "networkutils:links-input": {
71 "networkutils:xpdr-node": "XPDRA01",
72 "networkutils:xpdr-num": "1",
73 "networkutils:network-num": "1",
74 "networkutils:rdm-node": "ROADMA01",
75 "networkutils:srg-num": "1",
76 "networkutils:termination-point-num": "SRG1-PP1-TXRX"
80 response = test_utils.post_request(url, data)
81 response = test_utils.connect_rdm_to_xpdr_request("XPDRA01", "1", "1",
82 "ROADMA01", "1", "SRG1-PP1-TXRX")
83 self.assertEqual(response.status_code, requests.codes.ok)
85 self.assertIn('Roadm Xponder links created successfully',
86 res["output"]["result"])
89 def test_07_connect_xprdC_N1_to_roadmC_PP1(self):
90 response = test_utils.connect_xpdr_to_rdm_request("XPDRC01", "1", "1",
91 "ROADMC01", "1", "SRG1-PP1-TXRX")
92 self.assertEqual(response.status_code, requests.codes.ok)
94 self.assertIn('Xponder Roadm Link created successfully',
95 res["output"]["result"])
98 def test_08_connect_roadmC_PP1_to_xpdrC_N1(self):
99 response = test_utils.connect_rdm_to_xpdr_request("XPDRC01", "1", "1",
100 "ROADMC01", "1", "SRG1-PP1-TXRX")
101 self.assertEqual(response.status_code, requests.codes.ok)
102 res = response.json()
103 self.assertIn('Roadm Xponder links created successfully',
104 res["output"]["result"])
107 def test_09_add_omsAttributes_ROADMA_ROADMC(self):
108 # Config ROADMA-ROADMC oms-attributes
110 "{}/config/ietf-network:"
111 "networks/network/openroadm-topology/ietf-network-topology:"
112 "link/ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX/"
113 "org-openroadm-network-topology:"
114 "OMS-attributes/span"
118 "auto-spanloss": "true",
119 "spanloss-base": 11.4,
120 "spanloss-current": 12,
121 "engineered-spanloss": 12.2,
122 "link-concatenation": [{
125 "SRLG-length": 100000,
127 response = test_utils.put_request(url, data)
128 self.assertEqual(response.status_code, requests.codes.created)
130 def test_10_add_omsAttributes_ROADMC_ROADMA(self):
131 # Config ROADMC-ROADMA oms-attributes
133 "{}/config/ietf-network:"
134 "networks/network/openroadm-topology/ietf-network-topology:"
135 "link/ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX/"
136 "org-openroadm-network-topology:"
137 "OMS-attributes/span"
141 "auto-spanloss": "true",
142 "spanloss-base": 11.4,
143 "spanloss-current": 12,
144 "engineered-spanloss": 12.2,
145 "link-concatenation": [{
148 "SRLG-length": 100000,
150 response = test_utils.put_request(url, data)
151 self.assertEqual(response.status_code, requests.codes.created)
153 # test service-create for Eth service from xpdr to xpdr
154 def test_11_create_eth_service1(self):
155 url = "{}/operations/org-openroadm-service:service-create"
158 "sdnc-request-header": {
159 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
160 "rpc-action": "service-create",
161 "request-system-id": "appname",
163 "http://localhost:8585/NotificationServer/notify"
165 "service-name": "service1",
166 "common-id": "ASATT1234567",
167 "connection-type": "service",
169 "service-rate": "100",
170 "node-id": "XPDRA01",
171 "service-format": "Ethernet",
172 "clli": "SNJSCAMCJP8",
176 "ROUTER_SNJSCAMCJP8_000000.00_00",
177 "port-type": "router",
178 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
179 "port-rack": "000000.00",
184 "LGX Panel_SNJSCAMCJP8_000000.00_00",
185 "lgx-port-name": "LGX Back.3",
186 "lgx-port-rack": "000000.00",
187 "lgx-port-shelf": "00"
193 "ROUTER_SNJSCAMCJP8_000000.00_00",
194 "port-type": "router",
195 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
196 "port-rack": "000000.00",
201 "LGX Panel_SNJSCAMCJP8_000000.00_00",
202 "lgx-port-name": "LGX Back.4",
203 "lgx-port-rack": "000000.00",
204 "lgx-port-shelf": "00"
210 "service-rate": "100",
211 "node-id": "XPDRC01",
212 "service-format": "Ethernet",
213 "clli": "SNJSCAMCJT4",
217 "ROUTER_SNJSCAMCJT4_000000.00_00",
218 "port-type": "router",
219 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
220 "port-rack": "000000.00",
225 "LGX Panel_SNJSCAMCJT4_000000.00_00",
226 "lgx-port-name": "LGX Back.29",
227 "lgx-port-rack": "000000.00",
228 "lgx-port-shelf": "00"
234 "ROUTER_SNJSCAMCJT4_000000.00_00",
235 "port-type": "router",
236 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
237 "port-rack": "000000.00",
242 "LGX Panel_SNJSCAMCJT4_000000.00_00",
243 "lgx-port-name": "LGX Back.30",
244 "lgx-port-rack": "000000.00",
245 "lgx-port-shelf": "00"
250 "due-date": "2016-11-28T00:00:01Z",
251 "operator-contact": "pw1234"
254 response = test_utils.post_request(url, data)
255 self.assertEqual(response.status_code, requests.codes.ok)
256 res = response.json()
257 self.assertIn('PCE calculation in progress',
258 res['output']['configuration-response-common'][
260 time.sleep(self.WAITING)
262 def test_12_get_eth_service1(self):
263 url = "{}/operational/org-openroadm-service:service-list/services/service1"
264 response = test_utils.get_request(url)
265 self.assertEqual(response.status_code, requests.codes.ok)
266 res = response.json()
268 res['services'][0]['administrative-state'],
271 res['services'][0]['service-name'], 'service1')
273 res['services'][0]['connection-type'], 'service')
275 res['services'][0]['lifecycle-state'], 'planned')
278 def test_13_check_xc1_ROADMA(self):
279 response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-1")
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-number': 'SRG1-PP1-TXRX-DEG1-TTP-TXRX-1',
286 'wavelength-number': 1,
287 'opticalControlMode': 'gainLoss',
288 'target-output-power': -3.0
289 }, **res['roadm-connections'][0]),
290 res['roadm-connections'][0]
292 self.assertDictEqual(
293 {'src-if': 'SRG1-PP1-TXRX-1'},
294 res['roadm-connections'][0]['source'])
295 self.assertDictEqual(
296 {'dst-if': 'DEG1-TTP-TXRX-1'},
297 res['roadm-connections'][0]['destination'])
300 def test_14_check_xc1_ROADMC(self):
301 response = test_utils.check_netconf_node_request("ROADMC01", "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-1")
302 self.assertEqual(response.status_code, requests.codes.ok)
303 res = response.json()
304 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
305 self.assertDictEqual(
307 'connection-number': 'SRG1-PP1-TXRX-DEG2-TTP-TXRX-1',
308 'wavelength-number': 1,
309 'opticalControlMode': 'gainLoss',
310 'target-output-power': 2.0
311 }, **res['roadm-connections'][0]),
312 res['roadm-connections'][0]
314 self.assertDictEqual(
315 {'src-if': 'SRG1-PP1-TXRX-1'},
316 res['roadm-connections'][0]['source'])
317 self.assertDictEqual(
318 {'dst-if': 'DEG2-TTP-TXRX-1'},
319 res['roadm-connections'][0]['destination'])
322 def test_15_check_topo_XPDRA(self):
323 url = "{}/config/ietf-network:networks/network/openroadm-topology/node/XPDRA01-XPDR1"
324 response = test_utils.get_request(url)
325 self.assertEqual(response.status_code, requests.codes.ok)
326 res = response.json()
327 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
329 if ele['tp-id'] == 'XPDR1-NETWORK1':
330 self.assertEqual({u'frequency': 196.1, u'width': 40},
331 ele['org-openroadm-network-topology:xpdr-network-attributes']['wavelength'])
332 if ele['tp-id'] == 'XPDR1-CLIENT1' or ele['tp-id'] == 'XPDR1-CLIENT3':
334 'org-openroadm-network-topology:xpdr-client-attributes',
336 if ele['tp-id'] == 'XPDR1-NETWORK2':
338 'org-openroadm-network-topology:xpdr-network-attributes',
342 def test_16_check_topo_ROADMA_SRG1(self):
343 url = "{}/config/ietf-network:networks/network/openroadm-topology/node/ROADMA01-SRG1"
344 response = test_utils.get_request(url)
345 self.assertEqual(response.status_code, requests.codes.ok)
346 res = response.json()
347 self.assertNotIn({u'index': 1},
349 u'org-openroadm-network-topology:srg-attributes'][
350 'available-wavelengths'])
351 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
353 if ele['tp-id'] == 'SRG1-PP1-TXRX':
354 self.assertIn({u'index': 1, u'frequency': 196.1, u'width': 40},
355 ele['org-openroadm-network-topology:'
356 'pp-attributes']['used-wavelength']
358 if ele['tp-id'] == 'SRG1-PP2-TXRX':
359 self.assertNotIn('used-wavelength', dict.keys(ele))
362 def test_17_check_topo_ROADMA_DEG1(self):
363 url = "{}/config/ietf-network:networks/network/openroadm-topology/node/ROADMA01-DEG1"
364 response = test_utils.get_request(url)
365 self.assertEqual(response.status_code, requests.codes.ok)
366 res = response.json()
367 self.assertNotIn({u'index': 1},
369 u'org-openroadm-network-topology:'
370 u'degree-attributes'][
371 'available-wavelengths'])
372 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
374 if ele['tp-id'] == 'DEG1-CTP-TXRX':
375 self.assertIn({u'index': 1, u'frequency': 196.1, u'width': 40},
376 ele['org-openroadm-network-topology:'
379 if ele['tp-id'] == 'DEG1-TTP-TXRX':
380 self.assertIn({u'index': 1, u'frequency': 196.1, u'width': 40},
381 ele['org-openroadm-network-topology:'
382 'tx-ttp-attributes'][
386 def test_18_connect_xprdA_N2_to_roadmA_PP2(self):
387 response = test_utils.connect_xpdr_to_rdm_request("XPDRA01", "1", "2",
388 "ROADMA01", "1", "SRG1-PP2-TXRX")
389 self.assertEqual(response.status_code, requests.codes.ok)
390 res = response.json()
391 self.assertIn('Xponder Roadm Link created successfully',
392 res["output"]["result"])
395 def test_19_connect_roadmA_PP2_to_xpdrA_N2(self):
396 response = test_utils.connect_rdm_to_xpdr_request("XPDRA01", "1", "2",
397 "ROADMA01", "1", "SRG1-PP2-TXRX")
398 self.assertEqual(response.status_code, requests.codes.ok)
399 res = response.json()
400 self.assertIn('Roadm Xponder links created successfully',
401 res["output"]["result"])
404 def test_20_connect_xprdC_N2_to_roadmC_PP2(self):
405 response = test_utils.connect_xpdr_to_rdm_request("XPDRC01", "1", "2",
406 "ROADMC01", "1", "SRG1-PP2-TXRX")
407 self.assertEqual(response.status_code, requests.codes.ok)
408 res = response.json()
409 self.assertIn('Xponder Roadm Link created successfully',
410 res["output"]["result"])
413 def test_21_connect_roadmC_PP2_to_xpdrC_N2(self):
414 response = test_utils.connect_rdm_to_xpdr_request("XPDRC01", "1", "2",
415 "ROADMC01", "1", "SRG1-PP2-TXRX")
416 self.assertEqual(response.status_code, requests.codes.ok)
417 res = response.json()
418 self.assertIn('Roadm Xponder links created successfully',
419 res["output"]["result"])
422 def test_22_create_eth_service2(self):
423 url = "{}/operations/org-openroadm-service:service-create"
426 "sdnc-request-header": {
427 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
428 "rpc-action": "service-create",
429 "request-system-id": "appname",
431 "http://localhost:8585/NotificationServer/notify"
433 "service-name": "service2",
434 "common-id": "ASATT1234567",
435 "connection-type": "service",
437 "service-rate": "100",
438 "node-id": "XPDRA01",
439 "service-format": "Ethernet",
440 "clli": "SNJSCAMCJP8",
444 "ROUTER_SNJSCAMCJP8_000000.00_00",
445 "port-type": "router",
446 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
447 "port-rack": "000000.00",
452 "LGX Panel_SNJSCAMCJP8_000000.00_00",
453 "lgx-port-name": "LGX Back.3",
454 "lgx-port-rack": "000000.00",
455 "lgx-port-shelf": "00"
461 "ROUTER_SNJSCAMCJP8_000000.00_00",
462 "port-type": "router",
463 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
464 "port-rack": "000000.00",
469 "LGX Panel_SNJSCAMCJP8_000000.00_00",
470 "lgx-port-name": "LGX Back.4",
471 "lgx-port-rack": "000000.00",
472 "lgx-port-shelf": "00"
478 "service-rate": "100",
479 "node-id": "XPDRC01",
480 "service-format": "Ethernet",
481 "clli": "SNJSCAMCJT4",
485 "ROUTER_SNJSCAMCJT4_000000.00_00",
486 "port-type": "router",
487 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
488 "port-rack": "000000.00",
493 "LGX Panel_SNJSCAMCJT4_000000.00_00",
494 "lgx-port-name": "LGX Back.29",
495 "lgx-port-rack": "000000.00",
496 "lgx-port-shelf": "00"
502 "ROUTER_SNJSCAMCJT4_000000.00_00",
503 "port-type": "router",
504 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
505 "port-rack": "000000.00",
510 "LGX Panel_SNJSCAMCJT4_000000.00_00",
511 "lgx-port-name": "LGX Back.30",
512 "lgx-port-rack": "000000.00",
513 "lgx-port-shelf": "00"
518 "due-date": "2016-11-28T00:00:01Z",
519 "operator-contact": "pw1234"
522 response = test_utils.post_request(url, data)
523 self.assertEqual(response.status_code, requests.codes.ok)
524 res = response.json()
525 self.assertIn('PCE calculation in progress',
526 res['output']['configuration-response-common'][
528 time.sleep(self.WAITING)
530 def test_23_get_eth_service2(self):
531 url = "{}/operational/org-openroadm-service:service-list/services/service2"
532 response = test_utils.get_request(url)
533 self.assertEqual(response.status_code, requests.codes.ok)
534 res = response.json()
536 res['services'][0]['administrative-state'],
539 res['services'][0]['service-name'], 'service2')
541 res['services'][0]['connection-type'], 'service')
543 res['services'][0]['lifecycle-state'], 'planned')
546 def test_24_check_xc2_ROADMA(self):
547 response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/DEG1-TTP-TXRX-SRG1-PP2-TXRX-2")
548 self.assertEqual(response.status_code, requests.codes.ok)
549 res = response.json()
550 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
551 self.assertDictEqual(
553 'connection-number': 'DEG1-TTP-TXRX-SRG1-PP2-TXRX-2',
554 'wavelength-number': 2,
555 'opticalControlMode': 'power'
556 }, **res['roadm-connections'][0]),
557 res['roadm-connections'][0]
559 self.assertDictEqual(
560 {'src-if': 'DEG1-TTP-TXRX-2'},
561 res['roadm-connections'][0]['source'])
562 self.assertDictEqual(
563 {'dst-if': 'SRG1-PP2-TXRX-2'},
564 res['roadm-connections'][0]['destination'])
566 def test_25_check_topo_XPDRA(self):
567 url = "{}/config/ietf-network:networks/network/openroadm-topology/node/XPDRA01-XPDR1"
568 response = test_utils.get_request(url)
569 self.assertEqual(response.status_code, requests.codes.ok)
570 res = response.json()
571 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
573 if ele['tp-id'] == 'XPDR1-NETWORK1':
574 self.assertEqual({u'frequency': 196.1, u'width': 40},
575 ele['org-openroadm-network-topology:'
576 'xpdr-network-attributes'][
578 if ele['tp-id'] == 'XPDR1-NETWORK2':
579 self.assertEqual({u'frequency': 196.05, u'width': 40},
580 ele['org-openroadm-network-topology:'
581 'xpdr-network-attributes'][
583 if ele['tp-id'] == 'XPDR1-CLIENT1' or \
584 ele['tp-id'] == 'XPDR1-CLIENT3':
586 'org-openroadm-network-topology:xpdr-client-attributes',
590 def test_26_check_topo_ROADMA_SRG1(self):
591 url = "{}/config/ietf-network:networks/network/openroadm-topology/node/ROADMA01-SRG1"
592 response = test_utils.get_request(url)
593 self.assertEqual(response.status_code, requests.codes.ok)
594 res = response.json()
595 self.assertNotIn({u'index': 1}, res['node'][0][
596 u'org-openroadm-network-topology:srg-attributes'][
597 'available-wavelengths'])
598 self.assertNotIn({u'index': 2}, res['node'][0][
599 u'org-openroadm-network-topology:srg-attributes'][
600 'available-wavelengths'])
601 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
603 if ele['tp-id'] == 'SRG1-PP1-TXRX':
604 self.assertIn({u'index': 1, u'frequency': 196.1, u'width': 40},
605 ele['org-openroadm-network-topology:'
606 'pp-attributes']['used-wavelength'])
607 self.assertNotIn({u'index': 2, u'frequency': 196.05,
609 ele['org-openroadm-network-topology:'
610 'pp-attributes']['used-wavelength'])
611 if ele['tp-id'] == 'SRG1-PP2-TXRX':
612 self.assertIn({u'index': 2, u'frequency': 196.05, u'width': 40},
613 ele['org-openroadm-network-topology:'
614 'pp-attributes']['used-wavelength'])
615 self.assertNotIn({u'index': 1, u'frequency': 196.1,
617 ele['org-openroadm-network-topology:'
618 'pp-attributes']['used-wavelength'])
619 if ele['tp-id'] == 'SRG1-PP3-TXRX':
620 self.assertNotIn('org-openroadm-network-topology:pp-attributes',
624 def test_27_check_topo_ROADMA_DEG1(self):
625 url = "{}/config/ietf-network:networks/network/openroadm-topology/node/ROADMA01-DEG1"
626 response = test_utils.get_request(url)
627 self.assertEqual(response.status_code, requests.codes.ok)
628 res = response.json()
629 self.assertNotIn({u'index': 1}, res['node'][0][
630 u'org-openroadm-network-topology:degree-attributes'][
631 'available-wavelengths'])
632 self.assertNotIn({u'index': 2}, res['node'][0][
633 u'org-openroadm-network-topology:degree-attributes'][
634 'available-wavelengths'])
635 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
637 if ele['tp-id'] == 'DEG1-CTP-TXRX':
638 self.assertIn({u'index': 1, u'frequency': 196.1, u'width': 40},
639 ele['org-openroadm-network-topology:'
640 'ctp-attributes']['used-wavelengths'])
641 self.assertIn({u'index': 2, u'frequency': 196.05, u'width': 40},
642 ele['org-openroadm-network-topology:'
643 'ctp-attributes']['used-wavelengths'])
644 if ele['tp-id'] == 'DEG1-TTP-TXRX':
645 self.assertIn({u'index': 1, u'frequency': 196.1, u'width': 40},
646 ele['org-openroadm-network-topology:'
647 'tx-ttp-attributes']['used-wavelengths'])
648 self.assertIn({u'index': 2, u'frequency': 196.05, u'width': 40},
649 ele['org-openroadm-network-topology:'
650 'tx-ttp-attributes']['used-wavelengths'])
653 # creation service test on a non-available resource
654 def test_28_create_eth_service3(self):
655 url = "{}/operations/org-openroadm-service:service-create"
658 "sdnc-request-header": {
659 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
660 "rpc-action": "service-create",
661 "request-system-id": "appname",
663 "http://localhost:8585/NotificationServer/notify"
665 "service-name": "service3",
666 "common-id": "ASATT1234567",
667 "connection-type": "service",
669 "service-rate": "100",
670 "node-id": "XPDRA01",
671 "service-format": "Ethernet",
672 "clli": "SNJSCAMCJP8",
676 "ROUTER_SNJSCAMCJP8_000000.00_00",
677 "port-type": "router",
678 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
679 "port-rack": "000000.00",
684 "LGX Panel_SNJSCAMCJP8_000000.00_00",
685 "lgx-port-name": "LGX Back.3",
686 "lgx-port-rack": "000000.00",
687 "lgx-port-shelf": "00"
693 "ROUTER_SNJSCAMCJP8_000000.00_00",
694 "port-type": "router",
695 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
696 "port-rack": "000000.00",
701 "LGX Panel_SNJSCAMCJP8_000000.00_00",
702 "lgx-port-name": "LGX Back.4",
703 "lgx-port-rack": "000000.00",
704 "lgx-port-shelf": "00"
710 "service-rate": "100",
711 "node-id": "XPDRC01",
712 "service-format": "Ethernet",
713 "clli": "SNJSCAMCJT4",
717 "ROUTER_SNJSCAMCJT4_000000.00_00",
718 "port-type": "router",
719 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
720 "port-rack": "000000.00",
725 "LGX Panel_SNJSCAMCJT4_000000.00_00",
726 "lgx-port-name": "LGX Back.29",
727 "lgx-port-rack": "000000.00",
728 "lgx-port-shelf": "00"
734 "ROUTER_SNJSCAMCJT4_000000.00_00",
735 "port-type": "router",
736 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
737 "port-rack": "000000.00",
742 "LGX Panel_SNJSCAMCJT4_000000.00_00",
743 "lgx-port-name": "LGX Back.30",
744 "lgx-port-rack": "000000.00",
745 "lgx-port-shelf": "00"
750 "due-date": "2016-11-28T00:00:01Z",
751 "operator-contact": "pw1234"
754 response = test_utils.post_request(url, data)
755 self.assertEqual(response.status_code, requests.codes.ok)
756 res = response.json()
757 self.assertIn('PCE calculation in progress',
758 res['output']['configuration-response-common'][
760 self.assertIn('200', res['output']['configuration-response-common'][
762 time.sleep(self.WAITING)
764 # add a test that check the openroadm-service-list still only
765 # contains 2 elements
767 def test_29_delete_eth_service3(self):
768 url = "{}/operations/org-openroadm-service:service-delete"
770 "sdnc-request-header": {
771 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
772 "rpc-action": "service-delete",
773 "request-system-id": "appname",
775 "http://localhost:8585/NotificationServer/notify"
777 "service-delete-req-info": {
778 "service-name": "service3",
779 "tail-retention": "no"
783 response = test_utils.post_request(url, data)
784 self.assertEqual(response.status_code, requests.codes.ok)
785 res = response.json()
786 self.assertIn('Service \'service3\' does not exist in datastore',
787 res['output']['configuration-response-common'][
789 self.assertIn('500', res['output']['configuration-response-common'][
793 def test_30_delete_eth_service1(self):
794 url = "{}/operations/org-openroadm-service:service-delete"
796 "sdnc-request-header": {
797 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
798 "rpc-action": "service-delete",
799 "request-system-id": "appname",
801 "http://localhost:8585/NotificationServer/notify"
803 "service-delete-req-info": {
804 "service-name": "service1",
805 "tail-retention": "no"
809 response = test_utils.post_request(url, data)
810 self.assertEqual(response.status_code, requests.codes.ok)
811 res = response.json()
812 self.assertIn('Renderer service delete in progress',
813 res['output']['configuration-response-common'][
817 def test_31_delete_eth_service2(self):
818 url = "{}/operations/org-openroadm-service:service-delete"
820 "sdnc-request-header": {
821 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
822 "rpc-action": "service-delete",
823 "request-system-id": "appname",
825 "http://localhost:8585/NotificationServer/notify"
827 "service-delete-req-info": {
828 "service-name": "service2",
829 "tail-retention": "no"
833 response = test_utils.post_request(url, data)
834 self.assertEqual(response.status_code, requests.codes.ok)
835 res = response.json()
836 self.assertIn('Renderer service delete in progress',
837 res['output']['configuration-response-common'][
841 def test_32_check_no_xc_ROADMA(self):
842 response = test_utils.check_netconf_node_request("ROADMA01", "")
843 res = response.json()
844 self.assertEqual(response.status_code, requests.codes.ok)
845 self.assertNotIn('roadm-connections',
846 dict.keys(res['org-openroadm-device']))
849 def test_33_check_topo_XPDRA(self):
850 url = "{}/config/ietf-network:networks/network/openroadm-topology/node/XPDRA01-XPDR1"
851 response = test_utils.get_request(url)
852 self.assertEqual(response.status_code, requests.codes.ok)
853 res = response.json()
854 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
856 if ((ele[u'org-openroadm-common-network:tp-type'] ==
858 and (ele['tp-id'] == 'XPDR1-CLIENT1' or ele[
859 'tp-id'] == 'XPDR1-CLIENT3')):
861 'org-openroadm-network-topology:xpdr-client-attributes',
863 elif (ele[u'org-openroadm-common-network:tp-type'] ==
865 self.assertIn(u'tail-equipment-id', dict.keys(
866 ele[u'org-openroadm-network-topology:'
867 u'xpdr-network-attributes']))
868 self.assertNotIn('wavelength', dict.keys(
869 ele[u'org-openroadm-network-topology:'
870 u'xpdr-network-attributes']))
873 def test_34_check_topo_ROADMA_SRG1(self):
874 url = "{}/config/ietf-network:networks/network/openroadm-topology/node/ROADMA01-SRG1"
875 response = test_utils.get_request(url)
876 self.assertEqual(response.status_code, requests.codes.ok)
877 res = response.json()
878 self.assertIn({u'index': 1}, res['node'][0][
879 u'org-openroadm-network-topology:srg-attributes'][
880 'available-wavelengths'])
881 self.assertIn({u'index': 2}, res['node'][0][
882 u'org-openroadm-network-topology:srg-attributes'][
883 'available-wavelengths'])
884 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
886 if ele['tp-id'] == 'SRG1-PP1-TXRX' or \
887 ele['tp-id'] == 'SRG1-PP1-TXRX':
888 self.assertNotIn('org-openroadm-network-topology:pp-attributes',
891 self.assertNotIn('org-openroadm-network-topology:pp-attributes',
895 def test_35_check_topo_ROADMA_DEG1(self):
896 url = "{}/config/ietf-network:networks/network/openroadm-topology/node/ROADMA01-DEG1"
897 response = test_utils.get_request(url)
898 self.assertEqual(response.status_code, requests.codes.ok)
899 res = response.json()
900 self.assertIn({u'index': 1}, res['node'][0][
901 u'org-openroadm-network-topology:degree-attributes'][
902 'available-wavelengths'])
903 self.assertIn({u'index': 2}, res['node'][0][
904 u'org-openroadm-network-topology:degree-attributes'][
905 'available-wavelengths'])
906 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
908 if ele['tp-id'] == 'DEG1-CTP-TXRX':
909 self.assertNotIn('org-openroadm-network-topology:'
910 'ctp-attributes', dict.keys(ele))
911 if ele['tp-id'] == 'DEG1-TTP-TXRX':
912 self.assertNotIn('org-openroadm-network-topology:'
913 'tx-ttp-attributes', dict.keys(ele))
916 # test service-create for Optical Channel (OC) service from srg-pp to srg-pp
917 def test_36_create_oc_service1(self):
918 url = "{}/operations/org-openroadm-service:service-create"
921 "sdnc-request-header": {
922 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
923 "rpc-action": "service-create",
924 "request-system-id": "appname",
926 "http://localhost:8585/NotificationServer/notify"
928 "service-name": "service1",
929 "common-id": "ASATT1234567",
930 "connection-type": "roadm-line",
932 "service-rate": "100",
933 "node-id": "ROADMA01",
934 "service-format": "OC",
935 "clli": "SNJSCAMCJP8",
939 "ROUTER_SNJSCAMCJP8_000000.00_00",
940 "port-type": "router",
941 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
942 "port-rack": "000000.00",
947 "LGX Panel_SNJSCAMCJP8_000000.00_00",
948 "lgx-port-name": "LGX Back.3",
949 "lgx-port-rack": "000000.00",
950 "lgx-port-shelf": "00"
956 "ROUTER_SNJSCAMCJP8_000000.00_00",
957 "port-type": "router",
958 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
959 "port-rack": "000000.00",
964 "LGX Panel_SNJSCAMCJP8_000000.00_00",
965 "lgx-port-name": "LGX Back.4",
966 "lgx-port-rack": "000000.00",
967 "lgx-port-shelf": "00"
973 "service-rate": "100",
974 "node-id": "ROADMC01",
975 "service-format": "OC",
976 "clli": "SNJSCAMCJT4",
980 "ROUTER_SNJSCAMCJT4_000000.00_00",
981 "port-type": "router",
982 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
983 "port-rack": "000000.00",
988 "LGX Panel_SNJSCAMCJT4_000000.00_00",
989 "lgx-port-name": "LGX Back.29",
990 "lgx-port-rack": "000000.00",
991 "lgx-port-shelf": "00"
997 "ROUTER_SNJSCAMCJT4_000000.00_00",
998 "port-type": "router",
999 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
1000 "port-rack": "000000.00",
1005 "LGX Panel_SNJSCAMCJT4_000000.00_00",
1006 "lgx-port-name": "LGX Back.30",
1007 "lgx-port-rack": "000000.00",
1008 "lgx-port-shelf": "00"
1011 "optic-type": "gray"
1013 "due-date": "2016-11-28T00:00:01Z",
1014 "operator-contact": "pw1234"
1017 response = test_utils.post_request(url, data)
1018 self.assertEqual(response.status_code, requests.codes.ok)
1019 res = response.json()
1020 self.assertIn('PCE calculation in progress',
1021 res['output']['configuration-response-common'][
1022 'response-message'])
1023 time.sleep(self.WAITING)
1025 def test_37_get_oc_service1(self):
1026 url = "{}/operational/org-openroadm-service:service-list/services/service1"
1027 response = test_utils.get_request(url)
1028 self.assertEqual(response.status_code, requests.codes.ok)
1029 res = response.json()
1031 res['services'][0]['administrative-state'],
1034 res['services'][0]['service-name'], 'service1')
1036 res['services'][0]['connection-type'], 'roadm-line')
1038 res['services'][0]['lifecycle-state'], 'planned')
1041 def test_38_check_xc1_ROADMA(self):
1042 response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-1")
1043 self.assertEqual(response.status_code, requests.codes.ok)
1044 res = response.json()
1045 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
1046 self.assertDictEqual(
1048 'connection-number': 'SRG1-PP1-TXRX-DEG1-TTP-TXRX-1',
1049 'wavelength-number': 1,
1050 'opticalControlMode': 'gainLoss',
1051 'target-output-power': -3.0
1052 }, **res['roadm-connections'][0]),
1053 res['roadm-connections'][0]
1055 self.assertDictEqual(
1056 {'src-if': 'SRG1-PP1-TXRX-1'},
1057 res['roadm-connections'][0]['source'])
1058 self.assertDictEqual(
1059 {'dst-if': 'DEG1-TTP-TXRX-1'},
1060 res['roadm-connections'][0]['destination'])
1063 def test_39_check_xc1_ROADMC(self):
1064 response = test_utils.check_netconf_node_request("ROADMC01", "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-1")
1065 self.assertEqual(response.status_code, requests.codes.ok)
1066 res = response.json()
1067 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
1068 self.assertDictEqual(
1070 'connection-number': 'SRG1-PP1-TXRX-DEG2-TTP-TXRX-1',
1071 'wavelength-number': 1,
1072 'opticalControlMode': 'gainLoss',
1073 'target-output-power': 2.0
1074 }, **res['roadm-connections'][0]),
1075 res['roadm-connections'][0]
1077 self.assertDictEqual(
1078 {'src-if': 'SRG1-PP1-TXRX-1'},
1079 res['roadm-connections'][0]['source'])
1080 self.assertDictEqual(
1081 {'dst-if': 'DEG2-TTP-TXRX-1'},
1082 res['roadm-connections'][0]['destination'])
1085 def test_40_create_oc_service2(self):
1086 url = "{}/operations/org-openroadm-service:service-create"
1089 "sdnc-request-header": {
1090 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1091 "rpc-action": "service-create",
1092 "request-system-id": "appname",
1094 "http://localhost:8585/NotificationServer/notify"
1096 "service-name": "service2",
1097 "common-id": "ASATT1234567",
1098 "connection-type": "roadm-line",
1100 "service-rate": "100",
1101 "node-id": "ROADMA01",
1102 "service-format": "OC",
1103 "clli": "SNJSCAMCJP8",
1107 "ROUTER_SNJSCAMCJP8_000000.00_00",
1108 "port-type": "router",
1109 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
1110 "port-rack": "000000.00",
1115 "LGX Panel_SNJSCAMCJP8_000000.00_00",
1116 "lgx-port-name": "LGX Back.3",
1117 "lgx-port-rack": "000000.00",
1118 "lgx-port-shelf": "00"
1124 "ROUTER_SNJSCAMCJP8_000000.00_00",
1125 "port-type": "router",
1126 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
1127 "port-rack": "000000.00",
1132 "LGX Panel_SNJSCAMCJP8_000000.00_00",
1133 "lgx-port-name": "LGX Back.4",
1134 "lgx-port-rack": "000000.00",
1135 "lgx-port-shelf": "00"
1138 "optic-type": "gray"
1141 "service-rate": "100",
1142 "node-id": "ROADMC01",
1143 "service-format": "OC",
1144 "clli": "SNJSCAMCJT4",
1148 "ROUTER_SNJSCAMCJT4_000000.00_00",
1149 "port-type": "router",
1150 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
1151 "port-rack": "000000.00",
1156 "LGX Panel_SNJSCAMCJT4_000000.00_00",
1157 "lgx-port-name": "LGX Back.29",
1158 "lgx-port-rack": "000000.00",
1159 "lgx-port-shelf": "00"
1165 "ROUTER_SNJSCAMCJT4_000000.00_00",
1166 "port-type": "router",
1167 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
1168 "port-rack": "000000.00",
1173 "LGX Panel_SNJSCAMCJT4_000000.00_00",
1174 "lgx-port-name": "LGX Back.30",
1175 "lgx-port-rack": "000000.00",
1176 "lgx-port-shelf": "00"
1179 "optic-type": "gray"
1181 "due-date": "2016-11-28T00:00:01Z",
1182 "operator-contact": "pw1234"
1185 response = test_utils.post_request(url, data)
1186 self.assertEqual(response.status_code, requests.codes.ok)
1187 res = response.json()
1188 self.assertIn('PCE calculation in progress',
1189 res['output']['configuration-response-common'][
1190 'response-message'])
1191 time.sleep(self.WAITING)
1193 def test_41_get_oc_service2(self):
1194 url = "{}/operational/org-openroadm-service:service-list/services/service2"
1195 response = test_utils.get_request(url)
1196 self.assertEqual(response.status_code, requests.codes.ok)
1197 res = response.json()
1199 res['services'][0]['administrative-state'],
1202 res['services'][0]['service-name'], 'service2')
1204 res['services'][0]['connection-type'], 'roadm-line')
1206 res['services'][0]['lifecycle-state'], 'planned')
1209 def test_42_check_xc2_ROADMA(self):
1210 response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP2-TXRX-DEG1-TTP-TXRX-2")
1211 self.assertEqual(response.status_code, requests.codes.ok)
1212 res = response.json()
1213 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
1214 self.assertDictEqual(
1216 'connection-number': 'SRG1-PP2-TXRX-DEG1-TTP-TXRX-2',
1217 'wavelength-number': 2,
1218 'opticalControlMode': 'gainLoss',
1219 'target-output-power': -3.0
1220 }, **res['roadm-connections'][0]),
1221 res['roadm-connections'][0]
1223 self.assertDictEqual(
1224 {'src-if': 'SRG1-PP2-TXRX-2'},
1225 res['roadm-connections'][0]['source'])
1226 self.assertDictEqual(
1227 {'dst-if': 'DEG1-TTP-TXRX-2'},
1228 res['roadm-connections'][0]['destination'])
1231 def test_43_check_topo_ROADMA(self):
1232 self.test_26_check_topo_ROADMA_SRG1()
1233 self.test_27_check_topo_ROADMA_DEG1()
1236 def test_44_delete_oc_service1(self):
1237 url = "{}/operations/org-openroadm-service:service-delete"
1239 "sdnc-request-header": {
1240 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1241 "rpc-action": "service-delete",
1242 "request-system-id": "appname",
1244 "http://localhost:8585/NotificationServer/notify"
1246 "service-delete-req-info": {
1247 "service-name": "service1",
1248 "tail-retention": "no"
1252 response = test_utils.post_request(url, data)
1253 self.assertEqual(response.status_code, requests.codes.ok)
1254 res = response.json()
1255 self.assertIn('Renderer service delete in progress',
1256 res['output']['configuration-response-common'][
1257 'response-message'])
1260 def test_45_delete_oc_service2(self):
1261 url = "{}/operations/org-openroadm-service:service-delete"
1263 "sdnc-request-header": {
1264 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1265 "rpc-action": "service-delete",
1266 "request-system-id": "appname",
1268 "http://localhost:8585/NotificationServer/notify"
1270 "service-delete-req-info": {
1271 "service-name": "service2",
1272 "tail-retention": "no"
1276 response = test_utils.post_request(url, data)
1277 self.assertEqual(response.status_code, requests.codes.ok)
1278 res = response.json()
1279 self.assertIn('Renderer service delete in progress',
1280 res['output']['configuration-response-common'][
1281 'response-message'])
1284 def test_46_get_no_oc_services(self):
1286 url = "{}/operational/org-openroadm-service:service-list"
1287 response = test_utils.get_request(url)
1288 self.assertEqual(response.status_code, requests.codes.not_found)
1289 res = response.json()
1292 "error-type": "application",
1293 "error-tag": "data-missing",
1295 "Request could not be completed because the relevant data "
1296 "model content does not exist"
1298 res['errors']['error'])
1301 def test_47_get_no_xc_ROADMA(self):
1302 response = test_utils.check_netconf_node_request("ROADMA01", "")
1303 self.assertEqual(response.status_code, requests.codes.ok)
1304 res = response.json()
1305 self.assertNotIn(['roadm-connections'][0], res['org-openroadm-device'])
1308 def test_48_check_topo_ROADMA(self):
1309 self.test_34_check_topo_ROADMA_SRG1()
1310 self.test_35_check_topo_ROADMA_DEG1()
1312 def test_49_loop_create_eth_service(self):
1313 for i in range(1, 6):
1314 print("iteration number {}".format(i))
1315 print("eth service creation")
1316 self.test_11_create_eth_service1()
1317 print("check xc in ROADMA01")
1318 self.test_13_check_xc1_ROADMA()
1319 print("check xc in ROADMC01")
1320 self.test_14_check_xc1_ROADMC()
1321 print("eth service deletion\n")
1322 self.test_30_delete_eth_service1()
1324 def test_50_loop_create_oc_service(self):
1325 url = "{}/operational/org-openroadm-service:service-list/services/service1"
1326 response = test_utils.get_request(url)
1327 if response.status_code != 404:
1328 url = "{}/operations/org-openroadm-service:service-delete"
1330 "sdnc-request-header": {
1331 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1332 "rpc-action": "service-delete",
1333 "request-system-id": "appname",
1335 "http://localhost:8585/NotificationServer/notify"
1337 "service-delete-req-info": {
1338 "service-name": "service1",
1339 "tail-retention": "no"
1343 test_utils.post_request(url, data)
1346 for i in range(1, 6):
1347 print("iteration number {}".format(i))
1348 print("oc service creation")
1349 self.test_36_create_oc_service1()
1350 print("check xc in ROADMA01")
1351 self.test_38_check_xc1_ROADMA()
1352 print("check xc in ROADMC01")
1353 self.test_39_check_xc1_ROADMC()
1354 print("oc service deletion\n")
1355 self.test_44_delete_oc_service1()
1357 def test_51_disconnect_XPDRA(self):
1358 response = test_utils.unmount_device("XPDRA01")
1359 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
1361 def test_52_disconnect_XPDRC(self):
1362 response = test_utils.unmount_device("XPDRC01")
1363 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
1365 def test_53_disconnect_ROADMA(self):
1366 response = test_utils.unmount_device("ROADMA01")
1367 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
1369 def test_54_disconnect_ROADMC(self):
1370 response = test_utils.unmount_device("ROADMC01")
1371 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
1374 if __name__ == "__main__":
1375 unittest.main(verbosity=2)