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 ##############################################################################
16 from common import test_utils
19 class TransportPCETopologyTesting(unittest.TestCase):
25 cls.processes = test_utils.start_tpce()
26 cls.processes = test_utils.start_sims(['xpdra', 'roadma', 'roadmb', 'roadmc'])
29 def tearDownClass(cls):
30 for process in cls.processes:
31 test_utils.shutdown_process(process)
32 print("all processes killed")
37 def test_01_connect_ROADMA(self):
38 response = test_utils.mount_device("ROADMA01", 'roadma')
39 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
41 def test_02_getClliNetwork(self):
42 response = test_utils.get_clli_net_request()
43 self.assertEqual(response.status_code, requests.codes.ok)
45 self.assertEqual(res['network'][0]['node'][0]['node-id'], 'NodeA')
46 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'], 'NodeA')
48 def test_03_getOpenRoadmNetwork(self):
49 response = test_utils.get_ordm_net_request()
50 self.assertEqual(response.status_code, requests.codes.ok)
52 self.assertEqual(res['network'][0]['node'][0]['node-id'], 'ROADMA01')
53 self.assertEqual(res['network'][0]['node'][0]['supporting-node'][0]['network-ref'], 'clli-network')
54 self.assertEqual(res['network'][0]['node'][0]['supporting-node'][0]['node-ref'], 'NodeA')
55 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-common-network:node-type'], 'ROADM')
56 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network:model'], '2')
58 def test_04_getLinks_OpenroadmTopology(self):
59 response = test_utils.get_ordm_topo_request("")
60 self.assertEqual(response.status_code, requests.codes.ok)
62 # Tests related to links
63 nbLink = len(res['network'][0]['ietf-network-topology:link'])
64 self.assertEqual(nbLink, 10)
65 expressLink = ['ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX',
66 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX']
67 addLink = ['ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX',
68 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX']
69 dropLink = ['ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX',
70 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX']
71 for i in range(0, nbLink):
72 linkId = res['network'][0]['ietf-network-topology:link'][i]['link-id']
73 if res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'EXPRESS-LINK':
74 find = linkId in expressLink
75 self.assertEqual(find, True)
76 expressLink.remove(linkId)
77 elif res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'ADD-LINK':
78 find = linkId in addLink
79 self.assertEqual(find, True)
80 addLink.remove(linkId)
81 elif res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'DROP-LINK':
82 find = linkId in dropLink
83 self.assertEqual(find, True)
84 dropLink.remove(linkId)
86 self.assertFalse(True)
87 self.assertEqual(len(expressLink), 0)
88 self.assertEqual(len(addLink), 0)
89 self.assertEqual(len(dropLink), 0)
91 def test_05_getNodes_OpenRoadmTopology(self):
92 response = test_utils.get_ordm_topo_request("")
94 # Tests related to nodes
95 self.assertEqual(response.status_code, requests.codes.ok)
96 nbNode = len(res['network'][0]['node'])
97 self.assertEqual(nbNode, 4)
98 listNode = ['ROADMA01-SRG1', 'ROADMA01-SRG3', 'ROADMA01-DEG1', 'ROADMA01-DEG2']
99 for i in range(0, nbNode):
100 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
101 res['network'][0]['node'][i]['supporting-node'])
102 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
103 nodeId = res['network'][0]['node'][i]['node-id']
104 if nodeId == 'ROADMA01-SRG1':
105 # Test related to SRG1
106 self.assertEqual(nodeType, 'SRG')
107 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17)
108 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
109 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
110 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
111 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
112 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'},
113 res['network'][0]['node'][i]['supporting-node'])
114 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
115 res['network'][0]['node'][i]['supporting-node'])
116 listNode.remove(nodeId)
117 elif nodeId == 'ROADMA01-SRG3':
118 # Test related to SRG1
119 self.assertEqual(nodeType, 'SRG')
120 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17)
121 self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
122 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
123 self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
124 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
125 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'},
126 res['network'][0]['node'][i]['supporting-node'])
127 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
128 res['network'][0]['node'][i]['supporting-node'])
129 listNode.remove(nodeId)
130 elif nodeId == 'ROADMA01-DEG1':
131 # Test related to DEG1
132 self.assertEqual(nodeType, 'DEGREE')
133 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
134 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
135 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
136 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
137 listNode.remove(nodeId)
138 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'},
139 res['network'][0]['node'][i]['supporting-node'])
140 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
141 res['network'][0]['node'][i]['supporting-node'])
142 elif nodeId == 'ROADMA01-DEG2':
143 # Test related to DEG2
144 self.assertEqual(nodeType, 'DEGREE')
145 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
146 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
147 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
148 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
149 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'},
150 res['network'][0]['node'][i]['supporting-node'])
151 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
152 res['network'][0]['node'][i]['supporting-node'])
153 listNode.remove(nodeId)
155 self.assertFalse(True)
156 self.assertEqual(len(listNode), 0)
158 def test_06_connect_XPDRA(self):
159 response = test_utils.mount_device("XPDRA01", 'xpdra')
160 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
162 def test_07_getClliNetwork(self):
163 response = test_utils.get_clli_net_request()
164 self.assertEqual(response.status_code, requests.codes.ok)
165 res = response.json()
166 self.assertEqual(res['network'][0]['node'][0]['node-id'], 'NodeA')
167 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'], 'NodeA')
169 def test_08_getOpenRoadmNetwork(self):
170 response = test_utils.get_ordm_net_request()
171 self.assertEqual(response.status_code, requests.codes.ok)
172 res = response.json()
173 nbNode = len(res['network'][0]['node'])
174 self.assertEqual(nbNode, 2)
175 for i in range(0, nbNode):
176 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['network-ref'], 'clli-network')
177 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'], 'NodeA')
178 nodeId = res['network'][0]['node'][i]['node-id']
179 if(nodeId == 'XPDRA01'):
180 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'XPONDER')
181 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], '1')
182 elif(nodeId == 'ROADMA01'):
183 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'ROADM')
184 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], '2')
186 self.assertFalse(True)
188 def test_09_getNodes_OpenRoadmTopology(self):
189 response = test_utils.get_ordm_topo_request("")
190 res = response.json()
191 # Tests related to nodes
192 self.assertEqual(response.status_code, requests.codes.ok)
193 nbNode = len(res['network'][0]['node'])
194 self.assertEqual(nbNode, 5)
195 listNode = ['XPDRA01-XPDR1', 'ROADMA01-SRG1', 'ROADMA01-SRG3', 'ROADMA01-DEG1', 'ROADMA01-DEG2']
196 for i in range(0, nbNode):
197 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
198 nodeId = res['network'][0]['node'][i]['node-id']
199 # Tests related to XPDRA nodes
200 if(nodeId == 'XPDRA01-XPDR1'):
201 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDRA01'},
202 res['network'][0]['node'][i]['supporting-node'])
203 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'},
204 res['network'][0]['node'][i]['supporting-node'])
205 self.assertEqual(nodeType, 'XPONDER')
206 nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
209 for j in range(0, nbTps):
210 tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type']
211 tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id']
212 if (tpType == 'XPONDER-CLIENT'):
214 elif (tpType == 'XPONDER-NETWORK'):
216 if (tpId == 'XPDR1-NETWORK2'):
217 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point']
218 [j]['transportpce-topology:associated-connection-map-port'], 'XPDR1-CLIENT3')
219 if (tpId == 'XPDR1-CLIENT3'):
220 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point']
221 [j]['transportpce-topology:associated-connection-map-port'], 'XPDR1-NETWORK2')
222 self.assertTrue(client == 4)
223 self.assertTrue(network == 2)
224 listNode.remove(nodeId)
225 elif(nodeId == 'ROADMA01-SRG1'):
226 # Test related to SRG1
227 self.assertEqual(nodeType, 'SRG')
228 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17)
229 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
230 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
231 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
232 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
233 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
234 res['network'][0]['node'][i]['supporting-node'])
235 listNode.remove(nodeId)
236 elif(nodeId == 'ROADMA01-SRG3'):
237 # Test related to SRG1
238 self.assertEqual(nodeType, 'SRG')
239 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17)
240 self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
241 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
242 self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
243 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
244 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
245 res['network'][0]['node'][i]['supporting-node'])
246 listNode.remove(nodeId)
247 elif(nodeId == 'ROADMA01-DEG1'):
248 # Test related to DEG1
249 self.assertEqual(nodeType, 'DEGREE')
250 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
251 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
252 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
253 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
254 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
255 res['network'][0]['node'][i]['supporting-node'])
256 listNode.remove(nodeId)
257 elif(nodeId == 'ROADMA01-DEG2'):
258 # Test related to DEG2
259 self.assertEqual(nodeType, 'DEGREE')
260 self.assertIn({'tp-id': 'DEG2-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': 'DEG2-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': 'ROADMA01'},
265 res['network'][0]['node'][i]['supporting-node'])
266 listNode.remove(nodeId)
268 self.assertFalse(True)
269 self.assertEqual(len(listNode), 0)
271 # Connect the tail XPDRA to ROADMA and vice versa
272 def test_10_connect_tail_xpdr_rdm(self):
273 # Connect the tail: XPDRA to ROADMA
274 response = test_utils.connect_xpdr_to_rdm_request("XPDRA01", "1", "1",
275 "ROADMA01", "1", "SRG1-PP1-TXRX")
276 self.assertEqual(response.status_code, requests.codes.ok)
278 def test_11_connect_tail_rdm_xpdr(self):
279 # Connect the tail: ROADMA to XPDRA
280 response = test_utils.connect_rdm_to_xpdr_request("XPDRA01", "1", "1",
281 "ROADMA01", "1", "SRG1-PP1-TXRX")
282 self.assertEqual(response.status_code, requests.codes.ok)
284 def test_12_getLinks_OpenRoadmTopology(self):
285 response = test_utils.get_ordm_topo_request("")
286 self.assertEqual(response.status_code, requests.codes.ok)
287 res = response.json()
288 # Tests related to links
289 nbLink = len(res['network'][0]['ietf-network-topology:link'])
290 self.assertEqual(nbLink, 12)
291 expressLink = ['ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX',
292 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX']
293 addLink = ['ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX',
294 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX']
295 dropLink = ['ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX',
296 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX']
297 XPDR_IN = ['ROADMA01-SRG1-SRG1-PP1-TXRXtoXPDRA01-XPDR1-XPDR1-NETWORK1']
298 XPDR_OUT = ['XPDRA01-XPDR1-XPDR1-NETWORK1toROADMA01-SRG1-SRG1-PP1-TXRX']
299 for i in range(0, nbLink):
300 nodeType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']
301 linkId = res['network'][0]['ietf-network-topology:link'][i]['link-id']
302 if(nodeType == 'EXPRESS-LINK'):
303 find = linkId in expressLink
304 self.assertEqual(find, True)
305 expressLink.remove(linkId)
306 elif(nodeType == 'ADD-LINK'):
307 find = linkId in addLink
308 self.assertEqual(find, True)
309 addLink.remove(linkId)
310 elif(nodeType == 'DROP-LINK'):
311 find = linkId in dropLink
312 self.assertEqual(find, True)
313 dropLink.remove(linkId)
314 elif(nodeType == 'XPONDER-INPUT'):
315 find = linkId in XPDR_IN
316 self.assertEqual(find, True)
317 XPDR_IN.remove(linkId)
318 elif(nodeType == 'XPONDER-OUTPUT'):
319 find = linkId in XPDR_OUT
320 self.assertEqual(find, True)
321 XPDR_OUT.remove(linkId)
323 self.assertFalse(True)
324 self.assertEqual(len(expressLink), 0)
325 self.assertEqual(len(addLink), 0)
326 self.assertEqual(len(dropLink), 0)
327 self.assertEqual(len(XPDR_IN), 0)
328 self.assertEqual(len(XPDR_OUT), 0)
330 def test_13_connect_ROADMC(self):
331 response = test_utils.mount_device("ROADMC01", 'roadmc')
332 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
334 def test_14_omsAttributes_ROADMA_ROADMC(self):
335 # Config ROADMA01-ROADMC01 oms-attributes
337 "auto-spanloss": "true",
338 "engineered-spanloss": 12.2,
339 "link-concatenation": [{
342 "SRLG-length": 100000,
344 response = test_utils.add_oms_attr_request("ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX", data)
345 self.assertEqual(response.status_code, requests.codes.created)
347 def test_15_omsAttributes_ROADMC_ROADMA(self):
348 # Config ROADMC01-ROADMA oms-attributes
350 "auto-spanloss": "true",
351 "engineered-spanloss": 12.2,
352 "link-concatenation": [{
355 "SRLG-length": 100000,
357 response = test_utils.add_oms_attr_request("ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX", data)
358 self.assertEqual(response.status_code, requests.codes.created)
360 def test_16_getClliNetwork(self):
361 response = test_utils.get_clli_net_request()
362 self.assertEqual(response.status_code, requests.codes.ok)
363 res = response.json()
364 nbNode = len(res['network'][0]['node'])
365 listNode = ['NodeA', 'NodeC']
366 for i in range(0, nbNode):
367 nodeId = res['network'][0]['node'][i]['node-id']
368 find = nodeId in listNode
369 self.assertEqual(find, True)
370 if(nodeId == 'NodeA'):
371 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeA')
373 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeC')
374 listNode.remove(nodeId)
376 self.assertEqual(len(listNode), 0)
378 def test_17_getOpenRoadmNetwork(self):
379 response = test_utils.get_ordm_net_request()
380 self.assertEqual(response.status_code, requests.codes.ok)
381 res = response.json()
382 nbNode = len(res['network'][0]['node'])
383 self.assertEqual(nbNode, 3)
384 listNode = ['XPDRA01', 'ROADMA01', 'ROADMC01']
385 for i in range(0, nbNode):
386 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['network-ref'], 'clli-network')
387 nodeId = res['network'][0]['node'][i]['node-id']
388 if(nodeId == 'XPDRA01'):
389 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'], 'NodeA')
390 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'XPONDER')
391 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], '1')
392 listNode.remove(nodeId)
393 elif(nodeId == 'ROADMA01'):
394 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'], 'NodeA')
395 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'ROADM')
396 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], '2')
397 listNode.remove(nodeId)
398 elif(nodeId == 'ROADMC01'):
399 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'], 'NodeC')
400 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'ROADM')
401 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], '2')
402 listNode.remove(nodeId)
404 self.assertFalse(True)
405 self.assertEqual(len(listNode), 0)
407 def test_18_getROADMLinkOpenRoadmTopology(self):
408 response = test_utils.get_ordm_topo_request("")
409 self.assertEqual(response.status_code, requests.codes.ok)
410 res = response.json()
411 # Tests related to links
412 nbLink = len(res['network'][0]['ietf-network-topology:link'])
413 self.assertEqual(nbLink, 20)
414 expressLink = ['ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX', 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX',
415 'ROADMC01-DEG2-DEG2-CTP-TXRXtoROADMC01-DEG1-DEG1-CTP-TXRX', 'ROADMC01-DEG1-DEG1-CTP-TXRXtoROADMC01-DEG2-DEG2-CTP-TXRX']
416 addLink = ['ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX',
417 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX',
418 'ROADMC01-SRG1-SRG1-CP-TXRXtoROADMC01-DEG2-DEG2-CTP-TXRX', 'ROADMC01-SRG1-SRG1-CP-TXRXtoROADMC01-DEG1-DEG1-CTP-TXRX']
419 dropLink = ['ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX',
420 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX',
421 'ROADMC01-DEG1-DEG1-CTP-TXRXtoROADMC01-SRG1-SRG1-CP-TXRX', 'ROADMC01-DEG2-DEG2-CTP-TXRXtoROADMC01-SRG1-SRG1-CP-TXRX']
422 R2RLink = ['ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX',
423 'ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX']
424 XPDR_IN = ['ROADMA01-SRG1-SRG1-PP1-TXRXtoXPDRA01-XPDR1-XPDR1-NETWORK1']
425 XPDR_OUT = ['XPDRA01-XPDR1-XPDR1-NETWORK1toROADMA01-SRG1-SRG1-PP1-TXRX']
426 for i in range(0, nbLink):
427 nodeType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']
428 linkId = res['network'][0]['ietf-network-topology:link'][i]['link-id']
429 if(nodeType == 'EXPRESS-LINK'):
430 find = linkId in expressLink
431 self.assertEqual(find, True)
432 expressLink.remove(linkId)
433 elif(nodeType == 'ADD-LINK'):
434 find = linkId in addLink
435 self.assertEqual(find, True)
436 addLink.remove(linkId)
437 elif(nodeType == 'DROP-LINK'):
438 find = linkId in dropLink
439 self.assertEqual(find, True)
440 dropLink.remove(linkId)
441 elif(nodeType == 'ROADM-TO-ROADM'):
442 find = linkId in R2RLink
443 self.assertEqual(find, True)
444 R2RLink.remove(linkId)
445 elif(nodeType == 'XPONDER-INPUT'):
446 find = linkId in XPDR_IN
447 self.assertEqual(find, True)
448 XPDR_IN.remove(linkId)
449 elif(nodeType == 'XPONDER-OUTPUT'):
450 find = linkId in XPDR_OUT
451 self.assertEqual(find, True)
452 XPDR_OUT.remove(linkId)
454 self.assertFalse(True)
455 self.assertEqual(len(expressLink), 0)
456 self.assertEqual(len(addLink), 0)
457 self.assertEqual(len(dropLink), 0)
458 self.assertEqual(len(R2RLink), 0)
459 self.assertEqual(len(XPDR_IN), 0)
460 self.assertEqual(len(XPDR_OUT), 0)
462 def test_19_getLinkOmsAttributesOpenRoadmTopology(self):
463 response = test_utils.get_ordm_topo_request("")
464 self.assertEqual(response.status_code, requests.codes.ok)
465 res = response.json()
466 # Tests related to links
467 nbLink = len(res['network'][0]['ietf-network-topology:link'])
468 self.assertEqual(nbLink, 20)
469 R2RLink = ['ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX',
470 'ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX']
471 for i in range(0, nbLink):
472 nodeType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']
473 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
474 if(link_id in R2RLink):
476 spanLoss = res['network'][0]['ietf-network-topology:link'][i][
477 'org-openroadm-network-topology:OMS-attributes']['span']["engineered-spanloss"]
478 length = res['network'][0]['ietf-network-topology:link'][i][
479 'org-openroadm-network-topology:OMS-attributes']['span']['link-concatenation'][0]['SRLG-length']
480 if((spanLoss != None) & (length != None)):
482 self.assertTrue(find)
483 R2RLink.remove(link_id)
484 self.assertEqual(len(R2RLink), 0)
486 def test_20_getNodes_OpenRoadmTopology(self):
487 response = test_utils.get_ordm_topo_request("")
488 res = response.json()
489 # Tests related to nodes
490 self.assertEqual(response.status_code, requests.codes.ok)
491 nbNode = len(res['network'][0]['node'])
492 self.assertEqual(nbNode, 8)
493 listNode = ['XPDRA01-XPDR1',
494 'ROADMA01-SRG1', 'ROADMA01-SRG3', 'ROADMA01-DEG1', 'ROADMA01-DEG2',
495 'ROADMC01-SRG1', 'ROADMC01-DEG1', 'ROADMC01-DEG2']
496 # ************************Tests related to XPDRA nodes
497 for i in range(0, nbNode):
498 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
499 nodeId = res['network'][0]['node'][i]['node-id']
500 if(nodeId == 'XPDRA01-XPDR1'):
501 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDRA01'},
502 res['network'][0]['node'][i]['supporting-node'])
503 self.assertEqual(nodeType, 'XPONDER')
504 nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
505 self.assertTrue(nbTps == 6)
508 for j in range(0, nbTps):
509 tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type']
510 if (tpType == 'XPONDER-CLIENT'):
512 elif (tpType == 'XPONDER-NETWORK'):
514 self.assertTrue(client == 4)
515 self.assertTrue(network == 2)
516 listNode.remove(nodeId)
517 elif(nodeId == 'ROADMA01-SRG1'):
518 # Test related to SRG1
519 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17)
520 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
521 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
522 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
523 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
524 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
525 res['network'][0]['node'][i]['supporting-node'])
526 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'SRG')
527 listNode.remove(nodeId)
528 elif(nodeId == 'ROADMA01-SRG3'):
529 # Test related to SRG1
530 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17)
531 self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
532 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
533 self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
534 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
535 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
536 res['network'][0]['node'][i]['supporting-node'])
537 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'SRG')
538 listNode.remove(nodeId)
539 elif(nodeId == 'ROADMA01-DEG1'):
540 # Test related to DEG1
541 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
542 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
543 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
544 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
545 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
546 res['network'][0]['node'][i]['supporting-node'])
547 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'DEGREE')
548 listNode.remove(nodeId)
549 elif(nodeId == 'ROADMA01-DEG2'):
550 # Test related to DEG2
551 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
552 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
553 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
554 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
555 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
556 res['network'][0]['node'][i]['supporting-node'])
557 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'DEGREE')
558 listNode.remove(nodeId)
559 elif(nodeId == 'ROADMC01-SRG1'):
560 # Test related to SRG1
561 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17)
562 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
563 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
564 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
565 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
566 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMC01'},
567 res['network'][0]['node'][i]['supporting-node'])
568 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'SRG')
569 listNode.remove(nodeId)
570 elif(nodeId == 'ROADMC01-DEG1'):
571 # Test related to DEG1
572 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
573 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
574 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
575 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
576 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMC01'},
577 res['network'][0]['node'][i]['supporting-node'])
578 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'DEGREE')
579 listNode.remove(nodeId)
580 elif(nodeId == 'ROADMC01-DEG2'):
581 # Test related to DEG2
582 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
583 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
584 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
585 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
586 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMC01'},
587 res['network'][0]['node'][i]['supporting-node'])
588 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'DEGREE')
589 listNode.remove(nodeId)
591 self.assertFalse(True)
592 self.assertEqual(len(listNode), 0)
594 def test_21_connect_ROADMB(self):
595 response = test_utils.mount_device("ROADMB01", 'roadmb')
596 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
598 def test_22_omsAttributes_ROADMA_ROADMB(self):
599 # Config ROADMA01-ROADMB01 oms-attributes
601 "auto-spanloss": "true",
602 "engineered-spanloss": 12.2,
603 "link-concatenation": [{
606 "SRLG-length": 100000,
608 response = test_utils.add_oms_attr_request("ROADMA01-DEG2-DEG2-TTP-TXRXtoROADMB01-DEG1-DEG1-TTP-TXRX", data)
609 self.assertEqual(response.status_code, requests.codes.created)
611 def test_23_omsAttributes_ROADMB_ROADMA(self):
612 # Config ROADMB01-ROADMA01 oms-attributes
614 "auto-spanloss": "true",
615 "engineered-spanloss": 12.2,
616 "link-concatenation": [{
619 "SRLG-length": 100000,
621 response = test_utils.add_oms_attr_request("ROADMB01-DEG1-DEG1-TTP-TXRXtoROADMA01-DEG2-DEG2-TTP-TXRX", data)
622 self.assertEqual(response.status_code, requests.codes.created)
624 def test_24_omsAttributes_ROADMB_ROADMC(self):
625 # Config ROADMB01-ROADMC01 oms-attributes
627 "auto-spanloss": "true",
628 "engineered-spanloss": 12.2,
629 "link-concatenation": [{
632 "SRLG-length": 100000,
634 response = test_utils.add_oms_attr_request("ROADMB01-DEG2-DEG2-TTP-TXRXtoROADMC01-DEG1-DEG1-TTP-TXRX", data)
635 self.assertEqual(response.status_code, requests.codes.created)
637 def test_25_omsAttributes_ROADMC_ROADMB(self):
638 # Config ROADMC01-ROADMB01 oms-attributes
640 "auto-spanloss": "true",
641 "engineered-spanloss": 12.2,
642 "link-concatenation": [{
645 "SRLG-length": 100000,
647 response = test_utils.add_oms_attr_request("ROADMC01-DEG1-DEG1-TTP-TXRXtoROADMB01-DEG2-DEG2-TTP-TXRX", data)
648 self.assertEqual(response.status_code, requests.codes.created)
650 def test_26_getClliNetwork(self):
651 response = test_utils.get_clli_net_request()
652 self.assertEqual(response.status_code, requests.codes.ok)
653 res = response.json()
654 nbNode = len(res['network'][0]['node'])
655 listNode = ['NodeA', 'NodeB', 'NodeC']
656 for i in range(0, nbNode):
657 nodeId = res['network'][0]['node'][i]['node-id']
658 find = nodeId in listNode
659 self.assertEqual(find, True)
660 if(nodeId == 'NodeA'):
661 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeA')
662 elif(nodeId == 'NodeB'):
663 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeB')
665 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeC')
666 listNode.remove(nodeId)
667 self.assertEqual(len(listNode), 0)
669 def test_27_verifyDegree(self):
670 response = test_utils.get_ordm_topo_request("")
671 self.assertEqual(response.status_code, requests.codes.ok)
672 res = response.json()
673 # Tests related to links
674 nbLink = len(res['network'][0]['ietf-network-topology:link'])
675 listR2RLink = ['ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX', 'ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX',
676 'ROADMA01-DEG2-DEG2-TTP-TXRXtoROADMB01-DEG1-DEG1-TTP-TXRX', 'ROADMC01-DEG1-DEG1-TTP-TXRXtoROADMB01-DEG2-DEG2-TTP-TXRX',
677 'ROADMB01-DEG1-DEG1-TTP-TXRXtoROADMA01-DEG2-DEG2-TTP-TXRX', 'ROADMB01-DEG2-DEG2-TTP-TXRXtoROADMC01-DEG1-DEG1-TTP-TXRX']
678 for i in range(0, nbLink):
679 if res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'ROADM-TO-ROADM':
680 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
681 find = link_id in listR2RLink
682 self.assertEqual(find, True)
683 listR2RLink.remove(link_id)
684 self.assertEqual(len(listR2RLink), 0)
686 def test_28_verifyOppositeLinkTopology(self):
687 response = test_utils.get_ordm_topo_request("")
688 self.assertEqual(response.status_code, requests.codes.ok)
689 res = response.json()
690 # Tests related to links
691 nbLink = len(res['network'][0]['ietf-network-topology:link'])
692 self.assertEqual(nbLink, 34)
693 for i in range(0, nbLink):
694 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
695 link_type = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']
696 link_src = res['network'][0]['ietf-network-topology:link'][i]['source']['source-node']
697 link_dest = res['network'][0]['ietf-network-topology:link'][i]['destination']['dest-node']
698 oppLink_id = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:opposite-link']
699 # Find the opposite link
700 response_oppLink = test_utils.get_ordm_topo_request("ietf-network-topology:link/"+oppLink_id)
701 self.assertEqual(response_oppLink.status_code, requests.codes.ok)
702 res_oppLink = response_oppLink.json()
703 self.assertEqual(res_oppLink['ietf-network-topology:link'][0]
704 ['org-openroadm-common-network:opposite-link'], link_id)
705 self.assertEqual(res_oppLink['ietf-network-topology:link'][0]['source']['source-node'], link_dest)
706 self.assertEqual(res_oppLink['ietf-network-topology:link'][0]['destination']['dest-node'], link_src)
707 oppLink_type = res_oppLink['ietf-network-topology:link'][0]['org-openroadm-common-network:link-type']
708 if link_type == 'ADD-LINK':
709 self.assertEqual(oppLink_type, 'DROP-LINK')
710 elif link_type == 'DROP-LINK':
711 self.assertEqual(oppLink_type, 'ADD-LINK')
712 elif link_type == 'EXPRESS-LINK':
713 self.assertEqual(oppLink_type, 'EXPRESS-LINK')
714 elif link_type == 'ROADM-TO-ROADM':
715 self.assertEqual(oppLink_type, 'ROADM-TO-ROADM')
716 elif link_type == 'XPONDER-INPUT':
717 self.assertEqual(oppLink_type, 'XPONDER-OUTPUT')
718 elif link_type == 'XPONDER-OUTPUT':
719 self.assertEqual(oppLink_type, 'XPONDER-INPUT')
721 def test_29_getLinkOmsAttributesOpenRoadmTopology(self):
722 response = test_utils.get_ordm_topo_request("")
723 self.assertEqual(response.status_code, requests.codes.ok)
724 res = response.json()
725 nbLink = len(res['network'][0]['ietf-network-topology:link'])
726 R2RLink = ['ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX',
727 'ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX',
728 'ROADMA01-DEG2-DEG2-TTP-TXRXtoROADMB01-DEG1-DEG1-TTP-TXRX',
729 'ROADMC01-DEG1-DEG1-TTP-TXRXtoROADMB01-DEG2-DEG2-TTP-TXRX',
730 'ROADMB01-DEG1-DEG1-TTP-TXRXtoROADMA01-DEG2-DEG2-TTP-TXRX',
731 'ROADMB01-DEG2-DEG2-TTP-TXRXtoROADMC01-DEG1-DEG1-TTP-TXRX']
732 for i in range(0, nbLink):
733 nodeType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']
734 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
735 if(link_id in R2RLink):
737 spanLoss = res['network'][0]['ietf-network-topology:link'][i][
738 'org-openroadm-network-topology:OMS-attributes']['span']["engineered-spanloss"]
739 length = res['network'][0]['ietf-network-topology:link'][i][
740 'org-openroadm-network-topology:OMS-attributes']['span']['link-concatenation'][0]['SRLG-length']
741 if((spanLoss != None) & (length != None)):
743 self.assertTrue(find)
744 R2RLink.remove(link_id)
745 self.assertEqual(len(R2RLink), 0)
747 def test_30_disconnect_ROADMB(self):
748 # Delete in the topology-netconf
749 response = test_utils.unmount_device("ROADMB01")
750 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
751 # Delete in the clli-network
752 response = test_utils.del_node_request("NodeB")
753 self.assertEqual(response.status_code, requests.codes.ok)
755 def test_31_disconnect_ROADMC(self):
756 response = test_utils.unmount_device("ROADMC01")
757 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
758 # Delete in the clli-network
759 response = test_utils.del_node_request("NodeC")
760 self.assertEqual(response.status_code, requests.codes.ok)
762 def test_32_getNodes_OpenRoadmTopology(self):
763 response = test_utils.get_ordm_topo_request("")
764 res = response.json()
765 # Tests related to nodes
766 self.assertEqual(response.status_code, requests.codes.ok)
767 nbNode = len(res['network'][0]['node'])
768 self.assertEqual(nbNode, 5)
769 listNode = ['XPDRA01-XPDR1', 'ROADMA01-SRG1', 'ROADMA01-SRG3', 'ROADMA01-DEG1', 'ROADMA01-DEG2']
770 for i in range(0, nbNode):
771 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
772 nodeId = res['network'][0]['node'][i]['node-id']
773 # Tests related to XPDRA nodes
774 if(nodeId == 'XPDRA01-XPDR1'):
775 nbTp = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
776 for j in range(0, nbTp):
777 tpid = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id']
778 if (tpid == 'XPDR1-CLIENT1'):
779 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
780 ['org-openroadm-common-network:tp-type'], 'XPONDER-CLIENT')
781 if (tpid == 'XPDR1-NETWORK1'):
782 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
783 ['org-openroadm-common-network:tp-type'], 'XPONDER-NETWORK')
784 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
785 ['org-openroadm-network-topology:xpdr-network-attributes']['tail-equipment-id'],
786 'ROADMA01-SRG1--SRG1-PP1-TXRX')
787 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDRA01'},
788 res['network'][0]['node'][i]['supporting-node'])
789 listNode.remove(nodeId)
790 elif(nodeId == 'ROADMA01-SRG1'):
791 # Test related to SRG1
792 self.assertEqual(nodeType, 'SRG')
793 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17)
794 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
795 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
796 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
797 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
798 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
799 res['network'][0]['node'][i]['supporting-node'])
800 listNode.remove(nodeId)
801 elif(nodeId == 'ROADMA01-SRG3'):
802 # Test related to SRG1
803 self.assertEqual(nodeType, 'SRG')
804 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17)
805 self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
806 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
807 self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
808 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
809 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
810 res['network'][0]['node'][i]['supporting-node'])
811 listNode.remove(nodeId)
812 elif(nodeId == 'ROADMA01-DEG1'):
813 # Test related to DEG1
814 self.assertEqual(nodeType, 'DEGREE')
815 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
816 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
817 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
818 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
819 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
820 res['network'][0]['node'][i]['supporting-node'])
821 listNode.remove(nodeId)
822 elif(nodeId == 'ROADMA01-DEG2'):
823 # Test related to DEG2
824 self.assertEqual(nodeType, 'DEGREE')
825 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
826 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
827 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
828 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
829 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
830 res['network'][0]['node'][i]['supporting-node'])
831 listNode.remove(nodeId)
833 self.assertFalse(True)
834 self.assertEqual(len(listNode), 0)
835 # Test related to SRG1 of ROADMC
836 for i in range(0, nbNode):
837 self.assertNotEqual(res['network'][0]['node'][i]['node-id'], 'ROADMC01-SRG1')
838 self.assertNotEqual(res['network'][0]['node'][i]['node-id'], 'ROADMC01-DEG1')
839 self.assertNotEqual(res['network'][0]['node'][i]['node-id'], 'ROADMC01-DEG2')
841 def test_33_getOpenRoadmNetwork(self):
842 response = test_utils.get_ordm_net_request()
843 self.assertEqual(response.status_code, requests.codes.ok)
844 res = response.json()
845 nbNode = len(res['network'][0]['node'])
846 self.assertEqual(nbNode, 2)
847 for i in range(0, nbNode-1):
848 self.assertNotEqual(res['network'][0]['node'][i]['node-id'], 'ROADMC01')
849 self.assertNotEqual(res['network'][0]['node'][i]['node-id'], 'ROADMB01')
851 def test_34_getClliNetwork(self):
852 response = test_utils.get_clli_net_request()
853 self.assertEqual(response.status_code, requests.codes.ok)
854 res = response.json()
855 nbNode = len(res['network'][0]['node'])
856 self.assertEqual(nbNode, 1)
857 for i in range(0, nbNode-1):
858 self.assertNotEqual(res['network'][0]['node'][1]['org-openroadm-clli-network:clli'], 'NodeC')
860 def test_35_disconnect_XPDRA(self):
861 response = test_utils.unmount_device("XPDRA01")
862 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
864 def test_36_getClliNetwork(self):
865 response = test_utils.get_clli_net_request()
866 self.assertEqual(response.status_code, requests.codes.ok)
867 res = response.json()
868 nbNode = len(res['network'][0]['node'])
869 self.assertEqual(nbNode, 1)
870 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'], 'NodeA')
872 def test_37_getOpenRoadmNetwork(self):
873 response = test_utils.get_ordm_net_request()
874 self.assertEqual(response.status_code, requests.codes.ok)
875 res = response.json()
876 nbNode = len(res['network'][0]['node'])
877 self.assertEqual(nbNode, 1)
878 for i in range(0, nbNode):
879 self.assertNotEqual(res['network'][0]['node'][i]['node-id'], 'XPDRA01')
881 def test_38_getNodes_OpenRoadmTopology(self):
882 response = test_utils.get_ordm_topo_request("")
883 res = response.json()
884 # Tests related to nodes
885 self.assertEqual(response.status_code, requests.codes.ok)
886 nbNode = len(res['network'][0]['node'])
887 self.assertEqual(nbNode, 4)
888 listNode = ['ROADMA01-SRG1', 'ROADMA01-SRG3', 'ROADMA01-DEG1', 'ROADMA01-DEG2']
889 for i in range(0, nbNode):
890 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
891 res['network'][0]['node'][i]['supporting-node'])
892 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
893 nodeId = res['network'][0]['node'][i]['node-id']
894 if(nodeId == 'ROADMA01-SRG1'):
895 # Test related to SRG1
896 self.assertEqual(nodeType, 'SRG')
897 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17)
898 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
899 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
900 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
901 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
902 listNode.remove(nodeId)
903 elif(nodeId == 'ROADMA01-SRG3'):
904 # Test related to SRG1
905 self.assertEqual(nodeType, 'SRG')
906 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17)
907 self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
908 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
909 self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
910 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
911 listNode.remove(nodeId)
912 elif(nodeId == 'ROADMA01-DEG1'):
913 # Test related to DEG1
914 self.assertEqual(nodeType, 'DEGREE')
915 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
916 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
917 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
918 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
919 listNode.remove(nodeId)
920 elif(nodeId == 'ROADMA01-DEG2'):
921 # Test related to DEG2
922 self.assertEqual(nodeType, 'DEGREE')
923 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
924 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
925 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
926 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
927 listNode.remove(nodeId)
929 self.assertFalse(True)
930 self.assertEqual(len(listNode), 0)
932 def test_39_disconnect_ROADM_XPDRA_link(self):
934 response = test_utils.del_link_request("XPDRA01-XPDR1-XPDR1-NETWORK1toROADMA01-SRG1-SRG1-PP1-TXRX")
935 self.assertEqual(response.status_code, requests.codes.ok)
937 response = test_utils.del_link_request("ROADMA01-SRG1-SRG1-PP1-TXRXtoXPDRA01-XPDR1-XPDR1-NETWORK1")
938 self.assertEqual(response.status_code, requests.codes.ok)
940 def test_40_getLinks_OpenRoadmTopology(self):
941 response = test_utils.get_ordm_topo_request("")
942 self.assertEqual(response.status_code, requests.codes.ok)
943 res = response.json()
944 nbLink = len(res['network'][0]['ietf-network-topology:link'])
945 self.assertEqual(nbLink, 16)
946 expressLink = ['ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX',
947 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX']
948 addLink = ['ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX',
949 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX']
950 dropLink = ['ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX',
951 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX']
953 for i in range(0, nbLink):
954 if (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'EXPRESS-LINK'):
955 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
956 find = link_id in expressLink
957 self.assertEqual(find, True)
958 expressLink.remove(link_id)
959 elif (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'ADD-LINK'):
960 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
961 find = link_id in addLink
962 self.assertEqual(find, True)
963 addLink.remove(link_id)
964 elif (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'DROP-LINK'):
965 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
966 find = link_id in dropLink
967 self.assertEqual(find, True)
968 dropLink.remove(link_id)
970 roadmtoroadmLink += 1
971 self.assertEqual(len(expressLink), 0)
972 self.assertEqual(len(addLink), 0)
973 self.assertEqual(len(dropLink), 0)
974 self.assertEqual(roadmtoroadmLink, 6)
975 for i in range(0, nbLink):
976 self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]
977 ['org-openroadm-common-network:link-type'], 'XPONDER-OUTPUT')
978 self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]
979 ['org-openroadm-common-network:link-type'], 'XPONDER-INPUT')
981 def test_41_disconnect_ROADMA(self):
982 response = test_utils.unmount_device("ROADMA01")
983 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
984 # Delete in the clli-network
985 response = test_utils.del_node_request("NodeA")
986 self.assertEqual(response.status_code, requests.codes.ok)
988 def test_42_getClliNetwork(self):
989 response = test_utils.get_clli_net_request()
990 self.assertEqual(response.status_code, requests.codes.ok)
991 res = response.json()
992 self.assertNotIn('node', res['network'][0])
994 def test_43_getOpenRoadmNetwork(self):
995 response = test_utils.get_ordm_net_request()
996 self.assertEqual(response.status_code, requests.codes.ok)
997 res = response.json()
998 self.assertNotIn('node', res['network'][0])
1000 def test_44_check_roadm2roadm_link_persistence(self):
1001 response = test_utils.get_ordm_topo_request("")
1002 self.assertEqual(response.status_code, requests.codes.ok)
1003 res = response.json()
1004 nbLink = len(res['network'][0]['ietf-network-topology:link'])
1005 self.assertNotIn('node', res['network'][0])
1006 self.assertEqual(nbLink, 6)
1009 if __name__ == "__main__":
1010 unittest.main(verbosity=2)