2e96522440a6c92552615a954c5545ef17e789dd
[transportpce.git] / tests / transportpce_tests / 2.2.1 / test03_topology.py
1 #!/usr/bin/env python
2
3 ##############################################################################
4 # Copyright (c) 2017 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=no-member
13 # pylint: disable=too-many-public-methods
14 # pylint: disable=too-many-lines
15
16 import unittest
17 import time
18 import logging
19 import requests
20 # pylint: disable=wrong-import-order
21 import sys
22 sys.path.append('transportpce_tests/common/')
23 # pylint: disable=wrong-import-position
24 # pylint: disable=import-error
25 import test_utils  # nopep8
26
27
28 class TransportPCEtesting(unittest.TestCase):
29
30     processes = None
31     CHECK_DICT1 = {
32         'ROADM-A1-SRG1': {
33             'node_type': 'SRG',
34             'checks_tp': [({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:administrative-state': 'inService',
35                             'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP',
36                             'org-openroadm-common-network:operational-state': 'inService'}),
37                           ({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:administrative-state': 'inService',
38                             'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP',
39                             'org-openroadm-common-network:operational-state': 'inService'})]
40         },
41         'ROADM-A1-SRG3': {
42             'node_type': 'SRG',
43             'checks_tp': [({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:administrative-state': 'inService',
44                             'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP',
45                             'org-openroadm-common-network:operational-state': 'inService'}),
46                           ({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:administrative-state': 'inService',
47                             'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP',
48                             'org-openroadm-common-network:operational-state': 'inService'})]
49         },
50         'ROADM-A1-DEG1': {
51             'node_type': 'DEGREE',
52             'checks_tp': [({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:administrative-state': 'inService',
53                             'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP',
54                             'org-openroadm-common-network:operational-state': 'inService'}),
55                           ({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:administrative-state': 'inService',
56                             'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP',
57                             'org-openroadm-common-network:operational-state': 'inService'})]
58         },
59         'ROADM-A1-DEG2': {
60             'node_type': 'DEGREE',
61             'checks_tp': [({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:administrative-state': 'inService',
62                             'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP',
63                             'org-openroadm-common-network:operational-state': 'inService'}),
64                           ({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:administrative-state': 'inService',
65                             'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP',
66                             'org-openroadm-common-network:operational-state': 'inService'})]
67         }
68     }
69     CHECK_DICT2 = {
70         'ROADM-C1-SRG1': {
71             'node_type': 'SRG',
72             'checks_tp': [({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:administrative-state': 'inService',
73                             'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP',
74                             'org-openroadm-common-network:operational-state': 'inService'}),
75                           ({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:administrative-state': 'inService',
76                             'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP',
77                             'org-openroadm-common-network:operational-state': 'inService'})]
78         },
79         'ROADM-C1-DEG1': {
80             'node_type': 'DEGREE',
81             'checks_tp': [({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:administrative-state': 'inService',
82                             'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP',
83                             'org-openroadm-common-network:operational-state': 'inService'}),
84                           ({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:administrative-state': 'inService',
85                             'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP',
86                             'org-openroadm-common-network:operational-state': 'inService'})]
87         },
88         'ROADM-C1-DEG2': {
89             'node_type': 'DEGREE',
90             'checks_tp': [({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:administrative-state': 'inService',
91                             'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP',
92                             'org-openroadm-common-network:operational-state': 'inService'}),
93                           ({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:administrative-state': 'inService',
94                             'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP',
95                             'org-openroadm-common-network:operational-state': 'inService'})]
96         }
97     }
98     NODE_VERSION = '2.2.1'
99
100     @classmethod
101     def setUpClass(cls):
102         cls.processes = test_utils.start_tpce()
103         cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION), ('roadma', cls.NODE_VERSION),
104                                                ('roadmb', cls.NODE_VERSION), ('roadmc', cls.NODE_VERSION)])
105
106     @classmethod
107     def tearDownClass(cls):
108         # pylint: disable=not-an-iterable
109         for process in cls.processes:
110             test_utils.shutdown_process(process)
111         print("all processes killed")
112
113     def setUp(self):
114         time.sleep(5)
115
116     def test_01_connect_ROADM_A1(self):
117         response = test_utils.mount_device("ROADM-A1", ('roadma', self.NODE_VERSION))
118         self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
119
120     def test_02_getClliNetwork(self):
121         response = test_utils.get_ietf_network_request('clli-network', 'config')
122         self.assertEqual(response['status_code'], requests.codes.ok)
123         logging.info(response)
124         self.assertEqual(response['network'][0]['node'][0]['node-id'], 'NodeA')
125         self.assertEqual(response['network'][0]['node'][0]['org-openroadm-clli-network:clli'], 'NodeA')
126
127     def test_03_getOpenRoadmNetwork(self):
128         response = test_utils.get_ietf_network_request('openroadm-network', 'config')
129         self.assertEqual(response['status_code'], requests.codes.ok)
130         self.assertEqual(response['network'][0]['node'][0]['node-id'], 'ROADM-A1')
131         self.assertEqual(response['network'][0]['node'][0]['supporting-node'][0]['network-ref'], 'clli-network')
132         self.assertEqual(response['network'][0]['node'][0]['supporting-node'][0]['node-ref'], 'NodeA')
133         self.assertEqual(response['network'][0]['node'][0]['org-openroadm-common-network:node-type'], 'ROADM')
134         self.assertEqual(response['network'][0]['node'][0]['org-openroadm-network:model'], 'model2')
135
136     def test_04_getLinks_OpenroadmTopology(self):
137         # pylint: disable=redundant-unittest-assert
138         response = test_utils.get_ietf_network_request('openroadm-topology', 'config')
139         self.assertEqual(response['status_code'], requests.codes.ok)
140         self.assertEqual(len(response['network'][0]['ietf-network-topology:link']), 10)
141         check_list = {'EXPRESS-LINK': ['ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX',
142                                        'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX'],
143                       'ADD-LINK': ['ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX',
144                                    'ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX',
145                                    'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX',
146                                    'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX'],
147                       'DROP-LINK': ['ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX',
148                                     'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX',
149                                     'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX',
150                                     'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX']
151                       }
152         for link in response['network'][0]['ietf-network-topology:link']:
153             linkId = link['link-id']
154             linkType = link['org-openroadm-common-network:link-type']
155             self.assertIn(linkType, check_list)
156             find = linkId in check_list[linkType]
157             self.assertEqual(find, True)
158             (check_list[linkType]).remove(linkId)
159         for link in check_list.values():
160             self.assertEqual(len(link), 0)
161
162     def test_05_getNodes_OpenRoadmTopology(self):
163         # pylint: disable=redundant-unittest-assert
164         response = test_utils.get_ietf_network_request('openroadm-topology', 'config')
165         self.assertEqual(response['status_code'], requests.codes.ok)
166         self.assertEqual(len(response['network'][0]['node']), 4)
167         listNode = ['ROADM-A1-SRG1', 'ROADM-A1-SRG3', 'ROADM-A1-DEG1', 'ROADM-A1-DEG2']
168         for node in response['network'][0]['node']:
169             self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, node['supporting-node'])
170             nodeType = node['org-openroadm-common-network:node-type']
171             nodeId = node['node-id']
172             self.assertIn(nodeId, self.CHECK_DICT1)
173             self.assertEqual(nodeType, self.CHECK_DICT1[nodeId]['node_type'])
174             if self.CHECK_DICT1[nodeId]['node_type'] == 'SRG':
175                 self.assertEqual(len(node['ietf-network-topology:termination-point']), 5)
176             for tp in self.CHECK_DICT1[nodeId]['checks_tp']:
177                 self.assertIn(tp, node['ietf-network-topology:termination-point'])
178             self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, node['supporting-node'])
179             self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, node['supporting-node'])
180             listNode.remove(nodeId)
181         self.assertEqual(len(listNode), 0)
182
183     def test_06_connect_XPDRA(self):
184         response = test_utils.mount_device("XPDR-A1", ('xpdra', self.NODE_VERSION))
185         self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
186
187     def test_07_getClliNetwork(self):
188         response = test_utils.get_ietf_network_request('clli-network', 'config')
189         self.assertEqual(response['status_code'], requests.codes.ok)
190         self.assertEqual(response['network'][0]['node'][0]['node-id'], 'NodeA')
191         self.assertEqual(response['network'][0]['node'][0]['org-openroadm-clli-network:clli'], 'NodeA')
192
193     def test_08_getOpenRoadmNetwork(self):
194         # pylint: disable=redundant-unittest-assert
195         response = test_utils.get_ietf_network_request('openroadm-network', 'config')
196         self.assertEqual(response['status_code'], requests.codes.ok)
197         nbNode = len(response['network'][0]['node'])
198         self.assertEqual(nbNode, 2)
199         for node in response['network'][0]['node']:
200             self.assertEqual(node['supporting-node'][0]['network-ref'], 'clli-network')
201             self.assertEqual(node['supporting-node'][0]['node-ref'], 'NodeA')
202             nodeId = node['node-id']
203             if nodeId == 'XPDR-A1':
204                 self.assertEqual(node['org-openroadm-common-network:node-type'], 'XPONDER')
205             elif nodeId == 'ROADM-A1':
206                 self.assertEqual(node['org-openroadm-common-network:node-type'], 'ROADM')
207             else:
208                 self.assertFalse(True)
209                 continue
210             self.assertEqual(node['org-openroadm-network:model'], 'model2')
211
212     def test_09_getNodes_OpenRoadmTopology(self):
213         # pylint: disable=redundant-unittest-assert
214         response = test_utils.get_ietf_network_request('openroadm-topology', 'config')
215         self.assertEqual(response['status_code'], requests.codes.ok)
216         self.assertEqual(len(response['network'][0]['node']), 5)
217         listNode = ['XPDR-A1-XPDR1', 'ROADM-A1-SRG1', 'ROADM-A1-SRG3', 'ROADM-A1-DEG1', 'ROADM-A1-DEG2']
218         for node in response['network'][0]['node']:
219             nodeType = node['org-openroadm-common-network:node-type']
220             nodeId = node['node-id']
221             # Tests related to XPDRA nodes
222             if nodeId == 'XPDR-A1-XPDR1':
223                 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDR-A1'}, node['supporting-node'])
224                 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, node['supporting-node'])
225                 self.assertEqual(nodeType, 'XPONDER')
226                 client = 0
227                 network = 0
228                 for tp in node['ietf-network-topology:termination-point']:
229                     tpType = (tp['org-openroadm-common-network:tp-type'])
230                     tpId = tp['tp-id']
231                     if tpType == 'XPONDER-CLIENT':
232                         client += 1
233                     elif tpType == 'XPONDER-NETWORK':
234                         network += 1
235                     if tpId == 'XPDR1-NETWORK2':
236                         self.assertEqual(
237                             tp['org-openroadm-common-network:associated-connection-map-tp'], ['XPDR1-CLIENT2'])
238                     if tpId == 'XPDR1-CLIENT2':
239                         self.assertEqual(
240                             tp['org-openroadm-common-network:associated-connection-map-tp'], ['XPDR1-NETWORK2'])
241                 self.assertEqual(client, 2)
242                 self.assertEqual(network, 2)
243                 listNode.remove(nodeId)
244             elif nodeId in self.CHECK_DICT1:
245                 self.assertEqual(nodeType, self.CHECK_DICT1[nodeId]['node_type'])
246                 if self.CHECK_DICT1[nodeId]['node_type'] == 'SRG':
247                     self.assertEqual(len(node['ietf-network-topology:termination-point']), 5)
248                 for tp in self.CHECK_DICT1[nodeId]['checks_tp']:
249                     self.assertIn(tp, node['ietf-network-topology:termination-point'])
250                 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, node['supporting-node'])
251                 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, node['supporting-node'])
252                 listNode.remove(nodeId)
253             else:
254                 self.assertFalse(True)
255         self.assertEqual(len(listNode), 0)
256
257     # Connect the tail XPDRA to ROADMA and vice versa
258     def test_10_connect_tail_xpdr_rdm(self):
259         # Connect the tail: XPDRA to ROADMA
260         response = test_utils.transportpce_api_rpc_request(
261             'transportpce-networkutils', 'init-xpdr-rdm-links',
262             {'links-input': {'xpdr-node': 'XPDR-A1', 'xpdr-num': '1', 'network-num': '1',
263                              'rdm-node': 'ROADM-A1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP1-TXRX'}})
264         self.assertEqual(response['status_code'], requests.codes.ok)
265
266     def test_11_connect_tail_rdm_xpdr(self):
267         response = test_utils.transportpce_api_rpc_request(
268             'transportpce-networkutils', 'init-rdm-xpdr-links',
269             {'links-input': {'xpdr-node': 'XPDR-A1', 'xpdr-num': '1', 'network-num': '1',
270                              'rdm-node': 'ROADM-A1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP1-TXRX'}})
271         self.assertEqual(response['status_code'], requests.codes.ok)
272
273     def test_12_getLinks_OpenRoadmTopology(self):
274         # pylint: disable=redundant-unittest-assert
275         response = test_utils.get_ietf_network_request('openroadm-topology', 'config')
276         self.assertEqual(response['status_code'], requests.codes.ok)
277         self.assertEqual(len(response['network'][0]['ietf-network-topology:link']), 12)
278         check_list = {'EXPRESS-LINK': ['ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX',
279                                        'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX'],
280                       'ADD-LINK': ['ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX',
281                                    'ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX',
282                                    'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX',
283                                    'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX'],
284                       'DROP-LINK': ['ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX',
285                                     'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX',
286                                     'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX',
287                                     'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX'],
288                       'XPONDER-INPUT': ['ROADM-A1-SRG1-SRG1-PP1-TXRXtoXPDR-A1-XPDR1-XPDR1-NETWORK1'],
289                       'XPONDER-OUTPUT': ['XPDR-A1-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX']
290                       }
291         for link in response['network'][0]['ietf-network-topology:link']:
292             linkId = link['link-id']
293             linkType = link['org-openroadm-common-network:link-type']
294             self.assertIn(linkType, check_list)
295             find = linkId in check_list[linkType]
296             self.assertEqual(find, True)
297             (check_list[linkType]).remove(linkId)
298         for link in check_list.values():
299             self.assertEqual(len(link), 0)
300
301     def test_13_connect_ROADMC(self):
302         response = test_utils.mount_device("ROADM-C1", ('roadmc', self.NODE_VERSION))
303         self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
304
305     def test_14_omsAttributes_ROADMA_ROADMC(self):
306         # Config ROADMA-ROADMC oms-attributes
307         data = {"span": {
308             "auto-spanloss": "true",
309             "engineered-spanloss": 12.2,
310             "link-concatenation": [{
311                 "SRLG-Id": 0,
312                 "fiber-type": "smf",
313                 "SRLG-length": 100000,
314                 "pmd": 0.5}]}}
315         response = test_utils.add_oms_attr_request(
316             "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX", data)
317         self.assertEqual(response.status_code, requests.codes.created)
318
319     def test_15_omsAttributes_ROADMC_ROADMA(self):
320         # Config ROADM-C1-ROADM-A1 oms-attributes
321         data = {"span": {
322             "auto-spanloss": "true",
323             "engineered-spanloss": 12.2,
324             "link-concatenation": [{
325                 "SRLG-Id": 0,
326                 "fiber-type": "smf",
327                 "SRLG-length": 100000,
328                 "pmd": 0.5}]}}
329
330         response = test_utils.add_oms_attr_request(
331             "ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX", data)
332         self.assertEqual(response.status_code, requests.codes.created)
333
334     def test_16_getClliNetwork(self):
335         # pylint: disable=redundant-unittest-assert
336         response = test_utils.get_ietf_network_request('clli-network', 'config')
337         self.assertEqual(response['status_code'], requests.codes.ok)
338         listNode = ['NodeA', 'NodeC']
339         for node in response['network'][0]['node']:
340             nodeId = node['node-id']
341             self.assertIn(nodeId, listNode)
342             self.assertEqual(node['org-openroadm-clli-network:clli'], nodeId)
343             listNode.remove(nodeId)
344         self.assertEqual(len(listNode), 0)
345
346     def test_17_getOpenRoadmNetwork(self):
347         # pylint: disable=redundant-unittest-assert
348         response = test_utils.get_ietf_network_request('openroadm-network', 'config')
349         self.assertEqual(response['status_code'], requests.codes.ok)
350         nbNode = len(response['network'][0]['node'])
351         self.assertEqual(nbNode, 3)
352         listNode = ['XPDR-A1', 'ROADM-A1', 'ROADM-C1']
353         CHECK_LIST = {'XPDR-A1': {'node-ref': 'NodeA', 'node-type': 'XPONDER'},
354                       'ROADM-A1': {'node-ref': 'NodeA', 'node-type': 'ROADM'},
355                       'ROADM-C1': {'node-ref': 'NodeC', 'node-type': 'ROADM'}
356                       }
357         for node in response['network'][0]['node']:
358             self.assertEqual(node['supporting-node'][0]['network-ref'], 'clli-network')
359             nodeId = node['node-id']
360             if nodeId in CHECK_LIST:
361                 self.assertEqual(node['supporting-node'][0]['node-ref'], CHECK_LIST[nodeId]['node-ref'])
362                 self.assertEqual(node['org-openroadm-common-network:node-type'], CHECK_LIST[nodeId]['node-type'])
363                 listNode.remove(nodeId)
364             else:
365                 self.assertFalse(True)
366                 continue
367             self.assertEqual(node['org-openroadm-network:model'], 'model2')
368         self.assertEqual(len(listNode), 0)
369
370     def test_18_getROADMLinkOpenRoadmTopology(self):
371         # pylint: disable=redundant-unittest-assert
372         response = test_utils.get_ietf_network_request('openroadm-topology', 'config')
373         self.assertEqual(response['status_code'], requests.codes.ok)
374         self.assertEqual(len(response['network'][0]['ietf-network-topology:link']), 20)
375         check_list = {'EXPRESS-LINK': ['ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX',
376                                        'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX',
377                                        'ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX',
378                                        'ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX'],
379                       'ADD-LINK': ['ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX',
380                                    'ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX',
381                                    'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX',
382                                    'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX',
383                                    'ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX',
384                                    'ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX'],
385                       'DROP-LINK': ['ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX',
386                                     'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX',
387                                     'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX',
388                                     'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX',
389                                     'ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX',
390                                     'ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX'],
391                       'ROADM-TO-ROADM': ['ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX',
392                                          'ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX'],
393                       'XPONDER-INPUT': ['ROADM-A1-SRG1-SRG1-PP1-TXRXtoXPDR-A1-XPDR1-XPDR1-NETWORK1'],
394                       'XPONDER-OUTPUT': ['XPDR-A1-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX']
395                       }
396         for link in response['network'][0]['ietf-network-topology:link']:
397             linkId = link['link-id']
398             linkType = link['org-openroadm-common-network:link-type']
399             self.assertIn(linkType, check_list)
400             find = linkId in check_list[linkType]
401             self.assertEqual(find, True)
402             (check_list[linkType]).remove(linkId)
403         for link in check_list.values():
404             self.assertEqual(len(link), 0)
405
406     def test_19_getLinkOmsAttributesOpenRoadmTopology(self):
407         response = test_utils.get_ietf_network_request('openroadm-topology', 'config')
408         self.assertEqual(response['status_code'], requests.codes.ok)
409         self.assertEqual(len(response['network'][0]['ietf-network-topology:link']), 20)
410         R2RLink = ['ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX',
411                    'ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX']
412         for link in response['network'][0]['ietf-network-topology:link']:
413             link_id = link['link-id']
414             if link_id in R2RLink:
415                 find = False
416                 spanLoss = link['org-openroadm-network-topology:OMS-attributes']['span']['engineered-spanloss']
417                 # pylint: disable=line-too-long
418                 length = link['org-openroadm-network-topology:OMS-attributes']['span']['link-concatenation'][0]['SRLG-length']
419                 if (spanLoss is not None) & (length is not None):
420                     find = True
421                 self.assertTrue(find)
422                 R2RLink.remove(link_id)
423         self.assertEqual(len(R2RLink), 0)
424
425     def test_20_getNodes_OpenRoadmTopology(self):
426         # pylint: disable=redundant-unittest-assert
427         response = test_utils.get_ietf_network_request('openroadm-topology', 'config')
428         self.assertEqual(response['status_code'], requests.codes.ok)
429         self.assertEqual(len(response['network'][0]['node']), 8)
430         listNode = ['XPDR-A1-XPDR1',
431                     'ROADM-A1-SRG1', 'ROADM-A1-SRG3', 'ROADM-A1-DEG1', 'ROADM-A1-DEG2',
432                     'ROADM-C1-SRG1', 'ROADM-C1-DEG1', 'ROADM-C1-DEG2']
433         # Tests related to XPDRA nodes
434         for node in response['network'][0]['node']:
435             nodeType = node['org-openroadm-common-network:node-type']
436             nodeId = node['node-id']
437             if nodeId == 'XPDR-A1-XPDR1':
438                 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDR-A1'}, node['supporting-node'])
439                 self.assertEqual(nodeType, 'XPONDER')
440                 nbTps = len(node['ietf-network-topology:termination-point'])
441                 self.assertTrue(nbTps >= 4)
442                 client = 0
443                 network = 0
444                 for tp in node['ietf-network-topology:termination-point']:
445                     tpType = (tp['org-openroadm-common-network:tp-type'])
446                     if tpType == 'XPONDER-CLIENT':
447                         client += 1
448                     elif tpType == 'XPONDER-NETWORK':
449                         network += 1
450                 self.assertTrue(client == 2)
451                 self.assertTrue(network == 2)
452                 listNode.remove(nodeId)
453         # Tests related to ROADMA nodes
454             elif nodeId in self.CHECK_DICT1:
455                 self.assertEqual(nodeType, self.CHECK_DICT1[nodeId]['node_type'])
456                 if self.CHECK_DICT1[nodeId]['node_type'] == 'SRG':
457                     self.assertEqual(len(node['ietf-network-topology:termination-point']), 5)
458                 for tp in self.CHECK_DICT1[nodeId]['checks_tp']:
459                     self.assertIn(tp, node['ietf-network-topology:termination-point'])
460                 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, node['supporting-node'])
461                 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, node['supporting-node'])
462                 self.assertEqual(node['org-openroadm-common-network:node-type'], self.CHECK_DICT1[nodeId]['node_type'])
463                 listNode.remove(nodeId)
464         # Tests related to ROADMA nodes
465             elif nodeId in self.CHECK_DICT2:
466                 self.assertEqual(nodeType, self.CHECK_DICT2[nodeId]['node_type'])
467                 if self.CHECK_DICT2[nodeId]['node_type'] == 'SRG':
468                     self.assertEqual(len(node['ietf-network-topology:termination-point']), 5)
469                 for tp in self.CHECK_DICT2[nodeId]['checks_tp']:
470                     self.assertIn(tp, node['ietf-network-topology:termination-point'])
471                 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeC'}, node['supporting-node'])
472                 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-C1'}, node['supporting-node'])
473                 self.assertEqual(node['org-openroadm-common-network:node-type'], self.CHECK_DICT2[nodeId]['node_type'])
474                 listNode.remove(nodeId)
475         self.assertEqual(len(listNode), 0)
476
477     def test_21_connect_ROADMB(self):
478         response = test_utils.mount_device("ROADM-B1", ('roadmb', self.NODE_VERSION))
479         self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
480
481     def test_22_omsAttributes_ROADMA_ROADMB(self):
482         # Config ROADM-A1-ROADM-B1 oms-attributes
483         data = {"span": {
484                 "auto-spanloss": "true",
485                 "engineered-spanloss": 12.2,
486                 "spanloss-current": 12,
487                 "spanloss-base": 11.4,
488                 "link-concatenation": [{
489                     "SRLG-Id": 0,
490                     "fiber-type": "smf",
491                     "SRLG-length": 100000,
492                     "pmd": 0.5}]}}
493         response = test_utils.add_oms_attr_request(
494             "ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX", data)
495         self.assertEqual(response.status_code, requests.codes.created)
496
497     def test_23_omsAttributes_ROADMB_ROADMA(self):
498         # Config ROADM-B1-ROADM-A1 oms-attributes
499         data = {"span": {
500                 "auto-spanloss": "true",
501                 "engineered-spanloss": 12.2,
502                 "spanloss-current": 12,
503                 "spanloss-base": 11.4,
504                 "link-concatenation": [{
505                     "SRLG-Id": 0,
506                     "fiber-type": "smf",
507                     "SRLG-length": 100000,
508                     "pmd": 0.5}]}}
509         response = test_utils.add_oms_attr_request(
510             "ROADM-B1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG1-DEG1-TTP-TXRX", data)
511         self.assertEqual(response.status_code, requests.codes.created)
512
513     def test_24_omsAttributes_ROADMB_ROADMC(self):
514         # Config ROADM-B1-ROADM-C1 oms-attributes
515         data = {"span": {
516                 "auto-spanloss": "true",
517                 "engineered-spanloss": 12.2,
518                 "spanloss-current": 12,
519                 "spanloss-base": 11.4,
520                 "link-concatenation": [{
521                     "SRLG-Id": 0,
522                     "fiber-type": "smf",
523                     "SRLG-length": 100000,
524                     "pmd": 0.5}]}}
525         response = test_utils.add_oms_attr_request(
526             "ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX", data)
527         self.assertEqual(response.status_code, requests.codes.created)
528
529     def test_25_omsAttributes_ROADMC_ROADMB(self):
530         # Config ROADM-C1-ROADM-B1 oms-attributes
531         data = {"span": {
532                 "auto-spanloss": "true",
533                 "engineered-spanloss": 12.2,
534                 "link-concatenation": [{
535                     "SRLG-Id": 0,
536                     "fiber-type": "smf",
537                     "SRLG-length": 100000,
538                     "pmd": 0.5}]}}
539         response = test_utils.add_oms_attr_request(
540             "ROADM-C1-DEG2-DEG2-TTP-TXRXtoROADM-B1-DEG2-DEG2-TTP-TXRX", data)
541         self.assertEqual(response.status_code, requests.codes.created)
542
543     def test_26_getClliNetwork(self):
544         # pylint: disable=redundant-unittest-assert
545         response = test_utils.get_ietf_network_request('clli-network', 'config')
546         self.assertEqual(response['status_code'], requests.codes.ok)
547         listNode = ['NodeA', 'NodeB', 'NodeC']
548         for node in response['network'][0]['node']:
549             nodeId = node['node-id']
550             self.assertIn(nodeId, listNode)
551             self.assertEqual(node['org-openroadm-clli-network:clli'], nodeId)
552             listNode.remove(nodeId)
553         self.assertEqual(len(listNode), 0)
554
555     def test_27_verifyDegree(self):
556         response = test_utils.get_ietf_network_request('openroadm-topology', 'config')
557         self.assertEqual(response['status_code'], requests.codes.ok)
558         listR2RLink = ['ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX',
559                        'ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX',
560                        'ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX',
561                        'ROADM-C1-DEG2-DEG2-TTP-TXRXtoROADM-B1-DEG2-DEG2-TTP-TXRX',
562                        'ROADM-B1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG1-DEG1-TTP-TXRX',
563                        'ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX']
564         for link in response['network'][0]['ietf-network-topology:link']:
565             if link['org-openroadm-common-network:link-type'] == 'ROADM-TO-ROADM':
566                 link_id = link['link-id']
567                 find = link_id in listR2RLink
568                 self.assertEqual(find, True)
569                 listR2RLink.remove(link_id)
570         self.assertEqual(len(listR2RLink), 0)
571
572     def test_28_verifyOppositeLinkTopology(self):
573         response = test_utils.get_ietf_network_request('openroadm-topology', 'config')
574         self.assertEqual(response['status_code'], requests.codes.ok)
575         self.assertEqual(len(response['network'][0]['ietf-network-topology:link']), 30)
576         for link in response['network'][0]['ietf-network-topology:link']:
577             link_id = link['link-id']
578             link_type = link['org-openroadm-common-network:link-type']
579             link_src = link['source']['source-node']
580             link_dest = link['destination']['dest-node']
581             oppLink_id = link['org-openroadm-common-network:opposite-link']
582             # Find the opposite link
583             res_oppLink = test_utils.get_ietf_network_link_request('openroadm-topology', oppLink_id, 'config')
584             self.assertEqual(res_oppLink['status_code'], requests.codes.ok)
585             self.assertEqual(res_oppLink['link']['org-openroadm-common-network:opposite-link'], link_id)
586             self.assertEqual(res_oppLink['link']['source']['source-node'], link_dest)
587             self.assertEqual(res_oppLink['link']['destination']['dest-node'], link_src)
588             oppLink_type = res_oppLink['link']['org-openroadm-common-network:link-type']
589             CHECK_DICT = {'ADD-LINK': 'DROP-LINK', 'DROP-LINK': 'ADD-LINK',
590                           'EXPRESS-LINK': 'EXPRESS-LINK', 'ROADM-TO-ROADM': 'ROADM-TO-ROADM',
591                           'XPONDER-INPUT': 'XPONDER-OUTPUT', 'XPONDER-OUTUT': 'XPONDER-INPUT'}
592             if link_type in CHECK_DICT:
593                 self.assertEqual(oppLink_type, CHECK_DICT[link_type])
594
595     def test_29_getLinkOmsAttributesOpenRoadmTopology(self):
596         response = test_utils.get_ietf_network_request('openroadm-topology', 'config')
597         self.assertEqual(response['status_code'], requests.codes.ok)
598         R2RLink = ['ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX',
599                    'ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX',
600                    'ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX',
601                    'ROADM-C1-DEG2-DEG2-TTP-TXRXtoROADM-B1-DEG2-DEG2-TTP-TXRX',
602                    'ROADM-B1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG1-DEG1-TTP-TXRX',
603                    'ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX']
604         for link in response['network'][0]['ietf-network-topology:link']:
605             link_id = link['link-id']
606             if link_id in R2RLink:
607                 find = False
608                 spanLoss = link['org-openroadm-network-topology:OMS-attributes']['span']["engineered-spanloss"]
609                 # pylint: disable=line-too-long
610                 length = link['org-openroadm-network-topology:OMS-attributes']['span']['link-concatenation'][0]['SRLG-length']
611                 if (spanLoss is not None) & (length is not None):
612                     find = True
613                 self.assertTrue(find)
614                 R2RLink.remove(link_id)
615         self.assertEqual(len(R2RLink), 0)
616
617     def test_30_disconnect_ROADMB(self):
618         # Delete in the topology-netconf
619         response = test_utils.unmount_device("ROADM-B1")
620         self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
621         # Delete in the clli-network
622         response = test_utils.del_ietf_network_node_request('clli-network', 'NodeB', 'config')
623         self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
624
625     def test_31_disconnect_ROADMC(self):
626         # Delete in the topology-netconf
627         response = test_utils.unmount_device("ROADM-C1")
628         self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
629         # Delete in the clli-network
630         response = test_utils.del_ietf_network_node_request('clli-network', 'NodeC', 'config')
631         self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
632
633     def test_32_getNodes_OpenRoadmTopology(self):
634         # pylint: disable=redundant-unittest-assert
635         response = test_utils.get_ietf_network_request('openroadm-topology', 'config')
636         self.assertEqual(response['status_code'], requests.codes.ok)
637         self.assertEqual(len(response['network'][0]['node']), 5)
638         listNode = ['XPDR-A1-XPDR1', 'ROADM-A1-SRG1', 'ROADM-A1-SRG3', 'ROADM-A1-DEG1', 'ROADM-A1-DEG2']
639         for node in response['network'][0]['node']:
640             nodeType = node['org-openroadm-common-network:node-type']
641             nodeId = node['node-id']
642             # Tests related to XPDRA nodes
643             if nodeId == 'XPDR-A1-XPDR1':
644                 for tp in node['ietf-network-topology:termination-point']:
645                     tpid = tp['tp-id']
646                     if tpid == 'XPDR1-CLIENT1':
647                         self.assertEqual((tp['org-openroadm-common-network:tp-type']), 'XPONDER-CLIENT')
648                     elif tpid == 'XPDR1-NETWORK1':
649                         self.assertEqual((tp['org-openroadm-common-network:tp-type']), 'XPONDER-NETWORK')
650                         # pylint: disable=line-too-long
651                         self.assertEqual((tp['org-openroadm-network-topology:xpdr-network-attributes']['tail-equipment-id']),
652                                          'ROADM-A1-SRG1--SRG1-PP1-TXRX')
653                     elif tpid == 'XPDR2-NETWORK1':
654                         self.assertEqual((tp['org-openroadm-common-network:tp-type']), 'XPONDER-NETWORK')
655                         # pylint: disable=line-too-long
656                 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDR-A1'}, node['supporting-node'])
657                 listNode.remove(nodeId)
658             # Tests related to ROADMA nodes
659             elif nodeId in self.CHECK_DICT1:
660                 self.assertEqual(nodeType, self.CHECK_DICT1[nodeId]['node_type'])
661                 if self.CHECK_DICT1[nodeId]['node_type'] == 'SRG':
662                     self.assertEqual(len(node['ietf-network-topology:termination-point']), 5)
663                 for tp in self.CHECK_DICT1[nodeId]['checks_tp']:
664                     self.assertIn(tp, node['ietf-network-topology:termination-point'])
665                 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, node['supporting-node'])
666                 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, node['supporting-node'])
667                 listNode.remove(nodeId)
668             else:
669                 self.assertFalse(True)
670         self.assertEqual(len(listNode), 0)
671         # Test related to SRG1 of ROADMC
672         for node in response['network'][0]['node']:
673             self.assertNotEqual(node['node-id'], 'ROADM-C1-SRG1')
674             self.assertNotEqual(node['node-id'], 'ROADM-C1-DEG1')
675             self.assertNotEqual(node['node-id'], 'ROADM-C1-DEG2')
676
677     def test_33_getOpenRoadmNetwork(self):
678         response = test_utils.get_ietf_network_request('openroadm-network', 'config')
679         self.assertEqual(response['status_code'], requests.codes.ok)
680         nbNode = len(response['network'][0]['node'])
681         self.assertEqual(nbNode, 2)
682         for node in response['network'][0]['node']:
683             self.assertNotEqual(node['node-id'], 'ROADM-C1')
684             self.assertNotEqual(node['node-id'], 'ROADM-B1')
685
686     def test_34_getClliNetwork(self):
687         response = test_utils.get_ietf_network_request('clli-network', 'config')
688         self.assertEqual(response['status_code'], requests.codes.ok)
689         self.assertEqual(len(response['network'][0]['node']), 1)
690         self.assertNotEqual(response['network'][0]['node'][0]['org-openroadm-clli-network:clli'], 'NodeC')
691
692     def test_35_disconnect_XPDRA(self):
693         response = test_utils.unmount_device("XPDR-A1")
694         self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
695
696     def test_36_getClliNetwork(self):
697         response = test_utils.get_ietf_network_request('clli-network', 'config')
698         self.assertEqual(response['status_code'], requests.codes.ok)
699         self.assertEqual(len(response['network'][0]['node']), 1)
700         self.assertEqual(response['network'][0]['node'][0]['org-openroadm-clli-network:clli'], 'NodeA')
701
702     def test_37_getOpenRoadmNetwork(self):
703         response = test_utils.get_ietf_network_request('openroadm-network', 'config')
704         self.assertEqual(response['status_code'], requests.codes.ok)
705         self.assertEqual(len(response['network'][0]['node']), 1)
706         self.assertNotEqual(response['network'][0]['node'][0]['node-id'], 'XPDR-A1')
707
708     def test_38_getNodes_OpenRoadmTopology(self):
709         response = test_utils.get_ietf_network_request('openroadm-topology', 'config')
710         self.assertEqual(response['status_code'], requests.codes.ok)
711         self.assertEqual(len(response['network'][0]['node']), 4)
712         listNode = ['ROADM-A1-SRG1', 'ROADM-A1-SRG3', 'ROADM-A1-DEG1', 'ROADM-A1-DEG2']
713         for node in response['network'][0]['node']:
714             self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, node['supporting-node'])
715             nodeType = node['org-openroadm-common-network:node-type']
716             nodeId = node['node-id']
717             self.assertIn(nodeId, self.CHECK_DICT1)
718             self.assertEqual(nodeType, self.CHECK_DICT1[nodeId]['node_type'])
719             if self.CHECK_DICT1[nodeId]['node_type'] == 'SRG':
720                 self.assertEqual(len(node['ietf-network-topology:termination-point']), 5)
721             for tp in self.CHECK_DICT1[nodeId]['checks_tp']:
722                 self.assertIn(tp, node['ietf-network-topology:termination-point'])
723             self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, node['supporting-node'])
724             self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, node['supporting-node'])
725             listNode.remove(nodeId)
726         self.assertEqual(len(listNode), 0)
727
728     def test_39_disconnect_ROADM_XPDRA_link(self):
729         # Link-1
730         response = test_utils.del_ietf_network_link_request(
731             'openroadm-topology',
732             'XPDR-A1-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX',
733             'config')
734         # Link-2
735         response2 = test_utils.del_ietf_network_link_request(
736             'openroadm-topology',
737             'ROADM-A1-SRG1-SRG1-PP1-TXRXtoXPDR-A1-XPDR1-XPDR1-NETWORK1',
738             'config')
739         self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
740         self.assertIn(response2.status_code, (requests.codes.ok, requests.codes.no_content))
741
742     def test_40_getLinks_OpenRoadmTopology(self):
743         response = test_utils.get_ietf_network_request('openroadm-topology', 'config')
744         self.assertEqual(response['status_code'], requests.codes.ok)
745         self.assertEqual(len(response['network'][0]['ietf-network-topology:link']), 16)
746         check_list = {'EXPRESS-LINK': ['ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX',
747                                        'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX'],
748                       'ADD-LINK': ['ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX',
749                                    'ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX',
750                                    'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX',
751                                    'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX'],
752                       'DROP-LINK': ['ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX',
753                                     'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX',
754                                     'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX',
755                                     'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX']
756                       }
757         roadmtoroadmLink = 0
758         for link in response['network'][0]['ietf-network-topology:link']:
759             linkId = link['link-id']
760             linkType = link['org-openroadm-common-network:link-type']
761             if linkType in check_list:
762                 find = linkId in check_list[linkType]
763                 self.assertEqual(find, True)
764                 (check_list[linkType]).remove(linkId)
765             else:
766                 roadmtoroadmLink += 1
767         for link in check_list.values():
768             self.assertEqual(len(link), 0)
769         self.assertEqual(roadmtoroadmLink, 6)
770         for link in response['network'][0]['ietf-network-topology:link']:
771             self.assertNotEqual(link['org-openroadm-common-network:link-type'], 'XPONDER-OUTPUT')
772             self.assertNotEqual(link['org-openroadm-common-network:link-type'], 'XPONDER-INPUT')
773
774     def test_41_disconnect_ROADMA(self):
775         response = test_utils.unmount_device("ROADM-A1")
776         self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
777         # Delete in the clli-network
778         response = test_utils.del_ietf_network_node_request('clli-network', 'NodeA', 'config')
779         self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
780
781     def test_42_getClliNetwork(self):
782         response = test_utils.get_ietf_network_request('clli-network', 'config')
783         self.assertEqual(response['status_code'], requests.codes.ok)
784         self.assertNotIn('node', response['network'][0])
785
786     def test_43_getOpenRoadmNetwork(self):
787         response = test_utils.get_ietf_network_request('openroadm-network', 'config')
788         self.assertEqual(response['status_code'], requests.codes.ok)
789         self.assertNotIn('node', response['network'][0])
790
791     def test_44_check_roadm2roadm_link_persistence(self):
792         response = test_utils.get_ietf_network_request('openroadm-topology', 'config')
793         self.assertEqual(response['status_code'], requests.codes.ok)
794         self.assertNotIn('node', response['network'][0])
795         self.assertEqual(len(response['network'][0]['ietf-network-topology:link']), 6)
796
797
798 if __name__ == "__main__":
799     unittest.main(verbosity=2)