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