blob: 884b2cca73640f63da154e26920237f84779b27c [file] [log] [blame]
Naman Navin Hegdead14a722019-11-04 12:28:21 -06001*** Settings ***
2Documentation Test setting VLAN and its configuration.
3
4
5Resource ../lib/rest_client.robot
6Resource ../lib/ipmi_client.robot
7Resource ../lib/utils.robot
8Resource ../lib/common_utils.robot
9Resource ../lib/openbmc_ffdc.robot
10Resource ../lib/ipmi_client.robot
11Resource ../lib/bmc_network_utils.robot
12Resource ../lib/state_manager.robot
13Library ../lib/utilities.py
14Library ../lib/ipmi_utils.py
15Library ../lib/var_funcs.py
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -060016Library ../lib/func_args.py
Naman Navin Hegdead14a722019-11-04 12:28:21 -060017Library Collections
18
19Suite Teardown Suite Teardown Execution
20
21
22*** Variables ***
23${vlan_id} ${53}
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -060024@{vlan_ids} ${35} ${55}
Naman Navin Hegdead14a722019-11-04 12:28:21 -060025${invalid_vlan_id} abc
26${vlan_resource} ${NETWORK_MANAGER}action/VLAN
27${network_resource} xyz.openbmc_project.Network.IP.Protocol.IPv4
28${static_network_resource} xyz.openbmc_project.Network.IP.AddressOrigin.Static
29${ip} 10.6.6.10
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -060030@{ip_addresses} 10.5.5.10 10.4.5.7
Naman Navin Hegdead14a722019-11-04 12:28:21 -060031${netmask} ${24}
32${gateway} 0.0.0.0
33${initial_vlan_config} @{EMPTY}
34
35
36*** Test Cases ***
37
Naman Navin Hegdead14a722019-11-04 12:28:21 -060038Add VLAN Via REST And Verify
39 [Documentation] Add VLAN via REST and verify it via REST and IPMI.
40 [Tags] Add_VLAN_Via_REST_And_Verify
41 [Setup] Test Setup Execution
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -060042 [Teardown] Delete VLANs [${vlan_id}]
Naman Navin Hegdead14a722019-11-04 12:28:21 -060043
44 Create VLAN ${vlan_id}
45 Verify Existence Of VLAN ${vlan_id}
46
47 ${lan_config}= Get LAN Print Dict
48 Valid Value lan_config['802.1q VLAN ID'] ["${vlan_id}"]
49
50
51Add Invalid VLAN Via REST And Verify
52 [Documentation] Add Invalid VLAN via REST and verify.
53 [Tags] Add_Invalid_VLAN_Via_REST_And_Verify
54
55 Create VLAN ${invalid_vlan_id} expected_result=error
56
57
58Delete VLAN Via REST
59 [Documentation] Delete VLAN via REST and verify it via REST and IPMI.
60 [Tags] Delete_VLAN_Via_REST
61 [Setup] Run Keywords Test Setup Execution AND Create VLAN ${vlan_id}
62
63 Verify Existence Of VLAN ${vlan_id}
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -060064 Delete VLANs [${vlan_id}]
Naman Navin Hegdead14a722019-11-04 12:28:21 -060065 Verify Existence Of VLAN ${vlan_id} expected_result=error
66
67 ${lan_config}= Get LAN Print Dict
68 Valid Value lan_config['802.1q VLAN ID'] ["Disabled"]
69
70
71Configure Network Settings On VLAN Via REST
72 [Documentation] Configure IP on VLAN and verify it via REST and IPMI.
73 [Tags] Configure_Network_Settings_On_VLAN_Via_REST
74 [Setup] Run Keywords Test Setup Execution AND Create VLAN ${vlan_id}
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -060075 [Teardown] Delete VLANs [${vlan_id}]
Naman Navin Hegdead14a722019-11-04 12:28:21 -060076
77 Configure Network Settings On VLAN ${vlan_id} ${ip} ${netmask}
78 Get VLAN URI For IP ${vlan_id} ${ip}
79
80 ${lan_config}= Get LAN Print Dict
81 Valid Value lan_config['IP Address'] ["${ip}"]
82
83
84Delete IP On VLAN Via REST
85 [Documentation] Delete IP on VLAN and verify it via REST and IPMI.
86 [Tags] Delete_IP_On_VLAN_Via_REST
87 [Setup] Run Keywords Test Setup Execution AND Create VLAN ${vlan_id}
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -060088 [Teardown] Delete VLANs [${vlan_id}]
Naman Navin Hegdead14a722019-11-04 12:28:21 -060089
90 Configure Network Settings On VLAN ${vlan_id} ${ip} ${netmask}
91 ${lan_config}= Get LAN Print Dict
92 Valid Value lan_config['IP Address'] ["${ip}"]
93
94 ${vlan_ip_uri}= Get VLAN URI For IP ${vlan_id} ${ip}
95 Delete IP And Object ${ip} ${vlan_ip_uri}
96
97 Get VLAN URI For IP ${vlan_id} ${ip} expected_result=error
98
99 ${lan_config}= Get LAN Print Dict
100 Should Not Match ${lan_config['IP Address']} ${ip}
101
102
103Delete VLAN When IP Is Configured Via REST
104 [Documentation] Delete IP on VLAN and verify using IPMI.
105 [Tags] Delete_VLAN_When_IP_Is_Configured_Via_REST
106 [Setup] Run Keywords Test Setup Execution AND Create VLAN ${vlan_id}
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -0600107 [Teardown] Delete VLANs [${vlan_id}]
Naman Navin Hegdead14a722019-11-04 12:28:21 -0600108
109 Configure Network Settings On VLAN ${vlan_id} ${ip} ${netmask}
110 ${lan_config}= Get LAN Print Dict
111 Valid Value lan_config['IP Address'] ["${ip}"]
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -0600112 Delete VLANs [${vlan_id}]
Naman Navin Hegdead14a722019-11-04 12:28:21 -0600113
114 Verify Existence Of VLAN ${vlan_id} expected_result=error
115
116 ${lan_config}= Get LAN Print Dict
117 Valid Value lan_config['802.1q VLAN ID'] ["Disabled"]
118
119
120Configure VLAN And Check Persistency On Reboot
121 [Documentation] Create VLAN ID & IP , reboot and verify.
122 [Tags] Configure_VLAN_And_Check_Persistency_On_Reboot
123 [Setup] Test Setup Execution
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -0600124 [Teardown] Delete VLANs [${vlan_id}]
Naman Navin Hegdead14a722019-11-04 12:28:21 -0600125
126 Create VLAN ${vlan_id}
127 Configure Network Settings On VLAN ${vlan_id} ${ip} ${netmask}
128 ${lan_config}= Get LAN Print Dict
129 Valid Value lan_config['IP Address'] ["${ip}"]
130 Valid Value lan_config['802.1q VLAN ID'] ["${vlan_id}"]
131
132 Initiate BMC Reboot
133
134 Verify Existence Of VLAN ${vlan_id}
135 Get VLAN URI For IP ${vlan_id} ${ip}
136
137 ${lan_config}= Get LAN Print Dict
138 Valid Value lan_config['IP Address'] ["${ip}"]
139 Valid Value lan_config['802.1q VLAN ID'] ["${vlan_id}"]
140
141
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -0600142Add Multiple VLANs Via REST And Verify
143 [Documentation] Add multiple VLANs via REST and verify them via CLI.
144 [Tags] Add_Multiple_VLANs_Via_REST_And_Verify
145 [Setup] Test Setup Execution
146 [Teardown] Delete VLANs ${vlan_ids}
147
148 FOR ${vlan_id} IN @{vlan_ids}
149 Create VLAN ${vlan_id}
150 Verify Existence Of VLAN ${vlan_id}
151 END
152
153 ${lan_config}= Get LAN Print Dict
154 ${vlan_id_ipmi}= Convert To Integer ${lan_config["802.1q VLAN ID"]}
155 Valid List vlan_ids required_values=[${vlan_id_ipmi}]
156
157Delete Multiple IPs On VLAN And Verify
158 [Documentation] Delete multiple IPs on VLAN and verify each via REST and IPMI.
159 [Tags] Delete_Multiple_IP_On_VLAN_Via_REST
160 [Setup] Run Keywords Test Setup Execution AND Create VLAN ${vlan_id}
161 [Teardown] Delete VLANs [${vlan_id}]
162
163 FOR ${ip} IN @{ip_addresses}
164 Configure Network Settings On VLAN ${vlan_id} ${ip} ${netmask}
165 ${vlan_ip_uri}= Get VLAN URI For IP ${vlan_id} ${ip}
166 Delete IP And Object ${ip} ${vlan_ip_uri}
167
168 Get VLAN URI For IP ${vlan_id} ${ip} expected_result=error
169
170 ${lan_config}= Get LAN Print Dict
171 Should Not Match ${lan_config['IP Address']} ${ip}
172 END
173
174Delete Multiple VLANs Via REST
175 [Documentation] Delete multiple VLANs via REST and verify each via REST and IPMI.
176 [Tags] Delete_Multiple_VLANs_Via_REST
177 [Setup] Test Setup Execution
178
179 FOR ${vlan_id} IN @{vlan_ids}
180 Create VLAN ${vlan_id}
181 END
182
183 Delete VLANs ${vlan_ids}
184
185 ${lan_config}= Get LAN Print Dict
186 Valid Value lan_config['802.1q VLAN ID'] ["Disabled"]
187
188Configure Multiple IPs On VLAN Via REST
189 [Documentation] Configure Multiple IPs on VLAN and verify each via REST.
190 [Tags] Configure_Multiple_IPs_On_VLAN_Via_REST
191 [Setup] Run Keywords Test Setup Execution AND Create VLAN ${vlan_id}
192 [Teardown] Delete VLANs [${vlan_id}]
193
194 FOR ${ip} IN @{ip_addresses}
195 Configure Network Settings On VLAN ${vlan_id} ${ip} ${netmask}
196 END
197
198 ${lan_config}= Get LAN Print Dict
199 Valid Value lan_config['IP Address'] ["${ip_addresses[0]}"]
200
Anvesh Kumar Rayankula80d6b5a2020-04-06 05:57:06 -0500201
202Create And Delete VLAN And IP On It Multiple Times With BMC Reboot
203 [Documentation] Create and delete VLAN and IP on it multiple times with BMC reboot.
204 [Tags] Create_And_Delete_VLAN_And_IP_On_It_Multiple_Times_With_BMC_Reboot
205 [Setup] Test Setup Execution
206
207 FOR ${i} IN RANGE ${5}
208 Create VLAN ${vlan_id}
209 Verify Existence Of VLAN ${vlan_id}
210 Configure Network Settings On VLAN ${vlan_id} ${ip} ${netmask}
211 ${vlan_ip_uri}= Get VLAN URI For IP ${vlan_id} ${ip}
212 Delete IP And Object ${ip} ${vlan_ip_uri}
213 Get VLAN URI For IP ${vlan_id} ${ip} expected_result=error
214 Delete VLANs [${vlan_id}]
215 Verify Existence Of VLAN ${vlan_id} expected_result=error
216 Initiate BMC Reboot
217 Sleep ${NETWORK_TIMEOUT}s
218 Wait For Host To Ping ${OPENBMC_HOST} ${NETWORK_TIMEOUT}
219 Verify Existence Of VLAN ${vlan_id} expected_result=error
220 END
221
222 ${lan_config}= Get LAN Print Dict
223 Valid Value lan_config['802.1q VLAN ID'] ["Disabled"]
224
225
Naman Navin Hegdead14a722019-11-04 12:28:21 -0600226*** Keywords ***
227
228
229Test Setup Execution
230 [Documentation] Check and delete all previously created VLAN if any.
231
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -0600232 Printn
Naman Navin Hegdead14a722019-11-04 12:28:21 -0600233 ${lan_config}= Get LAN Print Dict
234 Return From Keyword If '${lan_config['802.1q VLAN ID']}' == 'Disabled'
235
236 # Get all VLAN ID on interface eth0.
237 ${vlan_ids}= Get VLAN IDs
238
239 ${initial_vlan_config}= Create List
240 Set Suite Variable ${initial_vlan_config}
241
242 FOR ${vlan_id} IN @{vlan_ids}
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -0600243 ${vlan_records}= Read Properties
244 ... ${NETWORK_MANAGER}eth0_${vlan_id}${/}enumerate quiet=1
245 ${vlan_record}= Filter Struct
246 ... ${vlan_records} [('Origin', '${static_network_resource}')]
Naman Navin Hegdead14a722019-11-04 12:28:21 -0600247
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -0600248 ${id}= Convert To Integer ${vlan_id}
249 Set Initial VLAN Config ${vlan_record} ${id}
Naman Navin Hegdead14a722019-11-04 12:28:21 -0600250 END
251 Rprint Vars initial_vlan_config
252
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -0600253 Delete VLANs ${vlan_ids}
Naman Navin Hegdead14a722019-11-04 12:28:21 -0600254
255
256Set Initial VLAN Config
257 [Documentation] Set suite level list of Initial VLAN Config.
258 [Arguments] ${vlan_record} ${id}
259
260 # Description of argument(s):
261 # vlan_record Dictionary of IP configuration information of a VLAN.
262 # Example:
263 # /xyz/openbmc_project/network/eth0_55/ipv4/5fb2cfe6": {
264 # "Address": "x.x.x.x",
265 # "Gateway": "",
266 # "Origin": "xyz.openbmc_project.Network.IP.AddressOrigin.Static",
267 # "PrefixLength": 16,
268 # "Type": "xyz.openbmc_project.Network.IP.Protocol.IPv4"}
269 #
270 # id The VLAN ID corresponding to the IP Configuration records contained
271 # in the variable "vlan_record".
272
273 ${uris}= Get Dictionary Keys ${vlan_record}
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -0600274
Naman Navin Hegdead14a722019-11-04 12:28:21 -0600275 FOR ${uri} IN @{uris}
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -0600276 Append To List ${initial_vlan_config} ${id} ${vlan_record['${uri}']['Address']}
277 ... ${vlan_record['${uri}']['PrefixLength']}
Naman Navin Hegdead14a722019-11-04 12:28:21 -0600278 END
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -0600279
Naman Navin Hegdead14a722019-11-04 12:28:21 -0600280 Run Keyword If @{uris} == @{EMPTY}
281 ... Append To List ${initial_vlan_config} ${id} ${EMPTY} ${EMPTY}
282
283
284Suite Teardown Execution
285 [Documentation] Restore VLAN configuration.
286
287 ${length}= Get Length ${initial_vlan_config}
288 Return From Keyword If ${length} == ${0}
289
290 ${previous_id}= Set Variable ${EMPTY}
291 FOR ${index} IN RANGE 0 ${length} 3
292
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -0600293 Run Keyword If '${initial_vlan_config[${index+1}]}' == '${EMPTY}'
294 ... Create VLAN ${initial_vlan_config[${index}]}
295 ... ELSE IF '${previous_id}' == '${initial_vlan_config[${index}]}'
296 ... Configure Network Settings On VLAN ${initial_vlan_config[${index}]}
297 ... ${initial_vlan_config[${index+1}]} ${initial_vlan_config[${index+2}]}
298 ... ELSE Run Keywords Create VLAN ${initial_vlan_config[${index}]} AND
299 ... Configure Network Settings On VLAN ${initial_vlan_config[${index}]}
300 ... ${initial_vlan_config[${index+1}]} ${initial_vlan_config[${index+2}]}
Naman Navin Hegdead14a722019-11-04 12:28:21 -0600301
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -0600302 ${previous_id}= Set Variable ${initial_vlan_config[${index}]}
Naman Navin Hegdead14a722019-11-04 12:28:21 -0600303 END
304
305
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -0600306Delete VLANs
307 [Documentation] Delete one or more VLANs.
308 [Arguments] ${ids} ${interface}=eth0
Naman Navin Hegdead14a722019-11-04 12:28:21 -0600309
310 # Description of argument(s):
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -0600311 # ids A list of VLAN IDs (e.g. ['53'] or ['53', '35', '12']). Note that the
312 # caller may simply pass a list variable or he/she may specify a
313 # python-like list specification (see examples below).
314 # interface The physical interface for the VLAN (e.g. 'eth0').
Naman Navin Hegdead14a722019-11-04 12:28:21 -0600315
Anvesh Kumar Rayankula14455f42019-12-12 03:06:21 -0600316 # Example calls:
317 # Delete VLANs ${vlan_ids}
318 # Delete Vlans [53, 35]
319
320 # Allow for python-like list specifications (e.g. ids=['53']).
321 ${vlan_ids}= Source To Object ${ids}
322
323 FOR ${id} IN @{vlan_ids}
324 OpenBMC Delete Request ${NETWORK_MANAGER}${interface}_${id}
325 END
326 Run Key U Sleep \ ${NETWORK_TIMEOUT}s
Naman Navin Hegdead14a722019-11-04 12:28:21 -0600327
328
Naman Navin Hegdead14a722019-11-04 12:28:21 -0600329Get VLAN IDs
330 [Documentation] Return all VLAN IDs.
331
332 ${vlan_ids} ${stderr} ${rc}= BMC Execute Command
333 ... /sbin/ip addr | grep @eth0 | cut -f1 -d@ | cut -f2 -d.
334 ${vlan_ids}= Split String ${vlan_ids}
335
336 [Return] @{vlan_ids}
337
338
Naman Navin Hegdead14a722019-11-04 12:28:21 -0600339Get VLAN URI For IP
340 [Documentation] Get and return the URI for a VLAN IP.
341 [Arguments] ${vlan_id} ${vlan_ip} ${expected_result}=valid
342
343 # Description of argument(s):
344 # vlan_id The VLAN ID (e.g. '53').
345 # vlan_ip The VLAN IP (e.g. 'x.x.x.x').
346
347 ${vlan_records}= Read Properties
348 ... ${NETWORK_MANAGER}eth0_${vlan_id}${/}enumerate quiet=1
349 ${vlan_record}= Filter Struct ${vlan_records} [('Address', '${vlan_ip}')]
350 ${num_vlan_records}= Get Length ${vlan_record}
351 ${status}= Run Keyword And Return Status Should Be True ${num_vlan_records} > 0
352 ... msg=Could not find a uri for vlan "${vlan_id}" with IP "${vlan_ip}".
353
354 Run Keyword If '${expected_result}' == 'valid'
355 ... Should Be Equal ${status} ${True}
George Keishingf7022192019-12-11 11:30:09 -0600356 ... msg=VLAN IP URI doesn't exist!.
Naman Navin Hegdead14a722019-11-04 12:28:21 -0600357 ... ELSE
358 ... Should Be Equal ${status} ${False}
359 ... msg=VLAN IP URI exists!.
360 ${uris}= Get Dictionary Keys ${vlan_record}
361 Return From Keyword If @{uris} == @{EMPTY}
362
363 [Return] ${uris[${0}]}
364
365
366Verify Existence Of VLAN
367 [Documentation] Verify VLAN ID exists.
368 [Arguments] ${id} ${interface}=eth0 ${expected_result}=valid
369
370 # Description of argument(s):
371 # id The VLAN ID (e.g. id:'53').
372 # interface Physical Interface on which the VLAN is defined.
373 # expected_result Expected status to check existence or non-existence of VLAN.
374
375 ${vlan_ids}= Get VLAN IDs
376 ${cli_status}= Run Keyword And Return Status
377 ... Valid List vlan_ids required_values=['${id}']
378
379 ${network_records}= Read Properties ${NETWORK_MANAGER}
380 ${rest_status}= Run Keyword And Return Status Valid List network_records
381 ... required_values=['${NETWORK_MANAGER}${interface}_${id}']
382
383 Should Be Equal ${rest_status} ${cli_status}
384 ... msg=REST and CLI Output are not the same.
385 Run Keyword If '${expected_result}' == 'valid'
386 ... Should Be Equal ${rest_status} ${True}
George Keishingf7022192019-12-11 11:30:09 -0600387 ... msg=VLAN ID doesn't exist!.
Naman Navin Hegdead14a722019-11-04 12:28:21 -0600388 ... ELSE
389 ... Should Be Equal ${rest_status} ${False}
390 ... msg=VLAN ID exists!.