Merge "Fix bug in OLM during spanloss computation"
[transportpce.git] / tests / transportpce_tests / 1.2.1 / test04_renderer_service_path_nominal.py
1 #!/usr/bin/env python
2
3 #############################################################################
4 # Copyright (c) 2017 Orange, Inc. and others.  All rights reserved.
5 #
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 #############################################################################
11
12 # pylint: disable=no-member
13 # pylint: disable=too-many-public-methods
14
15 import unittest
16 import time
17 import requests
18 import sys
19 sys.path.append('transportpce_tests/common/')
20 import test_utils
21
22
23 class TransportPCERendererTesting(unittest.TestCase):
24
25     processes = None
26     NODE_VERSION = '1.2.1'
27
28     @classmethod
29     def setUpClass(cls):
30         cls.processes = test_utils.start_tpce()
31         cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION), ('roadma', cls.NODE_VERSION)])
32
33     @classmethod
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")
39
40     def setUp(self):
41         print("execution of {}".format(self.id().split(".")[-1]))
42         time.sleep(10)
43
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)
47
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)
51
52     def test_03_rdm_portmapping(self):
53         response = test_utils.portmapping_request("ROADMA01")
54         self.assertEqual(response.status_code, requests.codes.ok)
55         res = response.json()
56         self.assertIn(
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'])
61         self.assertIn(
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'])
66
67     def test_04_xpdr_portmapping(self):
68         response = test_utils.portmapping_request("XPDRA01")
69         self.assertEqual(response.status_code, requests.codes.ok)
70         res = response.json()
71         self.assertIn(
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'])
78         self.assertIn(
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'])
86
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,
96                                                    720)
97         print(response.json())
98         self.assertEqual(response.status_code, requests.codes.ok)
99         res = response.json()
100         self.assertIn('Roadm-connection successfully created for nodes: ROADMA01', res["output"]["result"])
101
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(
108             dict({
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]),
115             res['interface'][0]
116         )
117         self.assertDictEqual(
118             {'wavelength-number': 7},
119             res['interface'][0]['org-openroadm-optical-channel-interfaces:och'])
120
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(
127             dict({
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]),
134             res['interface'][0]
135         )
136         self.assertDictEqual(
137             {'wavelength-number': 7},
138             res['interface'][0]['org-openroadm-optical-channel-interfaces:och'])
139
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(
147             dict({
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]
153         )
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'])
160
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(
167             dict({
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]),
174             res['interface'][0]
175         )
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'])
182
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(
189             dict({
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]),
197             res['interface'][0]
198         )
199         self.assertDictEqual(
200             {u'rate': u'org-openroadm-otn-otu-interfaces:OTU4',
201              u'fec': u'scfec'},
202             res['interface'][0]['org-openroadm-otn-otu-interfaces:otu'])
203
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(
210             dict({
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]),
218             res['interface'][0]
219         )
220         self.assertDictEqual(
221             dict({
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']
226         )
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'])
229
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(
236             dict({
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]),
243             res['interface'][0]
244         )
245         self.assertDictEqual(
246             {'speed': 100000,
247              'mtu': 9000,
248              'auto-negotiation': 'enabled',
249              'duplex': 'full',
250              'fec': 'off'},
251             res['interface'][0]['org-openroadm-ethernet-interfaces:ethernet'])
252
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"])
258
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,
268                                                    720)
269         self.assertEqual(response.status_code, requests.codes.ok)
270         self.assertEqual(response.json(), {
271             'output': {'result': 'Request processed', 'success': True}})
272
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()
277         self.assertIn(
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'])
281
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()
286         self.assertIn(
287             {"error-type": "application", "error-tag": "data-missing",
288                 "error-message":
289                     "Request could not be completed because the relevant data model content does not exist"},
290             res['errors']['error'])
291
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()
297         self.assertIn(
298             {"error-type": "application", "error-tag": "data-missing",
299                 "error-message":
300                     "Request could not be completed because the relevant data model content does not exist"},
301             res['errors']['error'])
302
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()
307         self.assertIn(
308             {"error-type": "application", "error-tag": "data-missing",
309                 "error-message":
310                     "Request could not be completed because the relevant data model content does not exist"},
311             res['errors']['error'])
312
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()
317         self.assertIn(
318             {"error-type": "application", "error-tag": "data-missing",
319                 "error-message":
320                     "Request could not be completed because the relevant data model content does not exist"},
321             res['errors']['error'])
322
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()
327         self.assertIn(
328             {"error-type": "application", "error-tag": "data-missing",
329                 "error-message":
330                     "Request could not be completed because the relevant data model content does not exist"},
331             res['errors']['error'])
332
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()
337         self.assertIn(
338             {"error-type": "application", "error-tag": "data-missing",
339                 "error-message":
340                     "Request could not be completed because the relevant data model content does not exist"},
341             res['errors']['error'])
342
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'])
348
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)
352
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)
356
357
358 if __name__ == "__main__":
359     unittest.main(verbosity=2, failfast=False)