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