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
18 from common import test_utils
21 class TransportPCERendererTesting(unittest.TestCase):
27 cls.processes = test_utils.start_tpce()
28 cls.processes = test_utils.start_sims(['xpdra', 'roadma'])
31 def tearDownClass(cls):
32 for process in cls.processes:
33 test_utils.shutdown_process(process)
34 print("all processes killed")
37 print("execution of {}".format(self.id().split(".")[-1]))
40 def test_01_rdm_device_connected(self):
41 response = test_utils.mount_device("ROADMA01", 'roadma')
42 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
44 def test_02_xpdr_device_connected(self):
45 response = test_utils.mount_device("XPDRA01", 'xpdra')
46 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
48 def test_03_rdm_portmapping(self):
49 response = test_utils.portmapping_request("ROADMA01")
50 self.assertEqual(response.status_code, requests.codes.ok)
53 {'supporting-port': 'L1', 'supporting-circuit-pack-name': '2/0',
54 'logical-connection-point': 'DEG1-TTP-TXRX', 'port-direction': 'bidirectional'},
55 res['nodes'][0]['mapping'])
57 {'supporting-port': 'C7', 'supporting-circuit-pack-name': '4/0',
58 'logical-connection-point': 'SRG1-PP7-TXRX', 'port-direction': 'bidirectional'},
59 res['nodes'][0]['mapping'])
61 def test_04_xpdr_portmapping(self):
62 response = test_utils.portmapping_request("XPDRA01")
63 self.assertEqual(response.status_code, requests.codes.ok)
66 {'supporting-port': '1', 'supporting-circuit-pack-name': '1/0/1-PLUG-NET',
67 'logical-connection-point': 'XPDR1-NETWORK1', 'port-direction': 'bidirectional',
68 'connection-map-lcp': 'XPDR1-CLIENT1', 'port-qual': 'xpdr-network',
69 'lcp-hash-val': 'OSvMgUyP+mE='},
70 res['nodes'][0]['mapping'])
72 {'supporting-port': 'C1',
73 'supporting-circuit-pack-name': '1/0/C1-PLUG-CLIENT',
74 'logical-connection-point': 'XPDR1-CLIENT1', 'port-direction': 'bidirectional',
75 'connection-map-lcp': 'XPDR1-NETWORK1', 'port-qual': 'xpdr-client',
76 'lcp-hash-val': 'AO9UFkY/TLYw'},
77 res['nodes'][0]['mapping'])
79 def test_05_service_path_create(self):
80 response = test_utils.service_path_request("create", "service_test", "7",
81 [{"renderer:node-id": "ROADMA01",
82 "renderer:src-tp": "SRG1-PP7-TXRX", "renderer:dest-tp": "DEG1-TTP-TXRX"},
83 {"renderer:node-id": "XPDRA01",
84 "renderer:src-tp": "XPDR1-CLIENT1", "renderer:dest-tp": "XPDR1-NETWORK1"}])
85 self.assertEqual(response.status_code, requests.codes.ok)
87 self.assertIn('Roadm-connection successfully created for nodes: ROADMA01', res["output"]["result"])
89 def test_06_service_path_create_rdm_check(self):
90 response = test_utils.check_netconf_node_request("ROADMA01", "interface/DEG1-TTP-TXRX-7")
91 self.assertEqual(response.status_code, requests.codes.ok)
93 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
96 'name': 'DEG1-TTP-TXRX-7',
97 'administrative-state': 'inService',
98 'supporting-circuit-pack-name': '2/0',
99 'type': 'org-openroadm-interfaces:opticalChannel',
100 'supporting-port': 'L1'
101 }, **res['interface'][0]),
104 self.assertDictEqual(
105 {'wavelength-number': 7},
106 res['interface'][0]['org-openroadm-optical-channel-interfaces:och'])
108 def test_07_service_path_create_rdm_check(self):
109 response = test_utils.check_netconf_node_request("ROADMA01", "interface/SRG1-PP7-TXRX-7")
110 self.assertEqual(response.status_code, requests.codes.ok)
111 res = response.json()
112 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
113 self.assertDictEqual(
115 'name': 'SRG1-PP7-TXRX-7',
116 'administrative-state': 'inService',
117 'supporting-circuit-pack-name': '4/0',
118 'type': 'org-openroadm-interfaces:opticalChannel',
119 'supporting-port': 'C7'
120 }, **res['interface'][0]),
123 self.assertDictEqual(
124 {'wavelength-number': 7},
125 res['interface'][0]['org-openroadm-optical-channel-interfaces:och'])
127 def test_08_service_path_create_rdm_check(self):
128 response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP7-TXRX-DEG1-TTP-TXRX-7")
129 self.assertEqual(response.status_code, requests.codes.ok)
130 res = response.json()
131 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
132 self.assertDictEqual(
134 'connection-number': 'SRG1-PP7-TXRX-DEG1-TTP-TXRX-7',
135 'wavelength-number': 7,
136 'opticalControlMode': 'off'
137 }, **res['roadm-connections'][0]),
138 res['roadm-connections'][0]
140 self.assertDictEqual(
141 {'src-if': 'SRG1-PP7-TXRX-7'},
142 res['roadm-connections'][0]['source'])
143 self.assertDictEqual(
144 {'dst-if': 'DEG1-TTP-TXRX-7'},
145 res['roadm-connections'][0]['destination'])
147 def test_09_service_path_create_xpdr_check(self):
148 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-NETWORK1-7")
149 self.assertEqual(response.status_code, requests.codes.ok)
150 res = response.json()
151 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
152 self.assertDictEqual(
154 'name': 'XPDR1-NETWORK1-7',
155 'administrative-state': 'inService',
156 'supporting-circuit-pack-name': '1/0/1-PLUG-NET',
157 'type': 'org-openroadm-interfaces:opticalChannel',
158 'supporting-port': '1'
159 }, **res['interface'][0]),
162 self.assertDictEqual(
163 {u'rate': u'org-openroadm-optical-channel-interfaces:R100G',
164 u'transmit-power': -5,
165 u'wavelength-number': 7,
166 u'modulation-format': u'dp-qpsk'},
167 res['interface'][0]['org-openroadm-optical-channel-interfaces:och'])
169 def test_10_service_path_create_xpdr_check(self):
170 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-NETWORK1-OTU")
171 self.assertEqual(response.status_code, requests.codes.ok)
172 res = response.json()
173 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
174 self.assertDictEqual(
176 'name': 'XPDR1-NETWORK1-OTU',
177 'administrative-state': 'inService',
178 'supporting-circuit-pack-name': '1/0/1-PLUG-NET',
179 'type': 'org-openroadm-interfaces:otnOtu',
180 'supporting-port': '1',
181 'supporting-interface': 'XPDR1-NETWORK1-7'
182 }, **res['interface'][0]),
185 self.assertDictEqual(
186 {u'rate': u'org-openroadm-otn-otu-interfaces:OTU4',
188 res['interface'][0]['org-openroadm-otn-otu-interfaces:otu'])
190 def test_11_service_path_create_xpdr_check(self):
191 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-NETWORK1-ODU")
192 self.assertEqual(response.status_code, requests.codes.ok)
193 res = response.json()
194 # the 2 following statements replace self.assertDictContainsSubset deprecated in python 3.2
195 self.assertDictEqual(
197 'name': 'XPDR1-NETWORK1-ODU',
198 'administrative-state': 'inService',
199 'supporting-circuit-pack-name': '1/0/1-PLUG-NET',
200 'type': 'org-openroadm-interfaces:otnOdu',
201 'supporting-port': '1',
202 'supporting-interface': 'XPDR1-NETWORK1-OTU'
203 }, **res['interface'][0]),
206 self.assertDictEqual(
208 'rate': 'org-openroadm-otn-odu-interfaces:ODU4',
209 u'monitoring-mode': u'terminated'
210 }, **res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
211 res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']
213 self.assertDictEqual({u'exp-payload-type': u'07', u'payload-type': u'07'},
214 res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
216 def test_12_service_path_create_xpdr_check(self):
217 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-CLIENT1-ETHERNET")
218 self.assertEqual(response.status_code, requests.codes.ok)
219 res = response.json()
220 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
221 self.assertDictEqual(
223 'name': 'XPDR1-CLIENT1-ETHERNET',
224 'administrative-state': 'inService',
225 'supporting-circuit-pack-name': '1/0/C1-PLUG-CLIENT',
226 'type': 'org-openroadm-interfaces:ethernetCsmacd',
227 'supporting-port': 'C1'
228 }, **res['interface'][0]),
231 self.assertDictEqual(
234 'auto-negotiation': 'enabled',
237 res['interface'][0]['org-openroadm-ethernet-interfaces:ethernet'])
239 def test_13_service_path_create_xpdr_check(self):
240 response = test_utils.check_netconf_node_request("XPDRA01", "circuit-packs/1%2F0%2F1-PLUG-NET")
241 self.assertEqual(response.status_code, requests.codes.ok)
242 res = response.json()
243 self.assertIn('not-reserved-inuse', res['circuit-packs'][0]["equipment-state"])
245 def test_14_service_path_delete(self):
246 response = test_utils.service_path_request("delete", "service_test", "7",
247 [{"renderer:node-id": "ROADMA01",
248 "renderer:src-tp": "SRG1-PP7-TXRX", "renderer:dest-tp": "DEG1-TTP-TXRX"},
249 {"renderer:node-id": "XPDRA01",
250 "renderer:src-tp": "XPDR1-CLIENT1", "renderer:dest-tp": "XPDR1-NETWORK1"}])
251 self.assertEqual(response.status_code, requests.codes.ok)
252 self.assertEqual(response.json(), {
253 'output': {'result': 'Request processed', 'success': True}})
255 def test_15_service_path_delete_rdm_check(self):
256 response = test_utils.check_netconf_node_request("ROADMA01", "interface/DEG1-TTP-TXRX-7")
257 self.assertEqual(response.status_code, requests.codes.conflict)
258 res = response.json()
260 {"error-type": "application", "error-tag": "data-missing",
261 "error-message": "Request could not be completed because the relevant data model content does not exist"},
262 res['errors']['error'])
264 def test_16_service_path_delete_rdm_check(self):
265 response = test_utils.check_netconf_node_request("ROADMA01", "interface/SRG1-PP7-TXRX-7")
266 self.assertEqual(response.status_code, requests.codes.conflict)
267 res = response.json()
269 {"error-type": "application", "error-tag": "data-missing",
270 "error-message": "Request could not be completed because the relevant data model content does not exist"},
271 res['errors']['error'])
273 def test_17_service_path_delete_rdm_check(self):
274 response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP7-TXRX-DEG1-TTP-TXRX-7")
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_18_service_path_delete_xpdr_check(self):
283 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-NETWORK1-7")
284 self.assertEqual(response.status_code, requests.codes.conflict)
285 res = response.json()
287 {"error-type": "application", "error-tag": "data-missing",
288 "error-message": "Request could not be completed because the relevant data model content does not exist"},
289 res['errors']['error'])
291 def test_19_service_path_delete_xpdr_check(self):
292 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-NETWORK1-OTU")
293 self.assertEqual(response.status_code, requests.codes.conflict)
294 res = response.json()
296 {"error-type": "application", "error-tag": "data-missing",
297 "error-message": "Request could not be completed because the relevant data model content does not exist"},
298 res['errors']['error'])
300 def test_20_service_path_delete_xpdr_check(self):
301 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-NETWORK1-ODU")
302 self.assertEqual(response.status_code, requests.codes.conflict)
303 res = response.json()
305 {"error-type": "application", "error-tag": "data-missing",
306 "error-message": "Request could not be completed because the relevant data model content does not exist"},
307 res['errors']['error'])
309 def test_21_service_path_delete_xpdr_check(self):
310 response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-CLIENT1-ETHERNET")
311 self.assertEqual(response.status_code, requests.codes.conflict)
312 res = response.json()
314 {"error-type": "application", "error-tag": "data-missing",
315 "error-message": "Request could not be completed because the relevant data model content does not exist"},
316 res['errors']['error'])
318 def test_22_service_path_delete_xpdr_check(self):
319 response = test_utils.check_netconf_node_request("XPDRA01", "circuit-packs/1%2F0%2F1-PLUG-NET")
320 self.assertEqual(response.status_code, requests.codes.ok)
321 res = response.json()
322 self.assertEqual('not-reserved-available', res["circuit-packs"][0]['equipment-state'])
324 def test_23_rdm_device_disconnected(self):
325 response = test_utils.unmount_device("ROADMA01")
326 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
328 def test_24_xpdr_device_disconnected(self):
329 response = test_utils.unmount_device("XPDRA01")
330 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
333 if __name__ == "__main__":
334 unittest.main(verbosity=2, failfast=False)