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