3 ##############################################################################
4 # Copyright (c) 2022 Orange, Inc. and others. All rights reserved.
6 # All rights reserved. This program and the accompanying materials
7 # are made available under the terms of the Apache License, Version 2.0
8 # which accompanies this distribution, and is available at
9 # http://www.apache.org/licenses/LICENSE-2.0
10 ##############################################################################
12 # pylint: disable=invalid-name
13 # pylint: disable=no-member
14 # pylint: disable=too-many-public-methods
15 # pylint: disable=too-many-lines
20 # pylint: disable=wrong-import-order
23 sys.path.append('transportpce_tests/common/')
24 # pylint: disable=wrong-import-position
25 # pylint: disable=import-error
26 import test_utils # nopep8
29 class TransportPCEtesting(unittest.TestCase):
31 WAITING = 20 # nominal value is 300
32 NODE_VERSION_221 = '2.2.1'
33 NODE_VERSION_71 = '7.1'
35 cr_serv_input_data = {
36 "sdnc-request-header": {
37 "request-id": "request-1",
38 "rpc-action": "service-create",
39 "request-system-id": "appname"
41 "service-name": "service1",
42 "common-id": "commonId",
43 "connection-type": "service",
44 "service-resiliency": {
45 "resiliency": "org-openroadm-common-service-types:restorable"
48 "service-rate": "400",
50 "service-format": "Ethernet",
65 "service-rate": "400",
67 "service-format": "Ethernet",
81 "due-date": "2018-06-15T00:00:01Z",
82 "operator-contact": "pw1234"
85 del_serv_input_data = {
86 "sdnc-request-header": {
87 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
88 "rpc-action": "service-delete",
89 "request-system-id": "appname",
90 "notification-url": "http://localhost:8585/NotificationServer/notify"},
91 "service-delete-req-info": {
92 "service-name": "TBD",
93 "tail-retention": "no"}
96 service_path_service_1_AtoZ = [
100 "state": "inService",
101 "tp-id": "SRG1-CP-TXRX",
102 "tp-node-id": "ROADM-C1-SRG1"
108 "state": "inService",
109 "node-id": "ROADM-C1-SRG1"
115 "state": "inService",
116 "tp-id": "DEG1-CTP-TXRX",
117 "tp-node-id": "ROADM-C1-DEG1"
123 "state": "inService",
124 "link-id": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX"
130 "state": "inService",
131 "tp-id": "SRG1-PP1-TXRX",
132 "tp-node-id": "ROADM-C1-SRG1"
138 "state": "inService",
139 "link-id": "ROADM-C1-SRG1-SRG1-PP1-TXRXtoXPDR-C2-XPDR1-XPDR1-NETWORK1"
145 "state": "inService",
146 "node-id": "XPDR-A2-XPDR1"
152 "state": "inService",
153 "tp-id": "XPDR1-NETWORK1",
154 "tp-node-id": "XPDR-A2-XPDR1"
160 "state": "inService",
161 "tp-id": "XPDR1-CLIENT1",
162 "tp-node-id": "XPDR-A2-XPDR1"
168 "state": "inService",
169 "node-id": "ROADM-A1-SRG1"
175 "state": "inService",
176 "tp-id": "SRG1-CP-TXRX",
177 "tp-node-id": "ROADM-A1-SRG1"
183 "state": "inService",
184 "link-id": "XPDR-A2-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX"
190 "state": "inService",
191 "tp-id": "SRG1-PP1-TXRX",
192 "tp-node-id": "ROADM-A1-SRG1"
198 "state": "inService",
199 "node-id": "ROADM-A1-DEG2"
205 "state": "inService",
206 "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX"
212 "state": "inService",
213 "tp-id": "DEG2-CTP-TXRX",
214 "tp-node-id": "ROADM-A1-DEG2"
220 "state": "inService",
221 "tp-id": "XPDR1-NETWORK1",
222 "tp-node-id": "XPDR-C2-XPDR1"
228 "state": "inService",
229 "tp-id": "DEG1-TTP-TXRX",
230 "tp-node-id": "ROADM-C1-DEG1"
236 "state": "inService",
237 "node-id": "ROADM-C1-DEG1"
243 "state": "inService",
244 "tp-id": "DEG2-TTP-TXRX",
245 "tp-node-id": "ROADM-A1-DEG2"
251 "state": "inService",
252 "node-id": "XPDR-C2-XPDR1"
258 "state": "inService",
259 "link-id": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX"
265 "state": "inService",
266 "tp-id": "XPDR1-CLIENT1",
267 "tp-node-id": "XPDR-C2-XPDR1"
272 service_path_service_1_rerouted_AtoZ = [
276 "state": "inService",
277 "link-id": "ROADM-C1-SRG1-SRG1-PP1-TXRXtoXPDR-C2-XPDR1-XPDR1-NETWORK1"
283 "state": "inService",
284 "tp-id": "XPDR1-NETWORK1",
285 "tp-node-id": "XPDR-C2-XPDR1"
291 "state": "inService",
292 "node-id": "ROADM-C1-SRG1"
298 "state": "inService",
299 "tp-id": "SRG1-PP1-TXRX",
300 "tp-node-id": "ROADM-C1-SRG1"
306 "state": "inService",
307 "node-id": "XPDR-C2-XPDR1"
313 "state": "inService",
314 "tp-id": "XPDR1-CLIENT1",
315 "tp-node-id": "XPDR-C2-XPDR1"
321 "state": "inService",
322 "tp-id": "DEG1-TTP-TXRX",
323 "tp-node-id": "ROADM-B1-DEG1"
329 "state": "inService",
330 "node-id": "ROADM-B1-DEG1"
336 "state": "inService",
337 "tp-id": "DEG1-TTP-TXRX",
338 "tp-node-id": "ROADM-A1-DEG1"
344 "state": "inService",
345 "link-id": "ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX"
351 "state": "inService",
352 "tp-id": "DEG2-CTP-TXRX",
353 "tp-node-id": "ROADM-B1-DEG2"
359 "state": "inService",
360 "node-id": "ROADM-B1-DEG2"
366 "state": "inService",
367 "tp-id": "DEG1-CTP-TXRX",
368 "tp-node-id": "ROADM-B1-DEG1"
374 "state": "inService",
375 "link-id": "ROADM-B1-DEG1-DEG1-CTP-TXRXtoROADM-B1-DEG2-DEG2-CTP-TXRX"
381 "state": "inService",
382 "tp-id": "DEG2-TTP-TXRX",
383 "tp-node-id": "ROADM-B1-DEG2"
389 "state": "inService",
390 "link-id": "ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX"
396 "state": "inService",
397 "node-id": "XPDR-A2-XPDR1"
403 "state": "inService",
404 "tp-id": "XPDR1-NETWORK1",
405 "tp-node-id": "XPDR-A2-XPDR1"
411 "state": "inService",
412 "tp-id": "XPDR1-CLIENT1",
413 "tp-node-id": "XPDR-A2-XPDR1"
419 "state": "inService",
420 "node-id": "ROADM-A1-SRG1"
426 "state": "inService",
427 "tp-id": "SRG1-CP-TXRX",
428 "tp-node-id": "ROADM-A1-SRG1"
434 "state": "inService",
435 "link-id": "XPDR-A2-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX"
441 "state": "inService",
442 "tp-id": "SRG1-PP1-TXRX",
443 "tp-node-id": "ROADM-A1-SRG1"
449 "state": "inService",
450 "node-id": "ROADM-A1-DEG1"
456 "state": "inService",
457 "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX"
463 "state": "inService",
464 "tp-id": "DEG1-CTP-TXRX",
465 "tp-node-id": "ROADM-A1-DEG1"
471 "state": "inService",
472 "tp-id": "DEG2-TTP-TXRX",
473 "tp-node-id": "ROADM-C1-DEG2"
479 "state": "inService",
480 "link-id": "ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX"
486 "state": "inService",
487 "tp-id": "SRG1-CP-TXRX",
488 "tp-node-id": "ROADM-C1-SRG1"
494 "state": "inService",
495 "node-id": "ROADM-C1-DEG2"
501 "state": "inService",
502 "tp-id": "DEG2-CTP-TXRX",
503 "tp-node-id": "ROADM-C1-DEG2"
508 service_path_service_2_AtoZ = [
512 "state": "inService",
513 "tp-id": "SRG1-CP-TXRX",
514 "tp-node-id": "ROADM-C1-SRG1"
520 "state": "inService",
521 "node-id": "ROADM-C1-SRG1"
527 "state": "inService",
528 "tp-id": "DEG1-CTP-TXRX",
529 "tp-node-id": "ROADM-C1-DEG1"
535 "state": "inService",
536 "link-id": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX"
542 "state": "inService",
543 "tp-id": "SRG1-PP2-TXRX",
544 "tp-node-id": "ROADM-C1-SRG1"
550 "state": "inService",
551 "link-id": "ROADM-C1-SRG1-SRG1-PP2-TXRXtoXPDR-C2-XPDR3-XPDR3-NETWORK1"
557 "state": "inService",
558 "node-id": "XPDR-A2-XPDR3"
564 "state": "inService",
565 "tp-id": "XPDR3-NETWORK1",
566 "tp-node-id": "XPDR-A2-XPDR3"
572 "state": "inService",
573 "tp-id": "XPDR3-CLIENT1",
574 "tp-node-id": "XPDR-A2-XPDR3"
580 "state": "inService",
581 "node-id": "ROADM-A1-SRG1"
587 "state": "inService",
588 "tp-id": "SRG1-CP-TXRX",
589 "tp-node-id": "ROADM-A1-SRG1"
595 "state": "inService",
596 "link-id": "XPDR-A2-XPDR3-XPDR3-NETWORK1toROADM-A1-SRG1-SRG1-PP2-TXRX"
602 "state": "inService",
603 "tp-id": "SRG1-PP2-TXRX",
604 "tp-node-id": "ROADM-A1-SRG1"
610 "state": "inService",
611 "node-id": "ROADM-A1-DEG2"
617 "state": "inService",
618 "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX"
624 "state": "inService",
625 "tp-id": "DEG2-CTP-TXRX",
626 "tp-node-id": "ROADM-A1-DEG2"
632 "state": "inService",
633 "tp-id": "XPDR3-NETWORK1",
634 "tp-node-id": "XPDR-C2-XPDR3"
640 "state": "inService",
641 "tp-id": "DEG1-TTP-TXRX",
642 "tp-node-id": "ROADM-C1-DEG1"
648 "state": "inService",
649 "node-id": "ROADM-C1-DEG1"
655 "state": "inService",
656 "tp-id": "DEG2-TTP-TXRX",
657 "tp-node-id": "ROADM-A1-DEG2"
663 "state": "inService",
664 "node-id": "XPDR-C2-XPDR3"
670 "state": "inService",
671 "link-id": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX"
677 "state": "inService",
678 "tp-id": "XPDR3-CLIENT1",
679 "tp-node-id": "XPDR-C2-XPDR3"
684 pm_handling_degrade_body = {
686 "pm-to-be-set-or-created": {
687 "current-pm-entry": [
689 "pm-resource-instance": "/org-openroadm-device:org-openroadm-device/org-openroadm-device"
690 ":interface[org-openroadm-device:name='OTS-DEG2-TTP-TXRX']",
691 "pm-resource-type": "interface",
692 "pm-resource-type-extension": "",
695 "type": "opticalPowerInput",
697 "location": "nearEnd",
701 "granularity": "15min",
702 "pmParameterValue": -30,
703 "pmParameterUnit": "dBm",
704 "validity": "complete"
707 "granularity": "24Hour",
708 "pmParameterValue": -21.3,
709 "pmParameterUnit": "dBm",
710 "validity": "complete"
720 pm_handling_recover_body = {
721 "rpc-action": "clear",
722 "pm-to-get-clear-or-delete": {
723 "current-pm-entry": [
725 "pm-resource-instance": "/org-openroadm-device:org-openroadm-device/org-openroadm-device"
726 ":interface[org-openroadm-device:name='OTS-DEG2-TTP-TXRX']",
727 "pm-resource-type": "interface",
728 "pm-resource-type-extension": "",
731 "type": "opticalPowerInput",
733 "location": "nearEnd",
744 cls.processes = test_utils.start_tpce()
745 cls.processes = test_utils.start_sims([('xpdra2', cls.NODE_VERSION_71),
746 ('roadma', cls.NODE_VERSION_221),
747 ('roadmb', cls.NODE_VERSION_221),
748 ('roadmc', cls.NODE_VERSION_221),
749 ('xpdrc2', cls.NODE_VERSION_71)])
752 def tearDownClass(cls):
753 # pylint: disable=not-an-iterable
754 for process in cls.processes:
755 test_utils.shutdown_process(process)
756 print("all processes killed")
761 def test_01_connect_xpdra2(self):
762 response = test_utils.mount_device("XPDR-A2", ('xpdra2', self.NODE_VERSION_71))
763 self.assertEqual(response.status_code,
764 requests.codes.created, test_utils.CODE_SHOULD_BE_201)
766 def test_02_connect_xpdrc2(self):
767 response = test_utils.mount_device("XPDR-C2", ('xpdrc2', self.NODE_VERSION_71))
768 self.assertEqual(response.status_code,
769 requests.codes.created, test_utils.CODE_SHOULD_BE_201)
771 def test_03_connect_rdma(self):
772 response = test_utils.mount_device("ROADM-A1", ('roadma', self.NODE_VERSION_221))
773 self.assertEqual(response.status_code,
774 requests.codes.created, test_utils.CODE_SHOULD_BE_201)
776 def test_04_connect_rdmb(self):
777 response = test_utils.mount_device("ROADM-B1", ('roadmb', self.NODE_VERSION_221))
778 self.assertEqual(response.status_code,
779 requests.codes.created, test_utils.CODE_SHOULD_BE_201)
781 def test_05_connect_rdmc(self):
782 response = test_utils.mount_device("ROADM-C1", ('roadmc', self.NODE_VERSION_221))
783 self.assertEqual(response.status_code,
784 requests.codes.created, test_utils.CODE_SHOULD_BE_201)
786 def test_06_connect_xpdra2_1_N1_to_roadma_PP1(self):
787 response = test_utils.transportpce_api_rpc_request(
788 'transportpce-networkutils', 'init-xpdr-rdm-links',
789 {'links-input': {'xpdr-node': 'XPDR-A2', 'xpdr-num': '1', 'network-num': '1',
790 'rdm-node': 'ROADM-A1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP1-TXRX'}})
791 self.assertEqual(response['status_code'], requests.codes.ok)
792 self.assertIn('Xponder Roadm Link created successfully', response["output"]["result"])
794 def test_07_connect_roadma_PP1_to_xpdra2_1_N1(self):
795 response = test_utils.transportpce_api_rpc_request(
796 'transportpce-networkutils', 'init-rdm-xpdr-links',
797 {'links-input': {'xpdr-node': 'XPDR-A2', 'xpdr-num': '1', 'network-num': '1',
798 'rdm-node': 'ROADM-A1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP1-TXRX'}})
799 self.assertEqual(response['status_code'], requests.codes.ok)
800 self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
802 def test_08_connect_xpdrc2_1_N1_to_roadmc_PP1(self):
803 response = test_utils.transportpce_api_rpc_request(
804 'transportpce-networkutils', 'init-xpdr-rdm-links',
805 {'links-input': {'xpdr-node': 'XPDR-C2', 'xpdr-num': '1', 'network-num': '1',
806 'rdm-node': 'ROADM-C1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP1-TXRX'}})
807 self.assertEqual(response['status_code'], requests.codes.ok)
808 self.assertIn('Xponder Roadm Link created successfully', response["output"]["result"])
810 def test_09_connect_roadmc_PP1_to_xpdrc2_1_N1(self):
811 response = test_utils.transportpce_api_rpc_request(
812 'transportpce-networkutils', 'init-rdm-xpdr-links',
813 {'links-input': {'xpdr-node': 'XPDR-C2', 'xpdr-num': '1', 'network-num': '1',
814 'rdm-node': 'ROADM-C1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP1-TXRX'}})
815 self.assertEqual(response['status_code'], requests.codes.ok)
816 self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
818 def test_10_add_omsAttributes_roadma_roadmc(self):
819 # Config ROADMA-ROADMC oms-attributes
821 "auto-spanloss": "true",
822 "spanloss-base": 11.4,
823 "spanloss-current": 12,
824 "engineered-spanloss": 12.2,
825 "link-concatenation": [{
828 "SRLG-length": 100000,
830 response = test_utils.add_oms_attr_request("ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX", data)
831 self.assertEqual(response.status_code, requests.codes.created)
833 def test_11_add_omsAttributes_roadmc_roadma(self):
834 # Config ROADMC-ROADMA oms-attributes
836 "auto-spanloss": "true",
837 "spanloss-base": 11.4,
838 "spanloss-current": 12,
839 "engineered-spanloss": 12.2,
840 "link-concatenation": [{
843 "SRLG-length": 100000,
845 response = test_utils.add_oms_attr_request("ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX", data)
846 self.assertEqual(response.status_code, requests.codes.created)
848 # test service-create for Eth service from xpdr to xpdr with service-resiliency
849 def test_12_create_eth_service1_with_service_resiliency_restorable(self):
850 self.cr_serv_input_data["service-name"] = "service1"
851 response = test_utils.transportpce_api_rpc_request('org-openroadm-service', 'service-create',
852 self.cr_serv_input_data)
853 self.assertEqual(response['status_code'], requests.codes.ok)
854 self.assertIn('PCE calculation in progress',
855 response['output']['configuration-response-common']['response-message'])
856 time.sleep(self.WAITING)
858 def test_13_get_eth_service1(self):
859 response = test_utils.get_ordm_serv_list_attr_request("services", "service1")
860 self.assertEqual(response['status_code'], requests.codes.ok)
861 self.assertEqual(response['services'][0]['administrative-state'], 'inService')
862 self.assertEqual(response['services'][0]['service-name'], 'service1')
863 self.assertEqual(response['services'][0]['connection-type'], 'service')
864 self.assertEqual(response['services'][0]['lifecycle-state'], 'planned')
865 self.assertEqual(response['services'][0]['service-resiliency']['resiliency'],
866 'org-openroadm-common-service-types:restorable')
869 # Degrade ROADM-A1-ROADM-C1 link
870 def test_14_set_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput(self):
871 self.assertTrue(test_utils.sims_update_pm_interact(('roadma', self.NODE_VERSION_221),
872 self.pm_handling_degrade_body))
875 def test_15_get_eth_service1(self):
876 response = test_utils.get_ordm_serv_list_attr_request("services", "service1")
877 self.assertEqual(response['status_code'], requests.codes.ok)
878 self.assertEqual(response['services'][0]['operational-state'], 'outOfService')
879 self.assertEqual(response['services'][0]['administrative-state'], 'inService')
880 self.assertEqual(response['services'][0]['service-name'], 'service1')
881 self.assertEqual(response['services'][0]['connection-type'], 'service')
882 self.assertEqual(response['services'][0]['lifecycle-state'], 'planned')
883 self.assertEqual(response['services'][0]['service-resiliency']['resiliency'],
884 'org-openroadm-common-service-types:restorable')
887 def test_16_service_reroute_service1(self):
888 response = test_utils.transportpce_api_rpc_request(
889 'org-openroadm-service', 'service-reroute',
891 "sdnc-request-header": {
892 "request-id": "request-1",
893 "rpc-action": "service-reroute",
894 "request-system-id": "appname"
896 "service-name": "service1",
897 "service-resiliency": {
898 "resiliency": "org-openroadm-common-service-types:restorable"
901 self.assertEqual(response['status_code'], requests.codes.ok)
902 self.assertIn('500', response['output']['configuration-response-common']['response-code'])
903 self.assertIn('No path available by PCE',
904 response['output']['configuration-response-common']['response-message'])
907 # Restore ROADM-A1-ROADM-C1 link
908 def test_17_clear_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput(self):
909 self.assertTrue(test_utils.sims_update_pm_interact(('roadma', self.NODE_VERSION_221),
910 self.pm_handling_recover_body))
913 def test_18_get_eth_service1(self):
914 self.test_13_get_eth_service1()
916 def test_19_connect_xpdra2_3_N1_to_roadma_PP2(self):
917 response = test_utils.transportpce_api_rpc_request(
918 'transportpce-networkutils', 'init-xpdr-rdm-links',
919 {'links-input': {'xpdr-node': 'XPDR-A2', 'xpdr-num': '3', 'network-num': '1',
920 'rdm-node': 'ROADM-A1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP2-TXRX'}})
921 self.assertEqual(response['status_code'], requests.codes.ok)
922 self.assertIn('Xponder Roadm Link created successfully', response["output"]["result"])
925 def test_20_connect_roadma_PP2_to_xpdra2_3_N1(self):
926 response = test_utils.transportpce_api_rpc_request(
927 'transportpce-networkutils', 'init-rdm-xpdr-links',
928 {'links-input': {'xpdr-node': 'XPDR-A2', 'xpdr-num': '3', 'network-num': '1',
929 'rdm-node': 'ROADM-A1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP2-TXRX'}})
930 self.assertEqual(response['status_code'], requests.codes.ok)
931 self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
934 def test_21_connect_xpdrc2_3_N1_to_roadmc_PP2(self):
935 response = test_utils.transportpce_api_rpc_request(
936 'transportpce-networkutils', 'init-xpdr-rdm-links',
937 {'links-input': {'xpdr-node': 'XPDR-C2', 'xpdr-num': '3', 'network-num': '1',
938 'rdm-node': 'ROADM-C1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP2-TXRX'}})
939 self.assertEqual(response['status_code'], requests.codes.ok)
940 self.assertIn('Xponder Roadm Link created successfully', response["output"]["result"])
943 def test_22_connect_roadmc_PP2_to_xpdrc2_3_N1(self):
944 response = test_utils.transportpce_api_rpc_request(
945 'transportpce-networkutils', 'init-rdm-xpdr-links',
946 {'links-input': {'xpdr-node': 'XPDR-C2', 'xpdr-num': '3', 'network-num': '1',
947 'rdm-node': 'ROADM-C1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP2-TXRX'}})
948 self.assertEqual(response['status_code'], requests.codes.ok)
949 self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
952 def test_23_add_omsAttributes_roadma_roadmb(self):
953 # Config ROADMA-ROADMB oms-attributes
955 "auto-spanloss": "true",
956 "spanloss-base": 11.4,
957 "spanloss-current": 12,
958 "engineered-spanloss": 12.2,
959 "link-concatenation": [{
962 "SRLG-length": 100000,
964 response = test_utils.add_oms_attr_request("ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX", data)
965 self.assertEqual(response.status_code, requests.codes.created)
967 def test_24_add_omsAttributes_roadmb_roadma(self):
968 # Config ROADMB-ROADMA oms-attributes
970 "auto-spanloss": "true",
971 "spanloss-base": 11.4,
972 "spanloss-current": 12,
973 "engineered-spanloss": 12.2,
974 "link-concatenation": [{
977 "SRLG-length": 100000,
979 response = test_utils.add_oms_attr_request("ROADM-B1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG1-DEG1-TTP-TXRX", data)
980 self.assertEqual(response.status_code, requests.codes.created)
982 def test_25_add_omsAttributes_roadmb_roadmc(self):
983 # Config ROADMB-ROADMC oms-attributes
985 "auto-spanloss": "true",
986 "spanloss-base": 11.4,
987 "spanloss-current": 12,
988 "engineered-spanloss": 12.2,
989 "link-concatenation": [{
992 "SRLG-length": 100000,
994 response = test_utils.add_oms_attr_request("ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX", data)
995 self.assertEqual(response.status_code, requests.codes.created)
997 def test_26_add_omsAttributes_roadmc_roadmb(self):
998 # Config ROADMC-ROADMB oms-attributes
1000 "auto-spanloss": "true",
1001 "spanloss-base": 11.4,
1002 "spanloss-current": 12,
1003 "engineered-spanloss": 12.2,
1004 "link-concatenation": [{
1006 "fiber-type": "smf",
1007 "SRLG-length": 100000,
1009 response = test_utils.add_oms_attr_request("ROADM-C1-DEG2-DEG2-TTP-TXRXtoROADM-B1-DEG2-DEG2-TTP-TXRX", data)
1010 self.assertEqual(response.status_code, requests.codes.created)
1012 def test_27_create_OTS_ROADMA_DEG1(self):
1013 response = test_utils.transportpce_api_rpc_request(
1014 'transportpce-device-renderer', 'create-ots-oms',
1016 'node-id': 'ROADM-A1',
1017 'logical-connection-point': 'DEG1-TTP-TXRX'
1019 self.assertEqual(response['status_code'], requests.codes.ok)
1020 self.assertIn('Interfaces OTS-DEG1-TTP-TXRX - OMS-DEG1-TTP-TXRX successfully created on node ROADM-A1',
1021 response["output"]["result"])
1023 def test_28_create_OTS_ROADMC_DEG2(self):
1024 response = test_utils.transportpce_api_rpc_request(
1025 'transportpce-device-renderer', 'create-ots-oms',
1027 'node-id': 'ROADM-C1',
1028 'logical-connection-point': 'DEG2-TTP-TXRX'
1030 self.assertEqual(response['status_code'], requests.codes.ok)
1031 self.assertIn('Interfaces OTS-DEG2-TTP-TXRX - OMS-DEG2-TTP-TXRX successfully created on node ROADM-C1',
1032 response["output"]["result"])
1034 def test_29_create_OTS_ROADMB_DEG1(self):
1035 response = test_utils.transportpce_api_rpc_request(
1036 'transportpce-device-renderer', 'create-ots-oms',
1038 'node-id': 'ROADM-B1',
1039 'logical-connection-point': 'DEG1-TTP-TXRX'
1041 self.assertEqual(response['status_code'], requests.codes.ok)
1042 self.assertIn('Interfaces OTS-DEG1-TTP-TXRX - OMS-DEG1-TTP-TXRX successfully created on node ROADM-B1',
1043 response["output"]["result"])
1045 def test_30_create_OTS_ROADMB_DEG2(self):
1046 response = test_utils.transportpce_api_rpc_request(
1047 'transportpce-device-renderer', 'create-ots-oms',
1049 'node-id': 'ROADM-B1',
1050 'logical-connection-point': 'DEG2-TTP-TXRX'
1052 self.assertEqual(response['status_code'], requests.codes.ok)
1053 self.assertIn('Interfaces OTS-DEG2-TTP-TXRX - OMS-DEG2-TTP-TXRX successfully created on node ROADM-B1',
1054 response["output"]["result"])
1056 def test_31_calculate_span_loss_base_all(self):
1057 response = test_utils.transportpce_api_rpc_request(
1058 'transportpce-olm', 'calculate-spanloss-base',
1062 self.assertEqual(response['status_code'], requests.codes.ok)
1063 self.assertIn('Success', response["output"]["result"])
1066 "link-id": "ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX"
1067 }, response["output"]["spans"])
1070 "link-id": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX"
1071 }, response["output"]["spans"])
1074 "link-id": "ROADM-B1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG1-DEG1-TTP-TXRX"
1075 }, response["output"]["spans"])
1078 "link-id": "ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX"
1079 }, response["output"]["spans"])
1082 "link-id": "ROADM-C1-DEG2-DEG2-TTP-TXRXtoROADM-B1-DEG2-DEG2-TTP-TXRX"
1083 }, response["output"]["spans"])
1086 "link-id": "ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX"
1087 }, response["output"]["spans"])
1090 def test_32_get_service_path_service_1(self):
1091 response = test_utils.get_serv_path_list_attr("service-paths", "service1")
1092 self.assertEqual(response['status_code'], requests.codes.ok)
1093 self.assertCountEqual(self.service_path_service_1_AtoZ,
1094 response['service-paths'][0]['path-description']['aToZ-direction']['aToZ'])
1096 # test service-create for Eth service from xpdr to xpdr without service-resiliency
1097 def test_33_create_eth_service2_without_service_resiliency(self):
1098 self.cr_serv_input_data["service-name"] = "service2"
1099 del self.cr_serv_input_data["service-resiliency"]
1100 response = test_utils.transportpce_api_rpc_request('org-openroadm-service', 'service-create',
1101 self.cr_serv_input_data)
1102 self.assertEqual(response['status_code'], requests.codes.ok)
1103 self.assertIn('PCE calculation in progress',
1104 response['output']['configuration-response-common']['response-message'])
1105 time.sleep(self.WAITING)
1107 def test_34_get_eth_service2(self):
1108 response = test_utils.get_ordm_serv_list_attr_request("services", "service2")
1109 self.assertEqual(response['status_code'], requests.codes.ok)
1110 self.assertEqual(response['services'][0]['operational-state'], 'inService')
1111 self.assertEqual(response['services'][0]['administrative-state'], 'inService')
1112 self.assertEqual(response['services'][0]['service-name'], 'service2')
1113 self.assertEqual(response['services'][0]['connection-type'], 'service')
1114 self.assertEqual(response['services'][0]['lifecycle-state'], 'planned')
1115 self.assertNotIn('service-resiliency', response['services'][0])
1118 def test_35_get_service_path_service_2(self):
1119 response = test_utils.get_serv_path_list_attr("service-paths", "service2")
1120 self.assertEqual(response['status_code'], requests.codes.ok)
1121 self.assertCountEqual(
1122 self.service_path_service_2_AtoZ,
1123 response['service-paths'][0]['path-description']['aToZ-direction']['aToZ'])
1125 # Degrade ROADM-A1-ROADM-C1 link
1126 def test_36_set_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput(self):
1127 self.test_14_set_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput()
1128 time.sleep(self.WAITING * 2)
1130 def test_37_get_eth_service1(self):
1131 self.test_13_get_eth_service1()
1133 def test_38_get_service_path_service_1(self):
1134 response = test_utils.get_serv_path_list_attr("service-paths", "service1")
1135 self.assertEqual(response['status_code'], requests.codes.ok)
1136 self.assertCountEqual(
1137 self.service_path_service_1_rerouted_AtoZ,
1138 response['service-paths'][0]['path-description']['aToZ-direction']['aToZ'])
1140 def test_39_get_eth_service2(self):
1141 response = test_utils.get_ordm_serv_list_attr_request("services", "service2")
1142 self.assertEqual(response['services'][0]['operational-state'], 'outOfService')
1143 self.assertEqual(response['services'][0]['administrative-state'], 'inService')
1144 self.assertEqual(response['services'][0]['service-name'], 'service2')
1145 self.assertEqual(response['services'][0]['connection-type'], 'service')
1146 self.assertEqual(response['services'][0]['lifecycle-state'], 'planned')
1147 self.assertNotIn('service-resiliency', response['services'])
1150 def test_40_get_service_path_service_2(self):
1151 response = test_utils.get_serv_path_list_attr("service-paths", "service2")
1152 self.assertEqual(response['status_code'], requests.codes.ok)
1153 index1 = self.service_path_service_2_AtoZ.index(
1157 'state': 'inService',
1158 'tp-id': 'DEG2-TTP-TXRX',
1159 'tp-node-id': 'ROADM-A1-DEG2'
1163 index2 = self.service_path_service_2_AtoZ.index(
1167 'state': 'inService',
1168 'link-id': 'ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX'
1172 service_path_expected = self.service_path_service_2_AtoZ[:index1] + [{
1175 'state': 'outOfService',
1176 'tp-id': 'DEG2-TTP-TXRX',
1177 'tp-node-id': 'ROADM-A1-DEG2'
1179 }] + self.service_path_service_2_AtoZ[index1 + 1:index2] + [{
1182 'state': 'outOfService',
1183 'link-id': 'ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX'
1185 }] + self.service_path_service_2_AtoZ[index2 + 1:]
1186 self.assertCountEqual(service_path_expected,
1187 response['service-paths'][0]['path-description']['aToZ-direction']['aToZ'])
1189 # Restore ROADM-A1-ROADM-C1 link
1190 def test_41_clear_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput(self):
1191 self.test_17_clear_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput()
1193 def test_42_get_eth_service1(self):
1194 self.test_13_get_eth_service1()
1196 def test_43_get_service_path_service_1(self):
1197 self.test_38_get_service_path_service_1()
1199 def test_44_get_eth_service2(self):
1200 self.test_34_get_eth_service2()
1202 def test_45_get_service_path_service_2(self):
1203 self.test_35_get_service_path_service_2()
1205 def test_46_delete_eth_service2(self):
1206 self.del_serv_input_data["service-delete-req-info"]["service-name"] = "service2"
1207 response = test_utils.transportpce_api_rpc_request(
1208 'org-openroadm-service', 'service-delete',
1209 self.del_serv_input_data)
1210 self.assertEqual(response['status_code'], requests.codes.ok)
1211 self.assertIn('Renderer service delete in progress',
1212 response['output']['configuration-response-common']['response-message'])
1213 time.sleep(self.WAITING)
1215 def test_47_delete_eth_service1(self):
1216 self.del_serv_input_data["service-delete-req-info"]["service-name"] = "service1"
1217 response = test_utils.transportpce_api_rpc_request(
1218 'org-openroadm-service', 'service-delete',
1219 self.del_serv_input_data)
1220 self.assertEqual(response['status_code'], requests.codes.ok)
1221 self.assertIn('Renderer service delete in progress',
1222 response['output']['configuration-response-common']['response-message'])
1223 time.sleep(self.WAITING)
1225 def test_48_disconnect_xponders_from_roadm(self):
1226 response = test_utils.get_ietf_network_request('openroadm-topology', 'config')
1227 self.assertEqual(response['status_code'], requests.codes.ok)
1228 links = response['network'][0]['ietf-network-topology:link']
1230 if link["org-openroadm-common-network:link-type"] in ('XPONDER-OUTPUT', 'XPONDER-INPUT'):
1231 response = test_utils.del_ietf_network_link_request(
1232 'openroadm-topology', link['link-id'], 'config')
1233 self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
1235 def test_49_disconnect_xpdra2(self):
1236 response = test_utils.unmount_device("XPDR-A2")
1237 self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
1239 def test_50_disconnect_xpdrc2(self):
1240 response = test_utils.unmount_device("XPDR-C2")
1241 self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
1243 def test_51_disconnect_roadmA(self):
1244 response = test_utils.unmount_device("ROADM-A1")
1245 self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
1247 def test_52_disconnect_roadmB(self):
1248 response = test_utils.unmount_device("ROADM-B1")
1249 self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
1251 def test_53_disconnect_roadmC(self):
1252 response = test_utils.unmount_device("ROADM-C1")
1253 self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
1256 if __name__ == "__main__":
1257 unittest.main(verbosity=2)