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
21 # pylint: disable=wrong-import-order
24 sys.path.append('transportpce_tests/common/')
25 # pylint: disable=wrong-import-position
26 # pylint: disable=import-error
27 import test_utils_rfc8040 # nopep8
30 class TransportPCEtesting(unittest.TestCase):
32 WAITING = 20 # nominal value is 300
33 NODE_VERSION_221 = '2.2.1'
34 NODE_VERSION_71 = '7.1'
36 cr_serv_input_data = {
37 "sdnc-request-header": {
38 "request-id": "request-1",
39 "rpc-action": "service-create",
40 "request-system-id": "appname"
42 "service-name": "service1",
43 "common-id": "commonId",
44 "connection-type": "service",
45 "service-resiliency": {
46 "resiliency": "org-openroadm-common-service-types:restorable"
49 "service-rate": "400",
51 "service-format": "Ethernet",
66 "service-rate": "400",
68 "service-format": "Ethernet",
82 "due-date": "2018-06-15T00:00:01Z",
83 "operator-contact": "pw1234"
86 del_serv_input_data = {
87 "sdnc-request-header": {
88 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
89 "rpc-action": "service-delete",
90 "request-system-id": "appname",
91 "notification-url": "http://localhost:8585/NotificationServer/notify"},
92 "service-delete-req-info": {
93 "service-name": "TBD",
94 "tail-retention": "no"}
97 service_path_service_1_AtoZ = [
101 "state": "inService",
102 "tp-id": "SRG1-CP-TXRX",
103 "tp-node-id": "ROADM-C1-SRG1"
109 "state": "inService",
110 "node-id": "ROADM-C1-SRG1"
116 "state": "inService",
117 "tp-id": "DEG1-CTP-TXRX",
118 "tp-node-id": "ROADM-C1-DEG1"
124 "state": "inService",
125 "link-id": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX"
131 "state": "inService",
132 "tp-id": "SRG1-PP1-TXRX",
133 "tp-node-id": "ROADM-C1-SRG1"
139 "state": "inService",
140 "link-id": "ROADM-C1-SRG1-SRG1-PP1-TXRXtoXPDR-C2-XPDR1-XPDR1-NETWORK1"
146 "state": "inService",
147 "node-id": "XPDR-A2-XPDR1"
153 "state": "inService",
154 "tp-id": "XPDR1-NETWORK1",
155 "tp-node-id": "XPDR-A2-XPDR1"
161 "state": "inService",
162 "tp-id": "XPDR1-CLIENT1",
163 "tp-node-id": "XPDR-A2-XPDR1"
169 "state": "inService",
170 "node-id": "ROADM-A1-SRG1"
176 "state": "inService",
177 "tp-id": "SRG1-CP-TXRX",
178 "tp-node-id": "ROADM-A1-SRG1"
184 "state": "inService",
185 "link-id": "XPDR-A2-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX"
191 "state": "inService",
192 "tp-id": "SRG1-PP1-TXRX",
193 "tp-node-id": "ROADM-A1-SRG1"
199 "state": "inService",
200 "node-id": "ROADM-A1-DEG2"
206 "state": "inService",
207 "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX"
213 "state": "inService",
214 "tp-id": "DEG2-CTP-TXRX",
215 "tp-node-id": "ROADM-A1-DEG2"
221 "state": "inService",
222 "tp-id": "XPDR1-NETWORK1",
223 "tp-node-id": "XPDR-C2-XPDR1"
229 "state": "inService",
230 "tp-id": "DEG1-TTP-TXRX",
231 "tp-node-id": "ROADM-C1-DEG1"
237 "state": "inService",
238 "node-id": "ROADM-C1-DEG1"
244 "state": "inService",
245 "tp-id": "DEG2-TTP-TXRX",
246 "tp-node-id": "ROADM-A1-DEG2"
252 "state": "inService",
253 "node-id": "XPDR-C2-XPDR1"
259 "state": "inService",
260 "link-id": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX"
266 "state": "inService",
267 "tp-id": "XPDR1-CLIENT1",
268 "tp-node-id": "XPDR-C2-XPDR1"
273 service_path_service_1_rerouted_AtoZ = [
277 "state": "inService",
278 "link-id": "ROADM-C1-SRG1-SRG1-PP1-TXRXtoXPDR-C2-XPDR1-XPDR1-NETWORK1"
284 "state": "inService",
285 "tp-id": "XPDR1-NETWORK1",
286 "tp-node-id": "XPDR-C2-XPDR1"
292 "state": "inService",
293 "node-id": "ROADM-C1-SRG1"
299 "state": "inService",
300 "tp-id": "SRG1-PP1-TXRX",
301 "tp-node-id": "ROADM-C1-SRG1"
307 "state": "inService",
308 "node-id": "XPDR-C2-XPDR1"
314 "state": "inService",
315 "tp-id": "XPDR1-CLIENT1",
316 "tp-node-id": "XPDR-C2-XPDR1"
322 "state": "inService",
323 "tp-id": "DEG1-TTP-TXRX",
324 "tp-node-id": "ROADM-B1-DEG1"
330 "state": "inService",
331 "node-id": "ROADM-B1-DEG1"
337 "state": "inService",
338 "tp-id": "DEG1-TTP-TXRX",
339 "tp-node-id": "ROADM-A1-DEG1"
345 "state": "inService",
346 "link-id": "ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX"
352 "state": "inService",
353 "tp-id": "DEG2-CTP-TXRX",
354 "tp-node-id": "ROADM-B1-DEG2"
360 "state": "inService",
361 "node-id": "ROADM-B1-DEG2"
367 "state": "inService",
368 "tp-id": "DEG1-CTP-TXRX",
369 "tp-node-id": "ROADM-B1-DEG1"
375 "state": "inService",
376 "link-id": "ROADM-B1-DEG1-DEG1-CTP-TXRXtoROADM-B1-DEG2-DEG2-CTP-TXRX"
382 "state": "inService",
383 "tp-id": "DEG2-TTP-TXRX",
384 "tp-node-id": "ROADM-B1-DEG2"
390 "state": "inService",
391 "link-id": "ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX"
397 "state": "inService",
398 "node-id": "XPDR-A2-XPDR1"
404 "state": "inService",
405 "tp-id": "XPDR1-NETWORK1",
406 "tp-node-id": "XPDR-A2-XPDR1"
412 "state": "inService",
413 "tp-id": "XPDR1-CLIENT1",
414 "tp-node-id": "XPDR-A2-XPDR1"
420 "state": "inService",
421 "node-id": "ROADM-A1-SRG1"
427 "state": "inService",
428 "tp-id": "SRG1-CP-TXRX",
429 "tp-node-id": "ROADM-A1-SRG1"
435 "state": "inService",
436 "link-id": "XPDR-A2-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX"
442 "state": "inService",
443 "tp-id": "SRG1-PP1-TXRX",
444 "tp-node-id": "ROADM-A1-SRG1"
450 "state": "inService",
451 "node-id": "ROADM-A1-DEG1"
457 "state": "inService",
458 "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX"
464 "state": "inService",
465 "tp-id": "DEG1-CTP-TXRX",
466 "tp-node-id": "ROADM-A1-DEG1"
472 "state": "inService",
473 "tp-id": "DEG2-TTP-TXRX",
474 "tp-node-id": "ROADM-C1-DEG2"
480 "state": "inService",
481 "link-id": "ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX"
487 "state": "inService",
488 "tp-id": "SRG1-CP-TXRX",
489 "tp-node-id": "ROADM-C1-SRG1"
495 "state": "inService",
496 "node-id": "ROADM-C1-DEG2"
502 "state": "inService",
503 "tp-id": "DEG2-CTP-TXRX",
504 "tp-node-id": "ROADM-C1-DEG2"
509 service_path_service_2_AtoZ = [
513 "state": "inService",
514 "tp-id": "SRG1-CP-TXRX",
515 "tp-node-id": "ROADM-C1-SRG1"
521 "state": "inService",
522 "node-id": "ROADM-C1-SRG1"
528 "state": "inService",
529 "tp-id": "DEG1-CTP-TXRX",
530 "tp-node-id": "ROADM-C1-DEG1"
536 "state": "inService",
537 "link-id": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX"
543 "state": "inService",
544 "tp-id": "SRG1-PP2-TXRX",
545 "tp-node-id": "ROADM-C1-SRG1"
551 "state": "inService",
552 "link-id": "ROADM-C1-SRG1-SRG1-PP2-TXRXtoXPDR-C2-XPDR3-XPDR3-NETWORK1"
558 "state": "inService",
559 "node-id": "XPDR-A2-XPDR3"
565 "state": "inService",
566 "tp-id": "XPDR3-NETWORK1",
567 "tp-node-id": "XPDR-A2-XPDR3"
573 "state": "inService",
574 "tp-id": "XPDR3-CLIENT1",
575 "tp-node-id": "XPDR-A2-XPDR3"
581 "state": "inService",
582 "node-id": "ROADM-A1-SRG1"
588 "state": "inService",
589 "tp-id": "SRG1-CP-TXRX",
590 "tp-node-id": "ROADM-A1-SRG1"
596 "state": "inService",
597 "link-id": "XPDR-A2-XPDR3-XPDR3-NETWORK1toROADM-A1-SRG1-SRG1-PP2-TXRX"
603 "state": "inService",
604 "tp-id": "SRG1-PP2-TXRX",
605 "tp-node-id": "ROADM-A1-SRG1"
611 "state": "inService",
612 "node-id": "ROADM-A1-DEG2"
618 "state": "inService",
619 "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX"
625 "state": "inService",
626 "tp-id": "DEG2-CTP-TXRX",
627 "tp-node-id": "ROADM-A1-DEG2"
633 "state": "inService",
634 "tp-id": "XPDR3-NETWORK1",
635 "tp-node-id": "XPDR-C2-XPDR3"
641 "state": "inService",
642 "tp-id": "DEG1-TTP-TXRX",
643 "tp-node-id": "ROADM-C1-DEG1"
649 "state": "inService",
650 "node-id": "ROADM-C1-DEG1"
656 "state": "inService",
657 "tp-id": "DEG2-TTP-TXRX",
658 "tp-node-id": "ROADM-A1-DEG2"
664 "state": "inService",
665 "node-id": "XPDR-C2-XPDR3"
671 "state": "inService",
672 "link-id": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX"
678 "state": "inService",
679 "tp-id": "XPDR3-CLIENT1",
680 "tp-node-id": "XPDR-C2-XPDR3"
687 cls.processes = test_utils_rfc8040.start_tpce()
688 cls.processes = test_utils_rfc8040.start_sims([('xpdra2', cls.NODE_VERSION_71),
689 ('roadma', cls.NODE_VERSION_221),
690 ('roadmb', cls.NODE_VERSION_221),
691 ('roadmc', cls.NODE_VERSION_221),
692 ('xpdrc2', cls.NODE_VERSION_71)])
695 def tearDownClass(cls):
696 # pylint: disable=not-an-iterable
697 for process in cls.processes:
698 test_utils_rfc8040.shutdown_process(process)
699 print("all processes killed")
704 def test_01_connect_xpdra2(self):
705 response = test_utils_rfc8040.mount_device("XPDR-A2", ('xpdra2', self.NODE_VERSION_71))
706 self.assertEqual(response.status_code,
707 requests.codes.created, test_utils_rfc8040.CODE_SHOULD_BE_201)
709 def test_02_connect_xpdrc2(self):
710 response = test_utils_rfc8040.mount_device("XPDR-C2", ('xpdrc2', self.NODE_VERSION_71))
711 self.assertEqual(response.status_code,
712 requests.codes.created, test_utils_rfc8040.CODE_SHOULD_BE_201)
714 def test_03_connect_rdma(self):
715 response = test_utils_rfc8040.mount_device("ROADM-A1", ('roadma', self.NODE_VERSION_221))
716 self.assertEqual(response.status_code,
717 requests.codes.created, test_utils_rfc8040.CODE_SHOULD_BE_201)
719 def test_04_connect_rdmb(self):
720 response = test_utils_rfc8040.mount_device("ROADM-B1", ('roadmb', self.NODE_VERSION_221))
721 self.assertEqual(response.status_code,
722 requests.codes.created, test_utils_rfc8040.CODE_SHOULD_BE_201)
724 def test_05_connect_rdmc(self):
725 response = test_utils_rfc8040.mount_device("ROADM-C1", ('roadmc', self.NODE_VERSION_221))
726 self.assertEqual(response.status_code,
727 requests.codes.created, test_utils_rfc8040.CODE_SHOULD_BE_201)
729 def test_06_connect_xprda2_1_N1_to_roadma_PP1(self):
730 response = test_utils_rfc8040.transportpce_api_rpc_request(
731 'transportpce-networkutils', 'init-xpdr-rdm-links',
732 {'links-input': {'xpdr-node': 'XPDR-A2', 'xpdr-num': '1', 'network-num': '1',
733 'rdm-node': 'ROADM-A1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP1-TXRX'}})
734 self.assertEqual(response['status_code'], requests.codes.ok)
735 self.assertIn('Xponder Roadm Link created successfully', response["output"]["result"])
737 def test_07_connect_roadma_PP1_to_xpdra2_1_N1(self):
738 response = test_utils_rfc8040.transportpce_api_rpc_request(
739 'transportpce-networkutils', 'init-rdm-xpdr-links',
740 {'links-input': {'xpdr-node': 'XPDR-A2', 'xpdr-num': '1', 'network-num': '1',
741 'rdm-node': 'ROADM-A1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP1-TXRX'}})
742 self.assertEqual(response['status_code'], requests.codes.ok)
743 self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
745 def test_08_connect_xprdc2_1_N1_to_roadmc_PP1(self):
746 response = test_utils_rfc8040.transportpce_api_rpc_request(
747 'transportpce-networkutils', 'init-xpdr-rdm-links',
748 {'links-input': {'xpdr-node': 'XPDR-C2', 'xpdr-num': '1', 'network-num': '1',
749 'rdm-node': 'ROADM-C1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP1-TXRX'}})
750 self.assertEqual(response['status_code'], requests.codes.ok)
751 self.assertIn('Xponder Roadm Link created successfully', response["output"]["result"])
753 def test_09_connect_roadmc_PP1_to_xpdrc2_1_N1(self):
754 response = test_utils_rfc8040.transportpce_api_rpc_request(
755 'transportpce-networkutils', 'init-rdm-xpdr-links',
756 {'links-input': {'xpdr-node': 'XPDR-C2', 'xpdr-num': '1', 'network-num': '1',
757 'rdm-node': 'ROADM-C1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP1-TXRX'}})
758 self.assertEqual(response['status_code'], requests.codes.ok)
759 self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
761 def test_10_connect_xprda2_3_N1_to_roadma_PP2(self):
762 response = test_utils_rfc8040.transportpce_api_rpc_request(
763 'transportpce-networkutils', 'init-xpdr-rdm-links',
764 {'links-input': {'xpdr-node': 'XPDR-A2', 'xpdr-num': '3', 'network-num': '1',
765 'rdm-node': 'ROADM-A1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP2-TXRX'}})
766 self.assertEqual(response['status_code'], requests.codes.ok)
767 self.assertIn('Xponder Roadm Link created successfully', response["output"]["result"])
769 def test_11_connect_roadma_PP2_to_xpdra2_3_N1(self):
770 response = test_utils_rfc8040.transportpce_api_rpc_request(
771 'transportpce-networkutils', 'init-rdm-xpdr-links',
772 {'links-input': {'xpdr-node': 'XPDR-A2', 'xpdr-num': '3', 'network-num': '1',
773 'rdm-node': 'ROADM-A1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP2-TXRX'}})
774 self.assertEqual(response['status_code'], requests.codes.ok)
775 self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
777 def test_12_connect_xprdc2_3_N1_to_roadmc_PP2(self):
778 response = test_utils_rfc8040.transportpce_api_rpc_request(
779 'transportpce-networkutils', 'init-xpdr-rdm-links',
780 {'links-input': {'xpdr-node': 'XPDR-C2', 'xpdr-num': '3', 'network-num': '1',
781 'rdm-node': 'ROADM-C1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP2-TXRX'}})
782 self.assertEqual(response['status_code'], requests.codes.ok)
783 self.assertIn('Xponder Roadm Link created successfully', response["output"]["result"])
785 def test_13_connect_roadmc_PP2_to_xpdrc2_3_N1(self):
786 response = test_utils_rfc8040.transportpce_api_rpc_request(
787 'transportpce-networkutils', 'init-rdm-xpdr-links',
788 {'links-input': {'xpdr-node': 'XPDR-C2', 'xpdr-num': '3', 'network-num': '1',
789 'rdm-node': 'ROADM-C1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP2-TXRX'}})
790 self.assertEqual(response['status_code'], requests.codes.ok)
791 self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
793 def test_14_add_omsAttributes_roadma_roadmc(self):
794 # Config ROADMA-ROADMC oms-attributes
796 "auto-spanloss": "true",
797 "spanloss-base": 11.4,
798 "spanloss-current": 12,
799 "engineered-spanloss": 12.2,
800 "link-concatenation": [{
803 "SRLG-length": 100000,
805 response = test_utils_rfc8040.add_oms_attr_request(
806 "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX", data)
807 self.assertEqual(response.status_code, requests.codes.created)
809 def test_15_add_omsAttributes_roadmc_roadma(self):
810 # Config ROADMC-ROADMA oms-attributes
812 "auto-spanloss": "true",
813 "spanloss-base": 11.4,
814 "spanloss-current": 12,
815 "engineered-spanloss": 12.2,
816 "link-concatenation": [{
819 "SRLG-length": 100000,
821 response = test_utils_rfc8040.add_oms_attr_request(
822 "ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX", data)
823 self.assertEqual(response.status_code, requests.codes.created)
825 def test_16_add_omsAttributes_roadma_roadmb(self):
826 # Config ROADMA-ROADMB oms-attributes
828 "auto-spanloss": "true",
829 "spanloss-base": 11.4,
830 "spanloss-current": 12,
831 "engineered-spanloss": 12.2,
832 "link-concatenation": [{
835 "SRLG-length": 100000,
837 response = test_utils_rfc8040.add_oms_attr_request(
838 "ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX", data)
839 self.assertEqual(response.status_code, requests.codes.created)
841 def test_17_add_omsAttributes_roadmb_roadma(self):
842 # Config ROADMB-ROADMA oms-attributes
844 "auto-spanloss": "true",
845 "spanloss-base": 11.4,
846 "spanloss-current": 12,
847 "engineered-spanloss": 12.2,
848 "link-concatenation": [{
851 "SRLG-length": 100000,
853 response = test_utils_rfc8040.add_oms_attr_request(
854 "ROADM-B1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG1-DEG1-TTP-TXRX", data)
855 self.assertEqual(response.status_code, requests.codes.created)
857 def test_18_add_omsAttributes_roadmb_roadmc(self):
858 # Config ROADMB-ROADMC oms-attributes
860 "auto-spanloss": "true",
861 "spanloss-base": 11.4,
862 "spanloss-current": 12,
863 "engineered-spanloss": 12.2,
864 "link-concatenation": [{
867 "SRLG-length": 100000,
869 response = test_utils_rfc8040.add_oms_attr_request(
870 "ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX", data)
871 self.assertEqual(response.status_code, requests.codes.created)
873 def test_19_add_omsAttributes_roadmc_roadmb(self):
874 # Config ROADMC-ROADMB oms-attributes
876 "auto-spanloss": "true",
877 "spanloss-base": 11.4,
878 "spanloss-current": 12,
879 "engineered-spanloss": 12.2,
880 "link-concatenation": [{
883 "SRLG-length": 100000,
885 response = test_utils_rfc8040.add_oms_attr_request(
886 "ROADM-C1-DEG2-DEG2-TTP-TXRXtoROADM-B1-DEG2-DEG2-TTP-TXRX", data)
887 self.assertEqual(response.status_code, requests.codes.created)
889 def test_20_create_OTS_ROADMA_DEG1(self):
890 response = test_utils_rfc8040.transportpce_api_rpc_request(
891 'transportpce-device-renderer', 'create-ots-oms',
893 'node-id': 'ROADM-A1',
894 'logical-connection-point': 'DEG1-TTP-TXRX'
896 self.assertEqual(response['status_code'], requests.codes.ok)
897 self.assertIn('Interfaces OTS-DEG1-TTP-TXRX - OMS-DEG1-TTP-TXRX successfully created on node ROADM-A1',
898 response["output"]["result"])
900 def test_21_create_OTS_ROADMC_DEG2(self):
901 response = test_utils_rfc8040.transportpce_api_rpc_request(
902 'transportpce-device-renderer', 'create-ots-oms',
904 'node-id': 'ROADM-C1',
905 'logical-connection-point': 'DEG2-TTP-TXRX'
907 self.assertEqual(response['status_code'], requests.codes.ok)
908 self.assertIn('Interfaces OTS-DEG2-TTP-TXRX - OMS-DEG2-TTP-TXRX successfully created on node ROADM-C1',
909 response["output"]["result"])
911 def test_22_create_OTS_ROADMB_DEG1(self):
912 response = test_utils_rfc8040.transportpce_api_rpc_request(
913 'transportpce-device-renderer', 'create-ots-oms',
915 'node-id': 'ROADM-B1',
916 'logical-connection-point': 'DEG1-TTP-TXRX'
918 self.assertEqual(response['status_code'], requests.codes.ok)
919 self.assertIn('Interfaces OTS-DEG1-TTP-TXRX - OMS-DEG1-TTP-TXRX successfully created on node ROADM-B1',
920 response["output"]["result"])
922 def test_23_create_OTS_ROADMB_DEG2(self):
923 response = test_utils_rfc8040.transportpce_api_rpc_request(
924 'transportpce-device-renderer', 'create-ots-oms',
926 'node-id': 'ROADM-B1',
927 'logical-connection-point': 'DEG2-TTP-TXRX'
929 self.assertEqual(response['status_code'], requests.codes.ok)
930 self.assertIn('Interfaces OTS-DEG2-TTP-TXRX - OMS-DEG2-TTP-TXRX successfully created on node ROADM-B1',
931 response["output"]["result"])
933 def test_24_calculate_span_loss_base_all(self):
934 response = test_utils_rfc8040.transportpce_api_rpc_request(
935 'transportpce-olm', 'calculate-spanloss-base',
939 self.assertEqual(response['status_code'], requests.codes.ok)
940 self.assertIn('Success', response["output"]["result"])
943 "link-id": "ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX"
944 }, response["output"]["spans"])
947 "link-id": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX"
948 }, response["output"]["spans"])
951 "link-id": "ROADM-B1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG1-DEG1-TTP-TXRX"
952 }, response["output"]["spans"])
955 "link-id": "ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX"
956 }, response["output"]["spans"])
959 "link-id": "ROADM-C1-DEG2-DEG2-TTP-TXRXtoROADM-B1-DEG2-DEG2-TTP-TXRX"
960 }, response["output"]["spans"])
963 "link-id": "ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX"
964 }, response["output"]["spans"])
967 # test service-create for Eth service from xpdr to xpdr with service-resiliency
968 def test_25_create_eth_service1_with_service_resiliency_restorable(self):
969 response = test_utils_rfc8040.transportpce_api_rpc_request(
970 'org-openroadm-service', 'service-create',
971 self.cr_serv_input_data)
972 self.assertEqual(response['status_code'], requests.codes.ok)
973 self.assertIn('PCE calculation in progress',
974 response['output']['configuration-response-common']['response-message'])
975 time.sleep(self.WAITING)
977 def test_26_get_eth_service1(self):
978 response = test_utils_rfc8040.get_ordm_serv_list_attr_request("services", "service1")
979 self.assertEqual(response['status_code'], requests.codes.ok)
980 self.assertEqual(response['services'][0]['administrative-state'], 'inService')
981 self.assertEqual(response['services'][0]['service-name'], 'service1')
982 self.assertEqual(response['services'][0]['connection-type'], 'service')
983 self.assertEqual(response['services'][0]['lifecycle-state'], 'planned')
985 response['services'][0]['service-resiliency']['resiliency'],
986 'org-openroadm-common-service-types:restorable')
989 def test_27_get_service_path_service_1(self):
990 response = test_utils_rfc8040.get_serv_path_list_attr("service-paths", "service1")
991 self.assertEqual(response['status_code'], requests.codes.ok)
992 self.assertCountEqual(
993 self.service_path_service_1_AtoZ,
994 response['service-paths'][0]['path-description']['aToZ-direction']['aToZ'])
996 # test service-create for Eth service from xpdr to xpdr without service-resiliency
997 def test_28_create_eth_service2_without_service_resiliency(self):
998 self.cr_serv_input_data["service-name"] = "service2"
999 del self.cr_serv_input_data["service-resiliency"]
1000 response = test_utils_rfc8040.transportpce_api_rpc_request(
1001 'org-openroadm-service', 'service-create',
1002 self.cr_serv_input_data)
1003 self.assertEqual(response['status_code'], requests.codes.ok)
1004 self.assertIn('PCE calculation in progress',
1005 response['output']['configuration-response-common']['response-message'])
1006 time.sleep(self.WAITING)
1008 def test_29_get_eth_service2(self):
1009 response = test_utils_rfc8040.get_ordm_serv_list_attr_request("services", "service2")
1010 self.assertEqual(response['status_code'], requests.codes.ok)
1011 self.assertEqual(response['services'][0]['administrative-state'], 'inService')
1012 self.assertEqual(response['services'][0]['service-name'], 'service2')
1013 self.assertEqual(response['services'][0]['connection-type'], 'service')
1014 self.assertEqual(response['services'][0]['lifecycle-state'], 'planned')
1015 self.assertNotIn('service-resiliency', response['services'][0])
1018 def test_30_get_service_path_service_2(self):
1019 response = test_utils_rfc8040.get_serv_path_list_attr("service-paths", "service2")
1020 self.assertEqual(response['status_code'], requests.codes.ok)
1021 self.assertCountEqual(
1022 self.service_path_service_2_AtoZ,
1023 response['service-paths'][0]['path-description']['aToZ-direction']['aToZ'])
1025 # Degrade ROADM-A1-ROADM-C1 link
1026 def test_31_set_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput(self):
1027 url = "{}/operations/pm-handling:pm-interact"
1030 "rpc-action": "set",
1031 "pm-to-be-set-or-created": {
1032 "current-pm-entry": [
1034 "pm-resource-instance": "/org-openroadm-device:org-openroadm-device/org-openroadm-device"
1035 ":interface[org-openroadm-device:name='OTS-DEG2-TTP-TXRX']",
1036 "pm-resource-type": "interface",
1037 "pm-resource-type-extension": "",
1040 "type": "opticalPowerInput",
1042 "location": "nearEnd",
1046 "granularity": "15min",
1047 "pmParameterValue": -30,
1048 "pmParameterUnit": "dBm",
1049 "validity": "complete"
1052 "granularity": "24Hour",
1053 "pmParameterValue": -21.3,
1054 "pmParameterUnit": "dBm",
1055 "validity": "complete"
1065 response = requests.request("POST", url.format("http://127.0.0.1:8141/restconf"),
1066 data=json.dumps(body), headers=test_utils_rfc8040.TYPE_APPLICATION_JSON,
1067 auth=(test_utils_rfc8040.ODL_LOGIN, test_utils_rfc8040.ODL_PWD),
1068 timeout=test_utils_rfc8040.REQUEST_TIMEOUT)
1069 self.assertEqual(response.status_code, requests.codes.ok)
1070 self.assertEqual(response.json()['output']['status-message'], "The PMs has been successfully set !")
1071 time.sleep(self.WAITING * 2)
1073 def test_32_get_eth_service1(self):
1074 self.test_26_get_eth_service1()
1076 def test_33_get_service_path_service_1(self):
1077 response = test_utils_rfc8040.get_serv_path_list_attr("service-paths", "service1")
1078 self.assertEqual(response['status_code'], requests.codes.ok)
1079 self.assertCountEqual(
1080 self.service_path_service_1_rerouted_AtoZ,
1081 response['service-paths'][0]['path-description']['aToZ-direction']['aToZ'])
1083 def test_34_get_eth_service2(self):
1084 response = test_utils_rfc8040.get_ordm_serv_list_attr_request("services", "service2")
1085 self.assertEqual(response['services'][0]['operational-state'], 'outOfService')
1086 self.assertEqual(response['services'][0]['administrative-state'], 'inService')
1087 self.assertEqual(response['services'][0]['service-name'], 'service2')
1088 self.assertEqual(response['services'][0]['connection-type'], 'service')
1089 self.assertEqual(response['services'][0]['lifecycle-state'], 'planned')
1090 self.assertNotIn('service-resiliency', response['services'])
1093 def test_35_get_service_path_service_2(self):
1094 response = test_utils_rfc8040.get_serv_path_list_attr("service-paths", "service2")
1095 self.assertEqual(response['status_code'], requests.codes.ok)
1096 index = self.service_path_service_2_AtoZ.index(
1100 'state': 'inService',
1101 'tp-id': 'DEG2-TTP-TXRX',
1102 'tp-node-id': 'ROADM-A1-DEG2'
1106 service_path_expected = self.service_path_service_2_AtoZ[:index] + [{
1109 'state': 'outOfService',
1110 'tp-id': 'DEG2-TTP-TXRX',
1111 'tp-node-id': 'ROADM-A1-DEG2'
1113 }] + self.service_path_service_2_AtoZ[index + 1:]
1114 self.assertCountEqual(service_path_expected,
1115 response['service-paths'][0]['path-description']['aToZ-direction']['aToZ'])
1117 # Restore ROADM-A1-ROADM-C1 link
1118 def test_36_clear_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput(self):
1119 url = "{}/operations/pm-handling:pm-interact"
1122 "rpc-action": "clear",
1123 "pm-to-get-clear-or-delete": {
1124 "current-pm-entry": [
1126 "pm-resource-instance": "/org-openroadm-device:org-openroadm-device/org-openroadm-device"
1127 ":interface[org-openroadm-device:name='OTS-DEG2-TTP-TXRX']",
1128 "pm-resource-type": "interface",
1129 "pm-resource-type-extension": "",
1132 "type": "opticalPowerInput",
1134 "location": "nearEnd",
1143 response = requests.request("POST", url.format("http://127.0.0.1:8141/restconf"),
1144 data=json.dumps(body), headers=test_utils_rfc8040.TYPE_APPLICATION_JSON,
1145 auth=(test_utils_rfc8040.ODL_LOGIN, test_utils_rfc8040.ODL_PWD),
1146 timeout=test_utils_rfc8040.REQUEST_TIMEOUT)
1147 self.assertEqual(response.status_code, requests.codes.ok)
1148 self.assertEqual(response.json()['output']['status-message'], "The PMs has been successfully released !")
1151 def test_37_get_eth_service1(self):
1152 self.test_26_get_eth_service1()
1154 def test_38_get_service_path_service_1(self):
1155 self.test_33_get_service_path_service_1()
1157 def test_39_get_eth_service2(self):
1158 self.test_29_get_eth_service2()
1160 def test_40_get_service_path_service_2(self):
1161 self.test_30_get_service_path_service_2()
1163 def test_41_delete_eth_service2(self):
1164 self.del_serv_input_data["service-delete-req-info"]["service-name"] = "service2"
1165 response = test_utils_rfc8040.transportpce_api_rpc_request(
1166 'org-openroadm-service', 'service-delete',
1167 self.del_serv_input_data)
1168 self.assertEqual(response['status_code'], requests.codes.ok)
1169 self.assertIn('Renderer service delete in progress',
1170 response['output']['configuration-response-common']['response-message'])
1171 time.sleep(self.WAITING)
1173 def test_42_delete_eth_service1(self):
1174 self.del_serv_input_data["service-delete-req-info"]["service-name"] = "service1"
1175 response = test_utils_rfc8040.transportpce_api_rpc_request(
1176 'org-openroadm-service', 'service-delete',
1177 self.del_serv_input_data)
1178 self.assertEqual(response['status_code'], requests.codes.ok)
1179 self.assertIn('Renderer service delete in progress',
1180 response['output']['configuration-response-common']['response-message'])
1181 time.sleep(self.WAITING)
1183 def test_43_disconnect_xponders_from_roadm(self):
1184 response = test_utils_rfc8040.get_ietf_network_request('openroadm-topology', 'config')
1185 self.assertEqual(response['status_code'], requests.codes.ok)
1186 links = response['network'][0]['ietf-network-topology:link']
1188 if link["org-openroadm-common-network:link-type"] in ('XPONDER-OUTPUT', 'XPONDER-INPUT'):
1189 response = test_utils_rfc8040.del_ietf_network_link_request(
1190 'openroadm-topology', link['link-id'], 'config')
1191 self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
1193 def test_44_disconnect_xpdra2(self):
1194 response = test_utils_rfc8040.unmount_device("XPDR-A2")
1195 self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
1197 def test_45_disconnect_xpdrc2(self):
1198 response = test_utils_rfc8040.unmount_device("XPDR-C2")
1199 self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
1201 def test_46_disconnect_roadmA(self):
1202 response = test_utils_rfc8040.unmount_device("ROADM-A1")
1203 self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
1205 def test_47_disconnect_roadmB(self):
1206 response = test_utils_rfc8040.unmount_device("ROADM-B1")
1207 self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
1209 def test_48_disconnect_roadmC(self):
1210 response = test_utils_rfc8040.unmount_device("ROADM-C1")
1211 self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
1214 if __name__ == "__main__":
1215 unittest.main(verbosity=2)