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