3 #############################################################################
4 # Copyright (c) 2017 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 #############################################################################
12 # pylint: disable=no-member
13 # pylint: disable=too-many-public-methods
19 sys.path.append('transportpce_tests/common/')
23 class TransportPCERendererTesting(unittest.TestCase):
26 NODE_VERSION = '1.2.1'
30 cls.processes = test_utils.start_tpce()
31 cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION), ('roadma', cls.NODE_VERSION)])
34 def tearDownClass(cls):
35 # pylint: disable=not-an-iterable
36 for process in cls.processes:
37 test_utils.shutdown_process(process)
38 print("all processes killed")
41 print("execution of {}".format(self.id().split(".")[-1]))
44 def test_01_rdm_device_connected(self):
45 response = test_utils.mount_device("ROADMA01", ('roadma', self.NODE_VERSION))
46 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
48 def test_02_xpdr_device_connected(self):
49 response = test_utils.mount_device("XPDRA01", ('xpdra', self.NODE_VERSION))
50 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
52 def test_03_rdm_portmapping(self):
53 response = test_utils.portmapping_request("ROADMA01")
54 self.assertEqual(response.status_code, requests.codes.ok)
57 {'supporting-port': 'L1', 'supporting-circuit-pack-name': '2/0',
58 'logical-connection-point': 'DEG1-TTP-TXRX', 'port-direction': 'bidirectional',
59 'port-admin-state': 'InService', 'port-oper-state': 'InService'},
60 res['nodes'][0]['mapping'])
62 {'supporting-port': 'C7', 'supporting-circuit-pack-name': '4/0',
63 'logical-connection-point': 'SRG1-PP7-TXRX', 'port-direction': 'bidirectional',
64 'port-admin-state': 'InService', 'port-oper-state': 'InService'},
65 res['nodes'][0]['mapping'])
67 def test_04_xpdr_portmapping(self):
68 response = test_utils.portmapping_request("XPDRA01")
69 self.assertEqual(response.status_code, requests.codes.ok)
72 {'supporting-port': '1', 'supporting-circuit-pack-name': '1/0/1-PLUG-NET',
73 'logical-connection-point': 'XPDR1-NETWORK1', 'port-direction': 'bidirectional',
74 'connection-map-lcp': 'XPDR1-CLIENT1', 'port-qual': 'xpdr-network',
75 'lcp-hash-val': 'OSvMgUyP+mE=',
76 'port-admin-state': 'InService', 'port-oper-state': 'InService'},
77 res['nodes'][0]['mapping'])
79 {'supporting-port': 'C1',
80 'supporting-circuit-pack-name': '1/0/C1-PLUG-CLIENT',
81 'logical-connection-point': 'XPDR1-CLIENT1', 'port-direction': 'bidirectional',
82 'connection-map-lcp': 'XPDR1-NETWORK1', 'port-qual': 'xpdr-client',
83 'lcp-hash-val': 'AO9UFkY/TLYw',
84 'port-admin-state': 'InService', 'port-oper-state': 'InService'},
85 res['nodes'][0]['mapping'])
87 def test_05_service_path_create(self):
88 response = test_utils.service_path_request("create", "service_test", "7",
89 [{"renderer:node-id": "ROADMA01",
90 "renderer:src-tp": "SRG1-PP7-TXRX",
91 "renderer:dest-tp": "DEG1-TTP-TXRX"},
92 {"renderer:node-id": "XPDRA01",
93 "renderer:src-tp": "XPDR1-CLIENT1",
94 "renderer:dest-tp": "XPDR1-NETWORK1"}],
95 195.8, 40, 195.775, 195.825, 713,
97 print(response.json())
98 self.assertEqual(response.status_code, requests.codes.ok)
100 self.assertIn('Roadm-connection successfully created for nodes: ROADMA01', res["output"]["result"])
102 def test_06_service_path_create_rdm_check(self):
103 response = test_utils.check_netconf_node_request("ROADMA01", "interface/DEG1-TTP-TXRX-713:720")
104 self.assertEqual(response.status_code, requests.codes.ok)
105 res = response.json()
106 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
107 self.assertDictEqual(
109 'name': 'DEG1-TTP-TXRX-713:720',
110 'administrative-state': 'inService',
111 'supporting-circuit-pack-name': '2/0',
112 'type': 'org-openroadm-interfaces:opticalChannel',
113 'supporting-port': 'L1'
114 }, **res['interface'][0]),
117 self.assertDictEqual(
118 {'wavelength-number': 7},
119 res['interface'][0]['org-openroadm-optical-channel-interfaces:och'])
121 def test_07_service_path_create_rdm_check(self):
122 response = test_utils.check_netconf_node_request("ROADMA01", "interface/SRG1-PP7-TXRX-713:720")
123 self.assertEqual(response.status_code, requests.codes.ok)
124 res = response.json()
125 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
126 self.assertDictEqual(
128 'name': 'SRG1-PP7-TXRX-713:720',
129 'administrative-state': 'inService',
130 'supporting-circuit-pack-name': '4/0',
131 'type': 'org-openroadm-interfaces:opticalChannel',
132 'supporting-port': 'C7'
133 }, **res['interface'][0]),
136 self.assertDictEqual(
137 {'wavelength-number': 7},
138 res['interface'][0]['org-openroadm-optical-channel-interfaces:och'])
140 def test_08_service_path_create_rdm_check(self):
141 response = test_utils.check_netconf_node_request(
142 "ROADMA01", "roadm-connections/SRG1-PP7-TXRX-DEG1-TTP-TXRX-713:720")
143 self.assertEqual(response.status_code, requests.codes.ok)
144 res = response.json()
145 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
146 self.assertDictEqual(
148 'connection-number': 'SRG1-PP7-TXRX-DEG1-TTP-TXRX-713:720',
149 'wavelength-number': 7,
150 'opticalControlMode': 'off'
151 }, **res['roadm-connections'][0]),
152 res['roadm-connections'][0]
154 self.assertDictEqual(
155 {'src-if': 'SRG1-PP7-TXRX-713:720'},
156 res['roadm-connections'][0]['source'])
157 self.assertDictEqual(
158 {'dst-if': 'DEG1-TTP-TXRX-713:720'},
159 res['roadm-connections'][0]['destination'])
161 def test_09_service_path_create_xpdr_check(self):
162 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-NETWORK1-713:720")
163 self.assertEqual(response.status_code, requests.codes.ok)
164 res = response.json()
165 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
166 self.assertDictEqual(
168 'name': 'XPDR1-NETWORK1-713:720',
169 'administrative-state': 'inService',
170 'supporting-circuit-pack-name': '1/0/1-PLUG-NET',
171 'type': 'org-openroadm-interfaces:opticalChannel',
172 'supporting-port': '1'
173 }, **res['interface'][0]),
176 self.assertDictEqual(
177 {u'rate': u'org-openroadm-optical-channel-interfaces:R100G',
178 u'transmit-power': -5,
179 u'wavelength-number': 7,
180 u'modulation-format': u'dp-qpsk'},
181 res['interface'][0]['org-openroadm-optical-channel-interfaces:och'])
183 def test_10_service_path_create_xpdr_check(self):
184 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-NETWORK1-OTU")
185 self.assertEqual(response.status_code, requests.codes.ok)
186 res = response.json()
187 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
188 self.assertDictEqual(
190 'name': 'XPDR1-NETWORK1-OTU',
191 'administrative-state': 'inService',
192 'supporting-circuit-pack-name': '1/0/1-PLUG-NET',
193 'type': 'org-openroadm-interfaces:otnOtu',
194 'supporting-port': '1',
195 'supporting-interface': 'XPDR1-NETWORK1-713:720'
196 }, **res['interface'][0]),
199 self.assertDictEqual(
200 {u'rate': u'org-openroadm-otn-otu-interfaces:OTU4',
202 res['interface'][0]['org-openroadm-otn-otu-interfaces:otu'])
204 def test_11_service_path_create_xpdr_check(self):
205 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-NETWORK1-ODU")
206 self.assertEqual(response.status_code, requests.codes.ok)
207 res = response.json()
208 # the 2 following statements replace self.assertDictContainsSubset deprecated in python 3.2
209 self.assertDictEqual(
211 'name': 'XPDR1-NETWORK1-ODU',
212 'administrative-state': 'inService',
213 'supporting-circuit-pack-name': '1/0/1-PLUG-NET',
214 'type': 'org-openroadm-interfaces:otnOdu',
215 'supporting-port': '1',
216 'supporting-interface': 'XPDR1-NETWORK1-OTU'
217 }, **res['interface'][0]),
220 self.assertDictEqual(
222 'rate': 'org-openroadm-otn-odu-interfaces:ODU4',
223 u'monitoring-mode': u'terminated'
224 }, **res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
225 res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']
227 self.assertDictEqual({u'exp-payload-type': u'07', u'payload-type': u'07'},
228 res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
230 def test_12_service_path_create_xpdr_check(self):
231 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-CLIENT1-ETHERNET")
232 self.assertEqual(response.status_code, requests.codes.ok)
233 res = response.json()
234 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
235 self.assertDictEqual(
237 'name': 'XPDR1-CLIENT1-ETHERNET',
238 'administrative-state': 'inService',
239 'supporting-circuit-pack-name': '1/0/C1-PLUG-CLIENT',
240 'type': 'org-openroadm-interfaces:ethernetCsmacd',
241 'supporting-port': 'C1'
242 }, **res['interface'][0]),
245 self.assertDictEqual(
248 'auto-negotiation': 'enabled',
251 res['interface'][0]['org-openroadm-ethernet-interfaces:ethernet'])
253 def test_13_service_path_create_xpdr_check(self):
254 response = test_utils.check_netconf_node_request("XPDRA01", "circuit-packs/1%2F0%2F1-PLUG-NET")
255 self.assertEqual(response.status_code, requests.codes.ok)
256 res = response.json()
257 self.assertIn('not-reserved-inuse', res['circuit-packs'][0]["equipment-state"])
259 def test_14_service_path_delete(self):
260 response = test_utils.service_path_request("delete", "service_test", "7",
261 [{"renderer:node-id": "ROADMA01",
262 "renderer:src-tp": "SRG1-PP7-TXRX",
263 "renderer:dest-tp": "DEG1-TTP-TXRX"},
264 {"renderer:node-id": "XPDRA01",
265 "renderer:src-tp": "XPDR1-CLIENT1",
266 "renderer:dest-tp": "XPDR1-NETWORK1"}],
267 195.8, 40, 195.775, 195.825, 713,
269 self.assertEqual(response.status_code, requests.codes.ok)
270 self.assertEqual(response.json(), {
271 'output': {'result': 'Request processed', 'success': True}})
273 def test_15_service_path_delete_rdm_check(self):
274 response = test_utils.check_netconf_node_request("ROADMA01", "interface/DEG1-TTP-TXRX-713:720")
275 self.assertEqual(response.status_code, requests.codes.conflict)
276 res = response.json()
278 {"error-type": "application", "error-tag": "data-missing",
279 "error-message": "Request could not be completed because the relevant data model content does not exist"},
280 res['errors']['error'])
282 def test_16_service_path_delete_rdm_check(self):
283 response = test_utils.check_netconf_node_request("ROADMA01", "interface/SRG1-PP7-TXRX-713:720")
284 self.assertEqual(response.status_code, requests.codes.conflict)
285 res = response.json()
287 {"error-type": "application", "error-tag": "data-missing",
289 "Request could not be completed because the relevant data model content does not exist"},
290 res['errors']['error'])
292 def test_17_service_path_delete_rdm_check(self):
293 response = test_utils.check_netconf_node_request(
294 "ROADMA01", "roadm-connections/SRG1-PP7-TXRX-DEG1-TTP-TXRX-713:720")
295 self.assertEqual(response.status_code, requests.codes.conflict)
296 res = response.json()
298 {"error-type": "application", "error-tag": "data-missing",
300 "Request could not be completed because the relevant data model content does not exist"},
301 res['errors']['error'])
303 def test_18_service_path_delete_xpdr_check(self):
304 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-NETWORK1-713:720")
305 self.assertEqual(response.status_code, requests.codes.conflict)
306 res = response.json()
308 {"error-type": "application", "error-tag": "data-missing",
310 "Request could not be completed because the relevant data model content does not exist"},
311 res['errors']['error'])
313 def test_19_service_path_delete_xpdr_check(self):
314 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-NETWORK1-OTU")
315 self.assertEqual(response.status_code, requests.codes.conflict)
316 res = response.json()
318 {"error-type": "application", "error-tag": "data-missing",
320 "Request could not be completed because the relevant data model content does not exist"},
321 res['errors']['error'])
323 def test_20_service_path_delete_xpdr_check(self):
324 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-NETWORK1-ODU")
325 self.assertEqual(response.status_code, requests.codes.conflict)
326 res = response.json()
328 {"error-type": "application", "error-tag": "data-missing",
330 "Request could not be completed because the relevant data model content does not exist"},
331 res['errors']['error'])
333 def test_21_service_path_delete_xpdr_check(self):
334 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-CLIENT1-ETHERNET")
335 self.assertEqual(response.status_code, requests.codes.conflict)
336 res = response.json()
338 {"error-type": "application", "error-tag": "data-missing",
340 "Request could not be completed because the relevant data model content does not exist"},
341 res['errors']['error'])
343 def test_22_service_path_delete_xpdr_check(self):
344 response = test_utils.check_netconf_node_request("XPDRA01", "circuit-packs/1%2F0%2F1-PLUG-NET")
345 self.assertEqual(response.status_code, requests.codes.ok)
346 res = response.json()
347 self.assertEqual('not-reserved-available', res["circuit-packs"][0]['equipment-state'])
349 def test_23_rdm_device_disconnected(self):
350 response = test_utils.unmount_device("ROADMA01")
351 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
353 def test_24_xpdr_device_disconnected(self):
354 response = test_utils.unmount_device("XPDRA01")
355 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
358 if __name__ == "__main__":
359 unittest.main(verbosity=2, failfast=False)