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 ##############################################################################
18 from common import test_utils
21 class TransportPCETopologyTesting(unittest.TestCase):
27 cls.processes = test_utils.start_tpce()
28 cls.processes = test_utils.start_sims(['xpdra', 'roadma', 'roadmb', 'roadmc'])
31 def tearDownClass(cls):
32 for process in cls.processes:
33 test_utils.shutdown_process(process)
34 print("all processes killed")
39 def test_01_connect_ROADMA(self):
40 response = test_utils.mount_device("ROADMA01", 'roadma')
41 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
43 def test_02_getClliNetwork(self):
44 url = ("{}/config/ietf-network:networks/network/clli-network"
45 .format(test_utils.RESTCONF_BASE_URL))
46 response = requests.request(
47 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
48 self.assertEqual(response.status_code, requests.codes.ok)
50 self.assertEqual(res['network'][0]['node'][0]['node-id'], 'NodeA')
51 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'], 'NodeA')
53 def test_03_getOpenRoadmNetwork(self):
54 url = ("{}/config/ietf-network:networks/network/openroadm-network"
55 .format(test_utils.RESTCONF_BASE_URL))
56 response = requests.request(
57 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
58 self.assertEqual(response.status_code, requests.codes.ok)
60 self.assertEqual(res['network'][0]['node'][0]['node-id'], 'ROADMA01')
61 self.assertEqual(res['network'][0]['node'][0]['supporting-node'][0]['network-ref'], 'clli-network')
62 self.assertEqual(res['network'][0]['node'][0]['supporting-node'][0]['node-ref'], 'NodeA')
63 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-common-network:node-type'], 'ROADM')
64 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network:model'], '2')
66 def test_04_getLinks_OpenroadmTopology(self):
67 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
68 .format(test_utils.RESTCONF_BASE_URL))
69 response = requests.request(
70 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
71 self.assertEqual(response.status_code, requests.codes.ok)
73 # Tests related to links
74 nbLink = len(res['network'][0]['ietf-network-topology:link'])
75 self.assertEqual(nbLink, 10)
76 expressLink = ['ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX',
77 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX']
78 addLink = ['ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX',
79 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX']
80 dropLink = ['ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX',
81 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX']
82 for i in range(0, nbLink):
83 linkId = res['network'][0]['ietf-network-topology:link'][i]['link-id']
84 if res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'EXPRESS-LINK':
85 find = linkId in expressLink
86 self.assertEqual(find, True)
87 expressLink.remove(linkId)
88 elif res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'ADD-LINK':
89 find = linkId in addLink
90 self.assertEqual(find, True)
91 addLink.remove(linkId)
92 elif res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'DROP-LINK':
93 find = linkId in dropLink
94 self.assertEqual(find, True)
95 dropLink.remove(linkId)
97 self.assertFalse(True)
98 self.assertEqual(len(expressLink), 0)
99 self.assertEqual(len(addLink), 0)
100 self.assertEqual(len(dropLink), 0)
102 def test_05_getNodes_OpenRoadmTopology(self):
103 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
104 .format(test_utils.RESTCONF_BASE_URL))
105 response = requests.request("GET", url, headers=test_utils.TYPE_APPLICATION_JSON,
106 auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
107 res = response.json()
108 # Tests related to nodes
109 self.assertEqual(response.status_code, requests.codes.ok)
110 nbNode = len(res['network'][0]['node'])
111 self.assertEqual(nbNode, 4)
112 listNode = ['ROADMA01-SRG1', 'ROADMA01-SRG3', 'ROADMA01-DEG1', 'ROADMA01-DEG2']
113 for i in range(0, nbNode):
114 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
115 res['network'][0]['node'][i]['supporting-node'])
116 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
117 nodeId = res['network'][0]['node'][i]['node-id']
118 if nodeId == 'ROADMA01-SRG1':
119 # Test related to SRG1
120 self.assertEqual(nodeType, 'SRG')
121 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17)
122 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
123 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
124 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
125 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
126 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'},
127 res['network'][0]['node'][i]['supporting-node'])
128 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
129 res['network'][0]['node'][i]['supporting-node'])
130 listNode.remove(nodeId)
131 elif nodeId == 'ROADMA01-SRG3':
132 # Test related to SRG1
133 self.assertEqual(nodeType, 'SRG')
134 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17)
135 self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
136 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
137 self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
138 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
139 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'},
140 res['network'][0]['node'][i]['supporting-node'])
141 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
142 res['network'][0]['node'][i]['supporting-node'])
143 listNode.remove(nodeId)
144 elif nodeId == 'ROADMA01-DEG1':
145 # Test related to DEG1
146 self.assertEqual(nodeType, 'DEGREE')
147 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
148 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
149 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
150 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
151 listNode.remove(nodeId)
152 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'},
153 res['network'][0]['node'][i]['supporting-node'])
154 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
155 res['network'][0]['node'][i]['supporting-node'])
156 elif nodeId == 'ROADMA01-DEG2':
157 # Test related to DEG2
158 self.assertEqual(nodeType, 'DEGREE')
159 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
160 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
161 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
162 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
163 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'},
164 res['network'][0]['node'][i]['supporting-node'])
165 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
166 res['network'][0]['node'][i]['supporting-node'])
167 listNode.remove(nodeId)
169 self.assertFalse(True)
170 self.assertEqual(len(listNode), 0)
172 def test_06_connect_XPDRA(self):
173 response = test_utils.mount_device("XPDRA01", 'xpdra')
174 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
176 def test_07_getClliNetwork(self):
177 url = ("{}/config/ietf-network:networks/network/clli-network"
178 .format(test_utils.RESTCONF_BASE_URL))
179 response = requests.request("GET", url, headers=test_utils.TYPE_APPLICATION_JSON,
180 auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
181 self.assertEqual(response.status_code, requests.codes.ok)
182 res = response.json()
183 self.assertEqual(res['network'][0]['node'][0]['node-id'], 'NodeA')
184 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'], 'NodeA')
186 def test_08_getOpenRoadmNetwork(self):
187 url = ("{}/config/ietf-network:networks/network/openroadm-network"
188 .format(test_utils.RESTCONF_BASE_URL))
189 response = requests.request(
190 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
191 self.assertEqual(response.status_code, requests.codes.ok)
192 res = response.json()
193 nbNode = len(res['network'][0]['node'])
194 self.assertEqual(nbNode, 2)
195 for i in range(0, nbNode):
196 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['network-ref'], 'clli-network')
197 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'], 'NodeA')
198 nodeId = res['network'][0]['node'][i]['node-id']
199 if(nodeId == 'XPDRA01'):
200 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'XPONDER')
201 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], '1')
202 elif(nodeId == 'ROADMA01'):
203 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'ROADM')
204 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], '2')
206 self.assertFalse(True)
208 def test_09_getNodes_OpenRoadmTopology(self):
209 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
210 .format(test_utils.RESTCONF_BASE_URL))
211 response = requests.request(
212 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
213 res = response.json()
214 # Tests related to nodes
215 self.assertEqual(response.status_code, requests.codes.ok)
216 nbNode = len(res['network'][0]['node'])
217 self.assertEqual(nbNode, 5)
218 listNode = ['XPDRA01-XPDR1', 'ROADMA01-SRG1', 'ROADMA01-SRG3', 'ROADMA01-DEG1', 'ROADMA01-DEG2']
219 for i in range(0, nbNode):
220 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
221 nodeId = res['network'][0]['node'][i]['node-id']
222 # Tests related to XPDRA nodes
223 if(nodeId == 'XPDRA01-XPDR1'):
224 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDRA01'},
225 res['network'][0]['node'][i]['supporting-node'])
226 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'},
227 res['network'][0]['node'][i]['supporting-node'])
228 self.assertEqual(nodeType, 'XPONDER')
229 nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
232 for j in range(0, nbTps):
233 tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type']
234 tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id']
235 if (tpType == 'XPONDER-CLIENT'):
237 elif (tpType == 'XPONDER-NETWORK'):
239 if (tpId == 'XPDR1-NETWORK2'):
240 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point']
241 [j]['transportpce-topology:associated-connection-map-port'], 'XPDR1-CLIENT3')
242 if (tpId == 'XPDR1-CLIENT3'):
243 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point']
244 [j]['transportpce-topology:associated-connection-map-port'], 'XPDR1-NETWORK2')
245 self.assertTrue(client == 4)
246 self.assertTrue(network == 2)
247 listNode.remove(nodeId)
248 elif(nodeId == 'ROADMA01-SRG1'):
249 # Test related to SRG1
250 self.assertEqual(nodeType, 'SRG')
251 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17)
252 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
253 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
254 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
255 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
256 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
257 res['network'][0]['node'][i]['supporting-node'])
258 listNode.remove(nodeId)
259 elif(nodeId == 'ROADMA01-SRG3'):
260 # Test related to SRG1
261 self.assertEqual(nodeType, 'SRG')
262 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17)
263 self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
264 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
265 self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
266 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
267 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
268 res['network'][0]['node'][i]['supporting-node'])
269 listNode.remove(nodeId)
270 elif(nodeId == 'ROADMA01-DEG1'):
271 # Test related to DEG1
272 self.assertEqual(nodeType, 'DEGREE')
273 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
274 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
275 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
276 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
277 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
278 res['network'][0]['node'][i]['supporting-node'])
279 listNode.remove(nodeId)
280 elif(nodeId == 'ROADMA01-DEG2'):
281 # Test related to DEG2
282 self.assertEqual(nodeType, 'DEGREE')
283 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
284 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
285 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
286 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
287 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
288 res['network'][0]['node'][i]['supporting-node'])
289 listNode.remove(nodeId)
291 self.assertFalse(True)
292 self.assertEqual(len(listNode), 0)
294 # Connect the tail XPDRA to ROADMA and vice versa
295 def test_10_connect_tail_xpdr_rdm(self):
296 # Connect the tail: XPDRA to ROADMA
297 url = ("{}/operations/transportpce-networkutils:init-xpdr-rdm-links"
298 .format(test_utils.RESTCONF_BASE_URL))
299 data = {"networkutils:input": {
300 "networkutils:links-input": {
301 "networkutils:xpdr-node": "XPDRA01",
302 "networkutils:xpdr-num": "1",
303 "networkutils:network-num": "1",
304 "networkutils:rdm-node": "ROADMA01",
305 "networkutils:srg-num": "1",
306 "networkutils:termination-point-num": "SRG1-PP1-TXRX"
310 response = requests.request(
311 "POST", url, data=json.dumps(data), headers=test_utils.TYPE_APPLICATION_JSON,
312 auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
313 self.assertEqual(response.status_code, requests.codes.ok)
315 def test_11_connect_tail_rdm_xpdr(self):
316 # Connect the tail: ROADMA to XPDRA
317 url = ("{}/operations/transportpce-networkutils:init-rdm-xpdr-links"
318 .format(test_utils.RESTCONF_BASE_URL))
319 data = {"networkutils:input": {
320 "networkutils:links-input": {
321 "networkutils:xpdr-node": "XPDRA01",
322 "networkutils:xpdr-num": "1",
323 "networkutils:network-num": "1",
324 "networkutils:rdm-node": "ROADMA01",
325 "networkutils:srg-num": "1",
326 "networkutils:termination-point-num": "SRG1-PP1-TXRX"
330 response = requests.request(
331 "POST", url, data=json.dumps(data), headers=test_utils.TYPE_APPLICATION_JSON,
332 auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
333 self.assertEqual(response.status_code, requests.codes.ok)
335 def test_12_getLinks_OpenRoadmTopology(self):
336 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
337 .format(test_utils.RESTCONF_BASE_URL))
338 response = requests.request(
339 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
340 self.assertEqual(response.status_code, requests.codes.ok)
341 res = response.json()
342 # Tests related to links
343 nbLink = len(res['network'][0]['ietf-network-topology:link'])
344 self.assertEqual(nbLink, 12)
345 expressLink = ['ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX',
346 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX']
347 addLink = ['ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX',
348 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX']
349 dropLink = ['ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX',
350 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX']
351 XPDR_IN = ['ROADMA01-SRG1-SRG1-PP1-TXRXtoXPDRA01-XPDR1-XPDR1-NETWORK1']
352 XPDR_OUT = ['XPDRA01-XPDR1-XPDR1-NETWORK1toROADMA01-SRG1-SRG1-PP1-TXRX']
353 for i in range(0, nbLink):
354 nodeType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']
355 linkId = res['network'][0]['ietf-network-topology:link'][i]['link-id']
356 if(nodeType == 'EXPRESS-LINK'):
357 find = linkId in expressLink
358 self.assertEqual(find, True)
359 expressLink.remove(linkId)
360 elif(nodeType == 'ADD-LINK'):
361 find = linkId in addLink
362 self.assertEqual(find, True)
363 addLink.remove(linkId)
364 elif(nodeType == 'DROP-LINK'):
365 find = linkId in dropLink
366 self.assertEqual(find, True)
367 dropLink.remove(linkId)
368 elif(nodeType == 'XPONDER-INPUT'):
369 find = linkId in XPDR_IN
370 self.assertEqual(find, True)
371 XPDR_IN.remove(linkId)
372 elif(nodeType == 'XPONDER-OUTPUT'):
373 find = linkId in XPDR_OUT
374 self.assertEqual(find, True)
375 XPDR_OUT.remove(linkId)
377 self.assertFalse(True)
378 self.assertEqual(len(expressLink), 0)
379 self.assertEqual(len(addLink), 0)
380 self.assertEqual(len(dropLink), 0)
381 self.assertEqual(len(XPDR_IN), 0)
382 self.assertEqual(len(XPDR_OUT), 0)
384 def test_13_connect_ROADMC(self):
385 response = test_utils.mount_device("ROADMC01", 'roadmc')
386 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
388 def test_14_omsAttributes_ROADMA_ROADMC(self):
389 # Config ROADMA01-ROADMC01 oms-attributes
390 url = ("{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:"
391 "link/ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX/org-openroadm-network-topology:"
392 "OMS-attributes/span"
393 .format(test_utils.RESTCONF_BASE_URL))
395 "auto-spanloss": "true",
396 "engineered-spanloss": 12.2,
397 "link-concatenation": [{
400 "SRLG-length": 100000,
402 response = requests.request(
403 "PUT", url, data=json.dumps(data), headers=test_utils.TYPE_APPLICATION_JSON,
404 auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
405 self.assertEqual(response.status_code, requests.codes.created)
407 def test_15_omsAttributes_ROADMC_ROADMA(self):
408 # Config ROADMC01-ROADMA oms-attributes
409 url = ("{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:"
410 "link/ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX/org-openroadm-network-topology:"
411 "OMS-attributes/span"
412 .format(test_utils.RESTCONF_BASE_URL))
414 "auto-spanloss": "true",
415 "engineered-spanloss": 12.2,
416 "link-concatenation": [{
419 "SRLG-length": 100000,
421 response = requests.request(
422 "PUT", url, data=json.dumps(data), headers=test_utils.TYPE_APPLICATION_JSON,
423 auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
424 self.assertEqual(response.status_code, requests.codes.created)
426 def test_16_getClliNetwork(self):
427 url = ("{}/config/ietf-network:networks/network/clli-network"
428 .format(test_utils.RESTCONF_BASE_URL))
429 response = requests.request(
430 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
431 self.assertEqual(response.status_code, requests.codes.ok)
432 res = response.json()
433 nbNode = len(res['network'][0]['node'])
434 listNode = ['NodeA', 'NodeC']
435 for i in range(0, nbNode):
436 nodeId = res['network'][0]['node'][i]['node-id']
437 find = nodeId in listNode
438 self.assertEqual(find, True)
439 if(nodeId == 'NodeA'):
440 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeA')
442 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeC')
443 listNode.remove(nodeId)
445 self.assertEqual(len(listNode), 0)
447 def test_17_getOpenRoadmNetwork(self):
448 url = ("{}/config/ietf-network:networks/network/openroadm-network"
449 .format(test_utils.RESTCONF_BASE_URL))
450 response = requests.request(
451 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
452 self.assertEqual(response.status_code, requests.codes.ok)
453 res = response.json()
454 nbNode = len(res['network'][0]['node'])
455 self.assertEqual(nbNode, 3)
456 listNode = ['XPDRA01', 'ROADMA01', 'ROADMC01']
457 for i in range(0, nbNode):
458 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['network-ref'], 'clli-network')
459 nodeId = res['network'][0]['node'][i]['node-id']
460 if(nodeId == 'XPDRA01'):
461 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'], 'NodeA')
462 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'XPONDER')
463 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], '1')
464 listNode.remove(nodeId)
465 elif(nodeId == 'ROADMA01'):
466 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'], 'NodeA')
467 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'ROADM')
468 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], '2')
469 listNode.remove(nodeId)
470 elif(nodeId == 'ROADMC01'):
471 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'], 'NodeC')
472 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'ROADM')
473 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], '2')
474 listNode.remove(nodeId)
476 self.assertFalse(True)
477 self.assertEqual(len(listNode), 0)
479 def test_18_getROADMLinkOpenRoadmTopology(self):
480 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
481 .format(test_utils.RESTCONF_BASE_URL))
482 response = requests.request(
483 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
484 self.assertEqual(response.status_code, requests.codes.ok)
485 res = response.json()
486 # Tests related to links
487 nbLink = len(res['network'][0]['ietf-network-topology:link'])
488 self.assertEqual(nbLink, 20)
489 expressLink = ['ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX', 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX',
490 'ROADMC01-DEG2-DEG2-CTP-TXRXtoROADMC01-DEG1-DEG1-CTP-TXRX', 'ROADMC01-DEG1-DEG1-CTP-TXRXtoROADMC01-DEG2-DEG2-CTP-TXRX']
491 addLink = ['ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX',
492 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX',
493 'ROADMC01-SRG1-SRG1-CP-TXRXtoROADMC01-DEG2-DEG2-CTP-TXRX', 'ROADMC01-SRG1-SRG1-CP-TXRXtoROADMC01-DEG1-DEG1-CTP-TXRX']
494 dropLink = ['ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX',
495 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX',
496 'ROADMC01-DEG1-DEG1-CTP-TXRXtoROADMC01-SRG1-SRG1-CP-TXRX', 'ROADMC01-DEG2-DEG2-CTP-TXRXtoROADMC01-SRG1-SRG1-CP-TXRX']
497 R2RLink = ['ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX',
498 'ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX']
499 XPDR_IN = ['ROADMA01-SRG1-SRG1-PP1-TXRXtoXPDRA01-XPDR1-XPDR1-NETWORK1']
500 XPDR_OUT = ['XPDRA01-XPDR1-XPDR1-NETWORK1toROADMA01-SRG1-SRG1-PP1-TXRX']
501 for i in range(0, nbLink):
502 nodeType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']
503 linkId = res['network'][0]['ietf-network-topology:link'][i]['link-id']
504 if(nodeType == 'EXPRESS-LINK'):
505 find = linkId in expressLink
506 self.assertEqual(find, True)
507 expressLink.remove(linkId)
508 elif(nodeType == 'ADD-LINK'):
509 find = linkId in addLink
510 self.assertEqual(find, True)
511 addLink.remove(linkId)
512 elif(nodeType == 'DROP-LINK'):
513 find = linkId in dropLink
514 self.assertEqual(find, True)
515 dropLink.remove(linkId)
516 elif(nodeType == 'ROADM-TO-ROADM'):
517 find = linkId in R2RLink
518 self.assertEqual(find, True)
519 R2RLink.remove(linkId)
520 elif(nodeType == 'XPONDER-INPUT'):
521 find = linkId in XPDR_IN
522 self.assertEqual(find, True)
523 XPDR_IN.remove(linkId)
524 elif(nodeType == 'XPONDER-OUTPUT'):
525 find = linkId in XPDR_OUT
526 self.assertEqual(find, True)
527 XPDR_OUT.remove(linkId)
529 self.assertFalse(True)
530 self.assertEqual(len(expressLink), 0)
531 self.assertEqual(len(addLink), 0)
532 self.assertEqual(len(dropLink), 0)
533 self.assertEqual(len(R2RLink), 0)
534 self.assertEqual(len(XPDR_IN), 0)
535 self.assertEqual(len(XPDR_OUT), 0)
537 def test_19_getLinkOmsAttributesOpenRoadmTopology(self):
538 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
539 .format(test_utils.RESTCONF_BASE_URL))
540 response = requests.request(
541 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
542 self.assertEqual(response.status_code, requests.codes.ok)
543 res = response.json()
544 # Tests related to links
545 nbLink = len(res['network'][0]['ietf-network-topology:link'])
546 self.assertEqual(nbLink, 20)
547 R2RLink = ['ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX',
548 'ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX']
549 for i in range(0, nbLink):
550 nodeType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']
551 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
552 if(link_id in R2RLink):
554 spanLoss = res['network'][0]['ietf-network-topology:link'][i][
555 'org-openroadm-network-topology:OMS-attributes']['span']["engineered-spanloss"]
556 length = res['network'][0]['ietf-network-topology:link'][i][
557 'org-openroadm-network-topology:OMS-attributes']['span']['link-concatenation'][0]['SRLG-length']
558 if((spanLoss != None) & (length != None)):
560 self.assertTrue(find)
561 R2RLink.remove(link_id)
562 self.assertEqual(len(R2RLink), 0)
564 def test_20_getNodes_OpenRoadmTopology(self):
565 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
566 .format(test_utils.RESTCONF_BASE_URL))
567 response = requests.request(
568 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
569 res = response.json()
570 # Tests related to nodes
571 self.assertEqual(response.status_code, requests.codes.ok)
572 nbNode = len(res['network'][0]['node'])
573 self.assertEqual(nbNode, 8)
574 listNode = ['XPDRA01-XPDR1',
575 'ROADMA01-SRG1', 'ROADMA01-SRG3', 'ROADMA01-DEG1', 'ROADMA01-DEG2',
576 'ROADMC01-SRG1', 'ROADMC01-DEG1', 'ROADMC01-DEG2']
577 # ************************Tests related to XPDRA nodes
578 for i in range(0, nbNode):
579 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
580 nodeId = res['network'][0]['node'][i]['node-id']
581 if(nodeId == 'XPDRA01-XPDR1'):
582 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDRA01'},
583 res['network'][0]['node'][i]['supporting-node'])
584 self.assertEqual(nodeType, 'XPONDER')
585 nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
586 self.assertTrue(nbTps == 6)
589 for j in range(0, nbTps):
590 tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type']
591 if (tpType == 'XPONDER-CLIENT'):
593 elif (tpType == 'XPONDER-NETWORK'):
595 self.assertTrue(client == 4)
596 self.assertTrue(network == 2)
597 listNode.remove(nodeId)
598 elif(nodeId == 'ROADMA01-SRG1'):
599 # Test related to SRG1
600 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17)
601 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
602 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
603 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
604 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
605 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
606 res['network'][0]['node'][i]['supporting-node'])
607 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'SRG')
608 listNode.remove(nodeId)
609 elif(nodeId == 'ROADMA01-SRG3'):
610 # Test related to SRG1
611 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17)
612 self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
613 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
614 self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
615 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
616 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
617 res['network'][0]['node'][i]['supporting-node'])
618 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'SRG')
619 listNode.remove(nodeId)
620 elif(nodeId == 'ROADMA01-DEG1'):
621 # Test related to DEG1
622 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
623 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
624 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
625 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
626 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
627 res['network'][0]['node'][i]['supporting-node'])
628 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'DEGREE')
629 listNode.remove(nodeId)
630 elif(nodeId == 'ROADMA01-DEG2'):
631 # Test related to DEG2
632 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
633 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
634 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
635 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
636 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
637 res['network'][0]['node'][i]['supporting-node'])
638 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'DEGREE')
639 listNode.remove(nodeId)
640 elif(nodeId == 'ROADMC01-SRG1'):
641 # Test related to SRG1
642 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17)
643 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
644 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
645 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
646 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
647 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMC01'},
648 res['network'][0]['node'][i]['supporting-node'])
649 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'SRG')
650 listNode.remove(nodeId)
651 elif(nodeId == 'ROADMC01-DEG1'):
652 # Test related to DEG1
653 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
654 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
655 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
656 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
657 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMC01'},
658 res['network'][0]['node'][i]['supporting-node'])
659 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'DEGREE')
660 listNode.remove(nodeId)
661 elif(nodeId == 'ROADMC01-DEG2'):
662 # Test related to DEG2
663 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
664 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
665 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
666 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
667 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMC01'},
668 res['network'][0]['node'][i]['supporting-node'])
669 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'DEGREE')
670 listNode.remove(nodeId)
672 self.assertFalse(True)
673 self.assertEqual(len(listNode), 0)
675 def test_21_connect_ROADMB(self):
676 response = test_utils.mount_device("ROADMB01", 'roadmb')
677 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
679 def test_22_omsAttributes_ROADMA_ROADMB(self):
680 # Config ROADMA01-ROADMB01 oms-attributes
681 url = ("{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:"
682 "link/ROADMA01-DEG2-DEG2-TTP-TXRXtoROADMB01-DEG1-DEG1-TTP-TXRX/org-openroadm-network-topology:"
683 "OMS-attributes/span"
684 .format(test_utils.RESTCONF_BASE_URL))
686 "auto-spanloss": "true",
687 "engineered-spanloss": 12.2,
688 "link-concatenation": [{
691 "SRLG-length": 100000,
693 response = requests.request(
694 "PUT", url, data=json.dumps(data), headers=test_utils.TYPE_APPLICATION_JSON,
695 auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
696 self.assertEqual(response.status_code, requests.codes.created)
698 def test_23_omsAttributes_ROADMB_ROADMA(self):
699 # Config ROADMB01-ROADMA01 oms-attributes
700 url = ("{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:"
701 "link/ROADMB01-DEG1-DEG1-TTP-TXRXtoROADMA01-DEG2-DEG2-TTP-TXRX/org-openroadm-network-topology:"
702 "OMS-attributes/span"
703 .format(test_utils.RESTCONF_BASE_URL))
705 "auto-spanloss": "true",
706 "engineered-spanloss": 12.2,
707 "link-concatenation": [{
710 "SRLG-length": 100000,
712 response = requests.request(
713 "PUT", url, data=json.dumps(data), headers=test_utils.TYPE_APPLICATION_JSON,
714 auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
715 self.assertEqual(response.status_code, requests.codes.created)
717 def test_24_omsAttributes_ROADMB_ROADMC(self):
718 # Config ROADMB01-ROADMC01 oms-attributes
719 url = ("{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:"
720 "link/ROADMB01-DEG2-DEG2-TTP-TXRXtoROADMC01-DEG1-DEG1-TTP-TXRX/org-openroadm-network-topology:"
721 "OMS-attributes/span"
722 .format(test_utils.RESTCONF_BASE_URL))
724 "auto-spanloss": "true",
725 "engineered-spanloss": 12.2,
726 "link-concatenation": [{
729 "SRLG-length": 100000,
731 response = requests.request(
732 "PUT", url, data=json.dumps(data), headers=test_utils.TYPE_APPLICATION_JSON,
733 auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
734 self.assertEqual(response.status_code, requests.codes.created)
736 def test_25_omsAttributes_ROADMC_ROADMB(self):
737 # Config ROADMC01-ROADMB01 oms-attributes
738 url = ("{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:"
739 "link/ROADMC01-DEG1-DEG1-TTP-TXRXtoROADMB01-DEG2-DEG2-TTP-TXRX/org-openroadm-network-topology:"
740 "OMS-attributes/span"
741 .format(test_utils.RESTCONF_BASE_URL))
743 "auto-spanloss": "true",
744 "engineered-spanloss": 12.2,
745 "link-concatenation": [{
748 "SRLG-length": 100000,
750 response = requests.request(
751 "PUT", url, data=json.dumps(data), headers=test_utils.TYPE_APPLICATION_JSON,
752 auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
753 self.assertEqual(response.status_code, requests.codes.created)
755 def test_26_getClliNetwork(self):
756 url = ("{}/config/ietf-network:networks/network/clli-network"
757 .format(test_utils.RESTCONF_BASE_URL))
758 response = requests.request(
759 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
760 self.assertEqual(response.status_code, requests.codes.ok)
761 res = response.json()
762 nbNode = len(res['network'][0]['node'])
763 listNode = ['NodeA', 'NodeB', 'NodeC']
764 for i in range(0, nbNode):
765 nodeId = res['network'][0]['node'][i]['node-id']
766 find = nodeId in listNode
767 self.assertEqual(find, True)
768 if(nodeId == 'NodeA'):
769 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeA')
770 elif(nodeId == 'NodeB'):
771 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeB')
773 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeC')
774 listNode.remove(nodeId)
775 self.assertEqual(len(listNode), 0)
777 def test_27_verifyDegree(self):
778 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
779 .format(test_utils.RESTCONF_BASE_URL))
780 response = requests.request(
781 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
782 self.assertEqual(response.status_code, requests.codes.ok)
783 res = response.json()
784 # Tests related to links
785 nbLink = len(res['network'][0]['ietf-network-topology:link'])
786 listR2RLink = ['ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX', 'ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX',
787 'ROADMA01-DEG2-DEG2-TTP-TXRXtoROADMB01-DEG1-DEG1-TTP-TXRX', 'ROADMC01-DEG1-DEG1-TTP-TXRXtoROADMB01-DEG2-DEG2-TTP-TXRX',
788 'ROADMB01-DEG1-DEG1-TTP-TXRXtoROADMA01-DEG2-DEG2-TTP-TXRX', 'ROADMB01-DEG2-DEG2-TTP-TXRXtoROADMC01-DEG1-DEG1-TTP-TXRX']
789 for i in range(0, nbLink):
790 if res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'ROADM-TO-ROADM':
791 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
792 find = link_id in listR2RLink
793 self.assertEqual(find, True)
794 listR2RLink.remove(link_id)
795 self.assertEqual(len(listR2RLink), 0)
797 def test_28_verifyOppositeLinkTopology(self):
798 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
799 .format(test_utils.RESTCONF_BASE_URL))
800 response = requests.request(
801 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
802 self.assertEqual(response.status_code, requests.codes.ok)
803 res = response.json()
804 # Tests related to links
805 nbLink = len(res['network'][0]['ietf-network-topology:link'])
806 self.assertEqual(nbLink, 34)
807 for i in range(0, nbLink):
808 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
809 link_type = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']
810 link_src = res['network'][0]['ietf-network-topology:link'][i]['source']['source-node']
811 link_dest = res['network'][0]['ietf-network-topology:link'][i]['destination']['dest-node']
812 oppLink_id = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:opposite-link']
813 # Find the opposite link
814 url_oppLink = "{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:link/"+oppLink_id
815 url = (url_oppLink.format(test_utils.RESTCONF_BASE_URL))
816 response_oppLink = requests.request(
817 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
818 self.assertEqual(response_oppLink.status_code, requests.codes.ok)
819 res_oppLink = response_oppLink.json()
820 self.assertEqual(res_oppLink['ietf-network-topology:link'][0]
821 ['org-openroadm-common-network:opposite-link'], link_id)
822 self.assertEqual(res_oppLink['ietf-network-topology:link'][0]['source']['source-node'], link_dest)
823 self.assertEqual(res_oppLink['ietf-network-topology:link'][0]['destination']['dest-node'], link_src)
824 oppLink_type = res_oppLink['ietf-network-topology:link'][0]['org-openroadm-common-network:link-type']
825 if link_type == 'ADD-LINK':
826 self.assertEqual(oppLink_type, 'DROP-LINK')
827 elif link_type == 'DROP-LINK':
828 self.assertEqual(oppLink_type, 'ADD-LINK')
829 elif link_type == 'EXPRESS-LINK':
830 self.assertEqual(oppLink_type, 'EXPRESS-LINK')
831 elif link_type == 'ROADM-TO-ROADM':
832 self.assertEqual(oppLink_type, 'ROADM-TO-ROADM')
833 elif link_type == 'XPONDER-INPUT':
834 self.assertEqual(oppLink_type, 'XPONDER-OUTPUT')
835 elif link_type == 'XPONDER-OUTPUT':
836 self.assertEqual(oppLink_type, 'XPONDER-INPUT')
838 def test_29_getLinkOmsAttributesOpenRoadmTopology(self):
839 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
840 .format(test_utils.RESTCONF_BASE_URL))
841 response = requests.request(
842 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
843 self.assertEqual(response.status_code, requests.codes.ok)
844 res = response.json()
845 nbLink = len(res['network'][0]['ietf-network-topology:link'])
846 R2RLink = ['ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX',
847 'ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX',
848 'ROADMA01-DEG2-DEG2-TTP-TXRXtoROADMB01-DEG1-DEG1-TTP-TXRX',
849 'ROADMC01-DEG1-DEG1-TTP-TXRXtoROADMB01-DEG2-DEG2-TTP-TXRX',
850 'ROADMB01-DEG1-DEG1-TTP-TXRXtoROADMA01-DEG2-DEG2-TTP-TXRX',
851 'ROADMB01-DEG2-DEG2-TTP-TXRXtoROADMC01-DEG1-DEG1-TTP-TXRX']
852 for i in range(0, nbLink):
853 nodeType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']
854 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
855 if(link_id in R2RLink):
857 spanLoss = res['network'][0]['ietf-network-topology:link'][i][
858 'org-openroadm-network-topology:OMS-attributes']['span']["engineered-spanloss"]
859 length = res['network'][0]['ietf-network-topology:link'][i][
860 'org-openroadm-network-topology:OMS-attributes']['span']['link-concatenation'][0]['SRLG-length']
861 if((spanLoss != None) & (length != None)):
863 self.assertTrue(find)
864 R2RLink.remove(link_id)
865 self.assertEqual(len(R2RLink), 0)
867 def test_30_disconnect_ROADMB(self):
868 # Delete in the topology-netconf
869 response = test_utils.unmount_device("ROADMB01")
870 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
871 # Delete in the clli-network
872 url = ("{}/config/ietf-network:networks/network/clli-network/node/NodeB"
873 .format(test_utils.RESTCONF_BASE_URL))
875 response = requests.request(
876 "DELETE", url, data=json.dumps(data), headers=test_utils.TYPE_APPLICATION_JSON,
877 auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
878 self.assertEqual(response.status_code, requests.codes.ok)
880 def test_31_disconnect_ROADMC(self):
881 response = test_utils.unmount_device("ROADMC01")
882 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
883 # Delete in the clli-network
884 url = ("{}/config/ietf-network:networks/network/clli-network/node/NodeC"
885 .format(test_utils.RESTCONF_BASE_URL))
887 response = requests.request(
888 "DELETE", url, data=json.dumps(data), headers=test_utils.TYPE_APPLICATION_JSON,
889 auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
890 self.assertEqual(response.status_code, requests.codes.ok)
892 def test_32_getNodes_OpenRoadmTopology(self):
893 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
894 .format(test_utils.RESTCONF_BASE_URL))
895 response = requests.request(
896 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
897 res = response.json()
898 # Tests related to nodes
899 self.assertEqual(response.status_code, requests.codes.ok)
900 nbNode = len(res['network'][0]['node'])
901 self.assertEqual(nbNode, 5)
902 listNode = ['XPDRA01-XPDR1', 'ROADMA01-SRG1', 'ROADMA01-SRG3', 'ROADMA01-DEG1', 'ROADMA01-DEG2']
903 for i in range(0, nbNode):
904 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
905 nodeId = res['network'][0]['node'][i]['node-id']
906 # Tests related to XPDRA nodes
907 if(nodeId == 'XPDRA01-XPDR1'):
908 nbTp = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
909 for j in range(0, nbTp):
910 tpid = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id']
911 if (tpid == 'XPDR1-CLIENT1'):
912 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
913 ['org-openroadm-common-network:tp-type'], 'XPONDER-CLIENT')
914 if (tpid == 'XPDR1-NETWORK1'):
915 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
916 ['org-openroadm-common-network:tp-type'], 'XPONDER-NETWORK')
917 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
918 ['org-openroadm-network-topology:xpdr-network-attributes']['tail-equipment-id'],
919 'ROADMA01-SRG1--SRG1-PP1-TXRX')
920 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDRA01'},
921 res['network'][0]['node'][i]['supporting-node'])
922 listNode.remove(nodeId)
923 elif(nodeId == 'ROADMA01-SRG1'):
924 # Test related to SRG1
925 self.assertEqual(nodeType, 'SRG')
926 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17)
927 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
928 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
929 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
930 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
931 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
932 res['network'][0]['node'][i]['supporting-node'])
933 listNode.remove(nodeId)
934 elif(nodeId == 'ROADMA01-SRG3'):
935 # Test related to SRG1
936 self.assertEqual(nodeType, 'SRG')
937 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17)
938 self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
939 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
940 self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
941 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
942 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
943 res['network'][0]['node'][i]['supporting-node'])
944 listNode.remove(nodeId)
945 elif(nodeId == 'ROADMA01-DEG1'):
946 # Test related to DEG1
947 self.assertEqual(nodeType, 'DEGREE')
948 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
949 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
950 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
951 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
952 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
953 res['network'][0]['node'][i]['supporting-node'])
954 listNode.remove(nodeId)
955 elif(nodeId == 'ROADMA01-DEG2'):
956 # Test related to DEG2
957 self.assertEqual(nodeType, 'DEGREE')
958 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
959 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
960 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
961 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
962 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
963 res['network'][0]['node'][i]['supporting-node'])
964 listNode.remove(nodeId)
966 self.assertFalse(True)
967 self.assertEqual(len(listNode), 0)
968 # Test related to SRG1 of ROADMC
969 for i in range(0, nbNode):
970 self.assertNotEqual(res['network'][0]['node'][i]['node-id'], 'ROADMC01-SRG1')
971 self.assertNotEqual(res['network'][0]['node'][i]['node-id'], 'ROADMC01-DEG1')
972 self.assertNotEqual(res['network'][0]['node'][i]['node-id'], 'ROADMC01-DEG2')
974 def test_33_getOpenRoadmNetwork(self):
975 url = ("{}/config/ietf-network:networks/network/openroadm-network"
976 .format(test_utils.RESTCONF_BASE_URL))
977 response = requests.request(
978 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
979 self.assertEqual(response.status_code, requests.codes.ok)
980 res = response.json()
981 nbNode = len(res['network'][0]['node'])
982 self.assertEqual(nbNode, 2)
983 for i in range(0, nbNode-1):
984 self.assertNotEqual(res['network'][0]['node'][i]['node-id'], 'ROADMC01')
985 self.assertNotEqual(res['network'][0]['node'][i]['node-id'], 'ROADMB01')
987 def test_34_getClliNetwork(self):
988 url = ("{}/config/ietf-network:networks/network/clli-network"
989 .format(test_utils.RESTCONF_BASE_URL))
990 response = requests.request(
991 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
992 self.assertEqual(response.status_code, requests.codes.ok)
993 res = response.json()
994 nbNode = len(res['network'][0]['node'])
995 self.assertEqual(nbNode, 1)
996 for i in range(0, nbNode-1):
997 self.assertNotEqual(res['network'][0]['node'][1]['org-openroadm-clli-network:clli'], 'NodeC')
999 def test_35_disconnect_XPDRA(self):
1000 response = test_utils.unmount_device("XPDRA01")
1001 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
1003 def test_36_getClliNetwork(self):
1004 url = ("{}/config/ietf-network:networks/network/clli-network"
1005 .format(test_utils.RESTCONF_BASE_URL))
1006 response = requests.request(
1007 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
1008 self.assertEqual(response.status_code, requests.codes.ok)
1009 res = response.json()
1010 nbNode = len(res['network'][0]['node'])
1011 self.assertEqual(nbNode, 1)
1012 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'], 'NodeA')
1014 def test_37_getOpenRoadmNetwork(self):
1015 url = ("{}/config/ietf-network:networks/network/openroadm-network"
1016 .format(test_utils.RESTCONF_BASE_URL))
1017 response = requests.request(
1018 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
1019 self.assertEqual(response.status_code, requests.codes.ok)
1020 res = response.json()
1021 nbNode = len(res['network'][0]['node'])
1022 self.assertEqual(nbNode, 1)
1023 for i in range(0, nbNode):
1024 self.assertNotEqual(res['network'][0]['node'][i]['node-id'], 'XPDRA01')
1026 def test_38_getNodes_OpenRoadmTopology(self):
1027 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
1028 .format(test_utils.RESTCONF_BASE_URL))
1029 response = requests.request(
1030 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
1031 res = response.json()
1032 # Tests related to nodes
1033 self.assertEqual(response.status_code, requests.codes.ok)
1034 nbNode = len(res['network'][0]['node'])
1035 self.assertEqual(nbNode, 4)
1036 listNode = ['ROADMA01-SRG1', 'ROADMA01-SRG3', 'ROADMA01-DEG1', 'ROADMA01-DEG2']
1037 for i in range(0, nbNode):
1038 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
1039 res['network'][0]['node'][i]['supporting-node'])
1040 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
1041 nodeId = res['network'][0]['node'][i]['node-id']
1042 if(nodeId == 'ROADMA01-SRG1'):
1043 # Test related to SRG1
1044 self.assertEqual(nodeType, 'SRG')
1045 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17)
1046 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
1047 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1048 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
1049 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1050 listNode.remove(nodeId)
1051 elif(nodeId == 'ROADMA01-SRG3'):
1052 # Test related to SRG1
1053 self.assertEqual(nodeType, 'SRG')
1054 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17)
1055 self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
1056 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1057 self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
1058 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1059 listNode.remove(nodeId)
1060 elif(nodeId == 'ROADMA01-DEG1'):
1061 # Test related to DEG1
1062 self.assertEqual(nodeType, 'DEGREE')
1063 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
1064 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1065 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
1066 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1067 listNode.remove(nodeId)
1068 elif(nodeId == 'ROADMA01-DEG2'):
1069 # Test related to DEG2
1070 self.assertEqual(nodeType, 'DEGREE')
1071 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
1072 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1073 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
1074 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1075 listNode.remove(nodeId)
1077 self.assertFalse(True)
1078 self.assertEqual(len(listNode), 0)
1080 def test_39_disconnect_ROADM_XPDRA_link(self):
1082 url = ("{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:"
1083 "link/XPDRA01-XPDR1-XPDR1-NETWORK1toROADMA01-SRG1-SRG1-PP1-TXRX"
1084 .format(test_utils.RESTCONF_BASE_URL))
1086 response = requests.request(
1087 "DELETE", url, data=json.dumps(data), headers=test_utils.TYPE_APPLICATION_JSON,
1088 auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
1089 self.assertEqual(response.status_code, requests.codes.ok)
1091 url = ("{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:"
1092 "link/ROADMA01-SRG1-SRG1-PP1-TXRXtoXPDRA01-XPDR1-XPDR1-NETWORK1"
1093 .format(test_utils.RESTCONF_BASE_URL))
1095 response = requests.request(
1096 "DELETE", url, data=json.dumps(data), headers=test_utils.TYPE_APPLICATION_JSON,
1097 auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
1098 self.assertEqual(response.status_code, requests.codes.ok)
1100 def test_40_getLinks_OpenRoadmTopology(self):
1101 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
1102 .format(test_utils.RESTCONF_BASE_URL))
1103 response = requests.request(
1104 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
1105 self.assertEqual(response.status_code, requests.codes.ok)
1106 res = response.json()
1107 nbLink = len(res['network'][0]['ietf-network-topology:link'])
1108 self.assertEqual(nbLink, 16)
1109 expressLink = ['ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX',
1110 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX']
1111 addLink = ['ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX',
1112 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX']
1113 dropLink = ['ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX',
1114 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX']
1115 roadmtoroadmLink = 0
1116 for i in range(0, nbLink):
1117 if (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'EXPRESS-LINK'):
1118 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
1119 find = link_id in expressLink
1120 self.assertEqual(find, True)
1121 expressLink.remove(link_id)
1122 elif (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'ADD-LINK'):
1123 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
1124 find = link_id in addLink
1125 self.assertEqual(find, True)
1126 addLink.remove(link_id)
1127 elif (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'DROP-LINK'):
1128 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
1129 find = link_id in dropLink
1130 self.assertEqual(find, True)
1131 dropLink.remove(link_id)
1133 roadmtoroadmLink += 1
1134 self.assertEqual(len(expressLink), 0)
1135 self.assertEqual(len(addLink), 0)
1136 self.assertEqual(len(dropLink), 0)
1137 self.assertEqual(roadmtoroadmLink, 6)
1138 for i in range(0, nbLink):
1139 self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]
1140 ['org-openroadm-common-network:link-type'], 'XPONDER-OUTPUT')
1141 self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]
1142 ['org-openroadm-common-network:link-type'], 'XPONDER-INPUT')
1144 def test_41_disconnect_ROADMA(self):
1145 response = test_utils.unmount_device("ROADMA01")
1146 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
1147 # Delete in the clli-network
1148 url = ("{}/config/ietf-network:networks/network/clli-network/node/NodeA"
1149 .format(test_utils.RESTCONF_BASE_URL))
1151 response = requests.request(
1152 "DELETE", url, data=json.dumps(data), headers=test_utils.TYPE_APPLICATION_JSON,
1153 auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
1154 self.assertEqual(response.status_code, requests.codes.ok)
1156 def test_42_getClliNetwork(self):
1157 url = ("{}/config/ietf-network:networks/network/clli-network"
1158 .format(test_utils.RESTCONF_BASE_URL))
1159 response = requests.request(
1160 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
1161 self.assertEqual(response.status_code, requests.codes.ok)
1162 res = response.json()
1163 self.assertNotIn('node', res['network'][0])
1165 def test_43_getOpenRoadmNetwork(self):
1166 url = ("{}/config/ietf-network:networks/network/openroadm-network"
1167 .format(test_utils.RESTCONF_BASE_URL))
1168 response = requests.request(
1169 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
1170 self.assertEqual(response.status_code, requests.codes.ok)
1171 res = response.json()
1172 self.assertNotIn('node', res['network'][0])
1174 def test_44_check_roadm2roadm_link_persistence(self):
1175 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
1176 .format(test_utils.RESTCONF_BASE_URL))
1177 response = requests.request(
1178 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
1179 self.assertEqual(response.status_code, requests.codes.ok)
1180 res = response.json()
1181 nbLink = len(res['network'][0]['ietf-network-topology:link'])
1182 self.assertNotIn('node', res['network'][0])
1183 self.assertEqual(nbLink, 6)
1186 if __name__ == "__main__":
1187 unittest.main(verbosity=2)