3 ##############################################################################
4 # Copyright (c) 2017 Orange, Inc. and others. All rights reserved.
6 # All rights reserved. This program and the accompanying materials
7 # are made available under the terms of the Apache License, Version 2.0
8 # which accompanies this distribution, and is available at
9 # http://www.apache.org/licenses/LICENSE-2.0
10 ##############################################################################
12 # pylint: disable=no-member
13 # pylint: disable=too-many-public-methods
20 from common import test_utils
23 class TransportPCEtesting(unittest.TestCase):
29 cls.processes = test_utils.start_tpce()
30 cls.processes = test_utils.start_sims(['xpdra', 'roadma', 'roadmb', 'roadmc'])
33 def tearDownClass(cls):
34 for process in cls.processes:
35 test_utils.shutdown_process(process)
36 print("all processes killed")
41 def test_01_connect_ROADM_A1(self):
42 response = test_utils.mount_device("ROADM-A1", 'roadma')
43 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
45 def test_02_getClliNetwork(self):
46 response = test_utils.get_clli_net_request()
47 self.assertEqual(response.status_code, requests.codes.ok)
50 self.assertEqual(res['network'][0]['node'][0]['node-id'], 'NodeA')
51 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'], 'NodeA')
53 def test_03_getOpenRoadmNetwork(self):
54 response = test_utils.get_ordm_net_request()
55 self.assertEqual(response.status_code, requests.codes.ok)
57 self.assertEqual(res['network'][0]['node'][0]['node-id'], 'ROADM-A1')
58 self.assertEqual(res['network'][0]['node'][0]['supporting-node'][0]['network-ref'], 'clli-network')
59 self.assertEqual(res['network'][0]['node'][0]['supporting-node'][0]['node-ref'], 'NodeA')
60 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-common-network:node-type'], 'ROADM')
61 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network:model'], 'model2')
63 def test_04_getLinks_OpenroadmTopology(self):
64 response = test_utils.get_ordm_topo_request("")
65 self.assertEqual(response.status_code, requests.codes.ok)
67 # Tests related to links
68 nbLink = len(res['network'][0]['ietf-network-topology:link'])
69 self.assertEqual(nbLink, 10)
70 expressLink = ['ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX',
71 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX']
72 addLink = ['ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX',
73 'ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX',
74 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX',
75 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX']
76 dropLink = ['ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX',
77 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX',
78 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX',
79 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX']
80 for i in range(0, nbLink):
81 linkId = res['network'][0]['ietf-network-topology:link'][i]['link-id']
82 if (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'EXPRESS-LINK'):
83 find = linkId in expressLink
84 self.assertEqual(find, True)
85 expressLink.remove(linkId)
86 elif (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'ADD-LINK'):
87 find = linkId in addLink
88 self.assertEqual(find, True)
89 addLink.remove(linkId)
90 elif (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'DROP-LINK'):
91 find = linkId in dropLink
92 self.assertEqual(find, True)
93 dropLink.remove(linkId)
95 self.assertFalse(True)
96 self.assertEqual(len(expressLink), 0)
97 self.assertEqual(len(addLink), 0)
98 self.assertEqual(len(dropLink), 0)
100 def test_05_getNodes_OpenRoadmTopology(self):
101 response = test_utils.get_ordm_topo_request("")
102 res = response.json()
103 # Tests related to nodes
104 self.assertEqual(response.status_code, requests.codes.ok)
105 nbNode = len(res['network'][0]['node'])
106 self.assertEqual(nbNode, 4)
107 listNode = ['ROADM-A1-SRG1', 'ROADM-A1-SRG3', 'ROADM-A1-DEG1', 'ROADM-A1-DEG2']
108 for i in range(0, nbNode):
109 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'},
110 res['network'][0]['node'][i]['supporting-node'])
111 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
112 nodeId = res['network'][0]['node'][i]['node-id']
113 if(nodeId == 'ROADM-A1-SRG1'):
114 # Test related to SRG1
115 self.assertEqual(nodeType, 'SRG')
116 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5)
117 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
118 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
119 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
120 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
121 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'},
122 res['network'][0]['node'][i]['supporting-node'])
123 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'},
124 res['network'][0]['node'][i]['supporting-node'])
125 listNode.remove(nodeId)
126 elif(nodeId == 'ROADM-A1-SRG3'):
127 # Test related to SRG1
128 self.assertEqual(nodeType, 'SRG')
129 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5)
130 self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
131 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
132 self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
133 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
134 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'},
135 res['network'][0]['node'][i]['supporting-node'])
136 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'},
137 res['network'][0]['node'][i]['supporting-node'])
138 listNode.remove(nodeId)
139 elif(nodeId == 'ROADM-A1-DEG1'):
140 # Test related to DEG1
141 self.assertEqual(nodeType, 'DEGREE')
142 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
143 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
144 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
145 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
146 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'},
147 res['network'][0]['node'][i]['supporting-node'])
148 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'},
149 res['network'][0]['node'][i]['supporting-node'])
150 listNode.remove(nodeId)
151 elif(nodeId == 'ROADM-A1-DEG2'):
152 # Test related to DEG2
153 self.assertEqual(nodeType, 'DEGREE')
154 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
155 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
156 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
157 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
158 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'},
159 res['network'][0]['node'][i]['supporting-node'])
160 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'},
161 res['network'][0]['node'][i]['supporting-node'])
162 listNode.remove(nodeId)
164 self.assertFalse(True)
165 self.assertEqual(len(listNode), 0)
167 def test_06_connect_XPDRA(self):
168 response = test_utils.mount_device("XPDR-A1", 'xpdra')
169 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
171 def test_07_getClliNetwork(self):
172 response = test_utils.get_clli_net_request()
173 self.assertEqual(response.status_code, requests.codes.ok)
174 res = response.json()
175 self.assertEqual(res['network'][0]['node'][0]['node-id'], 'NodeA')
176 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'], 'NodeA')
178 def test_08_getOpenRoadmNetwork(self):
179 response = test_utils.get_ordm_net_request()
180 self.assertEqual(response.status_code, requests.codes.ok)
181 res = response.json()
182 nbNode = len(res['network'][0]['node'])
183 self.assertEqual(nbNode, 2)
184 for i in range(0, nbNode):
185 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['network-ref'], 'clli-network')
186 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'], 'NodeA')
187 nodeId = res['network'][0]['node'][i]['node-id']
188 if(nodeId == 'XPDR-A1'):
189 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'XPONDER')
190 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], 'model2')
191 elif(nodeId == 'ROADM-A1'):
192 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'ROADM')
193 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], 'model2')
195 self.assertFalse(True)
197 def test_09_getNodes_OpenRoadmTopology(self):
198 response = test_utils.get_ordm_topo_request("")
199 res = response.json()
200 # Tests related to nodes
201 self.assertEqual(response.status_code, requests.codes.ok)
202 nbNode = len(res['network'][0]['node'])
203 self.assertEqual(nbNode, 5)
204 listNode = ['XPDR-A1-XPDR1', 'ROADM-A1-SRG1', 'ROADM-A1-SRG3', 'ROADM-A1-DEG1', 'ROADM-A1-DEG2']
205 for i in range(0, nbNode):
206 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
207 nodeId = res['network'][0]['node'][i]['node-id']
208 # Tests related to XPDRA nodes
209 if(nodeId == 'XPDR-A1-XPDR1'):
210 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDR-A1'},
211 res['network'][0]['node'][i]['supporting-node'])
212 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'},
213 res['network'][0]['node'][i]['supporting-node'])
214 self.assertEqual(nodeType, 'XPONDER')
215 nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
218 for j in range(0, nbTps):
219 tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type']
220 tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id']
221 if (tpType == 'XPONDER-CLIENT'):
223 elif (tpType == 'XPONDER-NETWORK'):
225 if (tpId == 'XPDR1-NETWORK2'):
226 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
227 ['transportpce-topology:associated-connection-map-port'], 'XPDR1-CLIENT2')
228 if (tpId == 'XPDR1-CLIENT2'):
229 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
230 ['transportpce-topology:associated-connection-map-port'], 'XPDR1-NETWORK2')
232 self.assertTrue(client == 2)
233 self.assertTrue(network == 2)
234 listNode.remove(nodeId)
235 elif(nodeId == 'ROADM-A1-SRG1'):
236 # Test related to SRG1
237 self.assertEqual(nodeType, 'SRG')
238 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5)
239 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
240 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
241 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
242 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
243 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'},
244 res['network'][0]['node'][i]['supporting-node'])
245 listNode.remove(nodeId)
246 elif(nodeId == 'ROADM-A1-SRG3'):
247 # Test related to SRG1
248 self.assertEqual(nodeType, 'SRG')
249 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5)
250 self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
251 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
252 self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
253 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
254 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'},
255 res['network'][0]['node'][i]['supporting-node'])
256 listNode.remove(nodeId)
257 elif(nodeId == 'ROADM-A1-DEG1'):
258 # Test related to DEG1
259 self.assertEqual(nodeType, 'DEGREE')
260 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
261 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
262 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
263 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
264 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'},
265 res['network'][0]['node'][i]['supporting-node'])
266 listNode.remove(nodeId)
267 elif(nodeId == 'ROADM-A1-DEG2'):
268 # Test related to DEG2
269 self.assertEqual(nodeType, 'DEGREE')
270 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
271 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
272 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
273 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
274 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'},
275 res['network'][0]['node'][i]['supporting-node'])
276 listNode.remove(nodeId)
278 self.assertFalse(True)
279 self.assertEqual(len(listNode), 0)
281 # Connect the tail XPDRA to ROADMA and vice versa
282 def test_10_connect_tail_xpdr_rdm(self):
283 # Connect the tail: XPDRA to ROADMA
284 response = test_utils.connect_xpdr_to_rdm_request("XPDR-A1", "1", "1",
285 "ROADM-A1", "1", "SRG1-PP1-TXRX")
286 self.assertEqual(response.status_code, requests.codes.ok)
288 def test_11_connect_tail_rdm_xpdr(self):
289 response = test_utils.connect_rdm_to_xpdr_request("XPDR-A1", "1", "1",
290 "ROADM-A1", "1", "SRG1-PP1-TXRX")
291 self.assertEqual(response.status_code, requests.codes.ok)
293 def test_12_getLinks_OpenRoadmTopology(self):
294 response = test_utils.get_ordm_topo_request("")
295 self.assertEqual(response.status_code, requests.codes.ok)
296 res = response.json()
297 # Tests related to links
298 nbLink = len(res['network'][0]['ietf-network-topology:link'])
299 self.assertEqual(nbLink, 12)
300 expressLink = ['ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX',
301 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX']
302 addLink = ['ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', 'ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX',
303 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX']
304 dropLink = ['ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX', 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX',
305 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX', 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX']
306 XPDR_IN = ['ROADM-A1-SRG1-SRG1-PP1-TXRXtoXPDR-A1-XPDR1-XPDR1-NETWORK1']
307 XPDR_OUT = ['XPDR-A1-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX']
308 for i in range(0, nbLink):
309 nodeType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']
310 linkId = res['network'][0]['ietf-network-topology:link'][i]['link-id']
311 if(nodeType == 'EXPRESS-LINK'):
312 find = linkId in expressLink
313 self.assertEqual(find, True)
314 expressLink.remove(linkId)
315 elif(nodeType == 'ADD-LINK'):
316 find = linkId in addLink
317 self.assertEqual(find, True)
318 addLink.remove(linkId)
319 elif(nodeType == 'DROP-LINK'):
320 find = linkId in dropLink
321 self.assertEqual(find, True)
322 dropLink.remove(linkId)
323 elif(nodeType == 'XPONDER-INPUT'):
324 find = linkId in XPDR_IN
325 self.assertEqual(find, True)
326 XPDR_IN.remove(linkId)
327 elif(nodeType == 'XPONDER-OUTPUT'):
328 find = linkId in XPDR_OUT
329 self.assertEqual(find, True)
330 XPDR_OUT.remove(linkId)
332 self.assertFalse(True)
333 self.assertEqual(len(expressLink), 0)
334 self.assertEqual(len(addLink), 0)
335 self.assertEqual(len(dropLink), 0)
336 self.assertEqual(len(XPDR_IN), 0)
337 self.assertEqual(len(XPDR_OUT), 0)
339 def test_13_connect_ROADMC(self):
340 response = test_utils.mount_device("ROADM-C1", 'roadmc')
341 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
343 def test_14_omsAttributes_ROADMA_ROADMC(self):
344 # Config ROADMA-ROADMC oms-attributes
346 "auto-spanloss": "true",
347 "engineered-spanloss": 12.2,
348 "link-concatenation": [{
351 "SRLG-length": 100000,
353 response = test_utils.add_oms_attr_request("ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX", data)
354 self.assertEqual(response.status_code, requests.codes.created)
356 def test_15_omsAttributes_ROADMC_ROADMA(self):
357 # Config ROADM-C1-ROADM-A1 oms-attributes
359 "auto-spanloss": "true",
360 "engineered-spanloss": 12.2,
361 "link-concatenation": [{
364 "SRLG-length": 100000,
367 response = test_utils.add_oms_attr_request("ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX", data)
368 self.assertEqual(response.status_code, requests.codes.created)
370 def test_16_getClliNetwork(self):
371 response = test_utils.get_clli_net_request()
372 self.assertEqual(response.status_code, requests.codes.ok)
373 res = response.json()
374 nbNode = len(res['network'][0]['node'])
375 listNode = ['NodeA', 'NodeC']
376 for i in range(0, nbNode):
377 nodeId = res['network'][0]['node'][i]['node-id']
378 find = nodeId in listNode
379 self.assertEqual(find, True)
380 if(nodeId == 'NodeA'):
381 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeA')
383 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeC')
384 listNode.remove(nodeId)
385 self.assertEqual(len(listNode), 0)
387 def test_17_getOpenRoadmNetwork(self):
388 response = test_utils.get_ordm_net_request()
389 self.assertEqual(response.status_code, requests.codes.ok)
390 res = response.json()
391 nbNode = len(res['network'][0]['node'])
392 self.assertEqual(nbNode, 3)
393 listNode = ['XPDR-A1', 'ROADM-A1', 'ROADM-C1']
394 for i in range(0, nbNode):
395 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['network-ref'], 'clli-network')
396 nodeId = res['network'][0]['node'][i]['node-id']
397 if(nodeId == 'XPDR-A1'):
398 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'], 'NodeA')
399 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'XPONDER')
400 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], 'model2')
401 listNode.remove(nodeId)
402 elif(nodeId == 'ROADM-A1'):
403 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'], 'NodeA')
404 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'ROADM')
405 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], 'model2')
406 listNode.remove(nodeId)
407 elif(nodeId == 'ROADM-C1'):
408 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'], 'NodeC')
409 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'ROADM')
410 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], 'model2')
411 listNode.remove(nodeId)
413 self.assertFalse(True)
414 self.assertEqual(len(listNode), 0)
416 def test_18_getROADMLinkOpenRoadmTopology(self):
417 response = test_utils.get_ordm_topo_request("")
418 self.assertEqual(response.status_code, requests.codes.ok)
419 res = response.json()
420 # Tests related to links
421 nbLink = len(res['network'][0]['ietf-network-topology:link'])
422 self.assertEqual(nbLink, 20)
423 expressLink = ['ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX', 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX',
424 'ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX', 'ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX']
425 addLink = ['ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', 'ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX',
426 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX',
427 'ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX', 'ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX']
428 dropLink = ['ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX', 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX',
429 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX', 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX',
430 'ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX', 'ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX']
431 R2RLink = ['ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX',
432 'ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX']
433 XPDR_IN = ['ROADM-A1-SRG1-SRG1-PP1-TXRXtoXPDR-A1-XPDR1-XPDR1-NETWORK1']
434 XPDR_OUT = ['XPDR-A1-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX']
435 for i in range(0, nbLink):
436 nodeType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']
437 linkId = res['network'][0]['ietf-network-topology:link'][i]['link-id']
438 if(nodeType == 'EXPRESS-LINK'):
439 find = linkId in expressLink
440 self.assertEqual(find, True)
441 expressLink.remove(linkId)
442 elif(nodeType == 'ADD-LINK'):
443 find = linkId in addLink
444 self.assertEqual(find, True)
445 addLink.remove(linkId)
446 elif(nodeType == 'DROP-LINK'):
447 find = linkId in dropLink
448 self.assertEqual(find, True)
449 dropLink.remove(linkId)
450 elif(nodeType == 'ROADM-TO-ROADM'):
451 find = linkId in R2RLink
452 self.assertEqual(find, True)
453 R2RLink.remove(linkId)
454 elif(nodeType == 'XPONDER-INPUT'):
455 find = linkId in XPDR_IN
456 self.assertEqual(find, True)
457 XPDR_IN.remove(linkId)
458 elif(nodeType == 'XPONDER-OUTPUT'):
459 find = linkId in XPDR_OUT
460 self.assertEqual(find, True)
461 XPDR_OUT.remove(linkId)
463 self.assertFalse(True)
464 self.assertEqual(len(expressLink), 0)
465 self.assertEqual(len(addLink), 0)
466 self.assertEqual(len(dropLink), 0)
467 self.assertEqual(len(R2RLink), 0)
468 self.assertEqual(len(XPDR_IN), 0)
469 self.assertEqual(len(XPDR_OUT), 0)
471 def test_19_getLinkOmsAttributesOpenRoadmTopology(self):
472 response = test_utils.get_ordm_topo_request("")
473 self.assertEqual(response.status_code, requests.codes.ok)
474 res = response.json()
475 # Tests related to links
476 nbLink = len(res['network'][0]['ietf-network-topology:link'])
477 self.assertEqual(nbLink, 20)
478 R2RLink = ['ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX',
479 'ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX']
480 for i in range(0, nbLink):
481 nodeType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']
482 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
483 if(link_id in R2RLink):
485 spanLoss = res['network'][0]['ietf-network-topology:link'][i][
486 'org-openroadm-network-topology:OMS-attributes']['span']["engineered-spanloss"]
487 length = res['network'][0]['ietf-network-topology:link'][i][
488 'org-openroadm-network-topology:OMS-attributes']['span']['link-concatenation'][0]['SRLG-length']
489 if((spanLoss != None) & (length != None)):
491 self.assertTrue(find)
492 R2RLink.remove(link_id)
493 self.assertEqual(len(R2RLink), 0)
495 def test_20_getNodes_OpenRoadmTopology(self):
496 response = test_utils.get_ordm_topo_request("")
497 res = response.json()
498 # Tests related to nodes
499 self.assertEqual(response.status_code, requests.codes.ok)
500 nbNode = len(res['network'][0]['node'])
501 self.assertEqual(nbNode, 8)
502 listNode = ['XPDR-A1-XPDR1',
503 'ROADM-A1-SRG1', 'ROADM-A1-SRG3', 'ROADM-A1-DEG1', 'ROADM-A1-DEG2',
504 'ROADM-C1-SRG1', 'ROADM-C1-DEG1', 'ROADM-C1-DEG2']
505 # ************************Tests related to XPDRA nodes
506 for i in range(0, nbNode):
507 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
508 nodeId = res['network'][0]['node'][i]['node-id']
509 if(nodeId == 'XPDR-A1-XPDR1'):
510 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDR-A1'},
511 res['network'][0]['node'][i]['supporting-node'])
512 self.assertEqual(nodeType, 'XPONDER')
513 nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
514 self.assertTrue(nbTps >= 4)
517 for j in range(0, nbTps):
518 tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type']
519 if (tpType == 'XPONDER-CLIENT'):
521 elif (tpType == 'XPONDER-NETWORK'):
523 self.assertTrue(client == 2)
524 self.assertTrue(network == 2)
525 listNode.remove(nodeId)
526 elif(nodeId == 'ROADM-A1-SRG1'):
527 # Test related to SRG1
528 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5)
529 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
530 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
531 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
532 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
533 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'},
534 res['network'][0]['node'][i]['supporting-node'])
535 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'SRG')
536 listNode.remove(nodeId)
537 elif(nodeId == 'ROADM-A1-SRG3'):
538 # Test related to SRG1
539 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5)
540 self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
541 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
542 self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
543 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
544 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'},
545 res['network'][0]['node'][i]['supporting-node'])
546 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'SRG')
547 listNode.remove(nodeId)
548 elif(nodeId == 'ROADM-A1-DEG1'):
549 # Test related to DEG1
550 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
551 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
552 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
553 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
554 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'},
555 res['network'][0]['node'][i]['supporting-node'])
556 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'DEGREE')
557 listNode.remove(nodeId)
558 elif(nodeId == 'ROADM-A1-DEG2'):
559 # Test related to DEG2
560 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
561 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
562 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
563 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
564 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'},
565 res['network'][0]['node'][i]['supporting-node'])
566 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'DEGREE')
567 listNode.remove(nodeId)
568 elif(nodeId == 'ROADM-C1-SRG1'):
569 # Test related to SRG1
570 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5)
571 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
572 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
573 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
574 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
575 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-C1'},
576 res['network'][0]['node'][i]['supporting-node'])
577 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'SRG')
578 listNode.remove(nodeId)
579 elif(nodeId == 'ROADM-C1-DEG1'):
580 # Test related to DEG1
581 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
582 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
583 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
584 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
585 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-C1'},
586 res['network'][0]['node'][i]['supporting-node'])
587 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'DEGREE')
588 listNode.remove(nodeId)
589 elif(nodeId == 'ROADM-C1-DEG2'):
590 # Test related to DEG1
591 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
592 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
593 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
594 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
595 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-C1'},
596 res['network'][0]['node'][i]['supporting-node'])
597 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'DEGREE')
598 listNode.remove(nodeId)
600 self.assertFalse(True)
601 self.assertEqual(len(listNode), 0)
603 def test_21_connect_ROADMB(self):
604 response = test_utils.mount_device("ROADM-B1", 'roadmb')
605 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
607 def test_22_omsAttributes_ROADMA_ROADMB(self):
608 # Config ROADM-A1-ROADM-B1 oms-attributes
610 "auto-spanloss": "true",
611 "engineered-spanloss": 12.2,
612 "spanloss-current": 12,
613 "spanloss-base": 11.4,
614 "link-concatenation": [{
617 "SRLG-length": 100000,
619 response = test_utils.add_oms_attr_request("ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX", data)
620 self.assertEqual(response.status_code, requests.codes.created)
622 def test_23_omsAttributes_ROADMB_ROADMA(self):
623 # Config ROADM-B1-ROADM-A1 oms-attributes
625 "auto-spanloss": "true",
626 "engineered-spanloss": 12.2,
627 "spanloss-current": 12,
628 "spanloss-base": 11.4,
629 "link-concatenation": [{
632 "SRLG-length": 100000,
634 response = test_utils.add_oms_attr_request("ROADM-B1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG1-DEG1-TTP-TXRX", data)
635 self.assertEqual(response.status_code, requests.codes.created)
637 def test_24_omsAttributes_ROADMB_ROADMC(self):
638 # Config ROADM-B1-ROADM-C1 oms-attributes
640 "auto-spanloss": "true",
641 "engineered-spanloss": 12.2,
642 "spanloss-current": 12,
643 "spanloss-base": 11.4,
644 "link-concatenation": [{
647 "SRLG-length": 100000,
649 response = test_utils.add_oms_attr_request("ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX", data)
650 self.assertEqual(response.status_code, requests.codes.created)
652 def test_25_omsAttributes_ROADMC_ROADMB(self):
653 # Config ROADM-C1-ROADM-B1 oms-attributes
655 "auto-spanloss": "true",
656 "engineered-spanloss": 12.2,
657 "link-concatenation": [{
660 "SRLG-length": 100000,
662 response = test_utils.add_oms_attr_request("ROADM-C1-DEG2-DEG2-TTP-TXRXtoROADM-B1-DEG2-DEG2-TTP-TXRX", data)
663 self.assertEqual(response.status_code, requests.codes.created)
665 def test_26_getClliNetwork(self):
666 response = test_utils.get_clli_net_request()
667 self.assertEqual(response.status_code, requests.codes.ok)
668 res = response.json()
669 nbNode = len(res['network'][0]['node'])
670 listNode = ['NodeA', 'NodeB', 'NodeC']
671 for i in range(0, nbNode):
672 nodeId = res['network'][0]['node'][i]['node-id']
673 find = nodeId in listNode
674 self.assertEqual(find, True)
675 if(nodeId == 'NodeA'):
676 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeA')
677 elif(nodeId == 'NodeB'):
678 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeB')
680 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeC')
681 listNode.remove(nodeId)
682 self.assertEqual(len(listNode), 0)
684 def test_27_verifyDegree(self):
685 response = test_utils.get_ordm_topo_request("")
686 self.assertEqual(response.status_code, requests.codes.ok)
687 res = response.json()
688 # Tests related to links
689 nbLink = len(res['network'][0]['ietf-network-topology:link'])
690 listR2RLink = ['ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX', 'ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX',
691 'ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX', 'ROADM-C1-DEG2-DEG2-TTP-TXRXtoROADM-B1-DEG2-DEG2-TTP-TXRX',
692 'ROADM-B1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG1-DEG1-TTP-TXRX', 'ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX']
693 for i in range(0, nbLink):
694 if res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'ROADM-TO-ROADM':
695 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
696 find = link_id in listR2RLink
697 self.assertEqual(find, True)
698 listR2RLink.remove(link_id)
699 self.assertEqual(len(listR2RLink), 0)
701 def test_28_verifyOppositeLinkTopology(self):
702 response = test_utils.get_ordm_topo_request("")
703 self.assertEqual(response.status_code, requests.codes.ok)
704 res = response.json()
705 # Tests related to links
706 nbLink = len(res['network'][0]['ietf-network-topology:link'])
707 self.assertEqual(nbLink, 26)
708 for i in range(0, nbLink):
709 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
710 link_type = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']
711 link_src = res['network'][0]['ietf-network-topology:link'][i]['source']['source-node']
712 link_dest = res['network'][0]['ietf-network-topology:link'][i]['destination']['dest-node']
713 oppLink_id = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:opposite-link']
714 # Find the opposite link
715 response_oppLink = test_utils.get_ordm_topo_request("ietf-network-topology:link/"+oppLink_id)
716 self.assertEqual(response_oppLink.status_code, requests.codes.ok)
717 res_oppLink = response_oppLink.json()
718 self.assertEqual(res_oppLink['ietf-network-topology:link'][0]
719 ['org-openroadm-common-network:opposite-link'], link_id)
720 self.assertEqual(res_oppLink['ietf-network-topology:link'][0]['source']['source-node'], link_dest)
721 self.assertEqual(res_oppLink['ietf-network-topology:link'][0]['destination']['dest-node'], link_src)
722 oppLink_type = res_oppLink['ietf-network-topology:link'][0]['org-openroadm-common-network:link-type']
723 if link_type == 'ADD-LINK':
724 self.assertEqual(oppLink_type, 'DROP-LINK')
725 elif link_type == 'DROP-LINK':
726 self.assertEqual(oppLink_type, 'ADD-LINK')
727 elif link_type == 'EXPRESS-LINK':
728 self.assertEqual(oppLink_type, 'EXPRESS-LINK')
729 elif link_type == 'ROADM-TO-ROADM':
730 self.assertEqual(oppLink_type, 'ROADM-TO-ROADM')
731 elif link_type == 'XPONDER-INPUT':
732 self.assertEqual(oppLink_type, 'XPONDER-OUTPUT')
733 elif link_type == 'XPONDER-OUTPUT':
734 self.assertEqual(oppLink_type, 'XPONDER-INPUT')
736 def test_29_getLinkOmsAttributesOpenRoadmTopology(self):
737 response = test_utils.get_ordm_topo_request("")
738 self.assertEqual(response.status_code, requests.codes.ok)
739 res = response.json()
740 nbLink = len(res['network'][0]['ietf-network-topology:link'])
741 R2RLink = ['ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX',
742 'ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX',
743 'ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX',
744 'ROADM-C1-DEG2-DEG2-TTP-TXRXtoROADM-B1-DEG2-DEG2-TTP-TXRX',
745 'ROADM-B1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG1-DEG1-TTP-TXRX',
746 'ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX']
747 for i in range(0, nbLink):
748 nodeType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']
749 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
750 if(link_id in R2RLink):
752 spanLoss = res['network'][0]['ietf-network-topology:link'][i][
753 'org-openroadm-network-topology:OMS-attributes']['span']["engineered-spanloss"]
754 length = res['network'][0]['ietf-network-topology:link'][i][
755 'org-openroadm-network-topology:OMS-attributes']['span']['link-concatenation'][0]['SRLG-length']
756 if((spanLoss != None) & (length != None)):
758 self.assertTrue(find)
759 R2RLink.remove(link_id)
760 self.assertEqual(len(R2RLink), 0)
762 def test_30_disconnect_ROADMB(self):
763 # Delete in the topology-netconf
764 response = test_utils.unmount_device("ROADM-B1")
765 # Delete in the clli-network
766 response = test_utils.del_node_request("NodeB")
767 self.assertEqual(response.status_code, requests.codes.ok)
769 def test_31_disconnect_ROADMC(self):
770 # Delete in the topology-netconf
771 response = test_utils.unmount_device("ROADM-C1")
772 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
773 # Delete in the clli-network
774 response = test_utils.del_node_request("NodeC")
775 self.assertEqual(response.status_code, requests.codes.ok)
777 # def test_24_check_roadm2roadm_links_deletion(self):
778 # response = test_utils.get_ordm_topo_request("")
779 # self.assertEqual(response.status_code, requests.codes.ok)
780 # res = response.json()
781 # #Write the response in the log
782 # with open('./transportpce_tests/log/response.log', 'a') as outfile1:
783 # outfile1.write(str(res))
784 # #Tests related to links
785 # nbLink=len(res['network'][0]['ietf-network-topology:link'])
786 # self.assertEqual(nbLink,8)
787 # expressLink=['ROADMA-DEG2-DEG2-CTP-TXRXtoROADMA-DEG1-DEG1-CTP-TXRX','ROADMA-DEG1-DEG1-CTP-TXRXtoROADMA-DEG2-DEG2-CTP-TXRX']
788 # addLink=['ROADMA-SRG1-SRG1-CP-TXRXtoROADMA-DEG2-DEG2-CTP-TXRX','ROADMA-SRG1-SRG1-CP-TXRXtoROADMA-DEG1-DEG1-CTP-TXRX',]
789 # dropLink=['ROADMA-DEG1-DEG1-CTP-TXRXtoROADMA-SRG1-SRG1-CP-TXRX','ROADMA-DEG2-DEG2-CTP-TXRXtoROADMA-SRG1-SRG1-CP-TXRX']
790 # XPDR_IN=['ROADMA-SRG1-SRG1-PP1-TXRXtoXPDRA-XPDR1-XPDR1-NETWORK1']
791 # XPDR_OUT=['XPDRA-XPDR1-XPDR1-NETWORK1toROADMA-SRG1-SRG1-PP1-TXRX']
792 # for i in range(0,nbLink):
793 # nodeType=res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']
794 # linkId=res['network'][0]['ietf-network-topology:link'][i]['link-id']
795 # if(nodeType=='EXPRESS-LINK'):
796 # find= linkId in expressLink
797 # self.assertEqual(find, True)
798 # expressLink.remove(linkId)
799 # elif(nodeType=='ADD-LINK'):
800 # find= linkId in addLink
801 # self.assertEqual(find, True)
802 # addLink.remove(linkId)
803 # elif(nodeType=='DROP-LINK'):
804 # find= linkId in dropLink
805 # self.assertEqual(find, True)
806 # dropLink.remove(linkId)
807 # elif(nodeType=='XPONDER-INPUT'):
808 # find= linkId in XPDR_IN
809 # self.assertEqual(find, True)
810 # XPDR_IN.remove(linkId)
811 # elif(nodeType=='XPONDER-OUTPUT'):
812 # find= linkId in XPDR_OUT
813 # self.assertEqual(find, True)
814 # XPDR_OUT.remove(linkId)
816 # self.assertFalse(True)
817 # self.assertEqual(len(expressLink),0)
818 # self.assertEqual(len(addLink),0)
819 # self.assertEqual(len(dropLink),0)
820 # self.assertEqual(len(XPDR_IN),0)
821 # self.assertEqual(len(XPDR_OUT),0)
823 # for i in range(0,nbLink):
824 # self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'],'ROADM-TO-ROADM')
825 # self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['link-id'],'ROADMC-SRG1-SRG1-CP-TXRXtoROADMC-DEG1-DEG1-CTP-TXRX')
826 # self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['link-id'],'ROADMC-DEG1-DEG1-CTP-TXRXtoROADMC-SRG1-SRG1-CP-TXRX')
827 # self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['link-id'],'ROADMC-SRG1-SRG1-CP-TXRXtoROADMC-DEG2-DEG1-CTP-TXRX')
828 # self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['link-id'],'ROADMC-DEG1-DEG2-CTP-TXRXtoROADMC-SRG1-SRG1-CP-TXRX')
829 # self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['link-id'],'ROADMC-DEG1-DEG1-CTP-TXRXtoROADMC-DEG2-DEG2-CTP-TXRX')
830 # self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['link-id'],'ROADMC-DEG2-DEG2-CTP-TXRXtoROADMC-DEG1-DEG1-CTP-TXRX')
832 def test_32_getNodes_OpenRoadmTopology(self):
833 response = test_utils.get_ordm_topo_request("")
834 res = response.json()
835 # Tests related to nodes
836 self.assertEqual(response.status_code, requests.codes.ok)
837 nbNode = len(res['network'][0]['node'])
838 self.assertEqual(nbNode, 5)
839 listNode = ['XPDR-A1-XPDR1', 'ROADM-A1-SRG1', 'ROADM-A1-SRG3', 'ROADM-A1-DEG1', 'ROADM-A1-DEG2']
840 for i in range(0, nbNode):
841 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
842 nodeId = res['network'][0]['node'][i]['node-id']
843 # Tests related to XPDRA nodes
844 if(nodeId == 'XPDR-A1-XPDR1'):
845 nbTp = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
846 for j in range(0, nbTp):
847 tpid = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id']
848 if (tpid == 'XPDR1-CLIENT1'):
849 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
850 ['org-openroadm-common-network:tp-type'], 'XPONDER-CLIENT')
851 if (tpid == 'XPDR1-NETWORK1'):
852 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
853 ['org-openroadm-common-network:tp-type'], 'XPONDER-NETWORK')
854 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
855 ['org-openroadm-network-topology:xpdr-network-attributes']['tail-equipment-id'],
856 'ROADM-A1-SRG1--SRG1-PP1-TXRX')
857 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDR-A1'},
858 res['network'][0]['node'][i]['supporting-node'])
859 listNode.remove(nodeId)
860 elif(nodeId == 'ROADM-A1-SRG1'):
861 # Test related to SRG1
862 self.assertEqual(nodeType, 'SRG')
863 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5)
864 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
865 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
866 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
867 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
868 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'},
869 res['network'][0]['node'][i]['supporting-node'])
870 listNode.remove(nodeId)
871 elif(nodeId == 'ROADM-A1-SRG3'):
872 # Test related to SRG1
873 self.assertEqual(nodeType, 'SRG')
874 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5)
875 self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
876 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
877 self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
878 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
879 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'},
880 res['network'][0]['node'][i]['supporting-node'])
881 listNode.remove(nodeId)
882 elif(nodeId == 'ROADM-A1-DEG1'):
883 # Test related to DEG1
884 self.assertEqual(nodeType, 'DEGREE')
885 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
886 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
887 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
888 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
889 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'},
890 res['network'][0]['node'][i]['supporting-node'])
891 listNode.remove(nodeId)
892 elif(nodeId == 'ROADM-A1-DEG2'):
893 # Test related to DEG2
894 self.assertEqual(nodeType, 'DEGREE')
895 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
896 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
897 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
898 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
899 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'},
900 res['network'][0]['node'][i]['supporting-node'])
901 listNode.remove(nodeId)
903 self.assertFalse(True)
904 self.assertEqual(len(listNode), 0)
905 # Test related to SRG1 of ROADMC
906 for i in range(0, nbNode):
907 self.assertNotEqual(res['network'][0]['node'][i]['node-id'], 'ROADM-C1-SRG1')
908 self.assertNotEqual(res['network'][0]['node'][i]['node-id'], 'ROADM-C1-DEG1')
909 self.assertNotEqual(res['network'][0]['node'][i]['node-id'], 'ROADM-C1-DEG2')
911 def test_33_getOpenRoadmNetwork(self):
912 response = test_utils.get_ordm_net_request()
913 self.assertEqual(response.status_code, requests.codes.ok)
914 res = response.json()
915 nbNode = len(res['network'][0]['node'])
916 self.assertEqual(nbNode, 2)
917 for i in range(0, nbNode-1):
918 self.assertNotEqual(res['network'][0]['node'][i]['node-id'], 'ROADM-C1')
919 self.assertNotEqual(res['network'][0]['node'][i]['node-id'], 'ROADM-B1')
921 def test_34_getClliNetwork(self):
922 response = test_utils.get_clli_net_request()
923 self.assertEqual(response.status_code, requests.codes.ok)
924 res = response.json()
925 nbNode = len(res['network'][0]['node'])
926 self.assertEqual(nbNode, 1)
927 for i in range(0, nbNode-1):
928 self.assertNotEqual(res['network'][0]['node'][1]['org-openroadm-clli-network:clli'], 'NodeC')
930 def test_35_disconnect_XPDRA(self):
931 response = test_utils.unmount_device("XPDR-A1")
932 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
934 def test_36_getClliNetwork(self):
935 response = test_utils.get_clli_net_request()
936 self.assertEqual(response.status_code, requests.codes.ok)
937 res = response.json()
938 nbNode = len(res['network'][0]['node'])
939 self.assertEqual(nbNode, 1)
940 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'], 'NodeA')
942 def test_37_getOpenRoadmNetwork(self):
943 response = test_utils.get_ordm_net_request()
944 self.assertEqual(response.status_code, requests.codes.ok)
945 res = response.json()
946 nbNode = len(res['network'][0]['node'])
947 self.assertEqual(nbNode, 1)
948 for i in range(0, nbNode):
949 self.assertNotEqual(res['network'][0]['node'][i]['node-id'], 'XPDR-A1')
951 def test_38_getNodes_OpenRoadmTopology(self):
952 response = test_utils.get_ordm_topo_request("")
953 res = response.json()
954 # Tests related to nodes
955 self.assertEqual(response.status_code, requests.codes.ok)
956 nbNode = len(res['network'][0]['node'])
957 self.assertEqual(nbNode, 4)
958 listNode = ['ROADM-A1-SRG1', 'ROADM-A1-SRG3', 'ROADM-A1-DEG1', 'ROADM-A1-DEG2']
959 for i in range(0, nbNode):
960 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'},
961 res['network'][0]['node'][i]['supporting-node'])
962 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
963 nodeId = res['network'][0]['node'][i]['node-id']
964 if(nodeId == 'ROADM-A1-SRG1'):
965 # Test related to SRG1
966 self.assertEqual(nodeType, 'SRG')
967 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5)
968 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
969 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
970 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
971 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
972 listNode.remove(nodeId)
973 elif(nodeId == 'ROADM-A1-SRG3'):
974 # Test related to SRG1
975 self.assertEqual(nodeType, 'SRG')
976 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5)
977 self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
978 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
979 self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
980 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
981 listNode.remove(nodeId)
982 elif(nodeId == 'ROADM-A1-DEG1'):
983 # Test related to DEG1
984 self.assertEqual(nodeType, 'DEGREE')
985 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
986 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
987 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
988 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
989 listNode.remove(nodeId)
990 elif(nodeId == 'ROADM-A1-DEG2'):
991 # Test related to DEG2
992 self.assertEqual(nodeType, 'DEGREE')
993 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
994 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
995 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
996 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
997 listNode.remove(nodeId)
999 self.assertFalse(True)
1000 self.assertEqual(len(listNode), 0)
1002 def test_39_disconnect_ROADM_XPDRA_link(self):
1004 response = test_utils.del_link_request("XPDR-A1-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX")
1005 self.assertEqual(response.status_code, requests.codes.ok)
1007 response = test_utils.del_link_request("ROADM-A1-SRG1-SRG1-PP1-TXRXtoXPDR-A1-XPDR1-XPDR1-NETWORK1")
1008 self.assertEqual(response.status_code, requests.codes.ok)
1010 def test_40_getLinks_OpenRoadmTopology(self):
1011 response = test_utils.get_ordm_topo_request("")
1012 self.assertEqual(response.status_code, requests.codes.ok)
1013 res = response.json()
1014 nbLink = len(res['network'][0]['ietf-network-topology:link'])
1015 self.assertEqual(nbLink, 16)
1016 expressLink = ['ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX',
1017 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX']
1018 addLink = ['ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', 'ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX',
1019 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX']
1020 dropLink = ['ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX', 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX',
1021 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX', 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX']
1022 roadmtoroadmLink = 0
1023 for i in range(0, nbLink):
1024 if (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'EXPRESS-LINK'):
1025 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
1026 find = link_id in expressLink
1027 self.assertEqual(find, True)
1028 expressLink.remove(link_id)
1029 elif (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'ADD-LINK'):
1030 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
1031 find = link_id in addLink
1032 self.assertEqual(find, True)
1033 addLink.remove(link_id)
1034 elif (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'DROP-LINK'):
1035 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
1036 find = link_id in dropLink
1037 self.assertEqual(find, True)
1038 dropLink.remove(link_id)
1040 roadmtoroadmLink += 1
1041 self.assertEqual(len(expressLink), 0)
1042 self.assertEqual(len(addLink), 0)
1043 self.assertEqual(len(dropLink), 0)
1044 self.assertEqual(roadmtoroadmLink, 6)
1045 for i in range(0, nbLink):
1046 self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]
1047 ['org-openroadm-common-network:link-type'], 'XPONDER-OUTPUT')
1048 self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]
1049 ['org-openroadm-common-network:link-type'], 'XPONDER-INPUT')
1051 def test_41_disconnect_ROADMA(self):
1052 response = test_utils.unmount_device("ROADM-A1")
1053 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
1054 # Delete in the clli-network
1055 response = test_utils.del_node_request("NodeA")
1056 self.assertEqual(response.status_code, requests.codes.ok)
1058 def test_42_getClliNetwork(self):
1059 response = test_utils.get_clli_net_request()
1060 self.assertEqual(response.status_code, requests.codes.ok)
1061 res = response.json()
1062 self.assertNotIn('node', res['network'][0])
1064 def test_43_getOpenRoadmNetwork(self):
1065 response = test_utils.get_ordm_net_request()
1066 self.assertEqual(response.status_code, requests.codes.ok)
1067 res = response.json()
1068 self.assertNotIn('node', res['network'][0])
1070 def test_44_check_roadm2roadm_link_persistence(self):
1071 response = test_utils.get_ordm_topo_request("")
1072 self.assertEqual(response.status_code, requests.codes.ok)
1073 res = response.json()
1074 nbLink = len(res['network'][0]['ietf-network-topology:link'])
1075 self.assertNotIn('node', res['network'][0])
1076 self.assertEqual(nbLink, 6)
1079 if __name__ == "__main__":
1080 unittest.main(verbosity=2)