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