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