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