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
111 "auto-spanloss": "true",
112 "spanloss-base": 11.4,
113 "spanloss-current": 12,
114 "engineered-spanloss": 12.2,
115 "link-concatenation": [{
118 "SRLG-length": 100000,
120 response = test_utils.add_oms_attr_request("ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX", data)
121 self.assertEqual(response.status_code, requests.codes.created)
123 def test_10_add_omsAttributes_ROADMC_ROADMA(self):
124 # Config ROADMC-ROADMA oms-attributes
127 "auto-spanloss": "true",
128 "spanloss-base": 11.4,
129 "spanloss-current": 12,
130 "engineered-spanloss": 12.2,
131 "link-concatenation": [{
134 "SRLG-length": 100000,
136 response = test_utils.add_oms_attr_request("ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX", data)
137 self.assertEqual(response.status_code, requests.codes.created)
139 # test service-create for Eth service from xpdr to xpdr
140 def test_11_create_eth_service1(self):
143 "sdnc-request-header": {
144 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
145 "rpc-action": "service-create",
146 "request-system-id": "appname",
148 "http://localhost:8585/NotificationServer/notify"
150 "service-name": "service1",
151 "common-id": "ASATT1234567",
152 "connection-type": "service",
154 "service-rate": "100",
155 "node-id": "XPDRA01",
156 "service-format": "Ethernet",
157 "clli": "SNJSCAMCJP8",
161 "ROUTER_SNJSCAMCJP8_000000.00_00",
162 "port-type": "router",
163 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
164 "port-rack": "000000.00",
169 "LGX Panel_SNJSCAMCJP8_000000.00_00",
170 "lgx-port-name": "LGX Back.3",
171 "lgx-port-rack": "000000.00",
172 "lgx-port-shelf": "00"
178 "ROUTER_SNJSCAMCJP8_000000.00_00",
179 "port-type": "router",
180 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
181 "port-rack": "000000.00",
186 "LGX Panel_SNJSCAMCJP8_000000.00_00",
187 "lgx-port-name": "LGX Back.4",
188 "lgx-port-rack": "000000.00",
189 "lgx-port-shelf": "00"
195 "service-rate": "100",
196 "node-id": "XPDRC01",
197 "service-format": "Ethernet",
198 "clli": "SNJSCAMCJT4",
202 "ROUTER_SNJSCAMCJT4_000000.00_00",
203 "port-type": "router",
204 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
205 "port-rack": "000000.00",
210 "LGX Panel_SNJSCAMCJT4_000000.00_00",
211 "lgx-port-name": "LGX Back.29",
212 "lgx-port-rack": "000000.00",
213 "lgx-port-shelf": "00"
219 "ROUTER_SNJSCAMCJT4_000000.00_00",
220 "port-type": "router",
221 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
222 "port-rack": "000000.00",
227 "LGX Panel_SNJSCAMCJT4_000000.00_00",
228 "lgx-port-name": "LGX Back.30",
229 "lgx-port-rack": "000000.00",
230 "lgx-port-shelf": "00"
235 "due-date": "2016-11-28T00:00:01Z",
236 "operator-contact": "pw1234"
239 response = test_utils.service_create_request(data)
240 self.assertEqual(response.status_code, requests.codes.ok)
241 res = response.json()
242 self.assertIn('PCE calculation in progress',
243 res['output']['configuration-response-common'][
245 time.sleep(self.WAITING)
247 def test_12_get_eth_service1(self):
248 response = test_utils.get_service_list_request("services/service1")
249 self.assertEqual(response.status_code, requests.codes.ok)
250 res = response.json()
252 res['services'][0]['administrative-state'],
255 res['services'][0]['service-name'], 'service1')
257 res['services'][0]['connection-type'], 'service')
259 res['services'][0]['lifecycle-state'], 'planned')
262 def test_13_check_xc1_ROADMA(self):
263 response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-1")
264 self.assertEqual(response.status_code, requests.codes.ok)
265 res = response.json()
266 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
267 self.assertDictEqual(
269 'connection-number': 'SRG1-PP1-TXRX-DEG1-TTP-TXRX-1',
270 'wavelength-number': 1,
271 'opticalControlMode': 'gainLoss',
272 'target-output-power': -3.0
273 }, **res['roadm-connections'][0]),
274 res['roadm-connections'][0]
276 self.assertDictEqual(
277 {'src-if': 'SRG1-PP1-TXRX-1'},
278 res['roadm-connections'][0]['source'])
279 self.assertDictEqual(
280 {'dst-if': 'DEG1-TTP-TXRX-1'},
281 res['roadm-connections'][0]['destination'])
284 def test_14_check_xc1_ROADMC(self):
285 response = test_utils.check_netconf_node_request("ROADMC01", "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-1")
286 self.assertEqual(response.status_code, requests.codes.ok)
287 res = response.json()
288 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
289 self.assertDictEqual(
291 'connection-number': 'SRG1-PP1-TXRX-DEG2-TTP-TXRX-1',
292 'wavelength-number': 1,
293 'opticalControlMode': 'gainLoss',
294 'target-output-power': 2.0
295 }, **res['roadm-connections'][0]),
296 res['roadm-connections'][0]
298 self.assertDictEqual(
299 {'src-if': 'SRG1-PP1-TXRX-1'},
300 res['roadm-connections'][0]['source'])
301 self.assertDictEqual(
302 {'dst-if': 'DEG2-TTP-TXRX-1'},
303 res['roadm-connections'][0]['destination'])
306 def test_15_check_topo_XPDRA(self):
307 response = test_utils.get_ordm_topo_request("node/XPDRA01-XPDR1")
308 self.assertEqual(response.status_code, requests.codes.ok)
309 res = response.json()
310 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
312 if ele['tp-id'] == 'XPDR1-NETWORK1':
313 self.assertEqual({u'frequency': 196.1, u'width': 40},
314 ele['org-openroadm-network-topology:xpdr-network-attributes']['wavelength'])
315 if ele['tp-id'] == 'XPDR1-CLIENT1' or ele['tp-id'] == 'XPDR1-CLIENT3':
317 'org-openroadm-network-topology:xpdr-client-attributes',
319 if ele['tp-id'] == 'XPDR1-NETWORK2':
321 'org-openroadm-network-topology:xpdr-network-attributes',
325 def test_16_check_topo_ROADMA_SRG1(self):
326 response = test_utils.get_ordm_topo_request("node/ROADMA01-SRG1")
327 self.assertEqual(response.status_code, requests.codes.ok)
328 res = response.json()
329 self.assertNotIn({u'index': 1},
331 u'org-openroadm-network-topology:srg-attributes'][
332 'available-wavelengths'])
333 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
335 if ele['tp-id'] == 'SRG1-PP1-TXRX':
336 self.assertIn({u'index': 1, u'frequency': 196.1, u'width': 40},
337 ele['org-openroadm-network-topology:'
338 'pp-attributes']['used-wavelength']
340 if ele['tp-id'] == 'SRG1-PP2-TXRX':
341 self.assertNotIn('used-wavelength', dict.keys(ele))
344 def test_17_check_topo_ROADMA_DEG1(self):
345 response = test_utils.get_ordm_topo_request("node/ROADMA01-DEG1")
346 self.assertEqual(response.status_code, requests.codes.ok)
347 res = response.json()
348 self.assertNotIn({u'index': 1},
350 u'org-openroadm-network-topology:'
351 u'degree-attributes'][
352 'available-wavelengths'])
353 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
355 if ele['tp-id'] == 'DEG1-CTP-TXRX':
356 self.assertIn({u'index': 1, u'frequency': 196.1, u'width': 40},
357 ele['org-openroadm-network-topology:'
360 if ele['tp-id'] == 'DEG1-TTP-TXRX':
361 self.assertIn({u'index': 1, u'frequency': 196.1, u'width': 40},
362 ele['org-openroadm-network-topology:'
363 'tx-ttp-attributes'][
367 def test_18_connect_xprdA_N2_to_roadmA_PP2(self):
368 response = test_utils.connect_xpdr_to_rdm_request("XPDRA01", "1", "2",
369 "ROADMA01", "1", "SRG1-PP2-TXRX")
370 self.assertEqual(response.status_code, requests.codes.ok)
371 res = response.json()
372 self.assertIn('Xponder Roadm Link created successfully',
373 res["output"]["result"])
376 def test_19_connect_roadmA_PP2_to_xpdrA_N2(self):
377 response = test_utils.connect_rdm_to_xpdr_request("XPDRA01", "1", "2",
378 "ROADMA01", "1", "SRG1-PP2-TXRX")
379 self.assertEqual(response.status_code, requests.codes.ok)
380 res = response.json()
381 self.assertIn('Roadm Xponder links created successfully',
382 res["output"]["result"])
385 def test_20_connect_xprdC_N2_to_roadmC_PP2(self):
386 response = test_utils.connect_xpdr_to_rdm_request("XPDRC01", "1", "2",
387 "ROADMC01", "1", "SRG1-PP2-TXRX")
388 self.assertEqual(response.status_code, requests.codes.ok)
389 res = response.json()
390 self.assertIn('Xponder Roadm Link created successfully',
391 res["output"]["result"])
394 def test_21_connect_roadmC_PP2_to_xpdrC_N2(self):
395 response = test_utils.connect_rdm_to_xpdr_request("XPDRC01", "1", "2",
396 "ROADMC01", "1", "SRG1-PP2-TXRX")
397 self.assertEqual(response.status_code, requests.codes.ok)
398 res = response.json()
399 self.assertIn('Roadm Xponder links created successfully',
400 res["output"]["result"])
403 def test_22_create_eth_service2(self):
406 "sdnc-request-header": {
407 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
408 "rpc-action": "service-create",
409 "request-system-id": "appname",
411 "http://localhost:8585/NotificationServer/notify"
413 "service-name": "service2",
414 "common-id": "ASATT1234567",
415 "connection-type": "service",
417 "service-rate": "100",
418 "node-id": "XPDRA01",
419 "service-format": "Ethernet",
420 "clli": "SNJSCAMCJP8",
424 "ROUTER_SNJSCAMCJP8_000000.00_00",
425 "port-type": "router",
426 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
427 "port-rack": "000000.00",
432 "LGX Panel_SNJSCAMCJP8_000000.00_00",
433 "lgx-port-name": "LGX Back.3",
434 "lgx-port-rack": "000000.00",
435 "lgx-port-shelf": "00"
441 "ROUTER_SNJSCAMCJP8_000000.00_00",
442 "port-type": "router",
443 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
444 "port-rack": "000000.00",
449 "LGX Panel_SNJSCAMCJP8_000000.00_00",
450 "lgx-port-name": "LGX Back.4",
451 "lgx-port-rack": "000000.00",
452 "lgx-port-shelf": "00"
458 "service-rate": "100",
459 "node-id": "XPDRC01",
460 "service-format": "Ethernet",
461 "clli": "SNJSCAMCJT4",
465 "ROUTER_SNJSCAMCJT4_000000.00_00",
466 "port-type": "router",
467 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
468 "port-rack": "000000.00",
473 "LGX Panel_SNJSCAMCJT4_000000.00_00",
474 "lgx-port-name": "LGX Back.29",
475 "lgx-port-rack": "000000.00",
476 "lgx-port-shelf": "00"
482 "ROUTER_SNJSCAMCJT4_000000.00_00",
483 "port-type": "router",
484 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
485 "port-rack": "000000.00",
490 "LGX Panel_SNJSCAMCJT4_000000.00_00",
491 "lgx-port-name": "LGX Back.30",
492 "lgx-port-rack": "000000.00",
493 "lgx-port-shelf": "00"
498 "due-date": "2016-11-28T00:00:01Z",
499 "operator-contact": "pw1234"
502 response = test_utils.service_create_request(data)
503 self.assertEqual(response.status_code, requests.codes.ok)
504 res = response.json()
505 self.assertIn('PCE calculation in progress',
506 res['output']['configuration-response-common'][
508 time.sleep(self.WAITING)
510 def test_23_get_eth_service2(self):
511 response = test_utils.get_service_list_request("services/service2")
512 self.assertEqual(response.status_code, requests.codes.ok)
513 res = response.json()
515 res['services'][0]['administrative-state'],
518 res['services'][0]['service-name'], 'service2')
520 res['services'][0]['connection-type'], 'service')
522 res['services'][0]['lifecycle-state'], 'planned')
525 def test_24_check_xc2_ROADMA(self):
526 response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/DEG1-TTP-TXRX-SRG1-PP2-TXRX-2")
527 self.assertEqual(response.status_code, requests.codes.ok)
528 res = response.json()
529 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
530 self.assertDictEqual(
532 'connection-number': 'DEG1-TTP-TXRX-SRG1-PP2-TXRX-2',
533 'wavelength-number': 2,
534 'opticalControlMode': 'power'
535 }, **res['roadm-connections'][0]),
536 res['roadm-connections'][0]
538 self.assertDictEqual(
539 {'src-if': 'DEG1-TTP-TXRX-2'},
540 res['roadm-connections'][0]['source'])
541 self.assertDictEqual(
542 {'dst-if': 'SRG1-PP2-TXRX-2'},
543 res['roadm-connections'][0]['destination'])
545 def test_25_check_topo_XPDRA(self):
546 response = test_utils.get_ordm_topo_request("node/XPDRA01-XPDR1")
547 self.assertEqual(response.status_code, requests.codes.ok)
548 res = response.json()
549 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
551 if ele['tp-id'] == 'XPDR1-NETWORK1':
552 self.assertEqual({u'frequency': 196.1, u'width': 40},
553 ele['org-openroadm-network-topology:'
554 'xpdr-network-attributes'][
556 if ele['tp-id'] == 'XPDR1-NETWORK2':
557 self.assertEqual({u'frequency': 196.05, u'width': 40},
558 ele['org-openroadm-network-topology:'
559 'xpdr-network-attributes'][
561 if ele['tp-id'] == 'XPDR1-CLIENT1' or \
562 ele['tp-id'] == 'XPDR1-CLIENT3':
564 'org-openroadm-network-topology:xpdr-client-attributes',
568 def test_26_check_topo_ROADMA_SRG1(self):
569 response = test_utils.get_ordm_topo_request("node/ROADMA01-SRG1")
570 self.assertEqual(response.status_code, requests.codes.ok)
571 res = response.json()
572 self.assertNotIn({u'index': 1}, res['node'][0][
573 u'org-openroadm-network-topology:srg-attributes'][
574 'available-wavelengths'])
575 self.assertNotIn({u'index': 2}, res['node'][0][
576 u'org-openroadm-network-topology:srg-attributes'][
577 'available-wavelengths'])
578 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
580 if ele['tp-id'] == 'SRG1-PP1-TXRX':
581 self.assertIn({u'index': 1, u'frequency': 196.1, u'width': 40},
582 ele['org-openroadm-network-topology:'
583 'pp-attributes']['used-wavelength'])
584 self.assertNotIn({u'index': 2, u'frequency': 196.05,
586 ele['org-openroadm-network-topology:'
587 'pp-attributes']['used-wavelength'])
588 if ele['tp-id'] == 'SRG1-PP2-TXRX':
589 self.assertIn({u'index': 2, u'frequency': 196.05, u'width': 40},
590 ele['org-openroadm-network-topology:'
591 'pp-attributes']['used-wavelength'])
592 self.assertNotIn({u'index': 1, u'frequency': 196.1,
594 ele['org-openroadm-network-topology:'
595 'pp-attributes']['used-wavelength'])
596 if ele['tp-id'] == 'SRG1-PP3-TXRX':
597 self.assertNotIn('org-openroadm-network-topology:pp-attributes',
601 def test_27_check_topo_ROADMA_DEG1(self):
602 response = test_utils.get_ordm_topo_request("node/ROADMA01-DEG1")
603 self.assertEqual(response.status_code, requests.codes.ok)
604 res = response.json()
605 self.assertNotIn({u'index': 1}, res['node'][0][
606 u'org-openroadm-network-topology:degree-attributes'][
607 'available-wavelengths'])
608 self.assertNotIn({u'index': 2}, res['node'][0][
609 u'org-openroadm-network-topology:degree-attributes'][
610 'available-wavelengths'])
611 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
613 if ele['tp-id'] == 'DEG1-CTP-TXRX':
614 self.assertIn({u'index': 1, u'frequency': 196.1, u'width': 40},
615 ele['org-openroadm-network-topology:'
616 'ctp-attributes']['used-wavelengths'])
617 self.assertIn({u'index': 2, u'frequency': 196.05, u'width': 40},
618 ele['org-openroadm-network-topology:'
619 'ctp-attributes']['used-wavelengths'])
620 if ele['tp-id'] == 'DEG1-TTP-TXRX':
621 self.assertIn({u'index': 1, u'frequency': 196.1, u'width': 40},
622 ele['org-openroadm-network-topology:'
623 'tx-ttp-attributes']['used-wavelengths'])
624 self.assertIn({u'index': 2, u'frequency': 196.05, u'width': 40},
625 ele['org-openroadm-network-topology:'
626 'tx-ttp-attributes']['used-wavelengths'])
629 # creation service test on a non-available resource
630 def test_28_create_eth_service3(self):
633 "sdnc-request-header": {
634 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
635 "rpc-action": "service-create",
636 "request-system-id": "appname",
638 "http://localhost:8585/NotificationServer/notify"
640 "service-name": "service3",
641 "common-id": "ASATT1234567",
642 "connection-type": "service",
644 "service-rate": "100",
645 "node-id": "XPDRA01",
646 "service-format": "Ethernet",
647 "clli": "SNJSCAMCJP8",
651 "ROUTER_SNJSCAMCJP8_000000.00_00",
652 "port-type": "router",
653 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
654 "port-rack": "000000.00",
659 "LGX Panel_SNJSCAMCJP8_000000.00_00",
660 "lgx-port-name": "LGX Back.3",
661 "lgx-port-rack": "000000.00",
662 "lgx-port-shelf": "00"
668 "ROUTER_SNJSCAMCJP8_000000.00_00",
669 "port-type": "router",
670 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
671 "port-rack": "000000.00",
676 "LGX Panel_SNJSCAMCJP8_000000.00_00",
677 "lgx-port-name": "LGX Back.4",
678 "lgx-port-rack": "000000.00",
679 "lgx-port-shelf": "00"
685 "service-rate": "100",
686 "node-id": "XPDRC01",
687 "service-format": "Ethernet",
688 "clli": "SNJSCAMCJT4",
692 "ROUTER_SNJSCAMCJT4_000000.00_00",
693 "port-type": "router",
694 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
695 "port-rack": "000000.00",
700 "LGX Panel_SNJSCAMCJT4_000000.00_00",
701 "lgx-port-name": "LGX Back.29",
702 "lgx-port-rack": "000000.00",
703 "lgx-port-shelf": "00"
709 "ROUTER_SNJSCAMCJT4_000000.00_00",
710 "port-type": "router",
711 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
712 "port-rack": "000000.00",
717 "LGX Panel_SNJSCAMCJT4_000000.00_00",
718 "lgx-port-name": "LGX Back.30",
719 "lgx-port-rack": "000000.00",
720 "lgx-port-shelf": "00"
725 "due-date": "2016-11-28T00:00:01Z",
726 "operator-contact": "pw1234"
729 response = test_utils.service_create_request(data)
730 self.assertEqual(response.status_code, requests.codes.ok)
731 res = response.json()
732 self.assertIn('PCE calculation in progress',
733 res['output']['configuration-response-common'][
735 self.assertIn('200', res['output']['configuration-response-common'][
737 time.sleep(self.WAITING)
739 # add a test that check the openroadm-service-list still only
740 # contains 2 elements
742 def test_29_delete_eth_service3(self):
743 url = "{}/operations/org-openroadm-service:service-delete"
745 "sdnc-request-header": {
746 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
747 "rpc-action": "service-delete",
748 "request-system-id": "appname",
750 "http://localhost:8585/NotificationServer/notify"
752 "service-delete-req-info": {
753 "service-name": "service3",
754 "tail-retention": "no"
758 response = test_utils.post_request(url, data)
759 self.assertEqual(response.status_code, requests.codes.ok)
760 res = response.json()
761 self.assertIn('Service \'service3\' does not exist in datastore',
762 res['output']['configuration-response-common'][
764 self.assertIn('500', res['output']['configuration-response-common'][
768 def test_30_delete_eth_service1(self):
769 url = "{}/operations/org-openroadm-service:service-delete"
771 "sdnc-request-header": {
772 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
773 "rpc-action": "service-delete",
774 "request-system-id": "appname",
776 "http://localhost:8585/NotificationServer/notify"
778 "service-delete-req-info": {
779 "service-name": "service1",
780 "tail-retention": "no"
784 response = test_utils.post_request(url, data)
785 self.assertEqual(response.status_code, requests.codes.ok)
786 res = response.json()
787 self.assertIn('Renderer service delete in progress',
788 res['output']['configuration-response-common'][
792 def test_31_delete_eth_service2(self):
793 url = "{}/operations/org-openroadm-service:service-delete"
795 "sdnc-request-header": {
796 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
797 "rpc-action": "service-delete",
798 "request-system-id": "appname",
800 "http://localhost:8585/NotificationServer/notify"
802 "service-delete-req-info": {
803 "service-name": "service2",
804 "tail-retention": "no"
808 response = test_utils.post_request(url, data)
809 self.assertEqual(response.status_code, requests.codes.ok)
810 res = response.json()
811 self.assertIn('Renderer service delete in progress',
812 res['output']['configuration-response-common'][
816 def test_32_check_no_xc_ROADMA(self):
817 response = test_utils.check_netconf_node_request("ROADMA01", "")
818 res = response.json()
819 self.assertEqual(response.status_code, requests.codes.ok)
820 self.assertNotIn('roadm-connections',
821 dict.keys(res['org-openroadm-device']))
824 def test_33_check_topo_XPDRA(self):
825 response = test_utils.get_ordm_topo_request("node/XPDRA01-XPDR1")
826 self.assertEqual(response.status_code, requests.codes.ok)
827 res = response.json()
828 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
830 if ((ele[u'org-openroadm-common-network:tp-type'] ==
832 and (ele['tp-id'] == 'XPDR1-CLIENT1' or ele[
833 'tp-id'] == 'XPDR1-CLIENT3')):
835 'org-openroadm-network-topology:xpdr-client-attributes',
837 elif (ele[u'org-openroadm-common-network:tp-type'] ==
839 self.assertIn(u'tail-equipment-id', dict.keys(
840 ele[u'org-openroadm-network-topology:'
841 u'xpdr-network-attributes']))
842 self.assertNotIn('wavelength', dict.keys(
843 ele[u'org-openroadm-network-topology:'
844 u'xpdr-network-attributes']))
847 def test_34_check_topo_ROADMA_SRG1(self):
848 response = test_utils.get_ordm_topo_request("node/ROADMA01-SRG1")
849 self.assertEqual(response.status_code, requests.codes.ok)
850 res = response.json()
851 self.assertIn({u'index': 1}, res['node'][0][
852 u'org-openroadm-network-topology:srg-attributes'][
853 'available-wavelengths'])
854 self.assertIn({u'index': 2}, res['node'][0][
855 u'org-openroadm-network-topology:srg-attributes'][
856 'available-wavelengths'])
857 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
859 if ele['tp-id'] == 'SRG1-PP1-TXRX' or \
860 ele['tp-id'] == 'SRG1-PP1-TXRX':
861 self.assertNotIn('org-openroadm-network-topology:pp-attributes',
864 self.assertNotIn('org-openroadm-network-topology:pp-attributes',
868 def test_35_check_topo_ROADMA_DEG1(self):
869 response = test_utils.get_ordm_topo_request("node/ROADMA01-DEG1")
870 self.assertEqual(response.status_code, requests.codes.ok)
871 res = response.json()
872 self.assertIn({u'index': 1}, res['node'][0][
873 u'org-openroadm-network-topology:degree-attributes'][
874 'available-wavelengths'])
875 self.assertIn({u'index': 2}, res['node'][0][
876 u'org-openroadm-network-topology:degree-attributes'][
877 'available-wavelengths'])
878 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
880 if ele['tp-id'] == 'DEG1-CTP-TXRX':
881 self.assertNotIn('org-openroadm-network-topology:'
882 'ctp-attributes', dict.keys(ele))
883 if ele['tp-id'] == 'DEG1-TTP-TXRX':
884 self.assertNotIn('org-openroadm-network-topology:'
885 'tx-ttp-attributes', dict.keys(ele))
888 # test service-create for Optical Channel (OC) service from srg-pp to srg-pp
889 def test_36_create_oc_service1(self):
892 "sdnc-request-header": {
893 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
894 "rpc-action": "service-create",
895 "request-system-id": "appname",
897 "http://localhost:8585/NotificationServer/notify"
899 "service-name": "service1",
900 "common-id": "ASATT1234567",
901 "connection-type": "roadm-line",
903 "service-rate": "100",
904 "node-id": "ROADMA01",
905 "service-format": "OC",
906 "clli": "SNJSCAMCJP8",
910 "ROUTER_SNJSCAMCJP8_000000.00_00",
911 "port-type": "router",
912 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
913 "port-rack": "000000.00",
918 "LGX Panel_SNJSCAMCJP8_000000.00_00",
919 "lgx-port-name": "LGX Back.3",
920 "lgx-port-rack": "000000.00",
921 "lgx-port-shelf": "00"
927 "ROUTER_SNJSCAMCJP8_000000.00_00",
928 "port-type": "router",
929 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
930 "port-rack": "000000.00",
935 "LGX Panel_SNJSCAMCJP8_000000.00_00",
936 "lgx-port-name": "LGX Back.4",
937 "lgx-port-rack": "000000.00",
938 "lgx-port-shelf": "00"
944 "service-rate": "100",
945 "node-id": "ROADMC01",
946 "service-format": "OC",
947 "clli": "SNJSCAMCJT4",
951 "ROUTER_SNJSCAMCJT4_000000.00_00",
952 "port-type": "router",
953 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
954 "port-rack": "000000.00",
959 "LGX Panel_SNJSCAMCJT4_000000.00_00",
960 "lgx-port-name": "LGX Back.29",
961 "lgx-port-rack": "000000.00",
962 "lgx-port-shelf": "00"
968 "ROUTER_SNJSCAMCJT4_000000.00_00",
969 "port-type": "router",
970 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
971 "port-rack": "000000.00",
976 "LGX Panel_SNJSCAMCJT4_000000.00_00",
977 "lgx-port-name": "LGX Back.30",
978 "lgx-port-rack": "000000.00",
979 "lgx-port-shelf": "00"
984 "due-date": "2016-11-28T00:00:01Z",
985 "operator-contact": "pw1234"
988 response = test_utils.service_create_request(data)
989 self.assertEqual(response.status_code, requests.codes.ok)
990 res = response.json()
991 self.assertIn('PCE calculation in progress',
992 res['output']['configuration-response-common'][
994 time.sleep(self.WAITING)
996 def test_37_get_oc_service1(self):
997 response = test_utils.get_service_list_request("services/service1")
998 self.assertEqual(response.status_code, requests.codes.ok)
999 res = response.json()
1001 res['services'][0]['administrative-state'],
1004 res['services'][0]['service-name'], 'service1')
1006 res['services'][0]['connection-type'], 'roadm-line')
1008 res['services'][0]['lifecycle-state'], 'planned')
1011 def test_38_check_xc1_ROADMA(self):
1012 response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-1")
1013 self.assertEqual(response.status_code, requests.codes.ok)
1014 res = response.json()
1015 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
1016 self.assertDictEqual(
1018 'connection-number': 'SRG1-PP1-TXRX-DEG1-TTP-TXRX-1',
1019 'wavelength-number': 1,
1020 'opticalControlMode': 'gainLoss',
1021 'target-output-power': -3.0
1022 }, **res['roadm-connections'][0]),
1023 res['roadm-connections'][0]
1025 self.assertDictEqual(
1026 {'src-if': 'SRG1-PP1-TXRX-1'},
1027 res['roadm-connections'][0]['source'])
1028 self.assertDictEqual(
1029 {'dst-if': 'DEG1-TTP-TXRX-1'},
1030 res['roadm-connections'][0]['destination'])
1033 def test_39_check_xc1_ROADMC(self):
1034 response = test_utils.check_netconf_node_request("ROADMC01", "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-1")
1035 self.assertEqual(response.status_code, requests.codes.ok)
1036 res = response.json()
1037 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
1038 self.assertDictEqual(
1040 'connection-number': 'SRG1-PP1-TXRX-DEG2-TTP-TXRX-1',
1041 'wavelength-number': 1,
1042 'opticalControlMode': 'gainLoss',
1043 'target-output-power': 2.0
1044 }, **res['roadm-connections'][0]),
1045 res['roadm-connections'][0]
1047 self.assertDictEqual(
1048 {'src-if': 'SRG1-PP1-TXRX-1'},
1049 res['roadm-connections'][0]['source'])
1050 self.assertDictEqual(
1051 {'dst-if': 'DEG2-TTP-TXRX-1'},
1052 res['roadm-connections'][0]['destination'])
1055 def test_40_create_oc_service2(self):
1058 "sdnc-request-header": {
1059 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1060 "rpc-action": "service-create",
1061 "request-system-id": "appname",
1063 "http://localhost:8585/NotificationServer/notify"
1065 "service-name": "service2",
1066 "common-id": "ASATT1234567",
1067 "connection-type": "roadm-line",
1069 "service-rate": "100",
1070 "node-id": "ROADMA01",
1071 "service-format": "OC",
1072 "clli": "SNJSCAMCJP8",
1076 "ROUTER_SNJSCAMCJP8_000000.00_00",
1077 "port-type": "router",
1078 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
1079 "port-rack": "000000.00",
1084 "LGX Panel_SNJSCAMCJP8_000000.00_00",
1085 "lgx-port-name": "LGX Back.3",
1086 "lgx-port-rack": "000000.00",
1087 "lgx-port-shelf": "00"
1093 "ROUTER_SNJSCAMCJP8_000000.00_00",
1094 "port-type": "router",
1095 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
1096 "port-rack": "000000.00",
1101 "LGX Panel_SNJSCAMCJP8_000000.00_00",
1102 "lgx-port-name": "LGX Back.4",
1103 "lgx-port-rack": "000000.00",
1104 "lgx-port-shelf": "00"
1107 "optic-type": "gray"
1110 "service-rate": "100",
1111 "node-id": "ROADMC01",
1112 "service-format": "OC",
1113 "clli": "SNJSCAMCJT4",
1117 "ROUTER_SNJSCAMCJT4_000000.00_00",
1118 "port-type": "router",
1119 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
1120 "port-rack": "000000.00",
1125 "LGX Panel_SNJSCAMCJT4_000000.00_00",
1126 "lgx-port-name": "LGX Back.29",
1127 "lgx-port-rack": "000000.00",
1128 "lgx-port-shelf": "00"
1134 "ROUTER_SNJSCAMCJT4_000000.00_00",
1135 "port-type": "router",
1136 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
1137 "port-rack": "000000.00",
1142 "LGX Panel_SNJSCAMCJT4_000000.00_00",
1143 "lgx-port-name": "LGX Back.30",
1144 "lgx-port-rack": "000000.00",
1145 "lgx-port-shelf": "00"
1148 "optic-type": "gray"
1150 "due-date": "2016-11-28T00:00:01Z",
1151 "operator-contact": "pw1234"
1154 response = test_utils.service_create_request(data)
1155 self.assertEqual(response.status_code, requests.codes.ok)
1156 res = response.json()
1157 self.assertIn('PCE calculation in progress',
1158 res['output']['configuration-response-common'][
1159 'response-message'])
1160 time.sleep(self.WAITING)
1162 def test_41_get_oc_service2(self):
1163 response = test_utils.get_service_list_request("services/service2")
1164 self.assertEqual(response.status_code, requests.codes.ok)
1165 res = response.json()
1167 res['services'][0]['administrative-state'],
1170 res['services'][0]['service-name'], 'service2')
1172 res['services'][0]['connection-type'], 'roadm-line')
1174 res['services'][0]['lifecycle-state'], 'planned')
1177 def test_42_check_xc2_ROADMA(self):
1178 response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP2-TXRX-DEG1-TTP-TXRX-2")
1179 self.assertEqual(response.status_code, requests.codes.ok)
1180 res = response.json()
1181 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
1182 self.assertDictEqual(
1184 'connection-number': 'SRG1-PP2-TXRX-DEG1-TTP-TXRX-2',
1185 'wavelength-number': 2,
1186 'opticalControlMode': 'gainLoss',
1187 'target-output-power': -3.0
1188 }, **res['roadm-connections'][0]),
1189 res['roadm-connections'][0]
1191 self.assertDictEqual(
1192 {'src-if': 'SRG1-PP2-TXRX-2'},
1193 res['roadm-connections'][0]['source'])
1194 self.assertDictEqual(
1195 {'dst-if': 'DEG1-TTP-TXRX-2'},
1196 res['roadm-connections'][0]['destination'])
1199 def test_43_check_topo_ROADMA(self):
1200 self.test_26_check_topo_ROADMA_SRG1()
1201 self.test_27_check_topo_ROADMA_DEG1()
1204 def test_44_delete_oc_service1(self):
1205 url = "{}/operations/org-openroadm-service:service-delete"
1207 "sdnc-request-header": {
1208 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1209 "rpc-action": "service-delete",
1210 "request-system-id": "appname",
1212 "http://localhost:8585/NotificationServer/notify"
1214 "service-delete-req-info": {
1215 "service-name": "service1",
1216 "tail-retention": "no"
1220 response = test_utils.post_request(url, data)
1221 self.assertEqual(response.status_code, requests.codes.ok)
1222 res = response.json()
1223 self.assertIn('Renderer service delete in progress',
1224 res['output']['configuration-response-common'][
1225 'response-message'])
1228 def test_45_delete_oc_service2(self):
1229 url = "{}/operations/org-openroadm-service:service-delete"
1231 "sdnc-request-header": {
1232 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1233 "rpc-action": "service-delete",
1234 "request-system-id": "appname",
1236 "http://localhost:8585/NotificationServer/notify"
1238 "service-delete-req-info": {
1239 "service-name": "service2",
1240 "tail-retention": "no"
1244 response = test_utils.post_request(url, data)
1245 self.assertEqual(response.status_code, requests.codes.ok)
1246 res = response.json()
1247 self.assertIn('Renderer service delete in progress',
1248 res['output']['configuration-response-common'][
1249 'response-message'])
1252 def test_46_get_no_oc_services(self):
1254 response = test_utils.get_service_list_request("")
1255 self.assertEqual(response.status_code, requests.codes.not_found)
1256 res = response.json()
1259 "error-type": "application",
1260 "error-tag": "data-missing",
1262 "Request could not be completed because the relevant data "
1263 "model content does not exist"
1265 res['errors']['error'])
1268 def test_47_get_no_xc_ROADMA(self):
1269 response = test_utils.check_netconf_node_request("ROADMA01", "")
1270 self.assertEqual(response.status_code, requests.codes.ok)
1271 res = response.json()
1272 self.assertNotIn(['roadm-connections'][0], res['org-openroadm-device'])
1275 def test_48_check_topo_ROADMA(self):
1276 self.test_34_check_topo_ROADMA_SRG1()
1277 self.test_35_check_topo_ROADMA_DEG1()
1279 def test_49_loop_create_eth_service(self):
1280 for i in range(1, 6):
1281 print("iteration number {}".format(i))
1282 print("eth service creation")
1283 self.test_11_create_eth_service1()
1284 print("check xc in ROADMA01")
1285 self.test_13_check_xc1_ROADMA()
1286 print("check xc in ROADMC01")
1287 self.test_14_check_xc1_ROADMC()
1288 print("eth service deletion\n")
1289 self.test_30_delete_eth_service1()
1291 def test_50_loop_create_oc_service(self):
1292 response = test_utils.get_service_list_request("services/service1")
1293 if response.status_code != 404:
1294 url = "{}/operations/org-openroadm-service:service-delete"
1296 "sdnc-request-header": {
1297 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1298 "rpc-action": "service-delete",
1299 "request-system-id": "appname",
1301 "http://localhost:8585/NotificationServer/notify"
1303 "service-delete-req-info": {
1304 "service-name": "service1",
1305 "tail-retention": "no"
1309 test_utils.post_request(url, data)
1312 for i in range(1, 6):
1313 print("iteration number {}".format(i))
1314 print("oc service creation")
1315 self.test_36_create_oc_service1()
1316 print("check xc in ROADMA01")
1317 self.test_38_check_xc1_ROADMA()
1318 print("check xc in ROADMC01")
1319 self.test_39_check_xc1_ROADMC()
1320 print("oc service deletion\n")
1321 self.test_44_delete_oc_service1()
1323 def test_51_disconnect_XPDRA(self):
1324 response = test_utils.unmount_device("XPDRA01")
1325 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
1327 def test_52_disconnect_XPDRC(self):
1328 response = test_utils.unmount_device("XPDRC01")
1329 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
1331 def test_53_disconnect_ROADMA(self):
1332 response = test_utils.unmount_device("ROADMA01")
1333 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
1335 def test_54_disconnect_ROADMC(self):
1336 response = test_utils.unmount_device("ROADMC01")
1337 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
1340 if __name__ == "__main__":
1341 unittest.main(verbosity=2)