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(['spdra'])
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", 'spdra')
39 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
42 url = "{}/operational/network-topology:network-topology/topology/topology-netconf/node/SPDR-SA1"
43 response = test_utils.get_request(url)
44 self.assertEqual(response.status_code, requests.codes.ok)
47 res['node'][0]['netconf-node-topology:connection-status'],
50 def test_02_getClliNetwork(self):
51 url = "{}/config/ietf-network:networks/network/clli-network"
52 response = test_utils.get_request(url)
53 self.assertEqual(response.status_code, requests.codes.ok)
56 self.assertEqual(res['network'][0]['node'][0]['node-id'], 'NodeSA')
57 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'], 'NodeSA')
59 def test_03_getOpenRoadmNetwork(self):
60 url = "{}/config/ietf-network:networks/network/openroadm-network"
61 response = test_utils.get_request(url)
62 self.assertEqual(response.status_code, requests.codes.ok)
64 self.assertEqual(res['network'][0]['node'][0]['node-id'], 'SPDR-SA1')
65 self.assertEqual(res['network'][0]['node'][0]['supporting-node'][0]['network-ref'], 'clli-network')
66 self.assertEqual(res['network'][0]['node'][0]['supporting-node'][0]['node-ref'], 'NodeSA')
67 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-common-network:node-type'], 'XPONDER')
68 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network:model'], 'universal-switchponder')
69 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network:vendor'], 'vendorA')
70 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network:ip'], '1.2.3.4')
72 def test_04_getLinks_OpenroadmTopology(self):
73 url = "{}/config/ietf-network:networks/network/openroadm-topology"
74 response = test_utils.get_request(url)
75 self.assertEqual(response.status_code, requests.codes.ok)
77 # Tests related to links
78 self.assertNotIn('ietf-network-topology:link', res['network'][0])
80 def test_05_getNodes_OpenRoadmTopology(self):
81 url = "{}/config/ietf-network:networks/network/openroadm-topology"
82 response = test_utils.get_request(url)
84 # Tests related to nodes
85 self.assertEqual(response.status_code, requests.codes.ok)
86 self.assertIn('node', res['network'][0])
87 if ('node' in res['network'][0]):
88 nbNode = len(res['network'][0]['node'])
89 self.assertEqual(nbNode, 2)
90 listNode = ['SPDR-SA1-XPDR1', 'SPDR-SA1-XPDR2']
91 for i in range(0, nbNode):
92 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
93 nodeId = res['network'][0]['node'][i]['node-id']
94 if (nodeId == 'SPDR-SA1-XPDR1'):
95 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'SPDR-SA1'},
96 res['network'][0]['node'][i]['supporting-node'])
97 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeSA'},
98 res['network'][0]['node'][i]['supporting-node'])
99 self.assertEqual(nodeType, 'XPONDER')
100 nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
103 for j in range(0, nbTps):
104 tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type']
105 tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id']
106 if (tpType == 'XPONDER-CLIENT'):
108 elif (tpType == 'XPONDER-NETWORK'):
110 self.assertTrue(client == 0)
111 self.assertTrue(network == 1)
112 listNode.remove(nodeId)
113 elif (nodeId == 'SPDR-SA1-XPDR2'):
114 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'SPDR-SA1'},
115 res['network'][0]['node'][i]['supporting-node'])
116 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeSA'},
117 res['network'][0]['node'][i]['supporting-node'])
118 self.assertEqual(nodeType, 'XPONDER')
119 nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
122 for j in range(0, nbTps):
123 tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type']
124 tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id']
125 if (tpType == 'XPONDER-CLIENT'):
127 elif (tpType == 'XPONDER-NETWORK'):
129 self.assertTrue(client == 0)
130 self.assertTrue(network == 4)
131 listNode.remove(nodeId)
133 self.assertFalse(True)
134 self.assertEqual(len(listNode), 0)
136 def test_06_getLinks_OtnTopology(self):
137 url = "{}/config/ietf-network:networks/network/otn-topology"
138 response = test_utils.get_request(url)
139 self.assertEqual(response.status_code, requests.codes.ok)
140 res = response.json()
141 self.assertNotIn('ietf-network-topology:link', res['network'][0])
143 def test_07_getNodes_OtnTopology(self):
144 url = "{}/config/ietf-network:networks/network/otn-topology"
145 response = test_utils.get_request(url)
146 res = response.json()
147 self.assertEqual(response.status_code, requests.codes.ok)
148 nbNode = len(res['network'][0]['node'])
149 self.assertEqual(nbNode, 2)
150 listNode = ['SPDR-SA1-XPDR1', 'SPDR-SA1-XPDR2']
151 for i in range(0, nbNode):
152 nodeId = res['network'][0]['node'][i]['node-id']
153 if(nodeId == 'SPDR-SA1-XPDR1'):
154 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
155 self.assertEqual(nodeType, 'MUXPDR')
156 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'SPDR-SA1'},
157 res['network'][0]['node'][i]['supporting-node'])
158 self.assertIn({'network-ref': 'openroadm-topology', 'node-ref': 'SPDR-SA1-XPDR1'},
159 res['network'][0]['node'][i]['supporting-node'])
160 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeSA'},
161 res['network'][0]['node'][i]['supporting-node'])
162 self.assertEqual(res['network'][0]['node'][i]
163 ['org-openroadm-otn-network-topology:xpdr-attributes']['xpdr-number'], 1)
164 nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
167 for j in range(0, nbTps):
168 tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type']
169 tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id']
170 if (tpType == 'XPONDER-CLIENT'):
172 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-otn-network-topology:tp-supported-interfaces']
173 ['supported-interface-capability'][0]['if-cap-type'], 'org-openroadm-port-types:if-10GE-ODU2e')
174 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
175 ['org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes']['rate'], 'org-openroadm-otn-common-types:ODU2e')
176 elif (tpType == 'XPONDER-NETWORK'):
178 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-otn-network-topology:tp-supported-interfaces']
179 ['supported-interface-capability'][0]['if-cap-type'], 'org-openroadm-port-types:if-OCH-OTU4-ODU4')
180 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
181 ['org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes']['rate'], 'org-openroadm-otn-common-types:ODU4')
182 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point']
183 [j]['supporting-termination-point'][0]['network-ref'], 'openroadm-topology')
184 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point']
185 [j]['supporting-termination-point'][0]['node-ref'], 'SPDR-SA1-XPDR1')
186 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point']
187 [j]['supporting-termination-point'][0]['tp-ref'], 'XPDR1-NETWORK1')
188 self.assertTrue(client == 4)
189 self.assertTrue(network == 1)
190 listNode.remove(nodeId)
191 nbNbl = len(res['network'][0]['node'][i]['org-openroadm-otn-network-topology:switching-pools']
192 ['odu-switching-pools'][0]['non-blocking-list'])
193 self.assertEqual(nbNbl, 4)
194 for k in range(0, nbNbl):
195 nbl = res['network'][0]['node'][i]['org-openroadm-otn-network-topology:switching-pools']['odu-switching-pools'][0]['non-blocking-list'][k]
196 if (nbl['nbl-number'] == 1):
197 self.assertEqual(nbl['available-interconnect-bandwidth'], 10)
198 self.assertEqual(nbl['interconnect-bandwidth-unit'], 1000000000)
199 self.assertIn('XPDR1-NETWORK1', nbl['tp-list'])
200 self.assertIn('XPDR1-CLIENT1', nbl['tp-list'])
201 self.assertNotIn('XPDR1-CLIENT2', nbl['tp-list'])
202 elif(nodeId == 'SPDR-SA1-XPDR2'):
203 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
204 self.assertEqual(nodeType, 'SWITCH')
205 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'SPDR-SA1'},
206 res['network'][0]['node'][i]['supporting-node'])
207 self.assertIn({'network-ref': 'openroadm-topology', 'node-ref': 'SPDR-SA1-XPDR2'},
208 res['network'][0]['node'][i]['supporting-node'])
209 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeSA'},
210 res['network'][0]['node'][i]['supporting-node'])
211 self.assertEqual(res['network'][0]['node'][i]
212 ['org-openroadm-otn-network-topology:xpdr-attributes']['xpdr-number'], 2)
213 nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
216 for j in range(0, nbTps):
217 tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type']
218 tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id']
219 if (tpType == 'XPONDER-CLIENT'):
221 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-otn-network-topology:tp-supported-interfaces']
222 ['supported-interface-capability'][0]['if-cap-type'], 'org-openroadm-port-types:if-100GE-ODU4')
223 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
224 ['org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes']['rate'], 'org-openroadm-otn-common-types:ODU4')
225 elif (tpType == 'XPONDER-NETWORK'):
227 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-otn-network-topology:tp-supported-interfaces']
228 ['supported-interface-capability'][0]['if-cap-type'], 'org-openroadm-port-types:if-OCH-OTU4-ODU4')
229 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
230 ['org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes']['rate'], 'org-openroadm-otn-common-types:ODU4')
231 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point']
232 [j]['supporting-termination-point'][0]['network-ref'], 'openroadm-topology')
233 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point']
234 [j]['supporting-termination-point'][0]['node-ref'], 'SPDR-SA1-XPDR2')
235 self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point']
236 [j]['supporting-termination-point'][0]['tp-ref'], tpId)
237 self.assertTrue(client == 4)
238 self.assertTrue(network == 4)
239 listNode.remove(nodeId)
240 nbNbl = len(res['network'][0]['node'][i]['org-openroadm-otn-network-topology:switching-pools']
241 ['odu-switching-pools'][0]['non-blocking-list'])
242 self.assertEqual(nbNbl, 1)
243 nbl = res['network'][0]['node'][i]['org-openroadm-otn-network-topology:switching-pools']['odu-switching-pools'][0]['non-blocking-list'][0]
244 self.assertIn('XPDR2-NETWORK1', nbl['tp-list'])
245 self.assertIn('XPDR2-CLIENT1', nbl['tp-list'])
246 self.assertIn('XPDR2-NETWORK2', nbl['tp-list'])
247 self.assertIn('XPDR2-CLIENT2', nbl['tp-list'])
248 self.assertIn('XPDR2-NETWORK3', nbl['tp-list'])
249 self.assertIn('XPDR2-CLIENT3', nbl['tp-list'])
250 self.assertIn('XPDR2-NETWORK4', nbl['tp-list'])
251 self.assertIn('XPDR2-CLIENT4', nbl['tp-list'])
253 self.assertFalse(True)
254 self.assertEqual(len(listNode), 0)
256 def test_08_disconnect_SPDR_SA1(self):
257 response = test_utils.unmount_device("SPDR-SA1")
258 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
260 def test_09_getClliNetwork(self):
261 url = "{}/config/ietf-network:networks/network/clli-network"
262 response = test_utils.get_request(url)
263 self.assertEqual(response.status_code, requests.codes.ok)
264 res = response.json()
265 nbNode = len(res['network'][0]['node'])
266 self.assertEqual(nbNode, 1)
267 self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'], 'NodeSA')
269 def test_10_getOpenRoadmNetwork(self):
270 url = "{}/config/ietf-network:networks/network/openroadm-network"
271 response = test_utils.get_request(url)
272 self.assertEqual(response.status_code, requests.codes.ok)
273 res = response.json()
274 self.assertNotIn('node', res['network'][0])
276 def test_11_getNodes_OpenRoadmTopology(self):
277 url = "{}/config/ietf-network:networks/network/openroadm-topology"
278 response = test_utils.get_request(url)
279 res = response.json()
280 self.assertNotIn('node', res['network'][0])
282 def test_12_getNodes_OtnTopology(self):
283 url = "{}/config/ietf-network:networks/network/otn-topology"
284 response = test_utils.get_request(url)
285 res = response.json()
286 self.assertNotIn('node', res['network'][0])
289 if __name__ == "__main__":
290 unittest.main(verbosity=2)