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 ##############################################################################
23 class TransportPCEtesting(unittest.TestCase):
25 testtools_process1 = None
26 testtools_process2 = None
27 testtools_process3 = None
28 testtools_process4 = None
30 restconf_baseurl = "http://localhost:8181/restconf"
33 def __start_testtools(cls):
34 executable = ("./netconf/netconf/tools/netconf-testtool/target/"
35 "netconf-testtool-1.3.1-executable.jar")
36 if os.path.isfile(executable):
37 if not os.path.exists("transportpce_tests/log"):
38 os.makedirs("transportpce_tests/log")
39 if os.path.isfile("./transportpce_tests/log/response.log"):
40 os.remove("transportpce_tests/log/response.log")
41 with open('transportpce_tests/log/testtools_ROADMA.log', 'w') as outfile1:
42 cls.testtools_process1 = subprocess.Popen(
43 ["java", "-jar", executable, "--schemas-dir", "schemas",
44 "--initial-config-xml", "sample_configs/nodes_config/sample-config-ROADMA.xml","--starting-port","17831"],
46 with open('transportpce_tests/log/testtools_ROADMB.log', 'w') as outfile2:
47 cls.testtools_process2 = subprocess.Popen(
48 ["java", "-jar", executable, "--schemas-dir", "schemas",
49 "--initial-config-xml", "sample_configs/nodes_config/sample-config-ROADMB.xml","--starting-port","17832"],
51 with open('transportpce_tests/log/testtools_ROADMC.log', 'w') as outfile3:
52 cls.testtools_process3 = subprocess.Popen(
53 ["java", "-jar", executable, "--schemas-dir", "schemas",
54 "--initial-config-xml", "sample_configs/nodes_config/sample-config-ROADMC.xml","--starting-port","17833"],
56 with open('transportpce_tests/log/testtools_XPDRA.log', 'w') as outfile4:
57 cls.testtools_process4 = subprocess.Popen(
58 ["java", "-jar", executable, "--schemas-dir", "schemas",
59 "--initial-config-xml", "sample_configs/nodes_config/sample-config-XPDRA.xml","--starting-port","17830"],
64 executable = "../karaf/target/assembly/bin/karaf"
65 with open('transportpce_tests/log/odl.log', 'w') as outfile:
66 cls.odl_process = subprocess.Popen(
67 ["bash", executable], stdout=outfile,
68 stdin=open(os.devnull))
72 cls.__start_testtools()
77 def tearDownClass(cls):
78 cls.testtools_process1.send_signal(signal.SIGINT)
79 cls.testtools_process1.wait()
80 cls.testtools_process2.send_signal(signal.SIGINT)
81 cls.testtools_process2.wait()
82 cls.testtools_process3.send_signal(signal.SIGINT)
83 cls.testtools_process3.wait()
84 cls.testtools_process4.send_signal(signal.SIGINT)
85 cls.testtools_process4.wait()
86 for child in psutil.Process(cls.odl_process.pid).children():
87 child.send_signal(signal.SIGINT)
89 cls.odl_process.send_signal(signal.SIGINT)
90 cls.odl_process.wait()
91 print('End of the tear down class')
96 def test_01_connect_ROADMA(self):
98 url = ("{}/config/network-topology:"
99 "network-topology/topology/topology-netconf/node/ROADMA"
100 .format(self.restconf_baseurl))
103 "netconf-node-topology:username": "admin",
104 "netconf-node-topology:password": "admin",
105 "netconf-node-topology:host": "127.0.0.1",
106 "netconf-node-topology:port": "17831",
107 "netconf-node-topology:tcp-only": "false",
108 "netconf-node-topology:pass-through": {}}]}
109 headers = {'content-type': 'application/json'}
110 response = requests.request(
111 "PUT", url, data=json.dumps(data), headers=headers,
112 auth=('admin', 'admin'))
113 self.assertEqual(response.status_code, requests.codes.created)
116 def test_02_getClliNetwork(self):
117 url = ("{}/config/ietf-network:network/clli-network"
118 .format(self.restconf_baseurl))
119 headers = {'content-type': 'application/json'}
120 response = requests.request(
121 "GET", url, headers=headers, auth=('admin', 'admin'))
122 self.assertEqual(response.status_code, requests.codes.ok)
123 res = response.json()
124 self.assertEqual(res['network'][0]['node'][0]['node-id'],'NodeA')
125 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'],'NodeA')
127 def test_03_getOpenRoadmNetwork(self):
128 url = ("{}/config/ietf-network:network/openroadm-network"
129 .format(self.restconf_baseurl))
130 headers = {'content-type': 'application/json'}
131 response = requests.request(
132 "GET", url, headers=headers, auth=('admin', 'admin'))
133 self.assertEqual(response.status_code, requests.codes.ok)
134 res = response.json()
135 self.assertEqual(res['network'][0]['node'][0]['node-id'],'ROADMA')
136 self.assertEqual(res['network'][0]['node'][0]['supporting-node'][0]['network-ref'],'clli-network')
137 self.assertEqual(res['network'][0]['node'][0]['supporting-node'][0]['node-ref'],'NodeA')
138 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network:node-type'],'ROADM')
139 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network:model'],'2')
141 def test_04_getLinks_OpenroadmTopology(self):
142 url = ("{}/config/ietf-network:network/openroadm-topology"
143 .format(self.restconf_baseurl))
144 headers = {'content-type': 'application/json'}
145 response = requests.request(
146 "GET", url, headers=headers, auth=('admin', 'admin'))
147 self.assertEqual(response.status_code, requests.codes.ok)
148 res = response.json()
149 #Tests related to links
150 self.assertEqual(len(res['network'][0]['ietf-network-topology:link']),6)
151 self.assertEqual(res['network'][0]['ietf-network-topology:link'][0]['link-id'],'ROADMA-DEG2-DEG2-CTP-TXRXtoROADMA-DEG1-DEG1-CTP-TXRX')
152 self.assertEqual(res['network'][0]['ietf-network-topology:link'][0]['org-openroadm-network-topology:link-type'],'EXPRESS-LINK')
153 self.assertEqual(res['network'][0]['ietf-network-topology:link'][1]['link-id'],'ROADMA-DEG1-DEG1-CTP-TXRXtoROADMA-DEG2-DEG2-CTP-TXRX')
154 self.assertEqual(res['network'][0]['ietf-network-topology:link'][1]['org-openroadm-network-topology:link-type'],'EXPRESS-LINK')
155 self.assertEqual(res['network'][0]['ietf-network-topology:link'][2]['link-id'],'ROADMA-SRG1-SRG1-CP-TXRXtoROADMA-DEG2-DEG2-CTP-TXRX')
156 self.assertEqual(res['network'][0]['ietf-network-topology:link'][2]['org-openroadm-network-topology:link-type'],'ADD-LINK')
157 self.assertEqual(res['network'][0]['ietf-network-topology:link'][3]['link-id'],'ROADMA-DEG1-DEG1-CTP-TXRXtoROADMA-SRG1-SRG1-CP-TXRX')
158 self.assertEqual(res['network'][0]['ietf-network-topology:link'][3]['org-openroadm-network-topology:link-type'],'DROP-LINK')
159 self.assertEqual(res['network'][0]['ietf-network-topology:link'][4]['link-id'],'ROADMA-DEG2-DEG2-CTP-TXRXtoROADMA-SRG1-SRG1-CP-TXRX')
160 self.assertEqual(res['network'][0]['ietf-network-topology:link'][4]['org-openroadm-network-topology:link-type'],'DROP-LINK')
161 self.assertEqual(res['network'][0]['ietf-network-topology:link'][5]['link-id'],'ROADMA-SRG1-SRG1-CP-TXRXtoROADMA-DEG1-DEG1-CTP-TXRX')
162 self.assertEqual(res['network'][0]['ietf-network-topology:link'][5]['org-openroadm-network-topology:link-type'],'ADD-LINK')
165 def test_05_getNodes_OpenRoadmTopology(self):
166 url = ("{}/config/ietf-network:network/openroadm-topology"
167 .format(self.restconf_baseurl))
168 headers = {'content-type': 'application/json'}
169 response = requests.request(
170 "GET", url, headers=headers, auth=('admin', 'admin'))
171 res = response.json()
172 #Tests related to nodes
173 self.assertEqual(response.status_code, requests.codes.ok)
174 with open('./transportpce_tests/log/response.log', 'a') as outfile1:
175 outfile1.write(str(len(res['network'][0]['node'])))
176 self.assertEqual(len(res['network'][0]['node']),3)
177 #Tests related to nodes
178 #Test related to SRG1
179 self.assertEqual(res['network'][0]['node'][0]['node-id'],'ROADMA-SRG1')
181 self.assertEqual(len(res['network'][0]['node'][0]['ietf-network-topology:termination-point']),17)
182 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-network-topology:tp-type': 'SRG-TXRX-CP'},
183 res['network'][0]['node'][0]['ietf-network-topology:termination-point'])
184 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-network-topology:tp-type': 'SRG-TXRX-PP'},
185 res['network'][0]['node'][0]['ietf-network-topology:termination-point'])
186 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA'},
187 res['network'][0]['node'][0]['supporting-node'])
188 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network-topology:node-type'],'SRG')
189 #Test related to DEG2
190 self.assertEqual(res['network'][0]['node'][1]['node-id'],'ROADMA-DEG2')
191 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-TTP'},
192 res['network'][0]['node'][1]['ietf-network-topology:termination-point'])
193 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-CTP'},
194 res['network'][0]['node'][1]['ietf-network-topology:termination-point'])
195 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA'},
196 res['network'][0]['node'][1]['supporting-node'])
197 self.assertEqual(res['network'][0]['node'][1]['org-openroadm-network-topology:node-type'],'DEGREE')
198 #Test related to DEG1
199 self.assertEqual(res['network'][0]['node'][2]['node-id'],'ROADMA-DEG1')
200 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-TTP'},
201 res['network'][0]['node'][2]['ietf-network-topology:termination-point'])
202 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-CTP'},
203 res['network'][0]['node'][2]['ietf-network-topology:termination-point'])
204 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA'},
205 res['network'][0]['node'][2]['supporting-node'])
206 self.assertEqual(res['network'][0]['node'][2]['org-openroadm-network-topology:node-type'],'DEGREE')
208 def test_06_connect_XPDRA(self):
209 url = ("{}/config/network-topology:"
210 "network-topology/topology/topology-netconf/node/XPDRA"
211 .format(self.restconf_baseurl))
214 "netconf-node-topology:username": "admin",
215 "netconf-node-topology:password": "admin",
216 "netconf-node-topology:host": "127.0.0.1",
217 "netconf-node-topology:port": "17830",
218 "netconf-node-topology:tcp-only": "false",
219 "netconf-node-topology:pass-through": {}}]}
220 headers = {'content-type': 'application/json'}
221 response = requests.request(
222 "PUT", url, data=json.dumps(data), headers=headers,
223 auth=('admin', 'admin'))
224 self.assertEqual(response.status_code, requests.codes.created)
227 def test_07_getClliNetwork(self):
228 url = ("{}/config/ietf-network:network/clli-network"
229 .format(self.restconf_baseurl))
230 headers = {'content-type': 'application/json'}
231 response = requests.request(
232 "GET", url, headers=headers, auth=('admin', 'admin'))
233 self.assertEqual(response.status_code, requests.codes.ok)
234 res = response.json()
235 self.assertEqual(res['network'][0]['node'][0]['node-id'],'NodeA')
236 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'],'NodeA')
238 def test_08_getOpenRoadmNetwork(self):
239 url = ("{}/config/ietf-network:network/openroadm-network"
240 .format(self.restconf_baseurl))
241 headers = {'content-type': 'application/json'}
242 response = requests.request(
243 "GET", url, headers=headers, auth=('admin', 'admin'))
244 self.assertEqual(response.status_code, requests.codes.ok)
245 res = response.json()
246 nbNode=len(res['network'][0]['node'])
247 self.assertEqual(nbNode,2)
248 self.assertEqual(res['network'][0]['node'][0]['node-id'],'XPDRA')
249 self.assertEqual(res['network'][0]['node'][0]['supporting-node'][0]['network-ref'],'clli-network')
250 self.assertEqual(res['network'][0]['node'][0]['supporting-node'][0]['node-ref'],'NodeA')
251 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network:node-type'],'XPONDER')
252 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network:model'],'1')
254 def test_09_getNodes_OpenRoadmTopology(self):
255 url = ("{}/config/ietf-network:network/openroadm-topology"
256 .format(self.restconf_baseurl))
257 headers = {'content-type': 'application/json'}
258 response = requests.request(
259 "GET", url, headers=headers, auth=('admin', 'admin'))
260 res = response.json()
261 #Tests related to nodes
262 self.assertEqual(response.status_code, requests.codes.ok)
263 with open('./transportpce_tests/log/response.log', 'a') as outfile1:
264 outfile1.write(str(len(res['network'][0]['node'])))
265 nbNode=len(res['network'][0]['node'])
266 self.assertEqual(nbNode,4)
267 #Tests related to XPDRA nodes
268 self.assertEqual(res['network'][0]['node'][1]['node-id'],'XPDRA-XPDR1')
269 self.assertEqual(len(res['network'][0]['node'][1]['ietf-network-topology:termination-point']),2)
270 self.assertEqual({'tp-id': 'XPDR1-CLIENT1', 'org-openroadm-network-topology:tp-type': 'XPONDER-CLIENT',
271 'org-openroadm-network-topology:xpdr-network-attributes': {
272 'tail-equipment-id': 'XPDR1-NETWORK1'}},
273 res['network'][0]['node'][1]['ietf-network-topology:termination-point'][0])
274 self.assertEqual({'tp-id': 'XPDR1-NETWORK1', 'org-openroadm-network-topology:tp-type': 'XPONDER-NETWORK',
275 'org-openroadm-network-topology:xpdr-client-attributes': {'tail-equipment-id': 'XPDR1-CLIENT1'}},
276 res['network'][0]['node'][1]['ietf-network-topology:termination-point'][1])
277 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDRA'},
278 res['network'][0]['node'][1]['supporting-node'])
279 self.assertEqual(res['network'][0]['node'][1]['org-openroadm-network-topology:node-type'],'XPONDER')
280 #Tests related to ROADMA nodes
281 #Test related to SRG1
282 self.assertEqual(res['network'][0]['node'][0]['node-id'],'ROADMA-SRG1')
283 #To be integrate in the effective tests
284 self.assertEqual(len(res['network'][0]['node'][0]['ietf-network-topology:termination-point']),17)
285 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-network-topology:tp-type': 'SRG-TXRX-CP'},
286 res['network'][0]['node'][0]['ietf-network-topology:termination-point'])
287 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-network-topology:tp-type': 'SRG-TXRX-PP'},
288 res['network'][0]['node'][0]['ietf-network-topology:termination-point'])
289 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA'},
290 res['network'][0]['node'][0]['supporting-node'])
291 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network-topology:node-type'],'SRG')
292 #Test related to DEG2
293 self.assertEqual(res['network'][0]['node'][2]['node-id'],'ROADMA-DEG2')
294 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-TTP'},
295 res['network'][0]['node'][2]['ietf-network-topology:termination-point'])
296 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-CTP'},
297 res['network'][0]['node'][2]['ietf-network-topology:termination-point'])
298 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA'},
299 res['network'][0]['node'][2]['supporting-node'])
300 self.assertEqual(res['network'][0]['node'][2]['org-openroadm-network-topology:node-type'],'DEGREE')
301 #Test related to DEG1
302 self.assertEqual(res['network'][0]['node'][3]['node-id'],'ROADMA-DEG1')
303 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-TTP'},
304 res['network'][0]['node'][3]['ietf-network-topology:termination-point'])
305 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-CTP'},
306 res['network'][0]['node'][3]['ietf-network-topology:termination-point'])
307 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA'},
308 res['network'][0]['node'][3]['supporting-node'])
309 self.assertEqual(res['network'][0]['node'][3]['org-openroadm-network-topology:node-type'],'DEGREE')
311 #Connect the tail XPDRA to ROADMA and vice versa
312 def test_10_connect_tail_xpdr_rdm(self):
313 #Connect the tail: XPDRA to ROADMA
314 url = ("{}/operations/networkutils:init-xpdr-rdm-links"
315 .format(self.restconf_baseurl))
316 data = {"networkutils:input": {
317 "networkutils:links-input": {
318 "networkutils:xpdr-node": "XPDRA",
319 "networkutils:xpdr-num": "1",
320 "networkutils:network-num": "1",
321 "networkutils:rdm-node": "ROADMA",
322 "networkutils:srg-num": "1",
323 "networkutils:termination-point-num": "SRG1-PP1-TXRX"
327 headers = {'content-type': 'application/json'}
328 response = requests.request(
329 "POST", url, data=json.dumps(data), headers=headers,
330 auth=('admin', 'admin'))
331 self.assertEqual(response.status_code, requests.codes.ok)
334 def test_11_connect_tail_rdm_xpdr(self):
335 #Connect the tail: ROADMA to XPDRA
336 url = ("{}/operations/networkutils:init-rdm-xpdr-links"
337 .format(self.restconf_baseurl))
338 data = {"networkutils:input": {
339 "networkutils:links-input": {
340 "networkutils:xpdr-node": "XPDRA",
341 "networkutils:xpdr-num": "1",
342 "networkutils:network-num": "1",
343 "networkutils:rdm-node": "ROADMA",
344 "networkutils:srg-num": "1",
345 "networkutils:termination-point-num": "SRG1-PP1-TXRX"
349 headers = {'content-type': 'application/json'}
350 response = requests.request(
351 "POST", url, data=json.dumps(data), headers=headers,
352 auth=('admin', 'admin'))
353 self.assertEqual(response.status_code, requests.codes.ok)
356 def test_12_getLinks_OpenRoadmTopology(self):
357 url = ("{}/config/ietf-network:network/openroadm-topology"
358 .format(self.restconf_baseurl))
359 headers = {'content-type': 'application/json'}
360 response = requests.request(
361 "GET", url, headers=headers, auth=('admin', 'admin'))
362 self.assertEqual(response.status_code, requests.codes.ok)
363 res = response.json()
364 #Tests related to links
365 self.assertEqual(len(res['network'][0]['ietf-network-topology:link']),8)
366 self.assertEqual(res['network'][0]['ietf-network-topology:link'][0]['link-id'],'ROADMA-DEG2-DEG2-CTP-TXRXtoROADMA-DEG1-DEG1-CTP-TXRX')
367 self.assertEqual(res['network'][0]['ietf-network-topology:link'][0]['org-openroadm-network-topology:link-type'],'EXPRESS-LINK')
368 self.assertEqual(res['network'][0]['ietf-network-topology:link'][1]['link-id'],'ROADMA-DEG1-DEG1-CTP-TXRXtoROADMA-SRG1-SRG1-CP-TXRX')
369 self.assertEqual(res['network'][0]['ietf-network-topology:link'][1]['org-openroadm-network-topology:link-type'],'DROP-LINK')
370 self.assertEqual(res['network'][0]['ietf-network-topology:link'][2]['link-id'],'ROADMA-DEG2-DEG2-CTP-TXRXtoROADMA-SRG1-SRG1-CP-TXRX')
371 self.assertEqual(res['network'][0]['ietf-network-topology:link'][2]['org-openroadm-network-topology:link-type'],'DROP-LINK')
372 self.assertEqual(res['network'][0]['ietf-network-topology:link'][3]['link-id'],'ROADMA-SRG1-SRG1-CP-TXRXtoROADMA-DEG1-DEG1-CTP-TXRX')
373 self.assertEqual(res['network'][0]['ietf-network-topology:link'][3]['org-openroadm-network-topology:link-type'],'ADD-LINK')
374 self.assertEqual(res['network'][0]['ietf-network-topology:link'][4]['link-id'],'XPDRA-XPDR1-XPDR1-NETWORK1toROADMA-SRG1-SRG1-PP1-TXRX')
375 self.assertEqual(res['network'][0]['ietf-network-topology:link'][4]['org-openroadm-network-topology:link-type'],'XPONDER-OUTPUT')
376 self.assertEqual(res['network'][0]['ietf-network-topology:link'][5]['link-id'],'ROADMA-SRG1-SRG1-PP1-TXRXtoXPDRA-XPDR1-XPDR1-NETWORK1')
377 self.assertEqual(res['network'][0]['ietf-network-topology:link'][5]['org-openroadm-network-topology:link-type'],'XPONDER-INPUT')
378 self.assertEqual(res['network'][0]['ietf-network-topology:link'][6]['link-id'],'ROADMA-DEG1-DEG1-CTP-TXRXtoROADMA-DEG2-DEG2-CTP-TXRX')
379 self.assertEqual(res['network'][0]['ietf-network-topology:link'][6]['org-openroadm-network-topology:link-type'],'EXPRESS-LINK')
380 self.assertEqual(res['network'][0]['ietf-network-topology:link'][7]['link-id'],'ROADMA-SRG1-SRG1-CP-TXRXtoROADMA-DEG2-DEG2-CTP-TXRX')
381 self.assertEqual(res['network'][0]['ietf-network-topology:link'][7]['org-openroadm-network-topology:link-type'],'ADD-LINK')
383 def test_13_connect_ROADMC(self):
385 url = ("{}/config/network-topology:"
386 "network-topology/topology/topology-netconf/node/ROADMC"
387 .format(self.restconf_baseurl))
390 "netconf-node-topology:username": "admin",
391 "netconf-node-topology:password": "admin",
392 "netconf-node-topology:host": "127.0.0.1",
393 "netconf-node-topology:port": "17833",
394 "netconf-node-topology:tcp-only": "false",
395 "netconf-node-topology:pass-through": {}}]}
396 headers = {'content-type': 'application/json'}
397 response = requests.request(
398 "PUT", url, data=json.dumps(data), headers=headers,
399 auth=('admin', 'admin'))
400 self.assertEqual(response.status_code, requests.codes.created)
403 def test_14_getClliNetwork(self):
404 url = ("{}/config/ietf-network:network/clli-network"
405 .format(self.restconf_baseurl))
406 headers = {'content-type': 'application/json'}
407 response = requests.request(
408 "GET", url, headers=headers, auth=('admin', 'admin'))
409 self.assertEqual(response.status_code, requests.codes.ok)
410 res = response.json()
411 self.assertEqual(res['network'][0]['node'][0]['node-id'],'NodeC')
412 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'],'NodeC')
413 self.assertEqual(res['network'][0]['node'][1]['node-id'],'NodeA')
414 self.assertEqual(res['network'][0]['node'][1]['org-openroadm-clli-network:clli'],'NodeA')
416 def test_15_getOpenRoadmNetwork(self):
417 url = ("{}/config/ietf-network:network/openroadm-network"
418 .format(self.restconf_baseurl))
419 headers = {'content-type': 'application/json'}
420 response = requests.request(
421 "GET", url, headers=headers, auth=('admin', 'admin'))
422 self.assertEqual(response.status_code, requests.codes.ok)
423 res = response.json()
424 nbNode=len(res['network'][0]['node'])
425 self.assertEqual(nbNode,3)
426 self.assertEqual(res['network'][0]['node'][0]['node-id'],'XPDRA')
427 self.assertEqual(res['network'][0]['node'][0]['supporting-node'][0]['network-ref'],'clli-network')
428 self.assertEqual(res['network'][0]['node'][0]['supporting-node'][0]['node-ref'],'NodeA')
429 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network:node-type'],'XPONDER')
430 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network:model'],'1')
431 self.assertEqual(res['network'][0]['node'][1]['node-id'],'ROADMA')
432 self.assertEqual(res['network'][0]['node'][1]['supporting-node'][0]['network-ref'],'clli-network')
433 self.assertEqual(res['network'][0]['node'][1]['supporting-node'][0]['node-ref'],'NodeA')
434 self.assertEqual(res['network'][0]['node'][1]['org-openroadm-network:node-type'],'ROADM')
435 self.assertEqual(res['network'][0]['node'][1]['org-openroadm-network:model'],'2')
436 self.assertEqual(res['network'][0]['node'][2]['node-id'],'ROADMC')
437 self.assertEqual(res['network'][0]['node'][2]['supporting-node'][0]['network-ref'],'clli-network')
438 self.assertEqual(res['network'][0]['node'][2]['supporting-node'][0]['node-ref'],'NodeC')
439 self.assertEqual(res['network'][0]['node'][2]['org-openroadm-network:node-type'],'ROADM')
440 self.assertEqual(res['network'][0]['node'][2]['org-openroadm-network:model'],'2')
442 def test_16_getROADMLinkOpenRoadmTopology(self):
443 url = ("{}/config/ietf-network:network/openroadm-topology"
444 .format(self.restconf_baseurl))
445 headers = {'content-type': 'application/json'}
446 response = requests.request(
447 "GET", url, headers=headers, auth=('admin', 'admin'))
448 self.assertEqual(response.status_code, requests.codes.ok)
449 res = response.json()
450 #Tests related to links
451 nbLink=len(res['network'][0]['ietf-network-topology:link'])
452 self.assertEqual(nbLink,16)
453 self.assertEqual(res['network'][0]['ietf-network-topology:link'][0]['link-id'],'ROADMA-DEG2-DEG2-CTP-TXRXtoROADMA-DEG1-DEG1-CTP-TXRX')
454 self.assertEqual(res['network'][0]['ietf-network-topology:link'][0]['org-openroadm-network-topology:link-type'],'EXPRESS-LINK')
455 self.assertEqual(res['network'][0]['ietf-network-topology:link'][1]['link-id'],'ROADMC-SRG1-SRG1-CP-TXRXtoROADMC-DEG2-DEG2-CTP-TXRX')
456 self.assertEqual(res['network'][0]['ietf-network-topology:link'][1]['org-openroadm-network-topology:link-type'],'ADD-LINK')
457 self.assertEqual(res['network'][0]['ietf-network-topology:link'][2]['link-id'],'ROADMA-SRG1-SRG1-CP-TXRXtoROADMA-DEG1-DEG1-CTP-TXRX')
458 self.assertEqual(res['network'][0]['ietf-network-topology:link'][2]['org-openroadm-network-topology:link-type'],'ADD-LINK')
459 self.assertEqual(res['network'][0]['ietf-network-topology:link'][3]['link-id'],'XPDRA-XPDR1-XPDR1-NETWORK1toROADMA-SRG1-SRG1-PP1-TXRX')
460 self.assertEqual(res['network'][0]['ietf-network-topology:link'][3]['org-openroadm-network-topology:link-type'],'XPONDER-OUTPUT')
461 self.assertEqual(res['network'][0]['ietf-network-topology:link'][4]['link-id'],'ROADMA-DEG1-DEG1-CTP-TXRXtoROADMA-DEG2-DEG2-CTP-TXRX')
462 self.assertEqual(res['network'][0]['ietf-network-topology:link'][4]['org-openroadm-network-topology:link-type'],'EXPRESS-LINK')
463 self.assertEqual(res['network'][0]['ietf-network-topology:link'][5]['link-id'],'ROADMC-DEG2-DEG2-CTP-TXRXtoROADMC-DEG1-DEG1-CTP-TXRX')
464 self.assertEqual(res['network'][0]['ietf-network-topology:link'][5]['org-openroadm-network-topology:link-type'],'EXPRESS-LINK')
465 self.assertEqual(res['network'][0]['ietf-network-topology:link'][6]['link-id'],'ROADMC-DEG1-DEG1-CTP-TXRXtoROADMC-DEG2-DEG2-CTP-TXRX')
466 self.assertEqual(res['network'][0]['ietf-network-topology:link'][6]['org-openroadm-network-topology:link-type'],'EXPRESS-LINK')
467 self.assertEqual(res['network'][0]['ietf-network-topology:link'][7]['link-id'],'ROADMA-DEG1-DEG1-CTP-TXRXtoROADMA-SRG1-SRG1-CP-TXRX')
468 self.assertEqual(res['network'][0]['ietf-network-topology:link'][7]['org-openroadm-network-topology:link-type'],'DROP-LINK')
469 self.assertEqual(res['network'][0]['ietf-network-topology:link'][8]['link-id'],'ROADMA-DEG2-DEG2-CTP-TXRXtoROADMA-SRG1-SRG1-CP-TXRX')
470 self.assertEqual(res['network'][0]['ietf-network-topology:link'][8]['org-openroadm-network-topology:link-type'],'DROP-LINK')
471 self.assertEqual(res['network'][0]['ietf-network-topology:link'][9]['link-id'],'ROADMA-DEG1-DEG1-TTP-TXRXtoROADMC-DEG2-DEG2-TTP-TXRX')
472 self.assertEqual(res['network'][0]['ietf-network-topology:link'][9]['org-openroadm-network-topology:link-type'],'ROADM-TO-ROADM')
473 self.assertEqual(res['network'][0]['ietf-network-topology:link'][10]['link-id'],'ROADMA-SRG1-SRG1-PP1-TXRXtoXPDRA-XPDR1-XPDR1-NETWORK1')
474 self.assertEqual(res['network'][0]['ietf-network-topology:link'][10]['org-openroadm-network-topology:link-type'],'XPONDER-INPUT')
475 self.assertEqual(res['network'][0]['ietf-network-topology:link'][11]['link-id'],'ROADMC-DEG2-DEG2-TTP-TXRXtoROADMA-DEG1-DEG1-TTP-TXRX')
476 self.assertEqual(res['network'][0]['ietf-network-topology:link'][11]['org-openroadm-network-topology:link-type'],'ROADM-TO-ROADM')
477 self.assertEqual(res['network'][0]['ietf-network-topology:link'][12]['link-id'],'ROADMC-DEG1-DEG1-CTP-TXRXtoROADMC-SRG1-SRG1-CP-TXRX')
478 self.assertEqual(res['network'][0]['ietf-network-topology:link'][12]['org-openroadm-network-topology:link-type'],'DROP-LINK')
479 self.assertEqual(res['network'][0]['ietf-network-topology:link'][13]['link-id'],'ROADMC-SRG1-SRG1-CP-TXRXtoROADMC-DEG1-DEG1-CTP-TXRX')
480 self.assertEqual(res['network'][0]['ietf-network-topology:link'][13]['org-openroadm-network-topology:link-type'],'ADD-LINK')
481 self.assertEqual(res['network'][0]['ietf-network-topology:link'][14]['link-id'],'ROADMC-DEG2-DEG2-CTP-TXRXtoROADMC-SRG1-SRG1-CP-TXRX')
482 self.assertEqual(res['network'][0]['ietf-network-topology:link'][14]['org-openroadm-network-topology:link-type'],'DROP-LINK')
483 self.assertEqual(res['network'][0]['ietf-network-topology:link'][15]['link-id'],'ROADMA-SRG1-SRG1-CP-TXRXtoROADMA-DEG2-DEG2-CTP-TXRX')
484 self.assertEqual(res['network'][0]['ietf-network-topology:link'][15]['org-openroadm-network-topology:link-type'],'ADD-LINK')
486 def test_17_getNodes_OpenRoadmTopology(self):
487 url = ("{}/config/ietf-network:network/openroadm-topology"
488 .format(self.restconf_baseurl))
489 headers = {'content-type': 'application/json'}
490 response = requests.request(
491 "GET", url, headers=headers, auth=('admin', 'admin'))
492 res = response.json()
493 #Tests related to nodes
494 self.assertEqual(response.status_code, requests.codes.ok)
495 nbNode=len(res['network'][0]['node'])
496 self.assertEqual(nbNode,7)
497 #************************Tests related to XPDRA nodes
498 self.assertEqual(res['network'][0]['node'][4]['node-id'],'XPDRA-XPDR1')
499 self.assertEqual(len(res['network'][0]['node'][4]['ietf-network-topology:termination-point']),2)
500 self.assertEqual({'tp-id': 'XPDR1-CLIENT1', 'org-openroadm-network-topology:tp-type': 'XPONDER-CLIENT',
501 'org-openroadm-network-topology:xpdr-network-attributes': {
502 'tail-equipment-id': 'XPDR1-NETWORK1'}},
503 res['network'][0]['node'][4]['ietf-network-topology:termination-point'][0])
504 self.assertEqual({'tp-id': 'XPDR1-NETWORK1', 'org-openroadm-network-topology:tp-type': 'XPONDER-NETWORK',
505 'org-openroadm-network-topology:xpdr-client-attributes': {'tail-equipment-id': 'XPDR1-CLIENT1'}},
506 res['network'][0]['node'][4]['ietf-network-topology:termination-point'][1])
507 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDRA'},
508 res['network'][0]['node'][4]['supporting-node'])
509 self.assertEqual(res['network'][0]['node'][4]['org-openroadm-network-topology:node-type'],'XPONDER')
510 #************************Tests related to ROADMA nodes
511 #Test related to SRG1
512 self.assertEqual(res['network'][0]['node'][3]['node-id'],'ROADMA-SRG1')
513 #To be integrate in the effective tests
514 self.assertEqual(len(res['network'][0]['node'][0]['ietf-network-topology:termination-point']),17)
515 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-network-topology:tp-type': 'SRG-TXRX-CP'},
516 res['network'][0]['node'][0]['ietf-network-topology:termination-point'])
517 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-network-topology:tp-type': 'SRG-TXRX-PP'},
518 res['network'][0]['node'][3]['ietf-network-topology:termination-point'])
519 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA'},
520 res['network'][0]['node'][3]['supporting-node'])
521 self.assertEqual(res['network'][0]['node'][3]['org-openroadm-network-topology:node-type'],'SRG')
522 #Test related to DEG2
523 self.assertEqual(res['network'][0]['node'][5]['node-id'],'ROADMA-DEG2')
524 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-TTP'},
525 res['network'][0]['node'][5]['ietf-network-topology:termination-point'])
526 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-CTP'},
527 res['network'][0]['node'][5]['ietf-network-topology:termination-point'])
528 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA'},
529 res['network'][0]['node'][5]['supporting-node'])
530 self.assertEqual(res['network'][0]['node'][5]['org-openroadm-network-topology:node-type'],'DEGREE')
531 #Test related to DEG1
532 self.assertEqual(res['network'][0]['node'][6]['node-id'],'ROADMA-DEG1')
533 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-TTP'},
534 res['network'][0]['node'][6]['ietf-network-topology:termination-point'])
535 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-CTP'},
536 res['network'][0]['node'][6]['ietf-network-topology:termination-point'])
537 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA'},
538 res['network'][0]['node'][6]['supporting-node'])
539 self.assertEqual(res['network'][0]['node'][6]['org-openroadm-network-topology:node-type'],'DEGREE')
540 #************************Tests related to ROADMC nodes
541 #Test related to SRG1
542 self.assertEqual(res['network'][0]['node'][0]['node-id'],'ROADMC-SRG1')
543 #To be integrate in the effective tests
544 self.assertEqual(len(res['network'][0]['node'][0]['ietf-network-topology:termination-point']),17)
545 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-network-topology:tp-type': 'SRG-TXRX-CP'},
546 res['network'][0]['node'][0]['ietf-network-topology:termination-point'])
547 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-network-topology:tp-type': 'SRG-TXRX-PP'},
548 res['network'][0]['node'][0]['ietf-network-topology:termination-point'])
549 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMC'},
550 res['network'][0]['node'][0]['supporting-node'])
551 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network-topology:node-type'],'SRG')
552 #Test related to DEG1
553 self.assertEqual(res['network'][0]['node'][1]['node-id'],'ROADMC-DEG1')
554 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-TTP'},
555 res['network'][0]['node'][1]['ietf-network-topology:termination-point'])
556 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-CTP'},
557 res['network'][0]['node'][1]['ietf-network-topology:termination-point'])
558 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMC'},
559 res['network'][0]['node'][1]['supporting-node'])
560 self.assertEqual(res['network'][0]['node'][1]['org-openroadm-network-topology:node-type'],'DEGREE')
561 #Test related to DEG2
562 self.assertEqual(res['network'][0]['node'][2]['node-id'],'ROADMC-DEG2')
563 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-TTP'},
564 res['network'][0]['node'][2]['ietf-network-topology:termination-point'])
565 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-CTP'},
566 res['network'][0]['node'][2]['ietf-network-topology:termination-point'])
567 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMC'},
568 res['network'][0]['node'][2]['supporting-node'])
569 self.assertEqual(res['network'][0]['node'][2]['org-openroadm-network-topology:node-type'],'DEGREE')
571 def test_18_connect_ROADMB(self):
572 url = ("{}/config/network-topology:"
573 "network-topology/topology/topology-netconf/node/ROADMB"
574 .format(self.restconf_baseurl))
577 "netconf-node-topology:username": "admin",
578 "netconf-node-topology:password": "admin",
579 "netconf-node-topology:host": "127.0.0.1",
580 "netconf-node-topology:port": "17832",
581 "netconf-node-topology:tcp-only": "false",
582 "netconf-node-topology:pass-through": {}}]}
583 headers = {'content-type': 'application/json'}
584 response = requests.request(
585 "PUT", url, data=json.dumps(data), headers=headers,
586 auth=('admin', 'admin'))
587 self.assertEqual(response.status_code, requests.codes.created)
590 def test_19_getClliNetwork(self):
591 url = ("{}/config/ietf-network:network/clli-network"
592 .format(self.restconf_baseurl))
593 headers = {'content-type': 'application/json'}
594 response = requests.request(
595 "GET", url, headers=headers, auth=('admin', 'admin'))
596 self.assertEqual(response.status_code, requests.codes.ok)
597 res = response.json()
598 self.assertEqual(res['network'][0]['node'][0]['node-id'],'NodeC')
599 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'],'NodeC')
600 self.assertEqual(res['network'][0]['node'][1]['node-id'],'NodeA')
601 self.assertEqual(res['network'][0]['node'][1]['org-openroadm-clli-network:clli'],'NodeA')
602 self.assertEqual(res['network'][0]['node'][2]['node-id'],'NodeB')
603 self.assertEqual(res['network'][0]['node'][2]['org-openroadm-clli-network:clli'],'NodeB')
605 def test_20_verifyDegree(self):
606 url = ("{}/config/ietf-network:network/openroadm-topology"
607 .format(self.restconf_baseurl))
608 headers = {'content-type': 'application/json'}
609 response = requests.request(
610 "GET", url, headers=headers, auth=('admin', 'admin'))
611 self.assertEqual(response.status_code, requests.codes.ok)
612 res = response.json()
613 #Tests related to links
614 nbLink=len(res['network'][0]['ietf-network-topology:link'])
615 listR2RLink=['ROADMA-DEG1-DEG1-TTP-TXRXtoROADMC-DEG2-DEG2-TTP-TXRX','ROADMC-DEG2-DEG2-TTP-TXRXtoROADMA-DEG1-DEG1-TTP-TXRX',
616 'ROADMA-DEG2-DEG2-TTP-TXRXtoROADMB-DEG1-DEG1-TTP-TXRX','ROADMC-DEG1-DEG1-TTP-TXRXtoROADMB-DEG2-DEG2-TTP-TXRX',
617 'ROADMB-DEG1-DEG1-TTP-TXRXtoROADMA-DEG2-DEG2-TTP-TXRX','ROADMB-DEG2-DEG2-TTP-TXRXtoROADMC-DEG1-DEG1-TTP-TXRX']
618 for i in range(0,nbLink):
619 if res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-network-topology:link-type'] == 'ROADM-TO-ROADM':
620 link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id']
621 find= link_id in listR2RLink
622 self.assertEqual(find, True)
623 listR2RLink.remove(link_id)
624 self.assertEqual(len(listR2RLink),0)
626 def test_21_verifyOppositeLinkTopology(self):
627 url = ("{}/config/ietf-network:network/openroadm-topology"
628 .format(self.restconf_baseurl))
629 headers = {'content-type': 'application/json'}
630 response = requests.request(
631 "GET", url, headers=headers, auth=('admin', 'admin'))
632 self.assertEqual(response.status_code, requests.codes.ok)
633 res = response.json()
634 #Write the response in the log
635 with open('./transportpce_tests/log/response.log', 'a') as outfile1:
636 outfile1.write(str(res))
637 #Tests related to links
638 nbLink=len(res['network'][0]['ietf-network-topology:link'])
639 self.assertEqual(nbLink,26)
640 for i in range(0,nbLink):
641 link_id=res['network'][0]['ietf-network-topology:link'][i]['link-id']
642 link_type=res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-network-topology:link-type']
643 link_src=res['network'][0]['ietf-network-topology:link'][i]['source']['source-node']
644 link_dest=res['network'][0]['ietf-network-topology:link'][i]['destination']['dest-node']
645 oppLink_id=res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-opposite-links:opposite-link']
646 #Find the opposite link
647 url_oppLink="{}/config/ietf-network:network/openroadm-topology/ietf-network-topology:link/"+oppLink_id
648 url = (url_oppLink.format(self.restconf_baseurl))
649 headers = {'content-type': 'application/json'}
650 response_oppLink = requests.request("GET", url, headers=headers, auth=('admin', 'admin'))
651 self.assertEqual(response_oppLink.status_code, requests.codes.ok)
652 res_oppLink = response_oppLink.json()
653 self.assertEqual(res_oppLink['ietf-network-topology:link'][0]['org-openroadm-opposite-links:opposite-link'],link_id)
654 self.assertEqual(res_oppLink['ietf-network-topology:link'][0]['source']['source-node'],link_dest)
655 self.assertEqual(res_oppLink['ietf-network-topology:link'][0]['destination']['dest-node'],link_src)
656 oppLink_type=res_oppLink['ietf-network-topology:link'][0]['org-openroadm-network-topology:link-type']
657 if link_type=='ADD-LINK':
658 self.assertEqual(oppLink_type, 'DROP-LINK')
659 elif link_type=='DROP-LINK':
660 self.assertEqual(oppLink_type, 'ADD-LINK')
661 elif link_type=='EXPRESS-LINK':
662 self.assertEqual(oppLink_type, 'EXPRESS-LINK')
663 elif link_type=='ROADM-TO-ROADM':
664 self.assertEqual(oppLink_type, 'ROADM-TO-ROADM')
665 elif link_type=='XPONDER-INPUT':
666 self.assertEqual(oppLink_type, 'XPONDER-OUTPUT')
667 elif link_type=='XPONDER-OUTPUT':
668 self.assertEqual(oppLink_type, 'XPONDER-INPUT')
671 def test_22_disconnect_ROADMB(self):
672 #Delete in the topology-netconf
673 url = ("{}/config/network-topology:"
674 "network-topology/topology/topology-netconf/node/ROADMB"
675 .format(self.restconf_baseurl))
677 headers = {'content-type': 'application/json'}
678 response = requests.request(
679 "DELETE", url, data=json.dumps(data), headers=headers,
680 auth=('admin', 'admin'))
681 self.assertEqual(response.status_code, requests.codes.ok)
682 #Delete in the clli-network
683 url = ("{}/config/ietf-network:network/clli-network/node/NodeB"
684 .format(self.restconf_baseurl))
686 headers = {'content-type': 'application/json'}
687 response = requests.request(
688 "DELETE", url, data=json.dumps(data), headers=headers,
689 auth=('admin', 'admin'))
690 self.assertEqual(response.status_code, requests.codes.ok)
691 #Delete in the openroadm-network
692 url = ("{}/config/ietf-network:network/openroadm-network/node/ROADMB"
693 .format(self.restconf_baseurl))
695 headers = {'content-type': 'application/json'}
696 response = requests.request(
697 "DELETE", url, data=json.dumps(data), headers=headers,
698 auth=('admin', 'admin'))
699 self.assertEqual(response.status_code, requests.codes.ok)
701 def test_23_disconnect_ROADMC(self):
702 #Delete in the topology-netconf
703 url = ("{}/config/network-topology:"
704 "network-topology/topology/topology-netconf/node/ROADMC"
705 .format(self.restconf_baseurl))
707 headers = {'content-type': 'application/json'}
708 response = requests.request(
709 "DELETE", url, data=json.dumps(data), headers=headers,
710 auth=('admin', 'admin'))
711 self.assertEqual(response.status_code, requests.codes.ok)
712 #Delete in the clli-network
713 url = ("{}/config/ietf-network:network/clli-network/node/NodeC"
714 .format(self.restconf_baseurl))
716 headers = {'content-type': 'application/json'}
717 response = requests.request(
718 "DELETE", url, data=json.dumps(data), headers=headers,
719 auth=('admin', 'admin'))
720 self.assertEqual(response.status_code, requests.codes.ok)
721 #Delete in the openroadm-network
722 url = ("{}/config/ietf-network:network/openroadm-network/node/ROADMC"
723 .format(self.restconf_baseurl))
725 headers = {'content-type': 'application/json'}
726 response = requests.request(
727 "DELETE", url, data=json.dumps(data), headers=headers,
728 auth=('admin', 'admin'))
729 self.assertEqual(response.status_code, requests.codes.ok)
731 def test_24_getLinks_OpenRoadmTopology(self):
732 url = ("{}/config/ietf-network:network/openroadm-topology"
733 .format(self.restconf_baseurl))
734 headers = {'content-type': 'application/json'}
735 response = requests.request(
736 "GET", url, headers=headers, auth=('admin', 'admin'))
737 self.assertEqual(response.status_code, requests.codes.ok)
738 res = response.json()
739 #Write the response in the log
740 with open('./transportpce_tests/log/response.log', 'a') as outfile1:
741 outfile1.write(str(res))
742 #Tests related to links
743 nbLink=len(res['network'][0]['ietf-network-topology:link'])
744 self.assertEqual(nbLink,8)
745 self.assertEqual(res['network'][0]['ietf-network-topology:link'][0]['link-id'],'ROADMA-DEG2-DEG2-CTP-TXRXtoROADMA-DEG1-DEG1-CTP-TXRX')
746 self.assertEqual(res['network'][0]['ietf-network-topology:link'][0]['org-openroadm-network-topology:link-type'],'EXPRESS-LINK')
747 self.assertEqual(res['network'][0]['ietf-network-topology:link'][1]['link-id'],'ROADMA-DEG1-DEG1-CTP-TXRXtoROADMA-SRG1-SRG1-CP-TXRX')
748 self.assertEqual(res['network'][0]['ietf-network-topology:link'][1]['org-openroadm-network-topology:link-type'],'DROP-LINK')
749 self.assertEqual(res['network'][0]['ietf-network-topology:link'][2]['link-id'],'ROADMA-DEG2-DEG2-CTP-TXRXtoROADMA-SRG1-SRG1-CP-TXRX')
750 self.assertEqual(res['network'][0]['ietf-network-topology:link'][2]['org-openroadm-network-topology:link-type'],'DROP-LINK')
751 self.assertEqual(res['network'][0]['ietf-network-topology:link'][3]['link-id'],'ROADMA-SRG1-SRG1-CP-TXRXtoROADMA-DEG1-DEG1-CTP-TXRX')
752 self.assertEqual(res['network'][0]['ietf-network-topology:link'][3]['org-openroadm-network-topology:link-type'],'ADD-LINK')
753 self.assertEqual(res['network'][0]['ietf-network-topology:link'][4]['link-id'],'XPDRA-XPDR1-XPDR1-NETWORK1toROADMA-SRG1-SRG1-PP1-TXRX')
754 self.assertEqual(res['network'][0]['ietf-network-topology:link'][4]['org-openroadm-network-topology:link-type'],'XPONDER-OUTPUT')
755 self.assertEqual(res['network'][0]['ietf-network-topology:link'][5]['link-id'],'ROADMA-SRG1-SRG1-PP1-TXRXtoXPDRA-XPDR1-XPDR1-NETWORK1')
756 self.assertEqual(res['network'][0]['ietf-network-topology:link'][5]['org-openroadm-network-topology:link-type'],'XPONDER-INPUT')
757 self.assertEqual(res['network'][0]['ietf-network-topology:link'][6]['link-id'],'ROADMA-DEG1-DEG1-CTP-TXRXtoROADMA-DEG2-DEG2-CTP-TXRX')
758 self.assertEqual(res['network'][0]['ietf-network-topology:link'][6]['org-openroadm-network-topology:link-type'],'EXPRESS-LINK')
759 self.assertEqual(res['network'][0]['ietf-network-topology:link'][7]['link-id'],'ROADMA-SRG1-SRG1-CP-TXRXtoROADMA-DEG2-DEG2-CTP-TXRX')
760 self.assertEqual(res['network'][0]['ietf-network-topology:link'][7]['org-openroadm-network-topology:link-type'],'ADD-LINK')
761 for i in range(0,nbLink-1):
762 self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-network-topology:link-type'],'ROADM-TO-ROADM')
763 self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['link-id'],'ROADMC-SRG1-SRG1-CP-TXRXtoROADMC-DEG1-DEG1-CTP-TXRX')
764 self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['link-id'],'ROADMC-DEG1-DEG1-CTP-TXRXtoROADMC-SRG1-SRG1-CP-TXRX')
765 self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['link-id'],'ROADMC-SRG1-SRG1-CP-TXRXtoROADMC-DEG2-DEG1-CTP-TXRX')
766 self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['link-id'],'ROADMC-DEG1-DEG2-CTP-TXRXtoROADMC-SRG1-SRG1-CP-TXRX')
767 self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['link-id'],'ROADMC-DEG1-DEG1-CTP-TXRXtoROADMC-DEG2-DEG2-CTP-TXRX')
768 self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['link-id'],'ROADMC-DEG2-DEG2-CTP-TXRXtoROADMC-DEG1-DEG1-CTP-TXRX')
770 def test_25_getNodes_OpenRoadmTopology(self):
771 url = ("{}/config/ietf-network:network/openroadm-topology"
772 .format(self.restconf_baseurl))
773 headers = {'content-type': 'application/json'}
774 response = requests.request(
775 "GET", url, headers=headers, auth=('admin', 'admin'))
776 res = response.json()
777 #Tests related to nodes
778 self.assertEqual(response.status_code, requests.codes.ok)
779 with open('./transportpce_tests/log/response.log', 'a') as outfile1:
780 outfile1.write(str(len(res['network'][0]['node'])))
781 nbNode=len(res['network'][0]['node'])
782 self.assertEqual(nbNode,4)
783 #Tests related to nodes
784 self.assertEqual(res['network'][0]['node'][1]['node-id'],'XPDRA-XPDR1')
785 self.assertEqual(len(res['network'][0]['node'][1]['ietf-network-topology:termination-point']),4)
786 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDRA'},
787 res['network'][0]['node'][1]['supporting-node'])
788 self.assertEqual(res['network'][0]['node'][1]['org-openroadm-network-topology:node-type'],'XPONDER')
789 #Test related to SRG1
790 self.assertEqual(res['network'][0]['node'][0]['node-id'],'ROADMA-SRG1')
791 self.assertEqual(len(res['network'][0]['node'][0]['ietf-network-topology:termination-point']),17)
792 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-network-topology:tp-type': 'SRG-TXRX-CP'},
793 res['network'][0]['node'][0]['ietf-network-topology:termination-point'])
794 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-network-topology:tp-type': 'SRG-TXRX-PP'},
795 res['network'][0]['node'][0]['ietf-network-topology:termination-point'])
796 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA'},
797 res['network'][0]['node'][0]['supporting-node'])
798 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network-topology:node-type'],'SRG')
799 #Test related to DEG2
800 self.assertEqual(res['network'][0]['node'][2]['node-id'],'ROADMA-DEG2')
801 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-TTP'},
802 res['network' ][0]['node'][2]['ietf-network-topology:termination-point'])
803 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-CTP'},
804 res['network'][0]['node'][2]['ietf-network-topology:termination-point'])
805 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA'},
806 res['network'][0]['node'][2]['supporting-node'])
807 self.assertEqual(res['network'][0]['node'][2]['org-openroadm-network-topology:node-type'],'DEGREE')
808 #Test related to DEG1
809 self.assertEqual(res['network'][0]['node'][3]['node-id'],'ROADMA-DEG1')
810 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-TTP'},
811 res['network'][0]['node'][3]['ietf-network-topology:termination-point'])
812 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-CTP'},
813 res['network'][0]['node'][3]['ietf-network-topology:termination-point'])
814 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA'},
815 res['network'][0]['node'][3]['supporting-node'])
816 self.assertEqual(res['network'][0]['node'][3]['org-openroadm-network-topology:node-type'],'DEGREE')
817 #Test related to SRG1 of ROADMC
818 for i in range(0,nbNode-1):
819 self.assertNotEqual(res['network'][0]['node'][i]['node-id'],'ROADMC-SRG1')
820 self.assertNotEqual(res['network'][0]['node'][i]['node-id'],'ROADMC-DEG1')
821 self.assertNotEqual(res['network'][0]['node'][i]['node-id'],'ROADMC-DEG2')
823 def test_26_getOpenRoadmNetwork(self):
824 url = ("{}/config/ietf-network:network/openroadm-network"
825 .format(self.restconf_baseurl))
826 headers = {'content-type': 'application/json'}
827 response = requests.request(
828 "GET", url, headers=headers, auth=('admin', 'admin'))
829 self.assertEqual(response.status_code, requests.codes.ok)
830 res = response.json()
831 nbNode=len(res['network'][0]['node'])
832 self.assertEqual(nbNode,2)
833 for i in range(0,nbNode-1):
834 self.assertNotEqual(res['network'][0]['node'][i]['node-id'],'ROADMC')
836 def test_27_getClliNetwork(self):
837 url = ("{}/config/ietf-network:network/clli-network"
838 .format(self.restconf_baseurl))
839 headers = {'content-type': 'application/json'}
840 response = requests.request(
841 "GET", url, headers=headers, auth=('admin', 'admin'))
842 self.assertEqual(response.status_code, requests.codes.ok)
843 res = response.json()
844 nbNode=len(res['network'][0]['node'])
845 self.assertEqual(nbNode,1)
846 for i in range(0,nbNode-1):
847 self.assertNotEqual(res['network'][0]['node'][1]['org-openroadm-clli-network:clli'],'NodeC')
849 def test_28_disconnect_XPDRA(self):
850 url = ("{}/config/network-topology:"
851 "network-topology/topology/topology-netconf/node/XPDRA"
852 .format(self.restconf_baseurl))
854 headers = {'content-type': 'application/json'}
855 response = requests.request(
856 "DELETE", url, data=json.dumps(data), headers=headers,
857 auth=('admin', 'admin'))
858 self.assertEqual(response.status_code, requests.codes.ok)
859 #Delete in the openroadm-network
860 url = ("{}/config/ietf-network:network/openroadm-network/node/XPDRA"
861 .format(self.restconf_baseurl))
863 headers = {'content-type': 'application/json'}
864 response = requests.request(
865 "DELETE", url, data=json.dumps(data), headers=headers,
866 auth=('admin', 'admin'))
867 self.assertEqual(response.status_code, requests.codes.ok)
869 def test_29_getClliNetwork(self):
870 url = ("{}/config/ietf-network:network/clli-network"
871 .format(self.restconf_baseurl))
872 headers = {'content-type': 'application/json'}
873 response = requests.request(
874 "GET", url, headers=headers, auth=('admin', 'admin'))
875 self.assertEqual(response.status_code, requests.codes.ok)
876 res = response.json()
877 nbNode=len(res['network'][0]['node'])
878 self.assertEqual(nbNode,1)
879 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'],'NodeA')
881 def test_30_getOpenRoadmNetwork(self):
882 url = ("{}/config/ietf-network:network/openroadm-network"
883 .format(self.restconf_baseurl))
884 headers = {'content-type': 'application/json'}
885 response = requests.request(
886 "GET", url, headers=headers, auth=('admin', 'admin'))
887 self.assertEqual(response.status_code, requests.codes.ok)
888 res = response.json()
889 nbNode=len(res['network'][0]['node'])
890 self.assertEqual(nbNode,1)
891 for i in range(0,nbNode-1):
892 self.assertNotEqual(res['network'][0]['node'][i]['node-id'],'XPDRA')
894 def test_31_getNodes_OpenRoadmTopology(self):
895 url = ("{}/config/ietf-network:network/openroadm-topology"
896 .format(self.restconf_baseurl))
897 headers = {'content-type': 'application/json'}
898 response = requests.request(
899 "GET", url, headers=headers, auth=('admin', 'admin'))
900 res = response.json()
901 #Tests related to nodes
902 self.assertEqual(response.status_code, requests.codes.ok)
903 nbNode=len(res['network'][0]['node'])
904 self.assertEqual(nbNode,3)
905 #Tests related to nodes
906 #Test related to SRG1
907 self.assertEqual(res['network'][0]['node'][0]['node-id'],'ROADMA-SRG1')
908 self.assertEqual(len(res['network'][0]['node'][0]['ietf-network-topology:termination-point']),17)
909 self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-network-topology:tp-type': 'SRG-TXRX-CP'},
910 res['network'][0]['node'][0]['ietf-network-topology:termination-point'])
911 self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-network-topology:tp-type': 'SRG-TXRX-PP'},
912 res['network'][0]['node'][0]['ietf-network-topology:termination-point'])
913 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA'},
914 res['network'][0]['node'][0]['supporting-node'])
915 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network-topology:node-type'],'SRG')
916 #Test related to DEG2
917 self.assertEqual(res['network'][0]['node'][1]['node-id'],'ROADMA-DEG2')
918 self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-TTP'},
919 res['network'][0]['node'][1]['ietf-network-topology:termination-point'])
920 self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-CTP'},
921 res['network'][0]['node'][1]['ietf-network-topology:termination-point'])
922 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA'},
923 res['network'][0]['node'][1]['supporting-node'])
924 self.assertEqual(res['network'][0]['node'][1]['org-openroadm-network-topology:node-type'],'DEGREE')
925 #Test related to DEG1
926 self.assertEqual(res['network'][0]['node'][2]['node-id'],'ROADMA-DEG1')
927 self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-TTP'},
928 res['network'][0]['node'][2]['ietf-network-topology:termination-point'])
929 self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-network-topology:tp-type': 'DEGREE-TXRX-CTP'},
930 res['network'][0]['node'][2]['ietf-network-topology:termination-point'])
931 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA'},
932 res['network'][0]['node'][2]['supporting-node'])
933 self.assertEqual(res['network'][0]['node'][2]['org-openroadm-network-topology:node-type'],'DEGREE')
935 def test_32_disconnect_ROADM_XPDRA_link(self):
937 url = ("{}/config/ietf-network:network/openroadm-topology/ietf-network-topology:"
938 "link/XPDRA-XPDR1-XPDR1-NETWORK1toROADMA-SRG1-SRG1-PP1-TXRX"
939 .format(self.restconf_baseurl))
941 headers = {'content-type': 'application/json'}
942 response = requests.request(
943 "DELETE", url, data=json.dumps(data), headers=headers,
944 auth=('admin', 'admin'))
945 self.assertEqual(response.status_code, requests.codes.ok)
947 url = ("{}/config/ietf-network:network/openroadm-topology/ietf-network-topology:"
948 "link/ROADMA-SRG1-SRG1-PP1-TXRXtoXPDRA-XPDR1-XPDR1-NETWORK1"
949 .format(self.restconf_baseurl))
951 headers = {'content-type': 'application/json'}
952 response = requests.request(
953 "DELETE", url, data=json.dumps(data), headers=headers,
954 auth=('admin', 'admin'))
955 self.assertEqual(response.status_code, requests.codes.ok)
957 def test_33_getLinks_OpenRoadmTopology(self):
958 url = ("{}/config/ietf-network:network/openroadm-topology"
959 .format(self.restconf_baseurl))
960 headers = {'content-type': 'application/json'}
961 response = requests.request(
962 "GET", url, headers=headers, auth=('admin', 'admin'))
963 self.assertEqual(response.status_code, requests.codes.ok)
964 res = response.json()
965 nbLink=len(res['network'][0]['ietf-network-topology:link'])
966 self.assertEqual(nbLink,6)
967 self.assertEqual(res['network'][0]['ietf-network-topology:link'][0]['link-id'],'ROADMA-DEG2-DEG2-CTP-TXRXtoROADMA-DEG1-DEG1-CTP-TXRX')
968 self.assertEqual(res['network'][0]['ietf-network-topology:link'][0]['org-openroadm-network-topology:link-type'],'EXPRESS-LINK')
969 self.assertEqual(res['network'][0]['ietf-network-topology:link'][1]['link-id'],'ROADMA-DEG1-DEG1-CTP-TXRXtoROADMA-SRG1-SRG1-CP-TXRX')
970 self.assertEqual(res['network'][0]['ietf-network-topology:link'][1]['org-openroadm-network-topology:link-type'],'DROP-LINK')
971 self.assertEqual(res['network'][0]['ietf-network-topology:link'][2]['link-id'],'ROADMA-DEG2-DEG2-CTP-TXRXtoROADMA-SRG1-SRG1-CP-TXRX')
972 self.assertEqual(res['network'][0]['ietf-network-topology:link'][2]['org-openroadm-network-topology:link-type'],'DROP-LINK')
973 self.assertEqual(res['network'][0]['ietf-network-topology:link'][3]['link-id'],'ROADMA-SRG1-SRG1-CP-TXRXtoROADMA-DEG1-DEG1-CTP-TXRX')
974 self.assertEqual(res['network'][0]['ietf-network-topology:link'][3]['org-openroadm-network-topology:link-type'],'ADD-LINK')
975 self.assertEqual(res['network'][0]['ietf-network-topology:link'][4]['link-id'],'ROADMA-DEG1-DEG1-CTP-TXRXtoROADMA-DEG2-DEG2-CTP-TXRX')
976 self.assertEqual(res['network'][0]['ietf-network-topology:link'][4]['org-openroadm-network-topology:link-type'],'EXPRESS-LINK')
977 self.assertEqual(res['network'][0]['ietf-network-topology:link'][5]['link-id'],'ROADMA-SRG1-SRG1-CP-TXRXtoROADMA-DEG2-DEG2-CTP-TXRX')
978 self.assertEqual(res['network'][0]['ietf-network-topology:link'][5]['org-openroadm-network-topology:link-type'],'ADD-LINK')
979 for i in range(0,nbLink-1):
980 self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-network-topology:link-type'],'XPONDER-OUTPUT')
981 self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-network-topology:link-type'],'XPONDER-INPUT')
983 def test_34_disconnect_ROADMA(self):
984 url = ("{}/config/network-topology:"
985 "network-topology/topology/topology-netconf/node/ROADMA"
986 .format(self.restconf_baseurl))
988 headers = {'content-type': 'application/json'}
989 response = requests.request(
990 "DELETE", url, data=json.dumps(data), headers=headers,
991 auth=('admin', 'admin'))
992 self.assertEqual(response.status_code, requests.codes.ok)
993 #Delete in the clli-network
994 url = ("{}/config/ietf-network:network/clli-network/node/NodeA"
995 .format(self.restconf_baseurl))
997 headers = {'content-type': 'application/json'}
998 response = requests.request(
999 "DELETE", url, data=json.dumps(data), headers=headers,
1000 auth=('admin', 'admin'))
1001 self.assertEqual(response.status_code, requests.codes.ok)
1002 #Delete in the openroadm-network
1003 url = ("{}/config/ietf-network:network/openroadm-network/node/ROADMA"
1004 .format(self.restconf_baseurl))
1006 headers = {'content-type': 'application/json'}
1007 response = requests.request(
1008 "DELETE", url, data=json.dumps(data), headers=headers,
1009 auth=('admin', 'admin'))
1010 self.assertEqual(response.status_code, requests.codes.ok)
1013 def test_35_getClliNetwork(self):
1014 url = ("{}/config/ietf-network:network/clli-network"
1015 .format(self.restconf_baseurl))
1016 headers = {'content-type': 'application/json'}
1017 response = requests.request(
1018 "GET", url, headers=headers, auth=('admin', 'admin'))
1019 self.assertEqual(response.status_code, requests.codes.ok)
1020 res = response.json()
1021 self.assertNotIn('node', res['network'][0])
1023 def test_36_getOpenRoadmNetwork(self):
1024 url = ("{}/config/ietf-network:network/openroadm-network"
1025 .format(self.restconf_baseurl))
1026 headers = {'content-type': 'application/json'}
1027 response = requests.request(
1028 "GET", url, headers=headers, auth=('admin', 'admin'))
1029 self.assertEqual(response.status_code, requests.codes.ok)
1030 res = response.json()
1031 self.assertNotIn('node', res['network'][0])
1033 def test_37_getOpenRoadmTopology(self):
1034 url = ("{}/config/ietf-network:network/openroadm-topology"
1035 .format(self.restconf_baseurl))
1036 headers = {'content-type': 'application/json'}
1037 response = requests.request(
1038 "GET", url, headers=headers, auth=('admin', 'admin'))
1039 self.assertEqual(response.status_code, requests.codes.ok)
1040 res = response.json()
1041 self.assertNotIn('node', res['network'][0])
1042 self.assertNotIn('ietf-network-topology:link', res['network'][0])
1044 if __name__ == "__main__":
1045 #logging.basicConfig(filename='./transportpce_tests/log/response.log',filemode='w',level=logging.DEBUG)
1046 #logging.debug('I am there')
1047 unittest.main(verbosity=2)