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