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 ##############################################################################
24 class TransportPCETopologyTesting(unittest.TestCase):
26 honeynode_process1 = None
27 honeynode_process2 = None
28 honeynode_process3 = None
29 honeynode_process4 = None
31 restconf_baseurl = "http://localhost:8181/restconf"
33 #START_IGNORE_XTESTING
37 print ("starting honeynode1...")
38 cls.honeynode_process1 = test_utils.start_xpdra_honeynode()
41 print ("starting honeynode2...")
42 cls.honeynode_process2 = test_utils.start_roadma_honeynode()
45 print ("starting honeynode3...")
46 cls.honeynode_process3 = test_utils.start_roadmb_honeynode()
49 print ("starting honeynode4...")
50 cls.honeynode_process4 = test_utils.start_roadmc_honeynode()
52 print ("all honeynodes started")
54 print ("starting opendaylight...")
55 cls.odl_process = test_utils.start_tpce()
57 print ("opendaylight started")
60 def tearDownClass(cls):
61 for child in psutil.Process(cls.odl_process.pid).children():
62 child.send_signal(signal.SIGINT)
64 cls.odl_process.send_signal(signal.SIGINT)
65 cls.odl_process.wait()
66 for child in psutil.Process(cls.honeynode_process1.pid).children():
67 child.send_signal(signal.SIGINT)
69 cls.honeynode_process1.send_signal(signal.SIGINT)
70 cls.honeynode_process1.wait()
71 for child in psutil.Process(cls.honeynode_process2.pid).children():
72 child.send_signal(signal.SIGINT)
74 cls.honeynode_process2.send_signal(signal.SIGINT)
75 cls.honeynode_process2.wait()
77 for child in psutil.Process(cls.honeynode_process3.pid).children():
78 child.send_signal(signal.SIGINT)
80 cls.honeynode_process3.send_signal(signal.SIGINT)
81 cls.honeynode_process3.wait()
83 for child in psutil.Process(cls.honeynode_process4.pid).children():
84 child.send_signal(signal.SIGINT)
86 cls.honeynode_process4.send_signal(signal.SIGINT)
87 cls.honeynode_process4.wait()
94 def test_01_connect_ROADMA(self):
96 url = ("{}/config/network-topology:"
97 "network-topology/topology/topology-netconf/node/ROADMA01"
98 .format(self.restconf_baseurl))
100 "node-id": "ROADMA01",
101 "netconf-node-topology:username": "admin",
102 "netconf-node-topology:password": "admin",
103 "netconf-node-topology:host": "127.0.0.1",
104 "netconf-node-topology:port": "17831",
105 "netconf-node-topology:tcp-only": "false",
106 "netconf-node-topology:pass-through": {}}]}
107 headers = {'content-type': 'application/json'}
108 response = requests.request(
109 "PUT", url, data=json.dumps(data), headers=headers,
110 auth=('admin', 'admin'))
111 self.assertEqual(response.status_code, requests.codes.created)
114 def test_02_getClliNetwork(self):
115 url = ("{}/config/ietf-network:networks/network/clli-network"
116 .format(self.restconf_baseurl))
117 headers = {'content-type': 'application/json'}
118 response = requests.request(
119 "GET", url, headers=headers, auth=('admin', 'admin'))
120 self.assertEqual(response.status_code, requests.codes.ok)
121 res = response.json()
122 self.assertEqual(res['network'][0]['node'][0]['node-id'],'NodeA')
123 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'],'NodeA')
125 def test_03_getOpenRoadmNetwork(self):
126 url = ("{}/config/ietf-network:networks/network/openroadm-network"
127 .format(self.restconf_baseurl))
128 headers = {'content-type': 'application/json'}
129 response = requests.request(
130 "GET", url, headers=headers, auth=('admin', 'admin'))
131 self.assertEqual(response.status_code, requests.codes.ok)
132 res = response.json()
133 self.assertEqual(res['network'][0]['node'][0]['node-id'],'ROADMA01')
134 self.assertEqual(res['network'][0]['node'][0]['supporting-node'][0]['network-ref'],'clli-network')
135 self.assertEqual(res['network'][0]['node'][0]['supporting-node'][0]['node-ref'],'NodeA')
136 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-common-network:node-type'],'ROADM')
137 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network:model'],'2')
139 def test_04_getLinks_OpenroadmTopology(self):
140 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
141 .format(self.restconf_baseurl))
142 headers = {'content-type': 'application/json'}
143 response = requests.request(
144 "GET", url, headers=headers, auth=('admin', 'admin'))
145 self.assertEqual(response.status_code, requests.codes.ok)
146 res = response.json()
147 #Tests related to links
148 nbLink=len(res['network'][0]['ietf-network-topology:link'])
149 self.assertEqual(nbLink,10)
150 expressLink=['ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX','ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX']
151 addLink=['ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX','ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX',
152 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX','ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX']
153 dropLink=['ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX','ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX',
154 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX','ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX']
155 for i in range(0,nbLink):
156 linkId = res['network'][0]['ietf-network-topology:link'][i]['link-id']
157 if (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']=='EXPRESS-LINK'):
158 find= linkId in expressLink
159 self.assertEqual(find, True)
160 expressLink.remove(linkId)
161 elif (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']=='ADD-LINK'):
162 find= linkId in addLink
163 self.assertEqual(find, True)
164 addLink.remove(linkId)
165 elif (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']=='DROP-LINK'):
166 find= linkId in dropLink
167 self.assertEqual(find, True)
168 dropLink.remove(linkId)
170 self.assertFalse(True)
171 self.assertEqual(len(expressLink),0)
172 self.assertEqual(len(addLink),0)
173 self.assertEqual(len(dropLink),0)
175 def test_05_getNodes_OpenRoadmTopology(self):
176 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
177 .format(self.restconf_baseurl))
178 headers = {'content-type': 'application/json'}
179 response = requests.request(
180 "GET", url, headers=headers, auth=('admin', 'admin'))
181 res = response.json()
182 #Tests related to nodes
183 self.assertEqual(response.status_code, requests.codes.ok)
184 nbNode=len(res['network'][0]['node'])
185 self.assertEqual(nbNode,4)
186 listNode=['ROADMA01-SRG1','ROADMA01-SRG3','ROADMA01-DEG1','ROADMA01-DEG2']
187 for i in range(0,nbNode):
188 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
189 res['network'][0]['node'][i]['supporting-node'])
190 nodeType=res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
191 nodeId=res['network'][0]['node'][i]['node-id']
192 if(nodeId=='ROADMA01-SRG1'):
193 #Test related to SRG1
194 self.assertEqual(nodeType,'SRG')
195 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']),17)
196 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
197 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
198 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
199 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
200 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'},
201 res['network'][0]['node'][i]['supporting-node'])
202 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
203 res['network'][0]['node'][i]['supporting-node'])
204 listNode.remove(nodeId)
205 elif(nodeId=='ROADMA01-SRG3'):
206 #Test related to SRG1
207 self.assertEqual(nodeType,'SRG')
208 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']),17)
209 self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
210 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
211 self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
212 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
213 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'},
214 res['network'][0]['node'][i]['supporting-node'])
215 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
216 res['network'][0]['node'][i]['supporting-node'])
217 listNode.remove(nodeId)
218 elif(nodeId=='ROADMA01-DEG1'):
219 #Test related to DEG1
220 self.assertEqual(nodeType,'DEGREE')
221 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
222 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
223 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
224 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
225 listNode.remove(nodeId)
226 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'},
227 res['network'][0]['node'][i]['supporting-node'])
228 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
229 res['network'][0]['node'][i]['supporting-node'])
230 elif(nodeId=='ROADMA01-DEG2'):
231 #Test related to DEG2
232 self.assertEqual(nodeType,'DEGREE')
233 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
234 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
235 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
236 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
237 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'},
238 res['network'][0]['node'][i]['supporting-node'])
239 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
240 res['network'][0]['node'][i]['supporting-node'])
241 listNode.remove(nodeId)
243 self.assertFalse(True)
244 self.assertEqual(len(listNode),0)
246 def test_06_connect_XPDRA(self):
247 url = ("{}/config/network-topology:"
248 "network-topology/topology/topology-netconf/node/XPDRA01"
249 .format(self.restconf_baseurl))
251 "node-id": "XPDRA01",
252 "netconf-node-topology:username": "admin",
253 "netconf-node-topology:password": "admin",
254 "netconf-node-topology:host": "127.0.0.1",
255 "netconf-node-topology:port": "17830",
256 "netconf-node-topology:tcp-only": "false",
257 "netconf-node-topology:pass-through": {}}]}
258 headers = {'content-type': 'application/json'}
259 response = requests.request(
260 "PUT", url, data=json.dumps(data), headers=headers,
261 auth=('admin', 'admin'))
262 self.assertEqual(response.status_code, requests.codes.created)
265 def test_07_getClliNetwork(self):
266 url = ("{}/config/ietf-network:networks/network/clli-network"
267 .format(self.restconf_baseurl))
268 headers = {'content-type': 'application/json'}
269 response = requests.request(
270 "GET", url, headers=headers, auth=('admin', 'admin'))
271 self.assertEqual(response.status_code, requests.codes.ok)
272 res = response.json()
273 self.assertEqual(res['network'][0]['node'][0]['node-id'],'NodeA')
274 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'],'NodeA')
276 def test_08_getOpenRoadmNetwork(self):
277 url = ("{}/config/ietf-network:networks/network/openroadm-network"
278 .format(self.restconf_baseurl))
279 headers = {'content-type': 'application/json'}
280 response = requests.request(
281 "GET", url, headers=headers, auth=('admin', 'admin'))
282 self.assertEqual(response.status_code, requests.codes.ok)
283 res = response.json()
284 nbNode=len(res['network'][0]['node'])
285 self.assertEqual(nbNode,2)
286 for i in range(0,nbNode):
287 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['network-ref'],'clli-network')
288 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'],'NodeA')
289 nodeId=res['network'][0]['node'][i]['node-id']
290 if(nodeId=='XPDRA01'):
291 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'],'XPONDER')
292 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'],'1')
293 elif(nodeId=='ROADMA01'):
294 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'],'ROADM')
295 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'],'2')
297 self.assertFalse(True)
299 def test_09_getNodes_OpenRoadmTopology(self):
300 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
301 .format(self.restconf_baseurl))
302 headers = {'content-type': 'application/json'}
303 response = requests.request(
304 "GET", url, headers=headers, auth=('admin', 'admin'))
305 res = response.json()
306 #Tests related to nodes
307 self.assertEqual(response.status_code, requests.codes.ok)
308 nbNode=len(res['network'][0]['node'])
309 self.assertEqual(nbNode,5)
310 listNode=['XPDRA01-XPDR1','ROADMA01-SRG1','ROADMA01-SRG3','ROADMA01-DEG1','ROADMA01-DEG2']
311 for i in range(0,nbNode):
312 nodeType=res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
313 nodeId=res['network'][0]['node'][i]['node-id']
314 #Tests related to XPDRA nodes
315 if(nodeId=='XPDRA01-XPDR1'):
316 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDRA01'},
317 res['network'][0]['node'][i]['supporting-node'])
318 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'},
319 res['network'][0]['node'][i]['supporting-node'])
320 self.assertEqual(nodeType,'XPONDER')
321 nbTps=len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
324 for j in range(0,nbTps):
325 tpType=res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type']
326 tpId=res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id']
327 if (tpType=='XPONDER-CLIENT'):
329 elif (tpType=='XPONDER-NETWORK'):
331 if (tpId == 'XPDR1-NETWORK2'):
332 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['transportpce-topology:associated-connection-map-port'],'XPDR1-CLIENT3')
333 if (tpId == 'XPDR1-CLIENT3'):
334 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['transportpce-topology:associated-connection-map-port'],'XPDR1-NETWORK2')
335 self.assertTrue(client == 4)
336 self.assertTrue(network == 2)
337 listNode.remove(nodeId)
338 elif(nodeId=='ROADMA01-SRG1'):
339 #Test related to SRG1
340 self.assertEqual(nodeType,'SRG')
341 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']),17)
342 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
343 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
344 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
345 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
346 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
347 res['network'][0]['node'][i]['supporting-node'])
348 listNode.remove(nodeId)
349 elif(nodeId=='ROADMA01-SRG3'):
350 #Test related to SRG1
351 self.assertEqual(nodeType,'SRG')
352 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']),17)
353 self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
354 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
355 self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
356 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
357 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
358 res['network'][0]['node'][i]['supporting-node'])
359 listNode.remove(nodeId)
360 elif(nodeId=='ROADMA01-DEG1'):
361 #Test related to DEG1
362 self.assertEqual(nodeType,'DEGREE')
363 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
364 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
365 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
366 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
367 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
368 res['network'][0]['node'][i]['supporting-node'])
369 listNode.remove(nodeId)
370 elif(nodeId=='ROADMA01-DEG2'):
371 #Test related to DEG2
372 self.assertEqual(nodeType,'DEGREE')
373 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
374 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
375 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
376 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
377 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
378 res['network'][0]['node'][i]['supporting-node'])
379 listNode.remove(nodeId)
381 self.assertFalse(True)
382 self.assertEqual(len(listNode),0)
384 #Connect the tail XPDRA to ROADMA and vice versa
385 def test_10_connect_tail_xpdr_rdm(self):
386 #Connect the tail: XPDRA to ROADMA
387 url = ("{}/operations/transportpce-networkutils:init-xpdr-rdm-links"
388 .format(self.restconf_baseurl))
389 data = {"networkutils:input": {
390 "networkutils:links-input": {
391 "networkutils:xpdr-node": "XPDRA01",
392 "networkutils:xpdr-num": "1",
393 "networkutils:network-num": "1",
394 "networkutils:rdm-node": "ROADMA01",
395 "networkutils:srg-num": "1",
396 "networkutils:termination-point-num": "SRG1-PP1-TXRX"
400 headers = {'content-type': 'application/json'}
401 response = requests.request(
402 "POST", url, data=json.dumps(data), headers=headers,
403 auth=('admin', 'admin'))
404 self.assertEqual(response.status_code, requests.codes.ok)
406 def test_11_connect_tail_rdm_xpdr(self):
407 #Connect the tail: ROADMA to XPDRA
408 url = ("{}/operations/transportpce-networkutils:init-rdm-xpdr-links"
409 .format(self.restconf_baseurl))
410 data = {"networkutils:input": {
411 "networkutils:links-input": {
412 "networkutils:xpdr-node": "XPDRA01",
413 "networkutils:xpdr-num": "1",
414 "networkutils:network-num": "1",
415 "networkutils:rdm-node": "ROADMA01",
416 "networkutils:srg-num": "1",
417 "networkutils:termination-point-num": "SRG1-PP1-TXRX"
421 headers = {'content-type': 'application/json'}
422 response = requests.request(
423 "POST", url, data=json.dumps(data), headers=headers,
424 auth=('admin', 'admin'))
425 self.assertEqual(response.status_code, requests.codes.ok)
427 def test_12_getLinks_OpenRoadmTopology(self):
428 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
429 .format(self.restconf_baseurl))
430 headers = {'content-type': 'application/json'}
431 response = requests.request(
432 "GET", url, headers=headers, auth=('admin', 'admin'))
433 self.assertEqual(response.status_code, requests.codes.ok)
434 res = response.json()
435 #Tests related to links
436 nbLink=len(res['network'][0]['ietf-network-topology:link'])
437 self.assertEqual(nbLink,12)
438 expressLink=['ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX','ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX']
439 addLink=['ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX','ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX',
440 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX','ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX']
441 dropLink=['ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX','ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX',
442 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX','ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX']
443 XPDR_IN=['ROADMA01-SRG1-SRG1-PP1-TXRXtoXPDRA01-XPDR1-XPDR1-NETWORK1']
444 XPDR_OUT=['XPDRA01-XPDR1-XPDR1-NETWORK1toROADMA01-SRG1-SRG1-PP1-TXRX']
445 for i in range(0,nbLink):
446 nodeType=res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']
447 linkId=res['network'][0]['ietf-network-topology:link'][i]['link-id']
448 if(nodeType=='EXPRESS-LINK'):
449 find= linkId in expressLink
450 self.assertEqual(find, True)
451 expressLink.remove(linkId)
452 elif(nodeType=='ADD-LINK'):
453 find= linkId in addLink
454 self.assertEqual(find, True)
455 addLink.remove(linkId)
456 elif(nodeType=='DROP-LINK'):
457 find= linkId in dropLink
458 self.assertEqual(find, True)
459 dropLink.remove(linkId)
460 elif(nodeType=='XPONDER-INPUT'):
461 find= linkId in XPDR_IN
462 self.assertEqual(find, True)
463 XPDR_IN.remove(linkId)
464 elif(nodeType=='XPONDER-OUTPUT'):
465 find= linkId in XPDR_OUT
466 self.assertEqual(find, True)
467 XPDR_OUT.remove(linkId)
469 self.assertFalse(True)
470 self.assertEqual(len(expressLink),0)
471 self.assertEqual(len(addLink),0)
472 self.assertEqual(len(dropLink),0)
473 self.assertEqual(len(XPDR_IN),0)
474 self.assertEqual(len(XPDR_OUT),0)
476 def test_13_connect_ROADMC(self):
478 url = ("{}/config/network-topology:"
479 "network-topology/topology/topology-netconf/node/ROADMC01"
480 .format(self.restconf_baseurl))
482 "node-id": "ROADMC01",
483 "netconf-node-topology:username": "admin",
484 "netconf-node-topology:password": "admin",
485 "netconf-node-topology:host": "127.0.0.1",
486 "netconf-node-topology:port": "17833",
487 "netconf-node-topology:tcp-only": "false",
488 "netconf-node-topology:pass-through": {}}]}
489 headers = {'content-type': 'application/json'}
490 response = requests.request(
491 "PUT", url, data=json.dumps(data), headers=headers,
492 auth=('admin', 'admin'))
493 self.assertEqual(response.status_code, requests.codes.created)
496 def test_14_omsAttributes_ROADMA_ROADMC(self):
497 # Config ROADMA-ROADMC oms-attributes
498 url = ("{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:"
499 "link/ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX/org-openroadm-network-topology:"
500 "OMS-attributes/span"
501 .format(self.restconf_baseurl))
504 "auto-spanloss": "true",
505 "engineered-spanloss": 12.2,
506 "link-concatenation": [{
509 "SRLG-length": 100000,
511 headers = {'content-type': 'application/json'}
512 response = requests.request(
513 "PUT", url, data=json.dumps(data), headers=headers,
514 auth=('admin', 'admin'))
515 self.assertEqual(response.status_code, requests.codes.created)
517 def test_15_omsAttributes_ROADMC_ROADMA(self):
518 # Config ROADMC01-ROADMA oms-attributes
519 url = ("{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:"
520 "link/ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX/org-openroadm-network-topology:"
521 "OMS-attributes/span"
522 .format(self.restconf_baseurl))
525 "auto-spanloss": "true",
526 "engineered-spanloss": 12.2,
527 "link-concatenation": [{
530 "SRLG-length": 100000,
532 headers = {'content-type': 'application/json'}
533 response = requests.request(
534 "PUT", url, data=json.dumps(data), headers=headers,
535 auth=('admin', 'admin'))
536 self.assertEqual(response.status_code, requests.codes.created)
538 def test_16_getClliNetwork(self):
539 url = ("{}/config/ietf-network:networks/network/clli-network"
540 .format(self.restconf_baseurl))
541 headers = {'content-type': 'application/json'}
542 response = requests.request(
543 "GET", url, headers=headers, auth=('admin', 'admin'))
544 self.assertEqual(response.status_code, requests.codes.ok)
545 res = response.json()
546 nbNode=len(res['network'][0]['node'])
547 listNode=['NodeA','NodeC']
548 for i in range(0,nbNode):
549 nodeId = res['network'][0]['node'][i]['node-id']
550 find= nodeId in listNode
551 self.assertEqual(find, True)
553 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'],'NodeA')
555 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'],'NodeC')
556 listNode.remove(nodeId)
558 self.assertEqual(len(listNode),0)
560 def test_17_getOpenRoadmNetwork(self):
561 url = ("{}/config/ietf-network:networks/network/openroadm-network"
562 .format(self.restconf_baseurl))
563 headers = {'content-type': 'application/json'}
564 response = requests.request(
565 "GET", url, headers=headers, auth=('admin', 'admin'))
566 self.assertEqual(response.status_code, requests.codes.ok)
567 res = response.json()
568 nbNode=len(res['network'][0]['node'])
569 self.assertEqual(nbNode,3)
570 listNode=['XPDRA01','ROADMA01','ROADMC01']
571 for i in range(0,nbNode):
572 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['network-ref'],'clli-network')
573 nodeId=res['network'][0]['node'][i]['node-id']
574 if(nodeId=='XPDRA01'):
575 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'],'NodeA')
576 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'],'XPONDER')
577 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'],'1')
578 listNode.remove(nodeId)
579 elif(nodeId=='ROADMA01'):
580 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'],'NodeA')
581 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'],'ROADM')
582 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'],'2')
583 listNode.remove(nodeId)
584 elif(nodeId=='ROADMC01'):
585 self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'],'NodeC')
586 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'],'ROADM')
587 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'],'2')
588 listNode.remove(nodeId)
590 self.assertFalse(True)
591 self.assertEqual(len(listNode),0)
593 def test_18_getROADMLinkOpenRoadmTopology(self):
594 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
595 .format(self.restconf_baseurl))
596 headers = {'content-type': 'application/json'}
597 response = requests.request(
598 "GET", url, headers=headers, auth=('admin', 'admin'))
599 self.assertEqual(response.status_code, requests.codes.ok)
600 res = response.json()
601 #Tests related to links
602 nbLink=len(res['network'][0]['ietf-network-topology:link'])
603 self.assertEqual(nbLink,20)
604 expressLink=['ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX','ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX',
605 'ROADMC01-DEG2-DEG2-CTP-TXRXtoROADMC01-DEG1-DEG1-CTP-TXRX','ROADMC01-DEG1-DEG1-CTP-TXRXtoROADMC01-DEG2-DEG2-CTP-TXRX']
606 addLink=['ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX','ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX',
607 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX','ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX',
608 'ROADMC01-SRG1-SRG1-CP-TXRXtoROADMC01-DEG2-DEG2-CTP-TXRX','ROADMC01-SRG1-SRG1-CP-TXRXtoROADMC01-DEG1-DEG1-CTP-TXRX']
609 dropLink=['ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX','ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX',
610 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX','ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX',
611 'ROADMC01-DEG1-DEG1-CTP-TXRXtoROADMC01-SRG1-SRG1-CP-TXRX','ROADMC01-DEG2-DEG2-CTP-TXRXtoROADMC01-SRG1-SRG1-CP-TXRX']
612 R2RLink=['ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX','ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX']
613 XPDR_IN=['ROADMA01-SRG1-SRG1-PP1-TXRXtoXPDRA01-XPDR1-XPDR1-NETWORK1']
614 XPDR_OUT=['XPDRA01-XPDR1-XPDR1-NETWORK1toROADMA01-SRG1-SRG1-PP1-TXRX']
615 for i in range(0,nbLink):
616 nodeType=res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']
617 linkId=res['network'][0]['ietf-network-topology:link'][i]['link-id']
618 if(nodeType=='EXPRESS-LINK'):
619 find= linkId in expressLink
620 self.assertEqual(find, True)
621 expressLink.remove(linkId)
622 elif(nodeType=='ADD-LINK'):
623 find= linkId in addLink
624 self.assertEqual(find, True)
625 addLink.remove(linkId)
626 elif(nodeType=='DROP-LINK'):
627 find= linkId in dropLink
628 self.assertEqual(find, True)
629 dropLink.remove(linkId)
630 elif(nodeType=='ROADM-TO-ROADM'):
631 find= linkId in R2RLink
632 self.assertEqual(find, True)
633 R2RLink.remove(linkId)
634 elif(nodeType=='XPONDER-INPUT'):
635 find= linkId in XPDR_IN
636 self.assertEqual(find, True)
637 XPDR_IN.remove(linkId)
638 elif(nodeType=='XPONDER-OUTPUT'):
639 find= linkId in XPDR_OUT
640 self.assertEqual(find, True)
641 XPDR_OUT.remove(linkId)
643 self.assertFalse(True)
644 self.assertEqual(len(expressLink),0)
645 self.assertEqual(len(addLink),0)
646 self.assertEqual(len(dropLink),0)
647 self.assertEqual(len(R2RLink),0)
648 self.assertEqual(len(XPDR_IN),0)
649 self.assertEqual(len(XPDR_OUT),0)
651 def test_19_getLinkOmsAttributesOpenRoadmTopology(self):
652 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
653 .format(self.restconf_baseurl))
654 headers = {'content-type': 'application/json'}
655 response = requests.request(
656 "GET", url, headers=headers, auth=('admin', 'admin'))
657 self.assertEqual(response.status_code, requests.codes.ok)
658 res = response.json()
659 #Tests related to links
660 nbLink=len(res['network'][0]['ietf-network-topology:link'])
661 self.assertEqual(nbLink,20)
662 R2RLink=['ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX',
663 'ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX']
664 for i in range(0,nbLink):
665 nodeType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']
666 link_id=res['network'][0]['ietf-network-topology:link'][i]['link-id']
667 if(link_id in R2RLink):
669 spanLoss = res['network'][0]['ietf-network-topology:link'][i][
670 'org-openroadm-network-topology:OMS-attributes']['span']["engineered-spanloss"]
671 length = res['network'][0]['ietf-network-topology:link'][i][
672 'org-openroadm-network-topology:OMS-attributes']['span']['link-concatenation'][0]['SRLG-length']
673 if((spanLoss!=None)&(length!=None)):
675 self.assertTrue(find)
676 R2RLink.remove(link_id)
677 self.assertEqual(len(R2RLink),0)
679 def test_20_getNodes_OpenRoadmTopology(self):
680 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
681 .format(self.restconf_baseurl))
682 headers = {'content-type': 'application/json'}
683 response = requests.request(
684 "GET", url, headers=headers, auth=('admin', 'admin'))
685 res = response.json()
686 #Tests related to nodes
687 self.assertEqual(response.status_code, requests.codes.ok)
688 nbNode=len(res['network'][0]['node'])
689 self.assertEqual(nbNode,8)
690 listNode=['XPDRA01-XPDR1',
691 'ROADMA01-SRG1','ROADMA01-SRG3','ROADMA01-DEG1','ROADMA01-DEG2',
692 'ROADMC01-SRG1','ROADMC01-DEG1','ROADMC01-DEG2']
693 #************************Tests related to XPDRA nodes
694 for i in range(0,nbNode):
695 nodeType=res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
696 nodeId=res['network'][0]['node'][i]['node-id']
697 if(nodeId=='XPDRA01-XPDR1'):
698 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDRA01'},
699 res['network'][0]['node'][i]['supporting-node'])
700 self.assertEqual(nodeType,'XPONDER')
701 nbTps=len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
702 self.assertTrue(nbTps == 6)
705 for j in range(0,nbTps):
706 tpType=res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type']
707 if (tpType=='XPONDER-CLIENT'):
709 elif (tpType=='XPONDER-NETWORK'):
711 self.assertTrue(client == 4)
712 self.assertTrue(network == 2)
713 listNode.remove(nodeId)
714 elif(nodeId=='ROADMA01-SRG1'):
715 #Test related to SRG1
716 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']),17)
717 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
718 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
719 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
720 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
721 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
722 res['network'][0]['node'][i]['supporting-node'])
723 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'],'SRG')
724 listNode.remove(nodeId)
725 elif(nodeId=='ROADMA01-SRG3'):
726 #Test related to SRG1
727 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']),17)
728 self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
729 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
730 self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
731 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
732 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
733 res['network'][0]['node'][i]['supporting-node'])
734 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'],'SRG')
735 listNode.remove(nodeId)
736 elif(nodeId=='ROADMA01-DEG1'):
737 #Test related to DEG1
738 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
739 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
740 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
741 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
742 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
743 res['network'][0]['node'][i]['supporting-node'])
744 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'],'DEGREE')
745 listNode.remove(nodeId)
746 elif(nodeId=='ROADMA01-DEG2'):
747 #Test related to DEG2
748 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
749 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
750 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
751 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
752 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
753 res['network'][0]['node'][i]['supporting-node'])
754 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'],'DEGREE')
755 listNode.remove(nodeId)
756 elif(nodeId=='ROADMC01-SRG1'):
757 #Test related to SRG1
758 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']),17)
759 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
760 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
761 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
762 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
763 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMC01'},
764 res['network'][0]['node'][i]['supporting-node'])
765 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'],'SRG')
766 listNode.remove(nodeId)
767 elif(nodeId=='ROADMC01-DEG1'):
768 #Test related to DEG1
769 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
770 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
771 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
772 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
773 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMC01'},
774 res['network'][0]['node'][i]['supporting-node'])
775 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'],'DEGREE')
776 listNode.remove(nodeId)
777 elif(nodeId=='ROADMC01-DEG2'):
778 #Test related to DEG2
779 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
780 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
781 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
782 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
783 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMC01'},
784 res['network'][0]['node'][i]['supporting-node'])
785 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'],'DEGREE')
786 listNode.remove(nodeId)
788 self.assertFalse(True)
789 self.assertEqual(len(listNode),0)
791 def test_21_connect_ROADMB(self):
792 url = ("{}/config/network-topology:"
793 "network-topology/topology/topology-netconf/node/ROADMB"
794 .format(self.restconf_baseurl))
797 "netconf-node-topology:username": "admin",
798 "netconf-node-topology:password": "admin",
799 "netconf-node-topology:host": "127.0.0.1",
800 "netconf-node-topology:port": "17832",
801 "netconf-node-topology:tcp-only": "false",
802 "netconf-node-topology:pass-through": {}}]}
803 headers = {'content-type': 'application/json'}
804 response = requests.request(
805 "PUT", url, data=json.dumps(data), headers=headers,
806 auth=('admin', 'admin'))
807 self.assertEqual(response.status_code, requests.codes.created)
810 def test_22_omsAttributes_ROADMA_ROADMB(self):
811 # Config ROADMA-ROADMB oms-attributes
812 url = ("{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:"
813 "link/ROADMA01-DEG2-DEG2-TTP-TXRXtoROADMB-DEG1-DEG1-TTP-TXRX/org-openroadm-network-topology:"
814 "OMS-attributes/span"
815 .format(self.restconf_baseurl))
818 "auto-spanloss": "true",
819 "engineered-spanloss": 12.2,
820 "link-concatenation": [{
823 "SRLG-length": 100000,
825 headers = {'content-type': 'application/json'}
826 response = requests.request(
827 "PUT", url, data=json.dumps(data), headers=headers,
828 auth=('admin', 'admin'))
829 self.assertEqual(response.status_code, requests.codes.created)
831 def test_23_omsAttributes_ROADMB_ROADMA(self):
832 # Config ROADMB-ROADMA oms-attributes
833 url = ("{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:"
834 "link/ROADMB-DEG1-DEG1-TTP-TXRXtoROADMA01-DEG2-DEG2-TTP-TXRX/org-openroadm-network-topology:"
835 "OMS-attributes/span"
836 .format(self.restconf_baseurl))
839 "auto-spanloss": "true",
840 "engineered-spanloss": 12.2,
841 "link-concatenation": [{
844 "SRLG-length": 100000,
846 headers = {'content-type': 'application/json'}
847 response = requests.request(
848 "PUT", url, data=json.dumps(data), headers=headers,
849 auth=('admin', 'admin'))
850 self.assertEqual(response.status_code, requests.codes.created)
852 def test_24_omsAttributes_ROADMB_ROADMC(self):
853 # Config ROADMB-ROADMC oms-attributes
854 url = ("{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:"
855 "link/ROADMB-DEG2-DEG2-TTP-TXRXtoROADMC01-DEG1-DEG1-TTP-TXRX/org-openroadm-network-topology:"
856 "OMS-attributes/span"
857 .format(self.restconf_baseurl))
860 "auto-spanloss": "true",
861 "engineered-spanloss": 12.2,
862 "link-concatenation": [{
865 "SRLG-length": 100000,
867 headers = {'content-type': 'application/json'}
868 response = requests.request(
869 "PUT", url, data=json.dumps(data), headers=headers,
870 auth=('admin', 'admin'))
871 self.assertEqual(response.status_code, requests.codes.created)
873 def test_25_omsAttributes_ROADMC_ROADMB(self):
874 # Config ROADMC01-ROADMB oms-attributes
875 url = ("{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:"
876 "link/ROADMC01-DEG1-DEG1-TTP-TXRXtoROADMB-DEG2-DEG2-TTP-TXRX/org-openroadm-network-topology:"
877 "OMS-attributes/span"
878 .format(self.restconf_baseurl))
881 "auto-spanloss": "true",
882 "engineered-spanloss": 12.2,
883 "link-concatenation": [{
886 "SRLG-length": 100000,
888 headers = {'content-type': 'application/json'}
889 response = requests.request(
890 "PUT", url, data=json.dumps(data), headers=headers,
891 auth=('admin', 'admin'))
892 self.assertEqual(response.status_code, requests.codes.created)
894 def test_26_getClliNetwork(self):
895 url = ("{}/config/ietf-network:networks/network/clli-network"
896 .format(self.restconf_baseurl))
897 headers = {'content-type': 'application/json'}
898 response = requests.request(
899 "GET", url, headers=headers, auth=('admin', 'admin'))
900 self.assertEqual(response.status_code, requests.codes.ok)
901 res = response.json()
902 nbNode=len(res['network'][0]['node'])
903 listNode=['NodeA','NodeB','NodeC']
904 for i in range(0,nbNode):
905 nodeId = res['network'][0]['node'][i]['node-id']
906 find= nodeId in listNode
907 self.assertEqual(find, True)
909 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'],'NodeA')
910 elif(nodeId=='NodeB'):
911 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'],'NodeB')
913 self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'],'NodeC')
914 listNode.remove(nodeId)
915 self.assertEqual(len(listNode),0)
917 def test_27_verifyDegree(self):
918 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
919 .format(self.restconf_baseurl))
920 headers = {'content-type': 'application/json'}
921 response = requests.request(
922 "GET", url, headers=headers, auth=('admin', 'admin'))
923 self.assertEqual(response.status_code, requests.codes.ok)
924 res = response.json()
925 #Tests related to links
926 nbLink=len(res['network'][0]['ietf-network-topology:link'])
927 listR2RLink=['ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX','ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX',
928 'ROADMA01-DEG2-DEG2-TTP-TXRXtoROADMB-DEG1-DEG1-TTP-TXRX','ROADMC01-DEG1-DEG1-TTP-TXRXtoROADMB-DEG2-DEG2-TTP-TXRX',
929 'ROADMB-DEG1-DEG1-TTP-TXRXtoROADMA01-DEG2-DEG2-TTP-TXRX','ROADMB-DEG2-DEG2-TTP-TXRXtoROADMC01-DEG1-DEG1-TTP-TXRX']
930 for i in range(0,nbLink):
931 if res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'ROADM-TO-ROADM':
932 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
933 find= link_id in listR2RLink
934 self.assertEqual(find, True)
935 listR2RLink.remove(link_id)
936 self.assertEqual(len(listR2RLink),0)
938 def test_28_verifyOppositeLinkTopology(self):
939 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
940 .format(self.restconf_baseurl))
941 headers = {'content-type': 'application/json'}
942 response = requests.request(
943 "GET", url, headers=headers, auth=('admin', 'admin'))
944 self.assertEqual(response.status_code, requests.codes.ok)
945 res = response.json()
946 #Tests related to links
947 nbLink=len(res['network'][0]['ietf-network-topology:link'])
948 self.assertEqual(nbLink,34)
949 for i in range(0,nbLink):
950 link_id=res['network'][0]['ietf-network-topology:link'][i]['link-id']
951 link_type=res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']
952 link_src=res['network'][0]['ietf-network-topology:link'][i]['source']['source-node']
953 link_dest=res['network'][0]['ietf-network-topology:link'][i]['destination']['dest-node']
954 oppLink_id=res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:opposite-link']
955 #Find the opposite link
956 url_oppLink="{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:link/"+oppLink_id
957 url = (url_oppLink.format(self.restconf_baseurl))
958 headers = {'content-type': 'application/json'}
959 response_oppLink = requests.request("GET", url, headers=headers, auth=('admin', 'admin'))
960 self.assertEqual(response_oppLink.status_code, requests.codes.ok)
961 res_oppLink = response_oppLink.json()
962 self.assertEqual(res_oppLink['ietf-network-topology:link'][0]['org-openroadm-common-network:opposite-link'],link_id)
963 self.assertEqual(res_oppLink['ietf-network-topology:link'][0]['source']['source-node'],link_dest)
964 self.assertEqual(res_oppLink['ietf-network-topology:link'][0]['destination']['dest-node'],link_src)
965 oppLink_type=res_oppLink['ietf-network-topology:link'][0]['org-openroadm-common-network:link-type']
966 if link_type=='ADD-LINK':
967 self.assertEqual(oppLink_type, 'DROP-LINK')
968 elif link_type=='DROP-LINK':
969 self.assertEqual(oppLink_type, 'ADD-LINK')
970 elif link_type=='EXPRESS-LINK':
971 self.assertEqual(oppLink_type, 'EXPRESS-LINK')
972 elif link_type=='ROADM-TO-ROADM':
973 self.assertEqual(oppLink_type, 'ROADM-TO-ROADM')
974 elif link_type=='XPONDER-INPUT':
975 self.assertEqual(oppLink_type, 'XPONDER-OUTPUT')
976 elif link_type=='XPONDER-OUTPUT':
977 self.assertEqual(oppLink_type, 'XPONDER-INPUT')
979 def test_29_getLinkOmsAttributesOpenRoadmTopology(self):
980 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
981 .format(self.restconf_baseurl))
982 headers = {'content-type': 'application/json'}
983 response = requests.request(
984 "GET", url, headers=headers, auth=('admin', 'admin'))
985 self.assertEqual(response.status_code, requests.codes.ok)
986 res = response.json()
987 nbLink=len(res['network'][0]['ietf-network-topology:link'])
988 R2RLink = ['ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX',
989 'ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX',
990 'ROADMA01-DEG2-DEG2-TTP-TXRXtoROADMB-DEG1-DEG1-TTP-TXRX',
991 'ROADMC01-DEG1-DEG1-TTP-TXRXtoROADMB-DEG2-DEG2-TTP-TXRX',
992 'ROADMB-DEG1-DEG1-TTP-TXRXtoROADMA01-DEG2-DEG2-TTP-TXRX',
993 'ROADMB-DEG2-DEG2-TTP-TXRXtoROADMC01-DEG1-DEG1-TTP-TXRX']
994 for i in range(0,nbLink):
995 nodeType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']
996 link_id=res['network'][0]['ietf-network-topology:link'][i]['link-id']
997 if(link_id in R2RLink):
999 spanLoss = res['network'][0]['ietf-network-topology:link'][i][
1000 'org-openroadm-network-topology:OMS-attributes']['span']["engineered-spanloss"]
1001 length = res['network'][0]['ietf-network-topology:link'][i][
1002 'org-openroadm-network-topology:OMS-attributes']['span']['link-concatenation'][0]['SRLG-length']
1003 if((spanLoss!=None)&(length!=None)):
1005 self.assertTrue(find)
1006 R2RLink.remove(link_id)
1007 self.assertEqual(len(R2RLink),0)
1009 def test_30_disconnect_ROADMB(self):
1010 #Delete in the topology-netconf
1011 url = ("{}/config/network-topology:"
1012 "network-topology/topology/topology-netconf/node/ROADMB"
1013 .format(self.restconf_baseurl))
1015 headers = {'content-type': 'application/json'}
1016 response = requests.request(
1017 "DELETE", url, data=json.dumps(data), headers=headers,
1018 auth=('admin', 'admin'))
1019 self.assertEqual(response.status_code, requests.codes.ok)
1020 #Delete in the clli-network
1021 url = ("{}/config/ietf-network:networks/network/clli-network/node/NodeB"
1022 .format(self.restconf_baseurl))
1024 headers = {'content-type': 'application/json'}
1025 response = requests.request(
1026 "DELETE", url, data=json.dumps(data), headers=headers,
1027 auth=('admin', 'admin'))
1028 self.assertEqual(response.status_code, requests.codes.ok)
1030 def test_31_disconnect_ROADMC(self):
1031 #Delete in the topology-netconf
1032 url = ("{}/config/network-topology:"
1033 "network-topology/topology/topology-netconf/node/ROADMC01"
1034 .format(self.restconf_baseurl))
1036 headers = {'content-type': 'application/json'}
1037 response = requests.request(
1038 "DELETE", url, data=json.dumps(data), headers=headers,
1039 auth=('admin', 'admin'))
1040 self.assertEqual(response.status_code, requests.codes.ok)
1041 #Delete in the clli-network
1042 url = ("{}/config/ietf-network:networks/network/clli-network/node/NodeC"
1043 .format(self.restconf_baseurl))
1045 headers = {'content-type': 'application/json'}
1046 response = requests.request(
1047 "DELETE", url, data=json.dumps(data), headers=headers,
1048 auth=('admin', 'admin'))
1049 self.assertEqual(response.status_code, requests.codes.ok)
1051 def test_32_getNodes_OpenRoadmTopology(self):
1052 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
1053 .format(self.restconf_baseurl))
1054 headers = {'content-type': 'application/json'}
1055 response = requests.request(
1056 "GET", url, headers=headers, auth=('admin', 'admin'))
1057 res = response.json()
1058 #Tests related to nodes
1059 self.assertEqual(response.status_code, requests.codes.ok)
1060 nbNode=len(res['network'][0]['node'])
1061 self.assertEqual(nbNode,5)
1062 listNode=['XPDRA01-XPDR1','ROADMA01-SRG1', 'ROADMA01-SRG3','ROADMA01-DEG1','ROADMA01-DEG2']
1063 for i in range(0,nbNode):
1064 nodeType=res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
1065 nodeId=res['network'][0]['node'][i]['node-id']
1066 #Tests related to XPDRA nodes
1067 if(nodeId=='XPDRA01-XPDR1'):
1068 nbTp = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1069 for j in range(0, nbTp):
1070 tpid = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id']
1071 if (tpid == 'XPDR1-CLIENT1'):
1072 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
1073 ['org-openroadm-common-network:tp-type'], 'XPONDER-CLIENT')
1074 if (tpid == 'XPDR1-NETWORK1'):
1075 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
1076 ['org-openroadm-common-network:tp-type'], 'XPONDER-NETWORK')
1077 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
1078 ['org-openroadm-network-topology:xpdr-network-attributes']['tail-equipment-id'],
1079 'ROADMA01-SRG1--SRG1-PP1-TXRX')
1080 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDRA01'},
1081 res['network'][0]['node'][i]['supporting-node'])
1082 listNode.remove(nodeId)
1083 elif(nodeId=='ROADMA01-SRG1'):
1084 #Test related to SRG1
1085 self.assertEqual(nodeType,'SRG')
1086 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']),17)
1087 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
1088 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1089 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
1090 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1091 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
1092 res['network'][0]['node'][i]['supporting-node'])
1093 listNode.remove(nodeId)
1094 elif(nodeId=='ROADMA01-SRG3'):
1095 #Test related to SRG1
1096 self.assertEqual(nodeType,'SRG')
1097 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']),17)
1098 self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
1099 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1100 self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
1101 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1102 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
1103 res['network'][0]['node'][i]['supporting-node'])
1104 listNode.remove(nodeId)
1105 elif(nodeId=='ROADMA01-DEG1'):
1106 #Test related to DEG1
1107 self.assertEqual(nodeType,'DEGREE')
1108 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
1109 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1110 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
1111 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1112 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
1113 res['network'][0]['node'][i]['supporting-node'])
1114 listNode.remove(nodeId)
1115 elif(nodeId=='ROADMA01-DEG2'):
1116 #Test related to DEG2
1117 self.assertEqual(nodeType,'DEGREE')
1118 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
1119 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1120 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
1121 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1122 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
1123 res['network'][0]['node'][i]['supporting-node'])
1124 listNode.remove(nodeId)
1126 self.assertFalse(True)
1127 self.assertEqual(len(listNode),0)
1128 #Test related to SRG1 of ROADMC
1129 for i in range(0,nbNode):
1130 self.assertNotEqual(res['network'][0]['node'][i]['node-id'],'ROADMC01-SRG1')
1131 self.assertNotEqual(res['network'][0]['node'][i]['node-id'],'ROADMC01-DEG1')
1132 self.assertNotEqual(res['network'][0]['node'][i]['node-id'],'ROADMC01-DEG2')
1134 def test_33_getOpenRoadmNetwork(self):
1135 url = ("{}/config/ietf-network:networks/network/openroadm-network"
1136 .format(self.restconf_baseurl))
1137 headers = {'content-type': 'application/json'}
1138 response = requests.request(
1139 "GET", url, headers=headers, auth=('admin', 'admin'))
1140 self.assertEqual(response.status_code, requests.codes.ok)
1141 res = response.json()
1142 nbNode=len(res['network'][0]['node'])
1143 self.assertEqual(nbNode,2)
1144 for i in range(0,nbNode-1):
1145 self.assertNotEqual(res['network'][0]['node'][i]['node-id'],'ROADMC01')
1146 self.assertNotEqual(res['network'][0]['node'][i]['node-id'],'ROADMB')
1148 def test_34_getClliNetwork(self):
1149 url = ("{}/config/ietf-network:networks/network/clli-network"
1150 .format(self.restconf_baseurl))
1151 headers = {'content-type': 'application/json'}
1152 response = requests.request(
1153 "GET", url, headers=headers, auth=('admin', 'admin'))
1154 self.assertEqual(response.status_code, requests.codes.ok)
1155 res = response.json()
1156 nbNode=len(res['network'][0]['node'])
1157 self.assertEqual(nbNode,1)
1158 for i in range(0,nbNode-1):
1159 self.assertNotEqual(res['network'][0]['node'][1]['org-openroadm-clli-network:clli'],'NodeC')
1161 def test_35_disconnect_XPDRA(self):
1162 url = ("{}/config/network-topology:"
1163 "network-topology/topology/topology-netconf/node/XPDRA01"
1164 .format(self.restconf_baseurl))
1166 headers = {'content-type': 'application/json'}
1167 response = requests.request(
1168 "DELETE", url, data=json.dumps(data), headers=headers,
1169 auth=('admin', 'admin'))
1170 self.assertEqual(response.status_code, requests.codes.ok)
1172 def test_36_getClliNetwork(self):
1173 url = ("{}/config/ietf-network:networks/network/clli-network"
1174 .format(self.restconf_baseurl))
1175 headers = {'content-type': 'application/json'}
1176 response = requests.request(
1177 "GET", url, headers=headers, auth=('admin', 'admin'))
1178 self.assertEqual(response.status_code, requests.codes.ok)
1179 res = response.json()
1180 nbNode=len(res['network'][0]['node'])
1181 self.assertEqual(nbNode,1)
1182 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'],'NodeA')
1184 def test_37_getOpenRoadmNetwork(self):
1185 url = ("{}/config/ietf-network:networks/network/openroadm-network"
1186 .format(self.restconf_baseurl))
1187 headers = {'content-type': 'application/json'}
1188 response = requests.request(
1189 "GET", url, headers=headers, auth=('admin', 'admin'))
1190 self.assertEqual(response.status_code, requests.codes.ok)
1191 res = response.json()
1192 nbNode=len(res['network'][0]['node'])
1193 self.assertEqual(nbNode,1)
1194 for i in range(0,nbNode):
1195 self.assertNotEqual(res['network'][0]['node'][i]['node-id'],'XPDRA01')
1197 def test_38_getNodes_OpenRoadmTopology(self):
1198 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
1199 .format(self.restconf_baseurl))
1200 headers = {'content-type': 'application/json'}
1201 response = requests.request(
1202 "GET", url, headers=headers, auth=('admin', 'admin'))
1203 res = response.json()
1204 #Tests related to nodes
1205 self.assertEqual(response.status_code, requests.codes.ok)
1206 nbNode=len(res['network'][0]['node'])
1207 self.assertEqual(nbNode,4)
1208 listNode=['ROADMA01-SRG1','ROADMA01-SRG3','ROADMA01-DEG1','ROADMA01-DEG2']
1209 for i in range(0,nbNode):
1210 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'},
1211 res['network'][0]['node'][i]['supporting-node'])
1212 nodeType=res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
1213 nodeId=res['network'][0]['node'][i]['node-id']
1214 if(nodeId=='ROADMA01-SRG1'):
1215 #Test related to SRG1
1216 self.assertEqual(nodeType,'SRG')
1217 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']),17)
1218 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
1219 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1220 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
1221 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1222 listNode.remove(nodeId)
1223 elif(nodeId=='ROADMA01-SRG3'):
1224 #Test related to SRG1
1225 self.assertEqual(nodeType,'SRG')
1226 self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']),17)
1227 self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'},
1228 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1229 self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'},
1230 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1231 listNode.remove(nodeId)
1232 elif(nodeId=='ROADMA01-DEG1'):
1233 #Test related to DEG1
1234 self.assertEqual(nodeType,'DEGREE')
1235 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
1236 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1237 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
1238 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1239 listNode.remove(nodeId)
1240 elif(nodeId=='ROADMA01-DEG2'):
1241 #Test related to DEG2
1242 self.assertEqual(nodeType,'DEGREE')
1243 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'},
1244 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1245 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'},
1246 res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
1247 listNode.remove(nodeId)
1249 self.assertFalse(True)
1250 self.assertEqual(len(listNode),0)
1252 def test_39_disconnect_ROADM_XPDRA_link(self):
1254 url = ("{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:"
1255 "link/XPDRA01-XPDR1-XPDR1-NETWORK1toROADMA01-SRG1-SRG1-PP1-TXRX"
1256 .format(self.restconf_baseurl))
1258 headers = {'content-type': 'application/json'}
1259 response = requests.request(
1260 "DELETE", url, data=json.dumps(data), headers=headers,
1261 auth=('admin', 'admin'))
1262 self.assertEqual(response.status_code, requests.codes.ok)
1264 url = ("{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:"
1265 "link/ROADMA01-SRG1-SRG1-PP1-TXRXtoXPDRA01-XPDR1-XPDR1-NETWORK1"
1266 .format(self.restconf_baseurl))
1268 headers = {'content-type': 'application/json'}
1269 response = requests.request(
1270 "DELETE", url, data=json.dumps(data), headers=headers,
1271 auth=('admin', 'admin'))
1272 self.assertEqual(response.status_code, requests.codes.ok)
1274 def test_40_getLinks_OpenRoadmTopology(self):
1275 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
1276 .format(self.restconf_baseurl))
1277 headers = {'content-type': 'application/json'}
1278 response = requests.request(
1279 "GET", url, headers=headers, auth=('admin', 'admin'))
1280 self.assertEqual(response.status_code, requests.codes.ok)
1281 res = response.json()
1282 nbLink=len(res['network'][0]['ietf-network-topology:link'])
1283 self.assertEqual(nbLink,16)
1284 expressLink=['ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX','ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX']
1285 addLink=['ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX','ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX',
1286 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX','ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX']
1287 dropLink=['ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX','ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX',
1288 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX','ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX']
1289 roadmtoroadmLink = 0
1290 for i in range(0,nbLink):
1291 if (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']=='EXPRESS-LINK'):
1292 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
1293 find= link_id in expressLink
1294 self.assertEqual(find, True)
1295 expressLink.remove(link_id)
1296 elif (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']=='ADD-LINK'):
1297 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
1298 find= link_id in addLink
1299 self.assertEqual(find, True)
1300 addLink.remove(link_id)
1301 elif (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type']=='DROP-LINK'):
1302 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
1303 find= link_id in dropLink
1304 self.assertEqual(find, True)
1305 dropLink.remove(link_id)
1307 roadmtoroadmLink += 1
1308 self.assertEqual(len(expressLink),0)
1309 self.assertEqual(len(addLink),0)
1310 self.assertEqual(len(dropLink),0)
1311 self.assertEqual(roadmtoroadmLink, 6)
1312 for i in range(0,nbLink):
1313 self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'],'XPONDER-OUTPUT')
1314 self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'],'XPONDER-INPUT')
1316 def test_41_disconnect_ROADMA(self):
1317 url = ("{}/config/network-topology:"
1318 "network-topology/topology/topology-netconf/node/ROADMA01"
1319 .format(self.restconf_baseurl))
1321 headers = {'content-type': 'application/json'}
1322 response = requests.request(
1323 "DELETE", url, data=json.dumps(data), headers=headers,
1324 auth=('admin', 'admin'))
1325 self.assertEqual(response.status_code, requests.codes.ok)
1326 #Delete in the clli-network
1327 url = ("{}/config/ietf-network:networks/network/clli-network/node/NodeA"
1328 .format(self.restconf_baseurl))
1330 headers = {'content-type': 'application/json'}
1331 response = requests.request(
1332 "DELETE", url, data=json.dumps(data), headers=headers,
1333 auth=('admin', 'admin'))
1334 self.assertEqual(response.status_code, requests.codes.ok)
1336 def test_42_getClliNetwork(self):
1337 url = ("{}/config/ietf-network:networks/network/clli-network"
1338 .format(self.restconf_baseurl))
1339 headers = {'content-type': 'application/json'}
1340 response = requests.request(
1341 "GET", url, headers=headers, auth=('admin', 'admin'))
1342 self.assertEqual(response.status_code, requests.codes.ok)
1343 res = response.json()
1344 self.assertNotIn('node', res['network'][0])
1346 def test_43_getOpenRoadmNetwork(self):
1347 url = ("{}/config/ietf-network:networks/network/openroadm-network"
1348 .format(self.restconf_baseurl))
1349 headers = {'content-type': 'application/json'}
1350 response = requests.request(
1351 "GET", url, headers=headers, auth=('admin', 'admin'))
1352 self.assertEqual(response.status_code, requests.codes.ok)
1353 res = response.json()
1354 self.assertNotIn('node', res['network'][0])
1356 def test_44_check_roadm2roadm_link_persistence(self):
1357 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
1358 .format(self.restconf_baseurl))
1359 headers = {'content-type': 'application/json'}
1360 response = requests.request(
1361 "GET", url, headers=headers, auth=('admin', 'admin'))
1362 self.assertEqual(response.status_code, requests.codes.ok)
1363 res = response.json()
1364 nbLink=len(res['network'][0]['ietf-network-topology:link'])
1365 self.assertNotIn('node', res['network'][0])
1366 self.assertEqual(nbLink, 6)
1368 if __name__ == "__main__":
1369 unittest.main(verbosity=2)