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 # 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_sample_data = {
38 "sdnc-request-header": {
39 "request-id": "request-1",
40 "rpc-action": "service-create",
41 "request-system-id": "appname"
43 "service-name": "service1",
44 "common-id": "commonId",
45 "connection-type": "service",
46 "service-resiliency": {
47 "resiliency": "org-openroadm-common-service-types:restorable"
50 "service-rate": "400",
52 "service-format": "Ethernet",
67 "service-rate": "400",
69 "service-format": "Ethernet",
83 "due-date": "2018-06-15T00:00:01Z",
84 "operator-contact": "pw1234"
88 service_path_service_1_AtoZ = [
93 "tp-id": "SRG1-CP-TXRX",
94 "tp-node-id": "ROADM-C1-SRG1"
100 "state": "inService",
101 "node-id": "ROADM-C1-SRG1"
107 "state": "inService",
108 "tp-id": "DEG1-CTP-TXRX",
109 "tp-node-id": "ROADM-C1-DEG1"
115 "state": "inService",
116 "link-id": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX"
122 "state": "inService",
123 "tp-id": "SRG1-PP1-TXRX",
124 "tp-node-id": "ROADM-C1-SRG1"
130 "state": "inService",
131 "link-id": "ROADM-C1-SRG1-SRG1-PP1-TXRXtoXPDR-C2-XPDR1-XPDR1-NETWORK1"
137 "state": "inService",
138 "node-id": "XPDR-A2-XPDR1"
144 "state": "inService",
145 "tp-id": "XPDR1-NETWORK1",
146 "tp-node-id": "XPDR-A2-XPDR1"
152 "state": "inService",
153 "tp-id": "XPDR1-CLIENT1",
154 "tp-node-id": "XPDR-A2-XPDR1"
160 "state": "inService",
161 "node-id": "ROADM-A1-SRG1"
167 "state": "inService",
168 "tp-id": "SRG1-CP-TXRX",
169 "tp-node-id": "ROADM-A1-SRG1"
175 "state": "inService",
176 "link-id": "XPDR-A2-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX"
182 "state": "inService",
183 "tp-id": "SRG1-PP1-TXRX",
184 "tp-node-id": "ROADM-A1-SRG1"
190 "state": "inService",
191 "node-id": "ROADM-A1-DEG2"
197 "state": "inService",
198 "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX"
204 "state": "inService",
205 "tp-id": "DEG2-CTP-TXRX",
206 "tp-node-id": "ROADM-A1-DEG2"
212 "state": "inService",
213 "tp-id": "XPDR1-NETWORK1",
214 "tp-node-id": "XPDR-C2-XPDR1"
220 "state": "inService",
221 "tp-id": "DEG1-TTP-TXRX",
222 "tp-node-id": "ROADM-C1-DEG1"
228 "state": "inService",
229 "node-id": "ROADM-C1-DEG1"
235 "state": "inService",
236 "tp-id": "DEG2-TTP-TXRX",
237 "tp-node-id": "ROADM-A1-DEG2"
243 "state": "inService",
244 "node-id": "XPDR-C2-XPDR1"
250 "state": "inService",
251 "link-id": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX"
257 "state": "inService",
258 "tp-id": "XPDR1-CLIENT1",
259 "tp-node-id": "XPDR-C2-XPDR1"
264 service_path_service_1_rerouted_AtoZ = [
268 "state": "inService",
269 "link-id": "ROADM-C1-SRG1-SRG1-PP1-TXRXtoXPDR-C2-XPDR1-XPDR1-NETWORK1"
275 "state": "inService",
276 "tp-id": "XPDR1-NETWORK1",
277 "tp-node-id": "XPDR-C2-XPDR1"
283 "state": "inService",
284 "node-id": "ROADM-C1-SRG1"
290 "state": "inService",
291 "tp-id": "SRG1-PP1-TXRX",
292 "tp-node-id": "ROADM-C1-SRG1"
298 "state": "inService",
299 "node-id": "XPDR-C2-XPDR1"
305 "state": "inService",
306 "tp-id": "XPDR1-CLIENT1",
307 "tp-node-id": "XPDR-C2-XPDR1"
313 "state": "inService",
314 "tp-id": "DEG1-TTP-TXRX",
315 "tp-node-id": "ROADM-B1-DEG1"
321 "state": "inService",
322 "node-id": "ROADM-B1-DEG1"
328 "state": "inService",
329 "tp-id": "DEG1-TTP-TXRX",
330 "tp-node-id": "ROADM-A1-DEG1"
336 "state": "inService",
337 "link-id": "ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX"
343 "state": "inService",
344 "tp-id": "DEG2-CTP-TXRX",
345 "tp-node-id": "ROADM-B1-DEG2"
351 "state": "inService",
352 "node-id": "ROADM-B1-DEG2"
358 "state": "inService",
359 "tp-id": "DEG1-CTP-TXRX",
360 "tp-node-id": "ROADM-B1-DEG1"
366 "state": "inService",
367 "link-id": "ROADM-B1-DEG1-DEG1-CTP-TXRXtoROADM-B1-DEG2-DEG2-CTP-TXRX"
373 "state": "inService",
374 "tp-id": "DEG2-TTP-TXRX",
375 "tp-node-id": "ROADM-B1-DEG2"
381 "state": "inService",
382 "link-id": "ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX"
388 "state": "inService",
389 "node-id": "XPDR-A2-XPDR1"
395 "state": "inService",
396 "tp-id": "XPDR1-NETWORK1",
397 "tp-node-id": "XPDR-A2-XPDR1"
403 "state": "inService",
404 "tp-id": "XPDR1-CLIENT1",
405 "tp-node-id": "XPDR-A2-XPDR1"
411 "state": "inService",
412 "node-id": "ROADM-A1-SRG1"
418 "state": "inService",
419 "tp-id": "SRG1-CP-TXRX",
420 "tp-node-id": "ROADM-A1-SRG1"
426 "state": "inService",
427 "link-id": "XPDR-A2-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX"
433 "state": "inService",
434 "tp-id": "SRG1-PP1-TXRX",
435 "tp-node-id": "ROADM-A1-SRG1"
441 "state": "inService",
442 "node-id": "ROADM-A1-DEG1"
448 "state": "inService",
449 "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX"
455 "state": "inService",
456 "tp-id": "DEG1-CTP-TXRX",
457 "tp-node-id": "ROADM-A1-DEG1"
463 "state": "inService",
464 "tp-id": "DEG2-TTP-TXRX",
465 "tp-node-id": "ROADM-C1-DEG2"
471 "state": "inService",
472 "link-id": "ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX"
478 "state": "inService",
479 "tp-id": "SRG1-CP-TXRX",
480 "tp-node-id": "ROADM-C1-SRG1"
486 "state": "inService",
487 "node-id": "ROADM-C1-DEG2"
493 "state": "inService",
494 "tp-id": "DEG2-CTP-TXRX",
495 "tp-node-id": "ROADM-C1-DEG2"
500 service_path_service_2_AtoZ = [
504 "state": "inService",
505 "tp-id": "SRG1-CP-TXRX",
506 "tp-node-id": "ROADM-C1-SRG1"
512 "state": "inService",
513 "node-id": "ROADM-C1-SRG1"
519 "state": "inService",
520 "tp-id": "DEG1-CTP-TXRX",
521 "tp-node-id": "ROADM-C1-DEG1"
527 "state": "inService",
528 "link-id": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX"
534 "state": "inService",
535 "tp-id": "SRG1-PP2-TXRX",
536 "tp-node-id": "ROADM-C1-SRG1"
542 "state": "inService",
543 "link-id": "ROADM-C1-SRG1-SRG1-PP2-TXRXtoXPDR-C2-XPDR3-XPDR3-NETWORK1"
549 "state": "inService",
550 "node-id": "XPDR-A2-XPDR3"
556 "state": "inService",
557 "tp-id": "XPDR3-NETWORK1",
558 "tp-node-id": "XPDR-A2-XPDR3"
564 "state": "inService",
565 "tp-id": "XPDR3-CLIENT1",
566 "tp-node-id": "XPDR-A2-XPDR3"
572 "state": "inService",
573 "node-id": "ROADM-A1-SRG1"
579 "state": "inService",
580 "tp-id": "SRG1-CP-TXRX",
581 "tp-node-id": "ROADM-A1-SRG1"
587 "state": "inService",
588 "link-id": "XPDR-A2-XPDR3-XPDR3-NETWORK1toROADM-A1-SRG1-SRG1-PP2-TXRX"
594 "state": "inService",
595 "tp-id": "SRG1-PP2-TXRX",
596 "tp-node-id": "ROADM-A1-SRG1"
602 "state": "inService",
603 "node-id": "ROADM-A1-DEG2"
609 "state": "inService",
610 "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX"
616 "state": "inService",
617 "tp-id": "DEG2-CTP-TXRX",
618 "tp-node-id": "ROADM-A1-DEG2"
624 "state": "inService",
625 "tp-id": "XPDR3-NETWORK1",
626 "tp-node-id": "XPDR-C2-XPDR3"
632 "state": "inService",
633 "tp-id": "DEG1-TTP-TXRX",
634 "tp-node-id": "ROADM-C1-DEG1"
640 "state": "inService",
641 "node-id": "ROADM-C1-DEG1"
647 "state": "inService",
648 "tp-id": "DEG2-TTP-TXRX",
649 "tp-node-id": "ROADM-A1-DEG2"
655 "state": "inService",
656 "node-id": "XPDR-C2-XPDR3"
662 "state": "inService",
663 "link-id": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX"
669 "state": "inService",
670 "tp-id": "XPDR3-CLIENT1",
671 "tp-node-id": "XPDR-C2-XPDR3"
678 cls.processes = test_utils.start_tpce()
679 cls.processes = test_utils.start_sims([('xpdra2', cls.NODE_VERSION_71),
680 ('roadma', cls.NODE_VERSION_221),
681 ('roadmb', cls.NODE_VERSION_221),
682 ('roadmc', cls.NODE_VERSION_221),
683 ('xpdrc2', cls.NODE_VERSION_71)])
686 def tearDownClass(cls):
687 # pylint: disable=not-an-iterable
688 for process in cls.processes:
689 test_utils.shutdown_process(process)
690 print("all processes killed")
695 def test_01_connect_xpdra2(self):
696 response = test_utils.mount_device("XPDR-A2", ('xpdra2', self.NODE_VERSION_71))
697 self.assertEqual(response.status_code,
698 requests.codes.created, test_utils.CODE_SHOULD_BE_201)
700 def test_02_connect_xpdrc2(self):
701 response = test_utils.mount_device("XPDR-C2", ('xpdrc2', self.NODE_VERSION_71))
702 self.assertEqual(response.status_code,
703 requests.codes.created, test_utils.CODE_SHOULD_BE_201)
705 def test_03_connect_rdma(self):
706 response = test_utils.mount_device("ROADM-A1", ('roadma', self.NODE_VERSION_221))
707 self.assertEqual(response.status_code,
708 requests.codes.created, test_utils.CODE_SHOULD_BE_201)
710 def test_04_connect_rdmb(self):
711 response = test_utils.mount_device("ROADM-B1", ('roadmb', self.NODE_VERSION_221))
712 self.assertEqual(response.status_code,
713 requests.codes.created, test_utils.CODE_SHOULD_BE_201)
715 def test_05_connect_rdmc(self):
716 response = test_utils.mount_device("ROADM-C1", ('roadmc', self.NODE_VERSION_221))
717 self.assertEqual(response.status_code,
718 requests.codes.created, test_utils.CODE_SHOULD_BE_201)
720 def test_06_connect_xprda2_1_N1_to_roadma_PP1(self):
721 response = test_utils.connect_xpdr_to_rdm_request("XPDR-A2", "1", "1",
722 "ROADM-A1", "1", "SRG1-PP1-TXRX")
723 self.assertEqual(response.status_code, requests.codes.ok)
724 self.assertIn('Xponder Roadm Link created successfully',
725 response.json()["output"]["result"])
728 def test_07_connect_roadma_PP1_to_xpdra2_1_N1(self):
729 response = test_utils.connect_rdm_to_xpdr_request("XPDR-A2", "1", "1",
730 "ROADM-A1", "1", "SRG1-PP1-TXRX")
731 self.assertEqual(response.status_code, requests.codes.ok)
732 self.assertIn('Roadm Xponder links created successfully',
733 response.json()["output"]["result"])
736 def test_08_connect_xprdc2_1_N1_to_roadmc_PP1(self):
737 response = test_utils.connect_xpdr_to_rdm_request("XPDR-C2", "1", "1",
738 "ROADM-C1", "1", "SRG1-PP1-TXRX")
739 self.assertEqual(response.status_code, requests.codes.ok)
740 self.assertIn('Xponder Roadm Link created successfully',
741 response.json()["output"]["result"])
744 def test_09_connect_roadmc_PP1_to_xpdrc2_1_N1(self):
745 response = test_utils.connect_rdm_to_xpdr_request("XPDR-C2", "1", "1",
746 "ROADM-C1", "1", "SRG1-PP1-TXRX")
747 self.assertEqual(response.status_code, requests.codes.ok)
748 self.assertIn('Roadm Xponder links created successfully',
749 response.json()["output"]["result"])
752 def test_10_connect_xprda2_3_N1_to_roadma_PP2(self):
753 response = test_utils.connect_xpdr_to_rdm_request("XPDR-A2", "3", "1",
754 "ROADM-A1", "1", "SRG1-PP2-TXRX")
755 self.assertEqual(response.status_code, requests.codes.ok)
756 self.assertIn('Xponder Roadm Link created successfully',
757 response.json()["output"]["result"])
760 def test_11_connect_roadma_PP2_to_xpdra2_3_N1(self):
761 response = test_utils.connect_rdm_to_xpdr_request("XPDR-A2", "3", "1",
762 "ROADM-A1", "1", "SRG1-PP2-TXRX")
763 self.assertEqual(response.status_code, requests.codes.ok)
764 self.assertIn('Roadm Xponder links created successfully',
765 response.json()["output"]["result"])
768 def test_12_connect_xprdc2_3_N1_to_roadmc_PP2(self):
769 response = test_utils.connect_xpdr_to_rdm_request("XPDR-C2", "3", "1",
770 "ROADM-C1", "1", "SRG1-PP2-TXRX")
771 self.assertEqual(response.status_code, requests.codes.ok)
772 self.assertIn('Xponder Roadm Link created successfully',
773 response.json()["output"]["result"])
776 def test_13_connect_roadmc_PP2_to_xpdrc2_3_N1(self):
777 response = test_utils.connect_rdm_to_xpdr_request("XPDR-C2", "3", "1",
778 "ROADM-C1", "1", "SRG1-PP2-TXRX")
779 self.assertEqual(response.status_code, requests.codes.ok)
780 self.assertIn('Roadm Xponder links created successfully',
781 response.json()["output"]["result"])
784 def test_14_add_omsAttributes_roadma_roadmc(self):
785 # Config ROADMA-ROADMC oms-attributes
787 "auto-spanloss": "true",
788 "spanloss-base": 11.4,
789 "spanloss-current": 12,
790 "engineered-spanloss": 12.2,
791 "link-concatenation": [{
794 "SRLG-length": 100000,
796 response = test_utils.add_oms_attr_request("ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX", data)
797 self.assertEqual(response.status_code, requests.codes.created)
799 def test_15_add_omsAttributes_roadmc_roadma(self):
800 # Config ROADMC-ROADMA oms-attributes
802 "auto-spanloss": "true",
803 "spanloss-base": 11.4,
804 "spanloss-current": 12,
805 "engineered-spanloss": 12.2,
806 "link-concatenation": [{
809 "SRLG-length": 100000,
811 response = test_utils.add_oms_attr_request("ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX", data)
812 self.assertEqual(response.status_code, requests.codes.created)
814 def test_16_add_omsAttributes_roadma_roadmb(self):
815 # Config ROADMA-ROADMB oms-attributes
817 "auto-spanloss": "true",
818 "spanloss-base": 11.4,
819 "spanloss-current": 12,
820 "engineered-spanloss": 12.2,
821 "link-concatenation": [{
824 "SRLG-length": 100000,
826 response = test_utils.add_oms_attr_request("ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX", data)
827 self.assertEqual(response.status_code, requests.codes.created)
829 def test_17_add_omsAttributes_roadmb_roadma(self):
830 # Config ROADMB-ROADMA oms-attributes
832 "auto-spanloss": "true",
833 "spanloss-base": 11.4,
834 "spanloss-current": 12,
835 "engineered-spanloss": 12.2,
836 "link-concatenation": [{
839 "SRLG-length": 100000,
841 response = test_utils.add_oms_attr_request("ROADM-B1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG1-DEG1-TTP-TXRX", data)
842 self.assertEqual(response.status_code, requests.codes.created)
844 def test_18_add_omsAttributes_roadmb_roadmc(self):
845 # Config ROADMB-ROADMC oms-attributes
847 "auto-spanloss": "true",
848 "spanloss-base": 11.4,
849 "spanloss-current": 12,
850 "engineered-spanloss": 12.2,
851 "link-concatenation": [{
854 "SRLG-length": 100000,
856 response = test_utils.add_oms_attr_request("ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX", data)
857 self.assertEqual(response.status_code, requests.codes.created)
859 def test_19_add_omsAttributes_roadmc_roadmb(self):
860 # Config ROADMC-ROADMB oms-attributes
862 "auto-spanloss": "true",
863 "spanloss-base": 11.4,
864 "spanloss-current": 12,
865 "engineered-spanloss": 12.2,
866 "link-concatenation": [{
869 "SRLG-length": 100000,
871 response = test_utils.add_oms_attr_request("ROADM-C1-DEG2-DEG2-TTP-TXRXtoROADM-B1-DEG2-DEG2-TTP-TXRX", data)
872 self.assertEqual(response.status_code, requests.codes.created)
874 def test_20_create_OTS_ROADMA_DEG1(self):
875 response = test_utils.create_ots_oms_request("ROADM-A1", "DEG1-TTP-TXRX")
877 self.assertEqual(response.status_code, requests.codes.ok)
878 self.assertIn('Interfaces OTS-DEG1-TTP-TXRX - OMS-DEG1-TTP-TXRX successfully created on node ROADM-A1',
879 response.json()["output"]["result"])
881 def test_21_create_OTS_ROADMC_DEG2(self):
882 response = test_utils.create_ots_oms_request("ROADM-C1", "DEG2-TTP-TXRX")
884 self.assertEqual(response.status_code, requests.codes.ok)
885 self.assertIn('Interfaces OTS-DEG2-TTP-TXRX - OMS-DEG2-TTP-TXRX successfully created on node ROADM-C1',
886 response.json()["output"]["result"])
888 def test_22_create_OTS_ROADMB_DEG1(self):
889 response = test_utils.create_ots_oms_request("ROADM-B1", "DEG1-TTP-TXRX")
891 self.assertEqual(response.status_code, requests.codes.ok)
892 self.assertIn('Interfaces OTS-DEG1-TTP-TXRX - OMS-DEG1-TTP-TXRX successfully created on node ROADM-B1',
893 response.json()["output"]["result"])
895 def test_23_create_OTS_ROADMB_DEG2(self):
896 response = test_utils.create_ots_oms_request("ROADM-B1", "DEG2-TTP-TXRX")
898 self.assertEqual(response.status_code, requests.codes.ok)
899 self.assertIn('Interfaces OTS-DEG2-TTP-TXRX - OMS-DEG2-TTP-TXRX successfully created on node ROADM-B1',
900 response.json()["output"]["result"])
902 def test_24_calculate_span_loss_base_all(self):
908 response = test_utils.post_request("{}/operations/transportpce-olm:calculate-spanloss-base", data)
909 self.assertEqual(response.status_code, requests.codes.ok)
910 res = response.json()
911 self.assertIn('Success',
912 res["output"]["result"])
915 "link-id": "ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX"
916 }, res["output"]["spans"])
919 "link-id": "ROADM-B1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG1-DEG1-TTP-TXRX"
920 }, res["output"]["spans"])
923 "link-id": "ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX"
924 }, res["output"]["spans"])
927 "link-id": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX"
928 }, res["output"]["spans"])
931 "link-id": "ROADM-C1-DEG2-DEG2-TTP-TXRXtoROADM-B1-DEG2-DEG2-TTP-TXRX"
932 }, res["output"]["spans"])
935 "link-id": "ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX"
936 }, res["output"]["spans"])
938 # test service-create for Eth service from xpdr to xpdr with service-resiliency
939 def test_25_create_eth_service1_with_service_resiliency_restorable(self):
940 self.cr_serv_sample_data["input"]["service-name"] = "service1"
941 response = test_utils.service_create_request(self.cr_serv_sample_data)
942 self.assertEqual(response.status_code, requests.codes.ok)
943 self.assertIn('PCE calculation in progress',
944 response.json()['output']['configuration-response-common']['response-message'])
945 time.sleep(self.WAITING)
947 def test_26_get_eth_service1(self):
948 response = test_utils.get_service_list_request("services/service1")
949 self.assertEqual(response.status_code, requests.codes.ok)
950 res = response.json()
952 res['services'][0]['operational-state'], 'inService')
954 res['services'][0]['administrative-state'], 'inService')
956 res['services'][0]['service-name'], 'service1')
958 res['services'][0]['connection-type'], 'service')
960 res['services'][0]['lifecycle-state'], 'planned')
962 res['services'][0]['service-resiliency']['resiliency'], 'org-openroadm-common-service-types:restorable')
965 def test_27_get_service_path_service_1(self):
966 response = test_utils.get_service_path_list_request("service-paths/service1")
967 self.assertEqual(response.status_code, requests.codes.ok)
968 self.assertCountEqual(self.service_path_service_1_AtoZ,
969 response.json()['service-paths'][0]['path-description']['aToZ-direction']['aToZ'])
971 # test service-create for Eth service from xpdr to xpdr without service-resiliency
972 def test_28_create_eth_service2_without_service_resiliency(self):
973 self.cr_serv_sample_data["input"]["service-name"] = "service2"
974 del self.cr_serv_sample_data["input"]["service-resiliency"]
975 response = test_utils.service_create_request(self.cr_serv_sample_data)
976 self.assertEqual(response.status_code, requests.codes.ok)
977 self.assertIn('PCE calculation in progress',
978 response.json()['output']['configuration-response-common']['response-message'])
979 time.sleep(self.WAITING)
981 def test_29_get_eth_service2(self):
982 response = test_utils.get_service_list_request("services/service2")
983 self.assertEqual(response.status_code, requests.codes.ok)
984 res = response.json()
986 res['services'][0]['operational-state'], 'inService')
988 res['services'][0]['administrative-state'], 'inService')
990 res['services'][0]['service-name'], 'service2')
992 res['services'][0]['connection-type'], 'service')
994 res['services'][0]['lifecycle-state'], 'planned')
995 self.assertNotIn('service-resiliency', res['services'][0])
998 def test_30_get_service_path_service_2(self):
999 response = test_utils.get_service_path_list_request("service-paths/service2")
1000 self.assertEqual(response.status_code, requests.codes.ok)
1001 self.assertCountEqual(self.service_path_service_2_AtoZ,
1002 response.json()['service-paths'][0]['path-description']['aToZ-direction']['aToZ'])
1004 # Degrade ROADM-A1-ROADM-C1 link
1005 def test_31_set_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput(self):
1006 url = "{}/operations/pm-handling:pm-interact"
1009 "rpc-action": "set",
1010 "pm-to-be-set-or-created": {
1011 "current-pm-entry": [
1013 "pm-resource-instance": "/org-openroadm-device:org-openroadm-device/org-openroadm-device"
1014 ":interface[org-openroadm-device:name='OTS-DEG2-TTP-TXRX']",
1015 "pm-resource-type": "interface",
1016 "pm-resource-type-extension": "",
1019 "type": "opticalPowerInput",
1021 "location": "nearEnd",
1025 "granularity": "15min",
1026 "pmParameterValue": -30,
1027 "pmParameterUnit": "dBm",
1028 "validity": "complete"
1031 "granularity": "24Hour",
1032 "pmParameterValue": -21.3,
1033 "pmParameterUnit": "dBm",
1034 "validity": "complete"
1044 response = requests.request("POST", url.format("http://127.0.0.1:8141/restconf"),
1045 data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
1046 auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
1047 self.assertEqual(response.status_code, requests.codes.ok)
1048 self.assertEqual(response.json()['output']['status-message'], "The PMs has been successfully set !")
1049 time.sleep(self.WAITING * 2)
1051 def test_32_get_eth_service1(self):
1052 self.test_26_get_eth_service1()
1054 def test_33_get_service_path_service_1(self):
1055 response = test_utils.get_service_path_list_request("service-paths/service1")
1056 self.assertEqual(response.status_code, requests.codes.ok)
1057 print(response.json())
1058 self.assertCountEqual(self.service_path_service_1_rerouted_AtoZ,
1059 response.json()['service-paths'][0]['path-description']['aToZ-direction']['aToZ'])
1061 def test_34_get_eth_service2(self):
1062 response = test_utils.get_service_list_request("services/service2")
1063 self.assertEqual(response.status_code, requests.codes.ok)
1064 res = response.json()
1066 res['services'][0]['operational-state'], 'outOfService')
1068 res['services'][0]['administrative-state'], 'inService')
1070 res['services'][0]['service-name'], 'service2')
1072 res['services'][0]['connection-type'], 'service')
1074 res['services'][0]['lifecycle-state'], 'planned')
1075 self.assertNotIn('service-resiliency', res['services'][0])
1078 def test_35_get_service_path_service_2(self):
1079 response = test_utils.get_service_path_list_request("service-paths/service2")
1080 index = self.service_path_service_2_AtoZ.index(
1084 'state': 'inService',
1085 'tp-id': 'DEG2-TTP-TXRX',
1086 'tp-node-id': 'ROADM-A1-DEG2'
1090 service_path_expected = self.service_path_service_2_AtoZ[:index] + [{
1093 'state': 'outOfService',
1094 'tp-id': 'DEG2-TTP-TXRX',
1095 'tp-node-id': 'ROADM-A1-DEG2'
1097 }] + self.service_path_service_2_AtoZ[index + 1:]
1098 self.assertEqual(response.status_code, requests.codes.ok)
1099 self.assertCountEqual(service_path_expected,
1100 response.json()['service-paths'][0]['path-description']['aToZ-direction']['aToZ'])
1102 # Restore ROADM-A1-ROADM-C1 link
1103 def test_36_clear_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput(self):
1104 url = "{}/operations/pm-handling:pm-interact"
1107 "rpc-action": "clear",
1108 "pm-to-get-clear-or-delete": {
1109 "current-pm-entry": [
1111 "pm-resource-instance": "/org-openroadm-device:org-openroadm-device/org-openroadm-device"
1112 ":interface[org-openroadm-device:name='OTS-DEG2-TTP-TXRX']",
1113 "pm-resource-type": "interface",
1114 "pm-resource-type-extension": "",
1117 "type": "opticalPowerInput",
1119 "location": "nearEnd",
1128 response = requests.request("POST", url.format("http://127.0.0.1:8141/restconf"),
1129 data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
1130 auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
1131 self.assertEqual(response.status_code, requests.codes.ok)
1132 self.assertEqual(response.json()['output']['status-message'], "The PMs has been successfully released !")
1135 def test_37_get_eth_service1(self):
1136 self.test_26_get_eth_service1()
1138 def test_38_get_service_path_service_1(self):
1139 self.test_33_get_service_path_service_1()
1141 def test_39_get_eth_service2(self):
1142 self.test_29_get_eth_service2()
1144 def test_40_get_service_path_service_2(self):
1145 self.test_30_get_service_path_service_2()
1147 def test_41_delete_eth_service2(self):
1148 response = test_utils.service_delete_request("service2")
1149 self.assertEqual(response.status_code, requests.codes.ok)
1150 self.assertIn('Renderer service delete in progress',
1151 response.json()['output']['configuration-response-common']['response-message'])
1152 time.sleep(self.WAITING)
1154 def test_42_delete_eth_service1(self):
1155 response = test_utils.service_delete_request("service1")
1156 self.assertEqual(response.status_code, requests.codes.ok)
1157 self.assertIn('Renderer service delete in progress',
1158 response.json()['output']['configuration-response-common']['response-message'])
1159 time.sleep(self.WAITING)
1161 def test_43_disconnect_xponders_from_roadm(self):
1162 url = "{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:link/"
1163 response = test_utils.get_ordm_topo_request("")
1164 self.assertEqual(response.status_code, requests.codes.ok)
1165 links = response.json()['network'][0]['ietf-network-topology:link']
1167 if link["org-openroadm-common-network:link-type"] in ('XPONDER-OUTPUT', 'XPONDER-INPUT'):
1168 self.assertEqual(test_utils.delete_request(url + link["link-id"]).status_code, requests.codes.ok)
1170 def test_44_disconnect_xpdra2(self):
1171 response = test_utils.unmount_device("XPDR-A2")
1172 self.assertEqual(response.status_code, requests.codes.ok,
1173 test_utils.CODE_SHOULD_BE_200)
1175 def test_45_disconnect_xpdrc2(self):
1176 response = test_utils.unmount_device("XPDR-C2")
1177 self.assertEqual(response.status_code, requests.codes.ok,
1178 test_utils.CODE_SHOULD_BE_200)
1180 def test_46_disconnect_roadmA(self):
1181 response = test_utils.unmount_device("ROADM-A1")
1182 self.assertEqual(response.status_code, requests.codes.ok,
1183 test_utils.CODE_SHOULD_BE_200)
1185 def test_47_disconnect_roadmB(self):
1186 response = test_utils.unmount_device("ROADM-B1")
1187 self.assertEqual(response.status_code, requests.codes.ok,
1188 test_utils.CODE_SHOULD_BE_200)
1190 def test_48_disconnect_roadmC(self):
1191 response = test_utils.unmount_device("ROADM-C1")
1192 self.assertEqual(response.status_code, requests.codes.ok,
1193 test_utils.CODE_SHOULD_BE_200)
1196 if __name__ == "__main__":
1197 unittest.main(verbosity=2)