3 ##############################################################################
4 # Copyright (c) 2019 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 ##############################################################################
22 from common import test_utils
25 class TransportPCEtesting(unittest.TestCase):
31 cls.processes = test_utils.start_tpce()
32 cls.processes = test_utils.start_sims(['spdrav2'])
35 def tearDownClass(cls):
36 for process in cls.processes:
37 test_utils.shutdown_process(process)
38 print("all processes killed")
43 def test_01_connect_SPDR_SA1(self):
44 response = test_utils.mount_device("SPDR-SA1", 'spdrav2')
45 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
48 url = ("{}/operational/network-topology:"
49 "network-topology/topology/topology-netconf/node/SPDR-SA1"
50 .format(test_utils.RESTCONF_BASE_URL))
51 response = requests.request(
52 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
53 self.assertEqual(response.status_code, requests.codes.ok)
56 res['node'][0]['netconf-node-topology:connection-status'],
59 def test_02_getClliNetwork(self):
60 url = ("{}/config/ietf-network:networks/network/clli-network"
61 .format(test_utils.RESTCONF_BASE_URL))
62 response = requests.request(
63 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
64 self.assertEqual(response.status_code, requests.codes.ok)
67 self.assertEqual(res['network'][0]['node'][0]['node-id'], 'NodeSA')
68 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'], 'NodeSA')
70 def test_03_getOpenRoadmNetwork(self):
71 url = ("{}/config/ietf-network:networks/network/openroadm-network"
72 .format(test_utils.RESTCONF_BASE_URL))
73 response = requests.request(
74 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
75 self.assertEqual(response.status_code, requests.codes.ok)
77 self.assertEqual(res['network'][0]['node'][0]['node-id'], 'SPDR-SA1')
78 self.assertEqual(res['network'][0]['node'][0]['supporting-node'][0]['network-ref'], 'clli-network')
79 self.assertEqual(res['network'][0]['node'][0]['supporting-node'][0]['node-ref'], 'NodeSA')
80 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-common-network:node-type'], 'XPONDER')
81 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network:model'], 'universal-switchponder')
82 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network:vendor'], 'vendorA')
83 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network:ip'], '1.2.3.4')
85 def test_04_getLinks_OpenroadmTopology(self):
86 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
87 .format(test_utils.RESTCONF_BASE_URL))
88 response = requests.request(
89 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
90 self.assertEqual(response.status_code, requests.codes.ok)
92 # Tests related to links
93 self.assertNotIn('ietf-network-topology:link', res['network'][0])
95 def test_05_getNodes_OpenRoadmTopology(self):
96 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
97 .format(test_utils.RESTCONF_BASE_URL))
98 response = requests.request(
99 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
100 res = response.json()
101 # Tests related to nodes
102 self.assertEqual(response.status_code, requests.codes.ok)
103 self.assertIn('node', res['network'][0])
104 if ('node' in res['network'][0]):
105 nbNode = len(res['network'][0]['node'])
106 self.assertEqual(nbNode, 2)
107 listNode = ['SPDR-SA1-XPDR1', 'SPDR-SA1-XPDR2']
108 for i in range(0, nbNode):
109 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
110 nodeId = res['network'][0]['node'][i]['node-id']
111 if (nodeId == 'SPDR-SA1-XPDR1'):
112 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'SPDR-SA1'},
113 res['network'][0]['node'][i]['supporting-node'])
114 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeSA'},
115 res['network'][0]['node'][i]['supporting-node'])
116 self.assertEqual(nodeType, 'XPONDER')
117 nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
120 for j in range(0, nbTps):
121 tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type']
122 tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id']
123 if (tpType == 'XPONDER-CLIENT'):
125 elif (tpType == 'XPONDER-NETWORK'):
127 self.assertTrue(client == 0)
128 self.assertTrue(network == 1)
129 listNode.remove(nodeId)
130 elif (nodeId == 'SPDR-SA1-XPDR2'):
131 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'SPDR-SA1'},
132 res['network'][0]['node'][i]['supporting-node'])
133 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeSA'},
134 res['network'][0]['node'][i]['supporting-node'])
135 self.assertEqual(nodeType, 'XPONDER')
136 nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
139 for j in range(0, nbTps):
140 tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type']
141 tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id']
142 if (tpType == 'XPONDER-CLIENT'):
144 elif (tpType == 'XPONDER-NETWORK'):
146 self.assertTrue(client == 0)
147 self.assertTrue(network == 4)
148 listNode.remove(nodeId)
150 self.assertFalse(True)
151 self.assertEqual(len(listNode), 0)
153 def test_06_getLinks_OtnTopology(self):
154 url = ("{}/config/ietf-network:networks/network/otn-topology"
155 .format(test_utils.RESTCONF_BASE_URL))
156 response = requests.request(
157 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
158 self.assertEqual(response.status_code, requests.codes.ok)
159 res = response.json()
160 self.assertNotIn('ietf-network-topology:link', res['network'][0])
162 def test_07_getNodes_OtnTopology(self):
163 url = ("{}/config/ietf-network:networks/network/otn-topology"
164 .format(test_utils.RESTCONF_BASE_URL))
165 response = requests.request(
166 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
167 res = response.json()
168 self.assertEqual(response.status_code, requests.codes.ok)
169 nbNode = len(res['network'][0]['node'])
170 self.assertEqual(nbNode, 2)
171 listNode = ['SPDR-SA1-XPDR1', 'SPDR-SA1-XPDR2']
172 for i in range(0, nbNode):
173 nodeId = res['network'][0]['node'][i]['node-id']
174 if(nodeId == 'SPDR-SA1-XPDR1'):
175 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
176 self.assertEqual(nodeType, 'MUXPDR')
177 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'SPDR-SA1'},
178 res['network'][0]['node'][i]['supporting-node'])
179 self.assertIn({'network-ref': 'openroadm-topology', 'node-ref': 'SPDR-SA1-XPDR1'},
180 res['network'][0]['node'][i]['supporting-node'])
181 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeSA'},
182 res['network'][0]['node'][i]['supporting-node'])
183 self.assertEqual(res['network'][0]['node'][i]
184 ['org-openroadm-otn-network-topology:xpdr-attributes']['xpdr-number'], 1)
185 nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
188 for j in range(0, nbTps):
189 tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type']
190 tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id']
191 if (tpType == 'XPONDER-CLIENT'):
193 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-otn-network-topology:tp-supported-interfaces']
194 ['supported-interface-capability'][0]['if-cap-type'], 'org-openroadm-port-types:if-10GE-ODU2e')
195 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
196 ['org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes']['rate'], 'org-openroadm-otn-common-types:ODU2e')
197 elif (tpType == 'XPONDER-NETWORK'):
199 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-otn-network-topology:tp-supported-interfaces']
200 ['supported-interface-capability'][0]['if-cap-type'], 'org-openroadm-port-types:if-OCH-OTU4-ODU4')
201 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
202 ['org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes']['rate'], 'org-openroadm-otn-common-types:ODU4')
203 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point']
204 [j]['supporting-termination-point'][0]['network-ref'], 'openroadm-topology')
205 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point']
206 [j]['supporting-termination-point'][0]['node-ref'], 'SPDR-SA1-XPDR1')
207 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point']
208 [j]['supporting-termination-point'][0]['tp-ref'], 'XPDR1-NETWORK1')
209 self.assertTrue(client == 4)
210 self.assertTrue(network == 1)
211 listNode.remove(nodeId)
212 nbNbl = len(res['network'][0]['node'][i]['org-openroadm-otn-network-topology:switching-pools']
213 ['odu-switching-pools'][0]['non-blocking-list'])
214 self.assertEqual(nbNbl, 4)
215 for k in range(0, nbNbl):
216 nbl = res['network'][0]['node'][i]['org-openroadm-otn-network-topology:switching-pools']['odu-switching-pools'][0]['non-blocking-list'][k]
217 if (nbl['nbl-number'] == 1):
218 self.assertEqual(nbl['available-interconnect-bandwidth'], 10)
219 self.assertEqual(nbl['interconnect-bandwidth-unit'], 1000000000)
220 self.assertIn('XPDR1-NETWORK1', nbl['tp-list'])
221 self.assertIn('XPDR1-CLIENT1', nbl['tp-list'])
222 self.assertNotIn('XPDR1-CLIENT2', nbl['tp-list'])
223 elif(nodeId == 'SPDR-SA1-XPDR2'):
224 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
225 self.assertEqual(nodeType, 'SWITCH')
226 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'SPDR-SA1'},
227 res['network'][0]['node'][i]['supporting-node'])
228 self.assertIn({'network-ref': 'openroadm-topology', 'node-ref': 'SPDR-SA1-XPDR2'},
229 res['network'][0]['node'][i]['supporting-node'])
230 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeSA'},
231 res['network'][0]['node'][i]['supporting-node'])
232 self.assertEqual(res['network'][0]['node'][i]
233 ['org-openroadm-otn-network-topology:xpdr-attributes']['xpdr-number'], 2)
234 nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
237 for j in range(0, nbTps):
238 tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type']
239 tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id']
240 if (tpType == 'XPONDER-CLIENT'):
242 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-otn-network-topology:tp-supported-interfaces']
243 ['supported-interface-capability'][0]['if-cap-type'], 'org-openroadm-port-types:if-100GE-ODU4')
244 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
245 ['org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes']['rate'], 'org-openroadm-otn-common-types:ODU4')
246 elif (tpType == 'XPONDER-NETWORK'):
248 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-otn-network-topology:tp-supported-interfaces']
249 ['supported-interface-capability'][0]['if-cap-type'], 'org-openroadm-port-types:if-OCH-OTU4-ODU4')
250 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
251 ['org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes']['rate'], 'org-openroadm-otn-common-types:ODU4')
252 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point']
253 [j]['supporting-termination-point'][0]['network-ref'], 'openroadm-topology')
254 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point']
255 [j]['supporting-termination-point'][0]['node-ref'], 'SPDR-SA1-XPDR2')
256 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point']
257 [j]['supporting-termination-point'][0]['tp-ref'], tpId)
258 self.assertTrue(client == 4)
259 self.assertTrue(network == 4)
260 listNode.remove(nodeId)
261 nbNbl = len(res['network'][0]['node'][i]['org-openroadm-otn-network-topology:switching-pools']
262 ['odu-switching-pools'][0]['non-blocking-list'])
263 self.assertEqual(nbNbl, 1)
264 nbl = res['network'][0]['node'][i]['org-openroadm-otn-network-topology:switching-pools']['odu-switching-pools'][0]['non-blocking-list'][0]
265 self.assertIn('XPDR2-NETWORK1', nbl['tp-list'])
266 self.assertIn('XPDR2-CLIENT1', nbl['tp-list'])
267 self.assertIn('XPDR2-NETWORK2', nbl['tp-list'])
268 self.assertIn('XPDR2-CLIENT2', nbl['tp-list'])
269 self.assertIn('XPDR2-NETWORK3', nbl['tp-list'])
270 self.assertIn('XPDR2-CLIENT3', nbl['tp-list'])
271 self.assertIn('XPDR2-NETWORK4', nbl['tp-list'])
272 self.assertIn('XPDR2-CLIENT4', nbl['tp-list'])
274 self.assertFalse(True)
275 self.assertEqual(len(listNode), 0)
277 def test_08_disconnect_SPDR_SA1(self):
278 response = test_utils.unmount_device("SPDR-SA1")
279 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
281 def test_09_getClliNetwork(self):
282 url = ("{}/config/ietf-network:networks/network/clli-network"
283 .format(test_utils.RESTCONF_BASE_URL))
284 response = requests.request(
285 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
286 self.assertEqual(response.status_code, requests.codes.ok)
287 res = response.json()
288 nbNode = len(res['network'][0]['node'])
289 self.assertEqual(nbNode, 1)
290 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'], 'NodeSA')
292 def test_10_getOpenRoadmNetwork(self):
293 url = ("{}/config/ietf-network:networks/network/openroadm-network"
294 .format(test_utils.RESTCONF_BASE_URL))
295 response = requests.request(
296 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
297 self.assertEqual(response.status_code, requests.codes.ok)
298 res = response.json()
299 self.assertNotIn('node', res['network'][0])
301 def test_11_getNodes_OpenRoadmTopology(self):
302 url = ("{}/config/ietf-network:networks/network/openroadm-topology"
303 .format(test_utils.RESTCONF_BASE_URL))
304 response = requests.request(
305 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
306 res = response.json()
307 self.assertNotIn('node', res['network'][0])
309 def test_12_getNodes_OtnTopology(self):
310 url = ("{}/config/ietf-network:networks/network/otn-topology"
311 .format(test_utils.RESTCONF_BASE_URL))
312 response = requests.request(
313 "GET", url, headers=test_utils.TYPE_APPLICATION_JSON, auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
314 res = response.json()
315 self.assertNotIn('node', res['network'][0])
318 if __name__ == "__main__":
319 unittest.main(verbosity=2)