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 from common import test_utils
22 class TransportPCERendererTesting(unittest.TestCase):
28 cls.processes = test_utils.start_tpce()
29 cls.processes = test_utils.start_sims(['xpdra', 'roadma'])
32 def tearDownClass(cls):
33 for process in cls.processes:
34 test_utils.shutdown_process(process)
35 print("all processes killed")
38 print("execution of {}".format(self.id().split(".")[-1]))
41 def test_01_rdm_device_connected(self):
42 response = test_utils.mount_device("ROADMA01", 'roadma')
43 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
45 def test_02_xpdr_device_connected(self):
46 response = test_utils.mount_device("XPDRA01", 'xpdra')
47 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
49 def test_03_rdm_portmapping(self):
50 response = test_utils.portmapping_request("ROADMA01")
51 self.assertEqual(response.status_code, requests.codes.ok)
54 {'supporting-port': 'L1', 'supporting-circuit-pack-name': '2/0',
55 'logical-connection-point': 'DEG1-TTP-TXRX', 'port-direction': 'bidirectional'},
56 res['nodes'][0]['mapping'])
58 {'supporting-port': 'C7', 'supporting-circuit-pack-name': '4/0',
59 'logical-connection-point': 'SRG1-PP7-TXRX', 'port-direction': 'bidirectional'},
60 res['nodes'][0]['mapping'])
62 def test_04_xpdr_portmapping(self):
63 response = test_utils.portmapping_request("XPDRA01")
64 self.assertEqual(response.status_code, requests.codes.ok)
67 {'supporting-port': '1', 'supporting-circuit-pack-name': '1/0/1-PLUG-NET',
68 'logical-connection-point': 'XPDR1-NETWORK1', 'port-direction': 'bidirectional',
69 'connection-map-lcp': 'XPDR1-CLIENT1', 'port-qual': 'xpdr-network',
70 'lcp-hash-val': 'OSvMgUyP+mE='},
71 res['nodes'][0]['mapping'])
73 {'supporting-port': 'C1',
74 'supporting-circuit-pack-name': '1/0/C1-PLUG-CLIENT',
75 'logical-connection-point': 'XPDR1-CLIENT1', 'port-direction': 'bidirectional',
76 'connection-map-lcp': 'XPDR1-NETWORK1', 'port-qual': 'xpdr-client',
77 'lcp-hash-val': 'AO9UFkY/TLYw'},
78 res['nodes'][0]['mapping'])
80 def test_05_service_path_create(self):
81 response = test_utils.service_path_request("create", "service_test", "7",
82 [{"renderer:node-id": "ROADMA01",
83 "renderer:src-tp": "SRG1-PP7-TXRX", "renderer:dest-tp": "DEG1-TTP-TXRX"},
84 {"renderer:node-id": "XPDRA01",
85 "renderer:src-tp": "XPDR1-CLIENT1", "renderer:dest-tp": "XPDR1-NETWORK1"}])
86 self.assertEqual(response.status_code, requests.codes.ok)
88 self.assertIn('Roadm-connection successfully created for nodes: ROADMA01', res["output"]["result"])
90 def test_06_service_path_create_rdm_check(self):
91 response = test_utils.check_netconf_node_request("ROADMA01", "interface/DEG1-TTP-TXRX-7")
92 self.assertEqual(response.status_code, requests.codes.ok)
94 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
97 'name': 'DEG1-TTP-TXRX-7',
98 'administrative-state': 'inService',
99 'supporting-circuit-pack-name': '2/0',
100 'type': 'org-openroadm-interfaces:opticalChannel',
101 'supporting-port': 'L1'
102 }, **res['interface'][0]),
105 self.assertDictEqual(
106 {'wavelength-number': 7},
107 res['interface'][0]['org-openroadm-optical-channel-interfaces:och'])
109 def test_07_service_path_create_rdm_check(self):
110 response = test_utils.check_netconf_node_request("ROADMA01", "interface/SRG1-PP7-TXRX-7")
111 self.assertEqual(response.status_code, requests.codes.ok)
112 res = response.json()
113 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
114 self.assertDictEqual(
116 'name': 'SRG1-PP7-TXRX-7',
117 'administrative-state': 'inService',
118 'supporting-circuit-pack-name': '4/0',
119 'type': 'org-openroadm-interfaces:opticalChannel',
120 'supporting-port': 'C7'
121 }, **res['interface'][0]),
124 self.assertDictEqual(
125 {'wavelength-number': 7},
126 res['interface'][0]['org-openroadm-optical-channel-interfaces:och'])
128 def test_08_service_path_create_rdm_check(self):
129 response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP7-TXRX-DEG1-TTP-TXRX-7")
130 self.assertEqual(response.status_code, requests.codes.ok)
131 res = response.json()
132 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
133 self.assertDictEqual(
135 'connection-number': 'SRG1-PP7-TXRX-DEG1-TTP-TXRX-7',
136 'wavelength-number': 7,
137 'opticalControlMode': 'off'
138 }, **res['roadm-connections'][0]),
139 res['roadm-connections'][0]
141 self.assertDictEqual(
142 {'src-if': 'SRG1-PP7-TXRX-7'},
143 res['roadm-connections'][0]['source'])
144 self.assertDictEqual(
145 {'dst-if': 'DEG1-TTP-TXRX-7'},
146 res['roadm-connections'][0]['destination'])
148 def test_09_service_path_create_xpdr_check(self):
149 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-NETWORK1-7")
150 self.assertEqual(response.status_code, requests.codes.ok)
151 res = response.json()
152 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
153 self.assertDictEqual(
155 'name': 'XPDR1-NETWORK1-7',
156 'administrative-state': 'inService',
157 'supporting-circuit-pack-name': '1/0/1-PLUG-NET',
158 'type': 'org-openroadm-interfaces:opticalChannel',
159 'supporting-port': '1'
160 }, **res['interface'][0]),
163 self.assertDictEqual(
164 {u'rate': u'org-openroadm-optical-channel-interfaces:R100G',
165 u'transmit-power': -5,
166 u'wavelength-number': 7,
167 u'modulation-format': u'dp-qpsk'},
168 res['interface'][0]['org-openroadm-optical-channel-interfaces:och'])
170 def test_10_service_path_create_xpdr_check(self):
171 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-NETWORK1-OTU")
172 self.assertEqual(response.status_code, requests.codes.ok)
173 res = response.json()
174 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
175 self.assertDictEqual(
177 'name': 'XPDR1-NETWORK1-OTU',
178 'administrative-state': 'inService',
179 'supporting-circuit-pack-name': '1/0/1-PLUG-NET',
180 'type': 'org-openroadm-interfaces:otnOtu',
181 'supporting-port': '1',
182 'supporting-interface': 'XPDR1-NETWORK1-7'
183 }, **res['interface'][0]),
186 self.assertDictEqual(
187 {u'rate': u'org-openroadm-otn-otu-interfaces:OTU4',
189 res['interface'][0]['org-openroadm-otn-otu-interfaces:otu'])
191 def test_11_service_path_create_xpdr_check(self):
192 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-NETWORK1-ODU")
193 self.assertEqual(response.status_code, requests.codes.ok)
194 res = response.json()
195 # the 2 following statements replace self.assertDictContainsSubset deprecated in python 3.2
196 self.assertDictEqual(
198 'name': 'XPDR1-NETWORK1-ODU',
199 'administrative-state': 'inService',
200 'supporting-circuit-pack-name': '1/0/1-PLUG-NET',
201 'type': 'org-openroadm-interfaces:otnOdu',
202 'supporting-port': '1',
203 'supporting-interface': 'XPDR1-NETWORK1-OTU'
204 }, **res['interface'][0]),
207 self.assertDictEqual(
209 'rate': 'org-openroadm-otn-odu-interfaces:ODU4',
210 u'monitoring-mode': u'terminated'
211 }, **res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
212 res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']
214 self.assertDictEqual({u'exp-payload-type': u'07', u'payload-type': u'07'},
215 res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
217 def test_12_service_path_create_xpdr_check(self):
218 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-CLIENT1-ETHERNET")
219 self.assertEqual(response.status_code, requests.codes.ok)
220 res = response.json()
221 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
222 self.assertDictEqual(
224 'name': 'XPDR1-CLIENT1-ETHERNET',
225 'administrative-state': 'inService',
226 'supporting-circuit-pack-name': '1/0/C1-PLUG-CLIENT',
227 'type': 'org-openroadm-interfaces:ethernetCsmacd',
228 'supporting-port': 'C1'
229 }, **res['interface'][0]),
232 self.assertDictEqual(
235 'auto-negotiation': 'enabled',
238 res['interface'][0]['org-openroadm-ethernet-interfaces:ethernet'])
240 def test_13_service_path_create_xpdr_check(self):
241 response = test_utils.check_netconf_node_request("XPDRA01", "circuit-packs/1%2F0%2F1-PLUG-NET")
242 self.assertEqual(response.status_code, requests.codes.ok)
243 res = response.json()
244 self.assertIn('not-reserved-inuse', res['circuit-packs'][0]["equipment-state"])
246 def test_14_service_path_delete(self):
247 response = test_utils.service_path_request("delete", "service_test", "7",
248 [{"renderer:node-id": "ROADMA01",
249 "renderer:src-tp": "SRG1-PP7-TXRX", "renderer:dest-tp": "DEG1-TTP-TXRX"},
250 {"renderer:node-id": "XPDRA01",
251 "renderer:src-tp": "XPDR1-CLIENT1", "renderer:dest-tp": "XPDR1-NETWORK1"}])
252 self.assertEqual(response.status_code, requests.codes.ok)
253 self.assertEqual(response.json(), {
254 'output': {'result': 'Request processed', 'success': True}})
256 def test_15_service_path_delete_rdm_check(self):
257 response = test_utils.check_netconf_node_request("ROADMA01", "interface/DEG1-TTP-TXRX-7")
258 self.assertEqual(response.status_code, requests.codes.conflict)
259 res = response.json()
261 {"error-type": "application", "error-tag": "data-missing",
262 "error-message": "Request could not be completed because the relevant data model content does not exist"},
263 res['errors']['error'])
265 def test_16_service_path_delete_rdm_check(self):
266 response = test_utils.check_netconf_node_request("ROADMA01", "interface/SRG1-PP7-TXRX-7")
267 self.assertEqual(response.status_code, requests.codes.conflict)
268 res = response.json()
270 {"error-type": "application", "error-tag": "data-missing",
271 "error-message": "Request could not be completed because the relevant data model content does not exist"},
272 res['errors']['error'])
274 def test_17_service_path_delete_rdm_check(self):
275 response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP7-TXRX-DEG1-TTP-TXRX-7")
276 self.assertEqual(response.status_code, requests.codes.conflict)
277 res = response.json()
279 {"error-type": "application", "error-tag": "data-missing",
280 "error-message": "Request could not be completed because the relevant data model content does not exist"},
281 res['errors']['error'])
283 def test_18_service_path_delete_xpdr_check(self):
284 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-NETWORK1-7")
285 self.assertEqual(response.status_code, requests.codes.conflict)
286 res = response.json()
288 {"error-type": "application", "error-tag": "data-missing",
289 "error-message": "Request could not be completed because the relevant data model content does not exist"},
290 res['errors']['error'])
292 def test_19_service_path_delete_xpdr_check(self):
293 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-NETWORK1-OTU")
294 self.assertEqual(response.status_code, requests.codes.conflict)
295 res = response.json()
297 {"error-type": "application", "error-tag": "data-missing",
298 "error-message": "Request could not be completed because the relevant data model content does not exist"},
299 res['errors']['error'])
301 def test_20_service_path_delete_xpdr_check(self):
302 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-NETWORK1-ODU")
303 self.assertEqual(response.status_code, requests.codes.conflict)
304 res = response.json()
306 {"error-type": "application", "error-tag": "data-missing",
307 "error-message": "Request could not be completed because the relevant data model content does not exist"},
308 res['errors']['error'])
310 def test_21_service_path_delete_xpdr_check(self):
311 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-CLIENT1-ETHERNET")
312 self.assertEqual(response.status_code, requests.codes.conflict)
313 res = response.json()
315 {"error-type": "application", "error-tag": "data-missing",
316 "error-message": "Request could not be completed because the relevant data model content does not exist"},
317 res['errors']['error'])
319 def test_22_service_path_delete_xpdr_check(self):
320 response = test_utils.check_netconf_node_request("XPDRA01", "circuit-packs/1%2F0%2F1-PLUG-NET")
321 self.assertEqual(response.status_code, requests.codes.ok)
322 res = response.json()
323 self.assertEqual('not-reserved-available', res["circuit-packs"][0]['equipment-state'])
325 def test_23_rdm_device_disconnected(self):
326 response = test_utils.unmount_device("ROADMA01")
327 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
329 def test_24_xpdr_device_disconnected(self):
330 response = test_utils.unmount_device("XPDRA01")
331 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
334 if __name__ == "__main__":
335 unittest.main(verbosity=2, failfast=False)