41b1f65b045ee05e4a54b79ab4afd9e7e87b6358
[transportpce.git] / tests / transportpce_tests / 2.2.1 / test04_otn_topology.py
1 #!/usr/bin/env python
2
3 ##############################################################################
4 # Copyright (c) 2019 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 logging
18 import requests
19 # pylint: disable=wrong-import-order
20 import sys
21 sys.path.append('transportpce_tests/common/')
22 # pylint: disable=wrong-import-position
23 # pylint: disable=import-error
24 import test_utils  # nopep8
25
26
27 class TransportPCEtesting(unittest.TestCase):
28
29     processes = None
30     NODE_VERSION = '2.2.1'
31
32     @classmethod
33     def setUpClass(cls):
34         cls.processes = test_utils.start_tpce()
35         cls.processes = test_utils.start_sims([('spdra', cls.NODE_VERSION)])
36
37     @classmethod
38     def tearDownClass(cls):
39         # pylint: disable=not-an-iterable
40         for process in cls.processes:
41             test_utils.shutdown_process(process)
42         print("all processes killed")
43
44     def setUp(self):
45         time.sleep(5)
46
47     def test_01_connect_SPDR_SA1(self):
48         response = test_utils.mount_device("SPDR-SA1", ('spdra', self.NODE_VERSION))
49         self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
50         time.sleep(10)
51
52         response = test_utils.get_netconf_oper_request("SPDR-SA1")
53         self.assertEqual(response.status_code, requests.codes.ok)
54         res = response.json()
55         self.assertEqual(
56             res['node'][0]['netconf-node-topology:connection-status'],
57             'connected')
58
59     def test_02_getClliNetwork(self):
60         response = test_utils.get_clli_net_request()
61         self.assertEqual(response.status_code, requests.codes.ok)
62         res = response.json()
63         logging.info(res)
64         self.assertEqual(res['network'][0]['node'][0]['node-id'], 'NodeSA')
65         self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'], 'NodeSA')
66
67     def test_03_getOpenRoadmNetwork(self):
68         response = test_utils.get_ordm_net_request()
69         self.assertEqual(response.status_code, requests.codes.ok)
70         res = response.json()
71         self.assertEqual(res['network'][0]['node'][0]['node-id'], 'SPDR-SA1')
72         self.assertEqual(res['network'][0]['node'][0]['supporting-node'][0]['network-ref'], 'clli-network')
73         self.assertEqual(res['network'][0]['node'][0]['supporting-node'][0]['node-ref'], 'NodeSA')
74         self.assertEqual(res['network'][0]['node'][0]['org-openroadm-common-network:node-type'], 'XPONDER')
75         self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network:model'], 'universal-switchponder')
76         self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network:vendor'], 'vendorA')
77         self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network:ip'], '1.2.3.4')
78
79     def test_04_getLinks_OpenroadmTopology(self):
80         response = test_utils.get_ordm_topo_request("")
81         self.assertEqual(response.status_code, requests.codes.ok)
82         res = response.json()
83         # Tests related to links
84         self.assertNotIn('ietf-network-topology:link', res['network'][0])
85
86     def test_05_getNodes_OpenRoadmTopology(self):
87         # pylint: disable=redundant-unittest-assert
88         response = test_utils.get_ordm_topo_request("")
89         res = response.json()
90         # Tests related to nodes
91         self.assertEqual(response.status_code, requests.codes.ok)
92         self.assertIn('node', res['network'][0])
93         if 'node' in res['network'][0]:
94             nbNode = len(res['network'][0]['node'])
95             self.assertEqual(nbNode, 3)
96             listNode = ['SPDR-SA1-XPDR1', 'SPDR-SA1-XPDR2', 'SPDR-SA1-XPDR3']
97             for i in range(0, nbNode):
98                 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
99                 nodeId = res['network'][0]['node'][i]['node-id']
100                 if nodeId not in listNode:
101                     self.assertFalse(True)
102                     continue
103                 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'SPDR-SA1'},
104                               res['network'][0]['node'][i]['supporting-node'])
105                 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeSA'},
106                               res['network'][0]['node'][i]['supporting-node'])
107                 self.assertEqual(nodeType, 'XPONDER')
108                 nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
109                 client = 0
110                 network = 0
111                 for j in range(0, nbTps):
112                     tpType = (res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
113                                  ['org-openroadm-common-network:tp-type'])
114                     if tpType == 'XPONDER-CLIENT':
115                         client += 1
116                     elif tpType == 'XPONDER-NETWORK':
117                         network += 1
118                 self.assertTrue(client == 0)
119                 if nodeId == 'SPDR-SA1-XPDR1' or nodeId == 'SPDR-SA1-XPDR3':
120                     self.assertTrue(network == 1)
121                 else:
122                     # elif nodeId == 'SPDR-SA1-XPDR2':
123                     self.assertTrue(network == 4)
124                 listNode.remove(nodeId)
125             self.assertEqual(len(listNode), 0)
126
127     def test_06_getLinks_OtnTopology(self):
128         response = test_utils.get_otn_topo_request()
129         self.assertEqual(response.status_code, requests.codes.ok)
130         res = response.json()
131         self.assertNotIn('ietf-network-topology:link', res['network'][0])
132
133     def test_07_getNodes_OtnTopology(self):
134         # pylint: disable=redundant-unittest-assert
135         response = test_utils.get_otn_topo_request()
136         res = response.json()
137         self.assertEqual(response.status_code, requests.codes.ok)
138         nbNode = len(res['network'][0]['node'])
139         self.assertEqual(nbNode, 3)
140         listNode = ['SPDR-SA1-XPDR1', 'SPDR-SA1-XPDR2', 'SPDR-SA1-XPDR3']
141         CHECK_LIST = {
142             'SPDR-SA1-XPDR1': {
143                 'node-type': 'MUXPDR',
144                 'xpdr-number': 1,
145                 'port-types': ['org-openroadm-port-types:if-10GE-ODU2', 'org-openroadm-port-types:if-10GE-ODU2e',
146                                'org-openroadm-port-types:if-10GE'],
147                 'otn-common-types': 'org-openroadm-otn-common-types:ODU2e',
148                 'network_nb': 1,
149                 'nbl_nb': 4,
150                 'tp-checklist': ['XPDR1-NETWORK1', 'XPDR1-CLIENT1'],
151                 'tp-unchecklist': ['XPDR1-CLIENT2']
152             },
153             'SPDR-SA1-XPDR2': {
154                 'node-type': 'SWITCH',
155                 'xpdr-number': 2,
156                 'port-types': 'org-openroadm-port-types:if-100GE-ODU4',
157                 'otn-common-types': 'org-openroadm-otn-common-types:ODU4',
158                 'network_nb': 4,
159                 'nbl_nb': 1,
160                 'tp-checklist': ['XPDR2-NETWORK4', 'XPDR2-CLIENT1', 'XPDR2-NETWORK3', 'XPDR2-CLIENT4',
161                                  'XPDR2-CLIENT2', 'XPDR2-NETWORK2', 'XPDR2-CLIENT3', 'XPDR2-NETWORK1'],
162                 'tp-unchecklist': []
163             }
164         }
165         for i in range(0, nbNode):
166             nodeId = res['network'][0]['node'][i]['node-id']
167             if nodeId in CHECK_LIST:
168                 nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type']
169                 self.assertEqual(nodeType, CHECK_LIST[nodeId]['node-type'])
170                 self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'SPDR-SA1'},
171                               res['network'][0]['node'][i]['supporting-node'])
172                 self.assertIn({'network-ref': 'openroadm-topology', 'node-ref': nodeId},
173                               res['network'][0]['node'][i]['supporting-node'])
174                 self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeSA'},
175                               res['network'][0]['node'][i]['supporting-node'])
176                 self.assertEqual(res['network'][0]['node'][i]
177                                     ['org-openroadm-otn-network-topology:xpdr-attributes']['xpdr-number'],
178                                  CHECK_LIST[nodeId]['xpdr-number'])
179                 nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'])
180                 client = 0
181                 network = 0
182                 for j in range(0, nbTps):
183                     tpType = (res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
184                                  ['org-openroadm-common-network:tp-type'])
185                     tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id']
186                     if tpType == 'XPONDER-CLIENT':
187                         client += 1
188                         # pylint: disable=consider-using-f-string
189                         print("tpId = {}".format(tpId))
190                         print("tp= {}".format(res['network'][0]['node'][i]
191                               ['ietf-network-topology:termination-point'][j]))
192                         nbIfCapType = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
193                                           ['org-openroadm-otn-network-topology:tp-supported-interfaces']
194                                           ['supported-interface-capability'][0])
195                         for k in range(0, nbIfCapType):
196                             self.assertIn((res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
197                                            ['org-openroadm-otn-network-topology:tp-supported-interfaces']
198                                            ['supported-interface-capability'][0]['if-cap-type']),
199                                           CHECK_LIST[nodeId]['port-types'])
200                     elif tpType == 'XPONDER-NETWORK':
201                         network += 1
202                         self.assertEqual((res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
203                                              ['org-openroadm-otn-network-topology:tp-supported-interfaces']
204                                              ['supported-interface-capability'][0]['if-cap-type']),
205                                          'org-openroadm-port-types:if-OCH-OTU4-ODU4')
206                         self.assertEqual((res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
207                                              ['org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes']
208                                              ['rate']),
209                                          'org-openroadm-otn-common-types:ODU4')
210                         self.assertEqual((res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
211                                              ['supporting-termination-point'][0]['network-ref']), 'openroadm-topology')
212                         self.assertEqual((res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
213                                              ['supporting-termination-point'][0]['node-ref']), nodeId)
214                         self.assertEqual((res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]
215                                              ['supporting-termination-point'][0]['tp-ref']), tpId)
216                 self.assertTrue(client == 4)
217                 self.assertTrue(network == CHECK_LIST[nodeId]['network_nb'])
218                 listNode.remove(nodeId)
219                 nbNbl = len(res['network'][0]['node'][i]['org-openroadm-otn-network-topology:switching-pools']
220                             ['odu-switching-pools'][0]['non-blocking-list'])
221                 self.assertEqual(nbNbl, CHECK_LIST[nodeId]['nbl_nb'])
222                 for k in range(0, nbNbl):
223                     nbl = (res['network'][0]['node'][i]['org-openroadm-otn-network-topology:switching-pools']
224                               ['odu-switching-pools'][0]['non-blocking-list'][k])
225                     if nbl['nbl-number'] == 1:
226                         if nodeId == 'SPDR-SA1-XPDR1':
227                             self.assertEqual(nbl['available-interconnect-bandwidth'], 10)
228                             self.assertEqual(nbl['interconnect-bandwidth-unit'], 1000000000)
229                         for tp in CHECK_LIST[nodeId]['tp-checklist']:
230                             self.assertIn(tp, nbl['tp-list'])
231                         for tp in CHECK_LIST[nodeId]['tp-unchecklist']:
232                             self.assertNotIn(tp, nbl['tp-list'])
233             else:
234                 self.assertEqual('SPDR-SA1-XPDR3', nodeId)
235                 listNode.remove(nodeId)
236         self.assertEqual(len(listNode), 0)
237
238     def test_08_disconnect_SPDR_SA1(self):
239         response = test_utils.unmount_device("SPDR-SA1")
240         self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
241
242     def test_09_getClliNetwork(self):
243         response = test_utils.get_clli_net_request()
244         self.assertEqual(response.status_code, requests.codes.ok)
245         res = response.json()
246         nbNode = len(res['network'][0]['node'])
247         self.assertEqual(nbNode, 1)
248         self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'], 'NodeSA')
249
250     def test_10_getOpenRoadmNetwork(self):
251         response = test_utils.get_ordm_net_request()
252         self.assertEqual(response.status_code, requests.codes.ok)
253         res = response.json()
254         self.assertNotIn('node', res['network'][0])
255
256     def test_11_getNodes_OpenRoadmTopology(self):
257         response = test_utils.get_ordm_topo_request("")
258         res = response.json()
259         self.assertNotIn('node', res['network'][0])
260
261     def test_12_getNodes_OtnTopology(self):
262         response = test_utils.get_otn_topo_request()
263         res = response.json()
264         self.assertNotIn('node', res['network'][0])
265
266
267 if __name__ == "__main__":
268     unittest.main(verbosity=2)