Switch all func tests to lightynode
[transportpce.git] / tests / transportpce_tests / hybrid / test03_autonomous_reroute.py
1 #!/usr/bin/env python
2
3 ##############################################################################
4 # Copyright (c) 2022 Orange, Inc. and others.  All rights reserved.
5 #
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 ##############################################################################
11
12 # pylint: disable=invalid-name
13 # pylint: disable=no-member
14 # pylint: disable=too-many-public-methods
15 # pylint: disable=too-many-lines
16
17 import unittest
18 import time
19 import requests
20 # pylint: disable=wrong-import-order
21 import sys
22
23 sys.path.append('transportpce_tests/common/')
24 # pylint: disable=wrong-import-position
25 # pylint: disable=import-error
26 import test_utils  # nopep8
27
28
29 class TransportPCEtesting(unittest.TestCase):
30     processes = None
31     WAITING = 20  # nominal value is 300
32     NODE_VERSION_221 = '2.2.1'
33     NODE_VERSION_71 = '7.1'
34
35     cr_serv_input_data = {
36         "sdnc-request-header": {
37             "request-id": "request-1",
38             "rpc-action": "service-create",
39             "request-system-id": "appname"
40         },
41         "service-name": "service1",
42         "common-id": "commonId",
43         "connection-type": "service",
44         "service-resiliency": {
45             "resiliency": "org-openroadm-common-service-types:restorable"
46         },
47         "service-a-end": {
48             "service-rate": "400",
49             "node-id": "XPDR-A2",
50             "service-format": "Ethernet",
51             "clli": "NodeA",
52             "tx-direction": [
53                 {
54                     "index": 0
55                 }
56             ],
57             "rx-direction": [
58                 {
59                     "index": 0
60                 }
61             ],
62             "optic-type": "gray"
63         },
64         "service-z-end": {
65             "service-rate": "400",
66             "node-id": "XPDR-C2",
67             "service-format": "Ethernet",
68             "clli": "NodeC",
69             "tx-direction": [
70                 {
71                     "index": 0
72                 }
73             ],
74             "rx-direction": [
75                 {
76                     "index": 0
77                 }
78             ],
79             "optic-type": "gray"
80         },
81         "due-date": "2018-06-15T00:00:01Z",
82         "operator-contact": "pw1234"
83     }
84
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"}
94     }
95
96     service_path_service_1_AtoZ = [
97         {
98             "id": "16",
99             "resource": {
100                 "state": "inService",
101                 "tp-id": "SRG1-CP-TXRX",
102                 "tp-node-id": "ROADM-C1-SRG1"
103             }
104         },
105         {
106             "id": "17",
107             "resource": {
108                 "state": "inService",
109                 "node-id": "ROADM-C1-SRG1"
110             }
111         },
112         {
113             "id": "14",
114             "resource": {
115                 "state": "inService",
116                 "tp-id": "DEG1-CTP-TXRX",
117                 "tp-node-id": "ROADM-C1-DEG1"
118             }
119         },
120         {
121             "id": "15",
122             "resource": {
123                 "state": "inService",
124                 "link-id": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX"
125             }
126         },
127         {
128             "id": "18",
129             "resource": {
130                 "state": "inService",
131                 "tp-id": "SRG1-PP1-TXRX",
132                 "tp-node-id": "ROADM-C1-SRG1"
133             }
134         },
135         {
136             "id": "19",
137             "resource": {
138                 "state": "inService",
139                 "link-id": "ROADM-C1-SRG1-SRG1-PP1-TXRXtoXPDR-C2-XPDR1-XPDR1-NETWORK1"
140             }
141         },
142         {
143             "id": "1",
144             "resource": {
145                 "state": "inService",
146                 "node-id": "XPDR-A2-XPDR1"
147             }
148         },
149         {
150             "id": "2",
151             "resource": {
152                 "state": "inService",
153                 "tp-id": "XPDR1-NETWORK1",
154                 "tp-node-id": "XPDR-A2-XPDR1"
155             }
156         },
157         {
158             "id": "0",
159             "resource": {
160                 "state": "inService",
161                 "tp-id": "XPDR1-CLIENT1",
162                 "tp-node-id": "XPDR-A2-XPDR1"
163             }
164         },
165         {
166             "id": "5",
167             "resource": {
168                 "state": "inService",
169                 "node-id": "ROADM-A1-SRG1"
170             }
171         },
172         {
173             "id": "6",
174             "resource": {
175                 "state": "inService",
176                 "tp-id": "SRG1-CP-TXRX",
177                 "tp-node-id": "ROADM-A1-SRG1"
178             }
179         },
180         {
181             "id": "3",
182             "resource": {
183                 "state": "inService",
184                 "link-id": "XPDR-A2-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX"
185             }
186         },
187         {
188             "id": "4",
189             "resource": {
190                 "state": "inService",
191                 "tp-id": "SRG1-PP1-TXRX",
192                 "tp-node-id": "ROADM-A1-SRG1"
193             }
194         },
195         {
196             "id": "9",
197             "resource": {
198                 "state": "inService",
199                 "node-id": "ROADM-A1-DEG2"
200             }
201         },
202         {
203             "id": "7",
204             "resource": {
205                 "state": "inService",
206                 "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX"
207             }
208         },
209         {
210             "id": "8",
211             "resource": {
212                 "state": "inService",
213                 "tp-id": "DEG2-CTP-TXRX",
214                 "tp-node-id": "ROADM-A1-DEG2"
215             }
216         },
217         {
218             "id": "20",
219             "resource": {
220                 "state": "inService",
221                 "tp-id": "XPDR1-NETWORK1",
222                 "tp-node-id": "XPDR-C2-XPDR1"
223             }
224         },
225         {
226             "id": "12",
227             "resource": {
228                 "state": "inService",
229                 "tp-id": "DEG1-TTP-TXRX",
230                 "tp-node-id": "ROADM-C1-DEG1"
231             }
232         },
233         {
234             "id": "13",
235             "resource": {
236                 "state": "inService",
237                 "node-id": "ROADM-C1-DEG1"
238             }
239         },
240         {
241             "id": "10",
242             "resource": {
243                 "state": "inService",
244                 "tp-id": "DEG2-TTP-TXRX",
245                 "tp-node-id": "ROADM-A1-DEG2"
246             }
247         },
248         {
249             "id": "21",
250             "resource": {
251                 "state": "inService",
252                 "node-id": "XPDR-C2-XPDR1"
253             }
254         },
255         {
256             "id": "11",
257             "resource": {
258                 "state": "inService",
259                 "link-id": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX"
260             }
261         },
262         {
263             "id": "22",
264             "resource": {
265                 "state": "inService",
266                 "tp-id": "XPDR1-CLIENT1",
267                 "tp-node-id": "XPDR-C2-XPDR1"
268             }
269         }
270     ]
271
272     service_path_service_1_rerouted_AtoZ = [
273         {
274             "id": "27",
275             "resource": {
276                 "state": "inService",
277                 "link-id": "ROADM-C1-SRG1-SRG1-PP1-TXRXtoXPDR-C2-XPDR1-XPDR1-NETWORK1"
278             }
279         },
280         {
281             "id": "28",
282             "resource": {
283                 "state": "inService",
284                 "tp-id": "XPDR1-NETWORK1",
285                 "tp-node-id": "XPDR-C2-XPDR1"
286             }
287         },
288         {
289             "id": "25",
290             "resource": {
291                 "state": "inService",
292                 "node-id": "ROADM-C1-SRG1"
293             }
294         },
295         {
296             "id": "26",
297             "resource": {
298                 "state": "inService",
299                 "tp-id": "SRG1-PP1-TXRX",
300                 "tp-node-id": "ROADM-C1-SRG1"
301             }
302         },
303         {
304             "id": "29",
305             "resource": {
306                 "state": "inService",
307                 "node-id": "XPDR-C2-XPDR1"
308             }
309         },
310         {
311             "id": "30",
312             "resource": {
313                 "state": "inService",
314                 "tp-id": "XPDR1-CLIENT1",
315                 "tp-node-id": "XPDR-C2-XPDR1"
316             }
317         },
318         {
319             "id": "12",
320             "resource": {
321                 "state": "inService",
322                 "tp-id": "DEG1-TTP-TXRX",
323                 "tp-node-id": "ROADM-B1-DEG1"
324             }
325         },
326         {
327             "id": "13",
328             "resource": {
329                 "state": "inService",
330                 "node-id": "ROADM-B1-DEG1"
331             }
332         },
333         {
334             "id": "10",
335             "resource": {
336                 "state": "inService",
337                 "tp-id": "DEG1-TTP-TXRX",
338                 "tp-node-id": "ROADM-A1-DEG1"
339             }
340         },
341         {
342             "id": "11",
343             "resource": {
344                 "state": "inService",
345                 "link-id": "ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX"
346             }
347         },
348         {
349             "id": "16",
350             "resource": {
351                 "state": "inService",
352                 "tp-id": "DEG2-CTP-TXRX",
353                 "tp-node-id": "ROADM-B1-DEG2"
354             }
355         },
356         {
357             "id": "17",
358             "resource": {
359                 "state": "inService",
360                 "node-id": "ROADM-B1-DEG2"
361             }
362         },
363         {
364             "id": "14",
365             "resource": {
366                 "state": "inService",
367                 "tp-id": "DEG1-CTP-TXRX",
368                 "tp-node-id": "ROADM-B1-DEG1"
369             }
370         },
371         {
372             "id": "15",
373             "resource": {
374                 "state": "inService",
375                 "link-id": "ROADM-B1-DEG1-DEG1-CTP-TXRXtoROADM-B1-DEG2-DEG2-CTP-TXRX"
376             }
377         },
378         {
379             "id": "18",
380             "resource": {
381                 "state": "inService",
382                 "tp-id": "DEG2-TTP-TXRX",
383                 "tp-node-id": "ROADM-B1-DEG2"
384             }
385         },
386         {
387             "id": "19",
388             "resource": {
389                 "state": "inService",
390                 "link-id": "ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX"
391             }
392         },
393         {
394             "id": "1",
395             "resource": {
396                 "state": "inService",
397                 "node-id": "XPDR-A2-XPDR1"
398             }
399         },
400         {
401             "id": "2",
402             "resource": {
403                 "state": "inService",
404                 "tp-id": "XPDR1-NETWORK1",
405                 "tp-node-id": "XPDR-A2-XPDR1"
406             }
407         },
408         {
409             "id": "0",
410             "resource": {
411                 "state": "inService",
412                 "tp-id": "XPDR1-CLIENT1",
413                 "tp-node-id": "XPDR-A2-XPDR1"
414             }
415         },
416         {
417             "id": "5",
418             "resource": {
419                 "state": "inService",
420                 "node-id": "ROADM-A1-SRG1"
421             }
422         },
423         {
424             "id": "6",
425             "resource": {
426                 "state": "inService",
427                 "tp-id": "SRG1-CP-TXRX",
428                 "tp-node-id": "ROADM-A1-SRG1"
429             }
430         },
431         {
432             "id": "3",
433             "resource": {
434                 "state": "inService",
435                 "link-id": "XPDR-A2-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX"
436             }
437         },
438         {
439             "id": "4",
440             "resource": {
441                 "state": "inService",
442                 "tp-id": "SRG1-PP1-TXRX",
443                 "tp-node-id": "ROADM-A1-SRG1"
444             }
445         },
446         {
447             "id": "9",
448             "resource": {
449                 "state": "inService",
450                 "node-id": "ROADM-A1-DEG1"
451             }
452         },
453         {
454             "id": "7",
455             "resource": {
456                 "state": "inService",
457                 "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX"
458             }
459         },
460         {
461             "id": "8",
462             "resource": {
463                 "state": "inService",
464                 "tp-id": "DEG1-CTP-TXRX",
465                 "tp-node-id": "ROADM-A1-DEG1"
466             }
467         },
468         {
469             "id": "20",
470             "resource": {
471                 "state": "inService",
472                 "tp-id": "DEG2-TTP-TXRX",
473                 "tp-node-id": "ROADM-C1-DEG2"
474             }
475         },
476         {
477             "id": "23",
478             "resource": {
479                 "state": "inService",
480                 "link-id": "ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX"
481             }
482         },
483         {
484             "id": "24",
485             "resource": {
486                 "state": "inService",
487                 "tp-id": "SRG1-CP-TXRX",
488                 "tp-node-id": "ROADM-C1-SRG1"
489             }
490         },
491         {
492             "id": "21",
493             "resource": {
494                 "state": "inService",
495                 "node-id": "ROADM-C1-DEG2"
496             }
497         },
498         {
499             "id": "22",
500             "resource": {
501                 "state": "inService",
502                 "tp-id": "DEG2-CTP-TXRX",
503                 "tp-node-id": "ROADM-C1-DEG2"
504             }
505         }
506     ]
507
508     service_path_service_2_AtoZ = [
509         {
510             "id": "16",
511             "resource": {
512                 "state": "inService",
513                 "tp-id": "SRG1-CP-TXRX",
514                 "tp-node-id": "ROADM-C1-SRG1"
515             }
516         },
517         {
518             "id": "17",
519             "resource": {
520                 "state": "inService",
521                 "node-id": "ROADM-C1-SRG1"
522             }
523         },
524         {
525             "id": "14",
526             "resource": {
527                 "state": "inService",
528                 "tp-id": "DEG1-CTP-TXRX",
529                 "tp-node-id": "ROADM-C1-DEG1"
530             }
531         },
532         {
533             "id": "15",
534             "resource": {
535                 "state": "inService",
536                 "link-id": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX"
537             }
538         },
539         {
540             "id": "18",
541             "resource": {
542                 "state": "inService",
543                 "tp-id": "SRG1-PP2-TXRX",
544                 "tp-node-id": "ROADM-C1-SRG1"
545             }
546         },
547         {
548             "id": "19",
549             "resource": {
550                 "state": "inService",
551                 "link-id": "ROADM-C1-SRG1-SRG1-PP2-TXRXtoXPDR-C2-XPDR3-XPDR3-NETWORK1"
552             }
553         },
554         {
555             "id": "1",
556             "resource": {
557                 "state": "inService",
558                 "node-id": "XPDR-A2-XPDR3"
559             }
560         },
561         {
562             "id": "2",
563             "resource": {
564                 "state": "inService",
565                 "tp-id": "XPDR3-NETWORK1",
566                 "tp-node-id": "XPDR-A2-XPDR3"
567             }
568         },
569         {
570             "id": "0",
571             "resource": {
572                 "state": "inService",
573                 "tp-id": "XPDR3-CLIENT1",
574                 "tp-node-id": "XPDR-A2-XPDR3"
575             }
576         },
577         {
578             "id": "5",
579             "resource": {
580                 "state": "inService",
581                 "node-id": "ROADM-A1-SRG1"
582             }
583         },
584         {
585             "id": "6",
586             "resource": {
587                 "state": "inService",
588                 "tp-id": "SRG1-CP-TXRX",
589                 "tp-node-id": "ROADM-A1-SRG1"
590             }
591         },
592         {
593             "id": "3",
594             "resource": {
595                 "state": "inService",
596                 "link-id": "XPDR-A2-XPDR3-XPDR3-NETWORK1toROADM-A1-SRG1-SRG1-PP2-TXRX"
597             }
598         },
599         {
600             "id": "4",
601             "resource": {
602                 "state": "inService",
603                 "tp-id": "SRG1-PP2-TXRX",
604                 "tp-node-id": "ROADM-A1-SRG1"
605             }
606         },
607         {
608             "id": "9",
609             "resource": {
610                 "state": "inService",
611                 "node-id": "ROADM-A1-DEG2"
612             }
613         },
614         {
615             "id": "7",
616             "resource": {
617                 "state": "inService",
618                 "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX"
619             }
620         },
621         {
622             "id": "8",
623             "resource": {
624                 "state": "inService",
625                 "tp-id": "DEG2-CTP-TXRX",
626                 "tp-node-id": "ROADM-A1-DEG2"
627             }
628         },
629         {
630             "id": "20",
631             "resource": {
632                 "state": "inService",
633                 "tp-id": "XPDR3-NETWORK1",
634                 "tp-node-id": "XPDR-C2-XPDR3"
635             }
636         },
637         {
638             "id": "12",
639             "resource": {
640                 "state": "inService",
641                 "tp-id": "DEG1-TTP-TXRX",
642                 "tp-node-id": "ROADM-C1-DEG1"
643             }
644         },
645         {
646             "id": "13",
647             "resource": {
648                 "state": "inService",
649                 "node-id": "ROADM-C1-DEG1"
650             }
651         },
652         {
653             "id": "10",
654             "resource": {
655                 "state": "inService",
656                 "tp-id": "DEG2-TTP-TXRX",
657                 "tp-node-id": "ROADM-A1-DEG2"
658             }
659         },
660         {
661             "id": "21",
662             "resource": {
663                 "state": "inService",
664                 "node-id": "XPDR-C2-XPDR3"
665             }
666         },
667         {
668             "id": "11",
669             "resource": {
670                 "state": "inService",
671                 "link-id": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX"
672             }
673         },
674         {
675             "id": "22",
676             "resource": {
677                 "state": "inService",
678                 "tp-id": "XPDR3-CLIENT1",
679                 "tp-node-id": "XPDR-C2-XPDR3"
680             }
681         }
682     ]
683
684     pm_handling_degrade_body = {
685         "rpc-action": "set",
686         "pm-to-be-set-or-created": {
687             "current-pm-entry": [
688                 {
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": "",
693                     "current-pm": [
694                         {
695                             "type": "opticalPowerInput",
696                             "extension": "",
697                             "location": "nearEnd",
698                             "direction": "rx",
699                             "measurement": [
700                                 {
701                                     "granularity": "15min",
702                                     "pmParameterValue": -30,
703                                     "pmParameterUnit": "dBm",
704                                     "validity": "complete"
705                                 },
706                                 {
707                                     "granularity": "24Hour",
708                                     "pmParameterValue": -21.3,
709                                     "pmParameterUnit": "dBm",
710                                     "validity": "complete"
711                                 }
712                             ]
713                         }
714                     ]
715                 }
716             ]
717         }
718     }
719
720     pm_handling_recover_body = {
721         "rpc-action": "clear",
722         "pm-to-get-clear-or-delete": {
723             "current-pm-entry": [
724                 {
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": "",
729                     "current-pm": [
730                         {
731                             "type": "opticalPowerInput",
732                             "extension": "",
733                             "location": "nearEnd",
734                             "direction": "rx"
735                         }
736                     ]
737                 }
738             ]
739         }
740     }
741
742     @classmethod
743     def setUpClass(cls):
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)])
750
751     @classmethod
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")
757
758     def setUp(self):
759         time.sleep(1)
760
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)
765
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)
770
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)
775
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)
780
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)
785
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"])
793
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"])
801
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"])
809
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"])
817
818     def test_10_add_omsAttributes_roadma_roadmc(self):
819         # Config ROADMA-ROADMC oms-attributes
820         data = {"span": {
821             "auto-spanloss": "true",
822             "spanloss-base": 11.4,
823             "spanloss-current": 12,
824             "engineered-spanloss": 12.2,
825             "link-concatenation": [{
826                 "SRLG-Id": 0,
827                 "fiber-type": "smf",
828                 "SRLG-length": 100000,
829                 "pmd": 0.5}]}}
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)
832
833     def test_11_add_omsAttributes_roadmc_roadma(self):
834         # Config ROADMC-ROADMA oms-attributes
835         data = {"span": {
836             "auto-spanloss": "true",
837             "spanloss-base": 11.4,
838             "spanloss-current": 12,
839             "engineered-spanloss": 12.2,
840             "link-concatenation": [{
841                 "SRLG-Id": 0,
842                 "fiber-type": "smf",
843                 "SRLG-length": 100000,
844                 "pmd": 0.5}]}}
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)
847
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)
857
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')
867         time.sleep(1)
868
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))
873         time.sleep(2)
874
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')
885         time.sleep(1)
886
887     def test_16_service_reroute_service1(self):
888         response = test_utils.transportpce_api_rpc_request(
889             'org-openroadm-service', 'service-reroute',
890             {
891                 "sdnc-request-header": {
892                     "request-id": "request-1",
893                     "rpc-action": "service-reroute",
894                     "request-system-id": "appname"
895                 },
896                 "service-name": "service1",
897                 "service-resiliency": {
898                     "resiliency": "org-openroadm-common-service-types:restorable"
899                 }
900             })
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'])
905         time.sleep(2)
906
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))
911         time.sleep(2)
912
913     def test_18_get_eth_service1(self):
914         self.test_13_get_eth_service1()
915
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"])
923         time.sleep(2)
924
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"])
932         time.sleep(2)
933
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"])
941         time.sleep(2)
942
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"])
950         time.sleep(2)
951
952     def test_23_add_omsAttributes_roadma_roadmb(self):
953         # Config ROADMA-ROADMB oms-attributes
954         data = {"span": {
955             "auto-spanloss": "true",
956             "spanloss-base": 11.4,
957             "spanloss-current": 12,
958             "engineered-spanloss": 12.2,
959             "link-concatenation": [{
960                 "SRLG-Id": 0,
961                 "fiber-type": "smf",
962                 "SRLG-length": 100000,
963                 "pmd": 0.5}]}}
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)
966
967     def test_24_add_omsAttributes_roadmb_roadma(self):
968         # Config ROADMB-ROADMA oms-attributes
969         data = {"span": {
970             "auto-spanloss": "true",
971             "spanloss-base": 11.4,
972             "spanloss-current": 12,
973             "engineered-spanloss": 12.2,
974             "link-concatenation": [{
975                 "SRLG-Id": 0,
976                 "fiber-type": "smf",
977                 "SRLG-length": 100000,
978                 "pmd": 0.5}]}}
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)
981
982     def test_25_add_omsAttributes_roadmb_roadmc(self):
983         # Config ROADMB-ROADMC oms-attributes
984         data = {"span": {
985             "auto-spanloss": "true",
986             "spanloss-base": 11.4,
987             "spanloss-current": 12,
988             "engineered-spanloss": 12.2,
989             "link-concatenation": [{
990                 "SRLG-Id": 0,
991                 "fiber-type": "smf",
992                 "SRLG-length": 100000,
993                 "pmd": 0.5}]}}
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)
996
997     def test_26_add_omsAttributes_roadmc_roadmb(self):
998         # Config ROADMC-ROADMB oms-attributes
999         data = {"span": {
1000             "auto-spanloss": "true",
1001             "spanloss-base": 11.4,
1002             "spanloss-current": 12,
1003             "engineered-spanloss": 12.2,
1004             "link-concatenation": [{
1005                 "SRLG-Id": 0,
1006                 "fiber-type": "smf",
1007                 "SRLG-length": 100000,
1008                 "pmd": 0.5}]}}
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)
1011
1012     def test_27_create_OTS_ROADMA_DEG1(self):
1013         response = test_utils.transportpce_api_rpc_request(
1014             'transportpce-device-renderer', 'create-ots-oms',
1015             {
1016                 'node-id': 'ROADM-A1',
1017                 'logical-connection-point': 'DEG1-TTP-TXRX'
1018             })
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"])
1022
1023     def test_28_create_OTS_ROADMC_DEG2(self):
1024         response = test_utils.transportpce_api_rpc_request(
1025             'transportpce-device-renderer', 'create-ots-oms',
1026             {
1027                 'node-id': 'ROADM-C1',
1028                 'logical-connection-point': 'DEG2-TTP-TXRX'
1029             })
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"])
1033
1034     def test_29_create_OTS_ROADMB_DEG1(self):
1035         response = test_utils.transportpce_api_rpc_request(
1036             'transportpce-device-renderer', 'create-ots-oms',
1037             {
1038                 'node-id': 'ROADM-B1',
1039                 'logical-connection-point': 'DEG1-TTP-TXRX'
1040             })
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"])
1044
1045     def test_30_create_OTS_ROADMB_DEG2(self):
1046         response = test_utils.transportpce_api_rpc_request(
1047             'transportpce-device-renderer', 'create-ots-oms',
1048             {
1049                 'node-id': 'ROADM-B1',
1050                 'logical-connection-point': 'DEG2-TTP-TXRX'
1051             })
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"])
1055
1056     def test_31_calculate_span_loss_base_all(self):
1057         response = test_utils.transportpce_api_rpc_request(
1058             'transportpce-olm', 'calculate-spanloss-base',
1059             {
1060                 'src-type': 'all'
1061             })
1062         self.assertEqual(response['status_code'], requests.codes.ok)
1063         self.assertIn('Success', response["output"]["result"])
1064         self.assertIn({
1065             "spanloss": "25.7",
1066             "link-id": "ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX"
1067         }, response["output"]["spans"])
1068         self.assertIn({
1069             "spanloss": "17.6",
1070             "link-id": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX"
1071         }, response["output"]["spans"])
1072         self.assertIn({
1073             "spanloss": "23.6",
1074             "link-id": "ROADM-B1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG1-DEG1-TTP-TXRX"
1075         }, response["output"]["spans"])
1076         self.assertIn({
1077             "spanloss": "23.6",
1078             "link-id": "ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX"
1079         }, response["output"]["spans"])
1080         self.assertIn({
1081             "spanloss": "25.7",
1082             "link-id": "ROADM-C1-DEG2-DEG2-TTP-TXRXtoROADM-B1-DEG2-DEG2-TTP-TXRX"
1083         }, response["output"]["spans"])
1084         self.assertIn({
1085             "spanloss": "17.6",
1086             "link-id": "ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX"
1087         }, response["output"]["spans"])
1088         time.sleep(1)
1089
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'])
1095
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)
1106
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])
1116         time.sleep(1)
1117
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'])
1124
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)
1129
1130     def test_37_get_eth_service1(self):
1131         self.test_13_get_eth_service1()
1132
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'])
1139
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'])
1148         time.sleep(1)
1149
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(
1154             {
1155                 'id': '10',
1156                 'resource': {
1157                     'state': 'inService',
1158                     'tp-id': 'DEG2-TTP-TXRX',
1159                     'tp-node-id': 'ROADM-A1-DEG2'
1160                 }
1161             }
1162         )
1163         index2 = self.service_path_service_2_AtoZ.index(
1164             {
1165                 'id': '11',
1166                 'resource': {
1167                     'state': 'inService',
1168                     'link-id': 'ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX'
1169                 }
1170             }
1171         )
1172         service_path_expected = self.service_path_service_2_AtoZ[:index1] + [{
1173             'id': '10',
1174             'resource': {
1175                 'state': 'outOfService',
1176                 'tp-id': 'DEG2-TTP-TXRX',
1177                 'tp-node-id': 'ROADM-A1-DEG2'
1178             }
1179         }] + self.service_path_service_2_AtoZ[index1 + 1:index2] + [{
1180             'id': '11',
1181             'resource': {
1182                 'state': 'outOfService',
1183                 'link-id': 'ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX'
1184             }
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'])
1188
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()
1192
1193     def test_42_get_eth_service1(self):
1194         self.test_13_get_eth_service1()
1195
1196     def test_43_get_service_path_service_1(self):
1197         self.test_38_get_service_path_service_1()
1198
1199     def test_44_get_eth_service2(self):
1200         self.test_34_get_eth_service2()
1201
1202     def test_45_get_service_path_service_2(self):
1203         self.test_35_get_service_path_service_2()
1204
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)
1214
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)
1224
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']
1229         for link in links:
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))
1234
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))
1238
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))
1242
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))
1246
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))
1250
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))
1254
1255
1256 if __name__ == "__main__":
1257     unittest.main(verbosity=2)