1*** Settings ***
2Documentation  Network interface configuration and verification
3               ...  tests.
4
5Resource       ../../lib/bmc_redfish_resource.robot
6Resource       ../../lib/bmc_network_utils.robot
7Resource       ../../lib/openbmc_ffdc.robot
8Library        ../../lib/bmc_network_utils.py
9Library        Collections
10
11Suite Setup     Suite Setup Execution
12Suite Teardown  Suite Teardown Execution
13Test Setup      Test Setup Execution
14Test Teardown   Test Teardown Execution
15
16Force Tags     Network_Conf_Test
17
18*** Variables ***
19${test_hostname}           openbmc
20${test_ipv4_addr}          10.7.7.7
21${test_ipv4_invalid_addr}  0.0.1.a
22${test_subnet_mask}        255.255.0.0
23${broadcast_ip}            10.7.7.255
24${loopback_ip}             127.0.0.2
25${multicast_ip}            224.6.6.6
26${out_of_range_ip}         10.7.7.256
27${test_ipv4_addr2}         10.7.7.8
28
29# Valid netmask is 4 bytes long and has continuous block of 1s.
30# Maximum valid value in each octet is 255 and least value is 0.
31# 253 is not valid, as binary value is 11111101.
32${invalid_netmask}         255.255.253.0
33${alpha_netmask}           ff.ff.ff.ff
34# Maximum value of octet in netmask is 255.
35${out_of_range_netmask}    255.256.255.0
36${more_byte_netmask}       255.255.255.0.0
37${less_byte_netmask}       255.255.255
38${threshold_netmask}       255.255.255.255
39${lowest_netmask}          128.0.0.0
40
41# There will be 4 octets in IP address (e.g. xx.xx.xx.xx)
42# but trying to configure xx.xx.xx
43${less_octet_ip}           10.3.36
44
45# For the address 10.6.6.6, the 10.6.6.0 portion describes the
46# network ID and the 6 describe the host.
47
48${network_id}              10.7.7.0
49${hex_ip}                  0xa.0xb.0xc.0xd
50${negative_ip}             10.-7.-7.7
51@{static_name_servers}     10.5.5.5
52@{null_value}              null
53@{empty_dictionary}        {}
54@{string_value}            aa.bb.cc.dd
55
56*** Test Cases ***
57
58Get IP Address And Verify
59    [Documentation]  Get IP Address And Verify.
60    [Tags]  Get_IP_Address_And_Verify
61
62    FOR  ${network_configuration}  IN  @{network_configurations}
63      Verify IP On BMC  ${network_configuration['Address']}
64    END
65
66Get Netmask And Verify
67    [Documentation]  Get Netmask And Verify.
68    [Tags]  Get_Netmask_And_Verify
69
70    FOR  ${network_configuration}  IN  @{network_configurations}
71      Verify Netmask On BMC  ${network_configuration['SubnetMask']}
72    END
73
74Get Gateway And Verify
75    [Documentation]  Get gateway and verify it's existence on the BMC.
76    [Tags]  Get_Gateway_And_Verify
77
78    FOR  ${network_configuration}  IN  @{network_configurations}
79      Verify Gateway On BMC  ${network_configuration['Gateway']}
80    END
81
82Get MAC Address And Verify
83    [Documentation]  Get MAC address and verify it's existence on the BMC.
84    [Tags]  Get_MAC_Address_And_Verify
85
86    ${active_channel_config}=  Get Active Channel Config
87    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
88
89    ${resp}=  Redfish.Get  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
90    ${macaddr}=  Get From Dictionary  ${resp.dict}  MACAddress
91    Validate MAC On BMC  ${macaddr}
92
93Verify All Configured IP And Netmask
94    [Documentation]  Verify all configured IP and netmask on BMC.
95    [Tags]  Verify_All_Configured_IP_And_Netmask
96
97    FOR  ${network_configuration}  IN  @{network_configurations}
98      Verify IP And Netmask On BMC  ${network_configuration['Address']}
99      ...  ${network_configuration['SubnetMask']}
100    END
101
102Get Hostname And Verify
103    [Documentation]  Get hostname via Redfish and verify.
104    [Tags]  Get_Hostname_And_Verify
105
106    ${hostname}=  Redfish_Utils.Get Attribute  ${REDFISH_NW_PROTOCOL_URI}  HostName
107
108    Validate Hostname On BMC  ${hostname}
109
110Configure Hostname And Verify
111    [Documentation]  Configure hostname via Redfish and verify.
112    [Tags]  Configure_Hostname_And_Verify
113    [Teardown]  Run Keywords
114    ...  Configure Hostname  ${hostname}  AND  Validate Hostname On BMC  ${hostname}
115
116    ${hostname}=  Redfish_Utils.Get Attribute  ${REDFISH_NW_PROTOCOL_URI}  HostName
117
118    Configure Hostname  ${test_hostname}
119    Validate Hostname On BMC  ${test_hostname}
120
121    # Verify configured hostname via redfish.
122    ${new_hostname}=  Redfish_Utils.Get Attribute  ${REDFISH_NW_PROTOCOL_URI}  HostName
123    Should Be Equal  ${new_hostname}  ${test_hostname}
124
125
126Add Valid IPv4 Address And Verify
127    [Documentation]  Add IPv4 Address via Redfish and verify.
128    [Tags]  Add_Valid_IPv4_Address_And_Verify
129    [Teardown]   Run Keywords
130    ...  Delete IP Address  ${test_ipv4_addr}  AND  Test Teardown Execution
131
132     Add IP Address  ${test_ipv4_addr}  ${test_subnet_mask}  ${test_gateway}
133
134Add Invalid IPv4 Address And Verify
135    [Documentation]  Add Invalid IPv4 Address via Redfish and verify.
136    [Tags]  Add_Invalid_IPv4_Address_And_Verify
137
138    Add IP Address  ${test_ipv4_invalid_addr}  ${test_subnet_mask}
139    ...  ${test_gateway}  valid_status_codes=${HTTP_BAD_REQUEST}
140
141Configure Out Of Range IP
142    [Documentation]  Configure out-of-range IP address.
143    [Tags]  Configure_Out_Of_Range_IP
144    [Template]  Add IP Address
145
146    # ip                subnet_mask          gateway          valid_status_codes
147    ${out_of_range_ip}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
148
149Configure Broadcast IP
150    [Documentation]  Configure broadcast IP address.
151    [Tags]  Configure_Broadcast_IP
152    [Template]  Add IP Address
153    [Teardown]  Clear IP Settings On Fail  ${broadcast_ip}
154
155    # ip             subnet_mask          gateway          valid_status_codes
156    ${broadcast_ip}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
157
158Configure Multicast IP
159    [Documentation]  Configure multicast IP address.
160    [Tags]  Configure_Multicast_IP
161    [Template]  Add IP Address
162    [Teardown]  Clear IP Settings On Fail  ${multicast_ip}
163
164    # ip             subnet_mask          gateway          valid_status_codes
165    ${multicast_ip}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
166
167Configure Loopback IP
168    [Documentation]  Configure loopback IP address.
169    [Tags]  Configure_Loopback_IP
170    [Template]  Add IP Address
171    [Teardown]  Clear IP Settings On Fail  ${loopback_ip}
172
173    # ip            subnet_mask          gateway          valid_status_codes
174    ${loopback_ip}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
175
176Add Valid IPv4 Address And Check Persistency
177    [Documentation]  Add IPv4 address and check persistency.
178    [Tags]  Add_Valid_IPv4_Address_And_Check_Persistency
179    [Teardown]  Run Keywords
180    ...  Delete IP Address  ${test_ipv4_addr}  AND  Test Teardown Execution
181
182    Add IP Address  ${test_ipv4_addr}  ${test_subnet_mask}  ${test_gateway}
183
184    # Reboot BMC and verify persistency.
185    Redfish OBMC Reboot (off)  stack_mode=skip
186    Redfish.Login
187    Verify IP On BMC  ${test_ipv4_addr}
188    Verify IP On Redfish URI  ${test_ipv4_addr}
189
190
191Add Fourth Octet Threshold IP And Verify
192    [Documentation]  Add fourth octet threshold IP and verify.
193    [Tags]  Add_Fourth_Octet_Threshold_IP_And_Verify
194    [Teardown]  Run Keywords
195    ...  Delete IP Address  10.7.7.254  AND  Test Teardown Execution
196
197     Add IP Address  10.7.7.254  ${test_subnet_mask}  ${test_gateway}
198
199Add Fourth Octet Lowest IP And Verify
200    [Documentation]  Add fourth octet lowest IP and verify.
201    [Tags]  Add_Fourth_Octet_Lowest_IP_And_Verify
202    [Teardown]  Run Keywords
203    ...  Delete IP Address  10.7.7.1  AND  Test Teardown Execution
204
205     Add IP Address  10.7.7.1  ${test_subnet_mask}  ${test_gateway}
206
207Add Third Octet Threshold IP And Verify
208    [Documentation]  Add third octet threshold IP and verify.
209    [Tags]  Add_Third_Octet_Threshold_IP_And_Verify
210    [Teardown]  Run Keywords
211    ...  Delete IP Address  10.7.255.7  AND  Test Teardown Execution
212
213     Add IP Address  10.7.255.7  ${test_subnet_mask}  ${test_gateway}
214
215Add Third Octet Lowest IP And Verify
216    [Documentation]  Add third octet lowest IP and verify.
217    [Tags]  Add_Third_Octet_Lowest_IP_And_Verify
218    [Teardown]  Run Keywords
219    ...  Delete IP Address  10.7.0.7  AND  Test Teardown Execution
220
221     Add IP Address  10.7.0.7  ${test_subnet_mask}  ${test_gateway}
222
223Add Second Octet Threshold IP And Verify
224    [Documentation]  Add second octet threshold IP and verify.
225    [Tags]  Add_Second_Octet_Threshold_IP_And_Verify
226    [Teardown]  Run Keywords
227    ...  Delete IP Address  10.255.7.7  AND  Test Teardown Execution
228
229     Add IP Address  10.255.7.7  ${test_subnet_mask}  ${test_gateway}
230
231Add Second Octet Lowest IP And Verify
232    [Documentation]  Add second octet lowest IP and verify.
233    [Tags]  Add_Second_Octet_Lowest_IP_And_Verify
234    [Teardown]  Run Keywords
235    ...  Delete IP Address  10.0.7.7  AND  Test Teardown Execution
236
237     Add IP Address  10.0.7.7  ${test_subnet_mask}  ${test_gateway}
238
239Add First Octet Threshold IP And Verify
240    [Documentation]  Add first octet threshold IP and verify.
241    [Tags]  Add_First_Octet_Threshold_IP_And_Verify
242    [Teardown]  Run Keywords
243    ...  Delete IP Address  223.7.7.7  AND  Test Teardown Execution
244
245     Add IP Address  223.7.7.7  ${test_subnet_mask}  ${test_gateway}
246
247Add First Octet Lowest IP And Verify
248    [Documentation]  Add first octet lowest IP and verify.
249    [Tags]  Add_First_Octet_Lowest_IP_And_Verify
250    [Teardown]  Run Keywords
251    ...  Delete IP Address  1.7.7.7  AND  Test Teardown Execution
252
253     Add IP Address  1.7.7.7  ${test_subnet_mask}  ${test_gateway}
254
255Configure Invalid Netmask
256    [Documentation]  Verify error while setting invalid netmask.
257    [Tags]  Configure_Invalid_Netmask
258    [Template]  Add IP Address
259
260    # ip               subnet_mask         gateway          valid_status_codes
261    ${test_ipv4_addr}  ${invalid_netmask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
262
263Configure Out Of Range Netmask
264    [Documentation]  Verify error while setting out of range netmask.
265    [Tags]  Configure_Out_Of_Range_Netmask
266    [Template]  Add IP Address
267
268    # ip               subnet_mask              gateway          valid_status_codes
269    ${test_ipv4_addr}  ${out_of_range_netmask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
270
271Configure Alpha Netmask
272    [Documentation]  Verify error while setting alpha netmask.
273    [Tags]  Configure_Alpha_Netmask
274    [Template]  Add IP Address
275
276    # ip               subnet_mask       gateway          valid_status_codes
277    ${test_ipv4_addr}  ${alpha_netmask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
278
279Configure More Byte Netmask
280    [Documentation]  Verify error while setting more byte netmask.
281    [Tags]  Configure_More_Byte_Netmask
282    [Template]  Add IP Address
283
284    # ip               subnet_mask           gateway          valid_status_codes
285    ${test_ipv4_addr}  ${more_byte_netmask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
286
287Configure Less Byte Netmask
288    [Documentation]  Verify error while setting less byte netmask.
289    [Tags]  Configure_Less_Byte_Netmask
290    [Template]  Add IP Address
291
292    # ip               subnet_mask           gateway          valid_status_codes
293    ${test_ipv4_addr}  ${less_byte_netmask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
294
295Configure Threshold Netmask And Verify
296    [Documentation]  Configure threshold netmask and verify.
297    [Tags]  Configure_Threshold_Netmask_And_Verify
298    [Teardown]  Run Keywords
299    ...   Delete IP Address  ${test_ipv4_addr}  AND  Test Teardown Execution
300
301     Add IP Address  ${test_ipv4_addr}  ${threshold_netmask}  ${test_gateway}
302
303Configure Lowest Netmask And Verify
304    [Documentation]  Configure lowest netmask and verify.
305    [Tags]  Configure_Lowest_Netmask_And_Verify
306    [Teardown]  Run Keywords
307    ...   Delete IP Address  ${test_ipv4_addr}  AND  Test Teardown Execution
308
309     Add IP Address  ${test_ipv4_addr}  ${lowest_netmask}  ${test_gateway}
310
311Configure Network ID
312    [Documentation]  Verify error while configuring network ID.
313    [Tags]  Configure_Network_ID
314    [Template]  Add IP Address
315    [Teardown]  Clear IP Settings On Fail  ${network_id}
316
317    # ip           subnet_mask          gateway          valid_status_codes
318    ${network_id}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
319
320Configure Less Octet IP
321    [Documentation]  Verify error while Configuring less octet IP address.
322    [Tags]  Configure_Less_Octet_IP
323    [Template]  Add IP Address
324
325    # ip              subnet_mask          gateway          valid_status_codes
326    ${less_octet_ip}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
327
328Configure Empty IP
329    [Documentation]  Verify error while Configuring empty IP address.
330    [Tags]  Configure_Empty_IP
331    [Template]  Add IP Address
332
333    # ip      subnet_mask          gateway          valid_status_codes
334    ${EMPTY}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
335
336Configure Special Char IP
337    [Documentation]  Configure invalid IP address containing special chars.
338    [Tags]  Configure_Special_Char_IP
339    [Template]  Add IP Address
340
341    # ip          subnet_mask          gateway          valid_status_codes
342    @@@.%%.44.11  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
343
344Configure Hexadecimal IP
345    [Documentation]  Configure invalid IP address containing hex value.
346    [Tags]  Configure_Hexadecimal_IP
347    [Template]  Add IP Address
348
349    # ip       subnet_mask          gateway          valid_status_codes
350    ${hex_ip}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
351
352Configure Negative Octet IP
353    [Documentation]  Configure invalid IP address containing negative octet.
354    [Tags]  Configure_Negative_Octet_IP
355    [Template]  Add IP Address
356
357    # ip            subnet_mask          gateway          valid_status_codes
358    ${negative_ip}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
359
360Configure Incomplete IP For Gateway
361    [Documentation]  Configure incomplete IP for gateway and expect an error.
362    [Tags]  Configure_Incomplete_IP_For_Gateway
363    [Template]  Add IP Address
364
365    # ip               subnet_mask          gateway           valid_status_codes
366    ${test_ipv4_addr}  ${test_subnet_mask}  ${less_octet_ip}  ${HTTP_BAD_REQUEST}
367
368Configure Special Char IP For Gateway
369    [Documentation]  Configure special char IP for gateway and expect an error.
370    [Tags]  Configure_Special_Char_IP_For_Gateway
371    [Template]  Add IP Address
372
373    # ip               subnet_mask          gateway       valid_status_codes
374    ${test_ipv4_addr}  ${test_subnet_mask}  @@@.%%.44.11  ${HTTP_BAD_REQUEST}
375
376Configure Hexadecimal IP For Gateway
377    [Documentation]  Configure hexadecimal IP for gateway and expect an error.
378    [Tags]  Configure_Hexadecimal_IP_For_Gateway
379    [Template]  Add IP Address
380
381    # ip               subnet_mask          gateway    valid_status_codes
382    ${test_ipv4_addr}  ${test_subnet_mask}  ${hex_ip}  ${HTTP_BAD_REQUEST}
383
384Get DNS Server And Verify
385    [Documentation]  Get DNS server via Redfish and verify.
386    [Tags]  Get_DNS_Server_And_Verify
387
388    Verify CLI and Redfish Nameservers
389
390Configure DNS Server And Verify
391    [Documentation]  Configure DNS server and verify.
392    [Tags]  Configure_DNS_Server_And_Verify
393    [Setup]  DNS Test Setup Execution
394    [Teardown]  Run Keywords
395    ...  Configure Static Name Servers  AND  Test Teardown Execution
396
397    Configure Static Name Servers  ${static_name_servers}
398    Verify CLI and Redfish Nameservers
399
400Delete DNS Server And Verify
401    [Documentation]  Delete DNS server and verify.
402    [Tags]  Delete_DNS_Server_And_Verify
403    [Setup]  DNS Test Setup Execution
404    [Teardown]  Run Keywords
405    ...  Configure Static Name Servers  AND  Test Teardown Execution
406
407    Delete Static Name Servers
408    Verify CLI and Redfish Nameservers
409
410Configure DNS Server And Check Persistency
411    [Documentation]  Configure DNS server and check persistency on reboot.
412    [Tags]  Configure_DNS_Server_And_Check_Persistency
413    [Setup]  DNS Test Setup Execution
414    [Teardown]  Run Keywords
415    ...  Configure Static Name Servers  AND  Test Teardown Execution
416
417    Configure Static Name Servers  ${static_name_servers}
418    # Reboot BMC and verify persistency.
419    Redfish OBMC Reboot (off)  stack_mode=skip
420    Redfish.Login
421    Verify CLI and Redfish Nameservers
422
423Configure Loopback IP For Gateway
424    [Documentation]  Configure loopback IP for gateway and expect an error.
425    [Tags]  Configure_Loopback_IP_For_Gateway
426    [Template]  Add IP Address
427    [Teardown]  Clear IP Settings On Fail  ${test_ipv4_addr}
428
429    # ip               subnet_mask          gateway         valid_status_codes
430    ${test_ipv4_addr}  ${test_subnet_mask}  ${loopback_ip}  ${HTTP_BAD_REQUEST}
431
432Configure Network ID For Gateway
433    [Documentation]  Configure network ID for gateway and expect an error.
434    [Tags]  Configure_Network_ID_For_Gateway
435    [Template]  Add IP Address
436    [Teardown]  Clear IP Settings On Fail  ${test_ipv4_addr}
437
438    # ip               subnet_mask          gateway        valid_status_codes
439    ${test_ipv4_addr}  ${test_subnet_mask}  ${network_id}  ${HTTP_BAD_REQUEST}
440
441Configure Multicast IP For Gateway
442    [Documentation]  Configure multicast IP for gateway and expect an error.
443    [Tags]  Configure_Multicast_IP_For_Gateway
444    [Template]  Add IP Address
445    [Teardown]  Clear IP Settings On Fail  ${test_ipv4_addr}
446
447    # ip               subnet_mask          gateway           valid_status_codes
448    ${test_ipv4_addr}  ${test_subnet_mask}  ${multicast_ip}  ${HTTP_BAD_REQUEST}
449
450Configure Broadcast IP For Gateway
451    [Documentation]  Configure broadcast IP for gateway and expect an error.
452    [Tags]  Configure_Broadcast_IP_For_Gateway
453    [Template]  Add IP Address
454    [Teardown]  Clear IP Settings On Fail  ${test_ipv4_addr}
455
456    # ip               subnet_mask          gateway          valid_status_codes
457    ${test_ipv4_addr}  ${test_subnet_mask}  ${broadcast_ip}  ${HTTP_BAD_REQUEST}
458
459Configure Null Value For DNS Server
460    [Documentation]  Configure null value for DNS server and expect an error.
461    [Tags]  Configure_Null_Value_For_DNS_Server
462    [Setup]  DNS Test Setup Execution
463    [Teardown]  Run Keywords
464    ...  Configure Static Name Servers  AND  Test Teardown Execution
465
466    Configure Static Name Servers  ${null_value}  ${HTTP_BAD_REQUEST}
467
468Configure Empty Value For DNS Server
469    [Documentation]  Configure empty value for DNS server and expect an error.
470    [Tags]  Configure_Empty_Value_For_DNS_Server
471    [Setup]  DNS Test Setup Execution
472    [Teardown]  Run Keywords
473    ...  Configure Static Name Servers  AND  Test Teardown Execution
474
475    Configure Static Name Servers  ${empty_dictionary}  ${HTTP_BAD_REQUEST}
476
477Configure String Value For DNS Server
478    [Documentation]  Configure string value for DNS server and expect an error.
479    [Tags]  Configure_String_Value_For_DNS_Server
480    [Setup]  DNS Test Setup Execution
481    [Teardown]  Run Keywords
482    ...  Configure Static Name Servers  AND  Test Teardown Execution
483
484    Configure Static Name Servers  ${string_value}  ${HTTP_BAD_REQUEST}
485
486Modify IPv4 Address And Verify
487    [Documentation]  Modify IP address via Redfish and verify.
488    [Tags]  Modify_IPv4_Address_And_Verify
489    [Teardown]  Run Keywords
490    ...  Delete IP Address  ${test_ipv4_addr2}  AND  Test Teardown Execution
491
492     Add IP Address  ${test_ipv4_addr}  ${test_subnet_mask}  ${test_gateway}
493
494     Update IP Address  ${test_ipv4_addr}  ${test_ipv4_addr2}  ${test_subnet_mask}  ${test_gateway}
495
496Verify Modifying IP Address Multiple Times
497    [Documentation]  Verify modifying IP address multiple times.
498    [Tags]  Verify_Modifying_IP_Address_Multiple_Times
499    [Teardown]  Run Keywords
500    ...  Delete IP Address  ${test_ipv4_addr}  AND  Test Teardown Execution
501
502    Add IP Address  ${test_ipv4_addr}  ${test_subnet_mask}  ${test_gateway}
503    Update IP Address  ${test_ipv4_addr}  ${test_ipv4_addr2}  ${test_subnet_mask}  ${test_gateway}
504    Update IP Address  ${test_ipv4_addr2}  ${test_ipv4_addr}  ${test_subnet_mask}  ${test_gateway}
505
506Configure Invalid Values For DNS Server
507    [Documentation]  Configure invalid values for DNS server and expect an error.
508    [Tags]  Configure_Invalid_Values_For_DNS_Server
509    [Setup]  DNS Test Setup Execution
510    [Template]  Configure Static Name Servers
511    [Teardown]  Run Keywords
512    ...  Configure Static Name Servers  AND  Test Teardown Execution
513
514     # static_name_servers        valid_status_codes
515      0xa.0xb.0xc.0xd             ${HTTP_BAD_REQUEST}
516      10.-7.-7.-7                 ${HTTP_BAD_REQUEST}
517      10.3.36                     ${HTTP_BAD_REQUEST}
518      @@@.%%.44.11                ${HTTP_BAD_REQUEST}
519
520
521Config Multiple DNS Servers And Verify
522    [Documentation]  Config multiple DNS servers and verify.
523    [Tags]  Config_Multiple_DNS_Servers_And_Verify
524    [Setup]  DNS Test Setup Execution
525    [Teardown]  Run Keywords
526    ...  Configure Static Name Servers  AND  Test Teardown Execution
527
528     @{list_name_servers}=  Create List  10.5.5.10  10.20.5.10  10.5.6.7
529     Configure Static Name Servers  ${list_name_servers}
530     Verify CLI and Redfish Nameservers
531
532
533Configure And Verify Multiple Static IPv4 Addresses
534    [Documentation]  Configure multiple static ipv4 address via Redfish and verify.
535    [Tags]  Configure_And_Verify_Multiple_Static_IPv4_Addresses
536    [Teardown]  Run Keywords  Delete Multiple Static IPv4 Addresses  ${test_ipv4_addresses}
537    ...  AND  Test Teardown Execution
538
539    ${test_ipv4_addresses}=  Create List  ${test_ipv4_addr}  ${test_ipv4_addr2}
540    Configure Multiple Static IPv4 Addresses   ${test_ipv4_addresses}  ${test_subnet_mask}  ${test_gateway}
541
542
543Configure Multiple Static IPv4 Addresses And Check Persistency
544    [Documentation]  Configure multiple static ipv4 address via Redfish and check persistency.
545    [Tags]  Configure_Multiple_Static_IPv4_Addresses_And_Check_Persistency
546    [Teardown]  Run Keywords  Delete Multiple Static IPv4 Addresses  ${test_ipv4_addresses}
547    ...  AND  Test Teardown Execution
548
549    ${test_ipv4_addresses}=  Create List  ${test_ipv4_addr}  ${test_ipv4_addr2}
550    Configure Multiple Static IPv4 Addresses  ${test_ipv4_addresses}  ${test_subnet_mask}  ${test_gateway}
551
552    # Reboot BMC and verify persistency.
553    Redfish OBMC Reboot (off)  stack_mode=skip
554    Redfish.Login
555    FOR  ${ip}  IN  @{test_ipv4_addresses}
556      Verify IP And Netmask On BMC  ${ip}  ${test_subnet_mask}
557      Verify IP On Redfish URI  ${ip}
558    END
559
560
561Configure And Verify Multiple IPv4 Addresses
562    [Documentation]  Configure multiple IPv4 addresses and verify.
563    [Tags]  Configure_And_Verify_Multiple_IPv4_Addresses
564    [Teardown]  Run Keywords
565    ...  Delete IP Address  ${test_ipv4_addr}  AND  Delete IP Address  ${test_ipv4_addr2}
566    ...  AND  Test Teardown Execution
567
568    ${ip1}=  Create dictionary  Address=${test_ipv4_addr}
569    ...  SubnetMask=255.255.0.0  Gateway=${test_gateway}
570    ${ip2}=  Create dictionary  Address=${test_ipv4_addr2}
571    ...  SubnetMask=255.255.252.0  Gateway=${test_gateway}
572
573    ${empty_dict}=  Create Dictionary
574    ${patch_list}=  Create List
575    ${network_configurations}=  Get Network Configuration
576    ${num_entries}=  Get Length  ${network_configurations}
577
578    FOR  ${INDEX}  IN RANGE  0  ${num_entries}
579      Append To List  ${patch_list}  ${empty_dict}
580    END
581
582    # We need not check for existence of IP on BMC while adding.
583    Append To List  ${patch_list}  ${ip1}  ${ip2}
584    ${payload}=  Create Dictionary  IPv4StaticAddresses=${patch_list}
585    ${active_channel_config}=  Get Active Channel Config
586    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
587    Redfish.patch  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}  body=&{payload}
588    ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
589
590    # Note: Network restart takes around 15-18s after patch request processing.
591    Sleep  ${NETWORK_TIMEOUT}s
592    Wait For Host To Ping  ${OPENBMC_HOST}  ${NETWORK_TIMEOUT}
593    Verify IP On BMC  ${test_ipv4_addr}
594    Verify IP On BMC  ${test_ipv4_addr2}
595
596
597Config Multiple DNS Servers And Check Persistency
598    [Documentation]  Config multiple DNS and check persistency.
599    [Tags]  Config_Multiple_DNS_Servers_And_Check_Persistency
600    [Setup]  DNS Test Setup Execution
601    [Teardown]  Run Keywords
602    ...  Configure Static Name Servers  AND  Test Teardown Execution
603
604    @{list_name_servers}=  Create List  10.5.5.10  10.20.5.10  10.5.6.7
605    Configure Static Name Servers  ${list_name_servers}
606
607    # Reboot BMC and verify persistency.
608    Redfish OBMC Reboot (off)  stack_mode=skip
609    Redfish.Login
610    Verify CLI and Redfish Nameservers
611
612
613Configure Static IP Without Using Gateway And Verify
614    [Documentation]  Configure static IP without using gateway and verify error.
615    [Tags]  Configure_Static_IP_Without_Using_Gateway_And_Verify
616
617    ${ip}=  Create dictionary  Address=${test_ipv4_addr}
618    ...  SubnetMask=${test_subnet_mask}
619    ${empty_dict}=  Create Dictionary
620    ${patch_list}=  Create List
621    ${network_configurations}=  Get Network Configuration
622
623    ${num_entries}=  Get Length  ${network_configurations}
624    FOR  ${INDEX}  IN RANGE  0  ${num_entries}
625      Append To List  ${patch_list}  ${empty_dict}
626    END
627
628    # We need not check for existence of IP on BMC while adding.
629    Append To List  ${patch_list}  ${ip}
630    ${payload}=  Create Dictionary  IPv4StaticAddresses=${patch_list}
631    ${active_channel_config}=  Get Active Channel Config
632    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
633    Redfish.patch  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
634    ...  body=&{payload}  valid_status_codes=[${HTTP_BAD_REQUEST}]
635
636
637Test Network Response On Specified Host State
638    [Documentation]  Verifying the BMC network response when host is on and off.
639    [Tags]  Test_Network_Response_On_Specified_Host_State
640    [Template]  Verify Network Response On Specified Host State
641
642    # host_state
643    on
644    off
645
646
647*** Keywords ***
648
649Test Setup Execution
650    [Documentation]  Test setup execution.
651
652    Redfish.Login
653
654    @{network_configurations}=  Get Network Configuration
655    Set Test Variable  @{network_configurations}
656
657    # Get BMC IP address and prefix length.
658    ${ip_data}=  Get BMC IP Info
659    Set Test Variable  ${ip_data}
660
661
662Verify Netmask On BMC
663    [Documentation]  Verify netmask on BMC.
664    [Arguments]  ${netmask}
665
666    # Description of the argument(s):
667    # netmask  netmask value to be verified.
668
669    ${prefix_length}=  Netmask Prefix Length  ${netmask}
670
671    Should Contain Match  ${ip_data}  */${prefix_length}
672    ...  msg=Prefix length does not exist.
673
674Verify IP And Netmask On BMC
675    [Documentation]  Verify IP and netmask on BMC.
676    [Arguments]  ${ip}  ${netmask}
677
678    # Description of the argument(s):
679    # ip       IP address to be verified.
680    # netmask  netmask value to be verified.
681
682    ${prefix_length}=  Netmask Prefix Length  ${netmask}
683    @{ip_data}=  Get BMC IP Info
684
685    ${ip_with_netmask}=  Catenate  ${ip}/${prefix_length}
686    Should Contain  ${ip_data}  ${ip_with_netmask}
687    ...  msg=IP and netmask pair does not exist.
688
689Test Teardown Execution
690    [Documentation]  Test teardown execution.
691
692    FFDC On Test Case Fail
693    Redfish.Logout
694
695Clear IP Settings On Fail
696    [Documentation]  Clear IP settings on fail.
697    [Arguments]  ${ip}
698
699    # Description of argument(s):
700    # ip  IP address to be deleted.
701
702    Run Keyword If  '${TEST STATUS}' == 'FAIL'
703    ...  Delete IP Address  ${ip}
704
705    Test Teardown Execution
706
707Verify CLI and Redfish Nameservers
708    [Documentation]  Verify that nameservers obtained via Redfish do not
709    ...  match those found in /etc/resolv.conf.
710
711    ${active_channel_config}=  Get Active Channel Config
712    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
713
714    ${redfish_nameservers}=  Redfish.Get Attribute
715    ...  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}  StaticNameServers
716    ${resolve_conf_nameservers}=  CLI Get Nameservers
717    Rqprint Vars  redfish_nameservers  resolve_conf_nameservers
718
719    List Should Contain Sub List  ${resolve_conf_nameservers}  ${redfish_nameservers}
720    ...  msg=The nameservers obtained via Redfish do not match those found in /etc/resolv.conf.
721
722Configure Static Name Servers
723    [Documentation]  Configure DNS server on BMC.
724    [Arguments]  ${static_name_servers}=${original_nameservers}
725     ...  ${valid_status_codes}=${HTTP_OK}
726
727    # Description of the argument(s):
728    # static_name_servers  A list of static name server IPs to be
729    #                      configured on the BMC.
730
731    ${active_channel_config}=  Get Active Channel Config
732    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
733
734    ${type} =  Evaluate  type($static_name_servers).__name__
735    ${static_name_servers}=  Set Variable If  '${type}'=='str'
736    ...  '${static_name_servers}'  ${static_name_servers}
737
738    # Currently BMC is sending 500 response code instead of 400 for invalid scenarios.
739    Redfish.Patch  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
740    ...  body={'StaticNameServers': ${static_name_servers}}
741    ...  valid_status_codes=[${valid_status_codes}, ${HTTP_INTERNAL_SERVER_ERROR}]
742
743    # Patch operation takes 1 to 3 seconds to set new value.
744    Sleep  3s
745
746    # Check if newly added DNS server is configured on BMC.
747    ${cli_nameservers}=  CLI Get Nameservers
748    ${cmd_status}=  Run Keyword And Return Status
749    ...  List Should Contain Sub List  ${cli_nameservers}  ${static_name_servers}
750
751    Run Keyword If  '${valid_status_codes}' == '${HTTP_OK}'
752    ...  Should Be True  ${cmd_status} == ${True}
753    ...  ELSE  Should Be True  ${cmd_status} == ${False}
754
755Delete Static Name Servers
756    [Documentation]  Delete static name servers.
757
758    DNS Test Setup Execution
759    Configure Static Name Servers  static_name_servers=@{EMPTY}
760
761    # Check if all name servers deleted on BMC.
762    ${nameservers}=  CLI Get Nameservers
763    Should Not Contain  ${nameservers}  ${original_nameservers}
764
765    DNS Test Setup Execution
766
767    Should Be Empty  ${original_nameservers}
768
769DNS Test Setup Execution
770    [Documentation]  Do DNS test setup execution.
771
772    Redfish.Login
773
774    ${active_channel_config}=  Get Active Channel Config
775    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
776
777    ${original_nameservers}=  Redfish.Get Attribute
778    ...  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}  StaticNameServers
779
780    Rprint Vars  original_nameservers
781    # Set suite variables to trigger restoration during teardown.
782    Set Suite Variable  ${original_nameservers}
783
784
785Suite Setup Execution
786    [Documentation]  Do suite setup execution.
787
788    # - Get DHCP IPv4 enabled/disabled status from redfish managers URI
789    # - If DHCP IPv4 is enabled ,
790    #   - Get DHCP IPv4 settings - ip address, gateway, subnetmask
791    #   - And set the same as static IP address
792
793    Redfish.Login
794    ${DHCPEnabled}=  Get IPv4 DHCP Enabled Status
795    Set Suite Variable  ${DHCPEnabled}
796
797    Run Keyword If  ${DHCPEnabled}==True
798    ...  Run Keywords
799    ...  ${ip_addr}  ${gateway}  ${subnetmask}=  Get DHCP IP Info  AND
800    ...  Add IP Address  ${ip_addr}  ${subnetmask}  ${gateway}  AND
801    ...  Set Suite Variable  ${ip_addr}
802
803    ${test_gateway}=  Get BMC Default Gateway
804    Set Suite Variable  ${test_gateway}
805
806
807Suite Teardown Execution
808    [Documentation]  Do suite teardown execution.
809
810    # - If the DHCP IPv4 is enabled before suite setup execution
811    #   - Restore the DHCP IPv4 to enabled state
812
813    Run Keyword If  ${DHCPEnabled}==True
814    ...  Enable IPv4 DHCP Settings
815
816
817Update IP Address
818    [Documentation]  Update IP address of BMC.
819    [Arguments]  ${ip}  ${new_ip}  ${netmask}  ${gw_ip}
820    ...  ${valid_status_codes}=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
821
822    # Description of argument(s):
823    # ip                  IP address to be replaced (e.g. "10.7.7.7").
824    # new_ip              New IP address to be configured.
825    # netmask             Netmask value.
826    # gw_ip               Gateway IP address.
827    # valid_status_codes  Expected return code from patch operation
828    #                     (e.g. "200").  See prolog of rest_request
829    #                     method in redfish_plus.py for details.
830
831    ${empty_dict}=  Create Dictionary
832    ${patch_list}=  Create List
833    ${ip_data}=  Create Dictionary  Address=${new_ip}  SubnetMask=${netmask}  Gateway=${gw_ip}
834
835    # Find the position of IP address to be modified.
836    @{network_configurations}=  Get Network Configuration
837    FOR  ${network_configuration}  IN  @{network_configurations}
838      Run Keyword If  '${network_configuration['Address']}' == '${ip}'
839      ...  Append To List  ${patch_list}  ${ip_data}
840      ...  ELSE  Append To List  ${patch_list}  ${empty_dict}
841    END
842
843    ${ip_found}=  Run Keyword And Return Status  List Should Contain Value
844    ...  ${patch_list}  ${ip_data}  msg=${ip} does not exist on BMC
845    Pass Execution If  ${ip_found} == ${False}  ${ip} does not exist on BMC
846
847    # Run patch command only if given IP is found on BMC
848    ${data}=  Create Dictionary  IPv4StaticAddresses=${patch_list}
849
850    ${active_channel_config}=  Get Active Channel Config
851    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
852
853    Redfish.patch  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
854    ...  body=&{data}  valid_status_codes=${valid_status_codes}
855
856    # Note: Network restart takes around 15-18s after patch request processing.
857    Sleep  ${NETWORK_TIMEOUT}s
858    Wait For Host To Ping  ${OPENBMC_HOST}  ${NETWORK_TIMEOUT}
859
860    Verify IP On BMC  ${new_ip}
861    Validate Network Config On BMC
862
863Configure Multiple Static IPv4 Addresses
864    [Documentation]  Configure multiple static ipv4 address via Redfish and verify.
865    [Arguments]  ${ip_addreses}  ${subnet_mask}  ${gateway}
866
867    # Description of argument(s):
868    # ip_addreses         A list of IP addresses to be added (e.g.["10.7.7.7"]).
869    # subnet_mask         Subnet mask for the IP to be added (e.g. "255.255.0.0").
870    # gateway             Gateway for the IP to be added (e.g. "10.7.7.1").
871
872    FOR  ${ip}  IN   @{ip_addreses}
873       Add IP Address  ${ip}  ${subnet_mask}  ${gateway}
874    END
875    Validate Network Config On BMC
876
877
878Delete Multiple Static IPv4 Addresses
879    [Documentation]  Delete multiple static ipv4 address via Redfish.
880    [Arguments]  ${ip_addreses}
881
882    # Description of argument(s):
883    # ip_addreses         A list of IP addresses to be deleted (e.g.["10.7.7.7"]).
884
885    FOR  ${ip}  IN   @{ip_addreses}
886       Delete IP Address  ${ip}
887    END
888    Validate Network Config On BMC
889
890Verify Network Response On Specified Host State
891    [Documentation]  Verifying the BMC network response when host is on and off.
892    [Arguments]  ${host_state}
893
894    # Description of argument(s):
895    # host_state   if host_state is on then host is booted to operating system.
896    #              if host_state is off then host is power off.
897    #              (eg. on, off).
898
899    ${active_channel_config}=  Get Active Channel Config
900    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
901
902    Run Keyword If  '${host_state}' == 'on'
903    ...    Redfish Power On  stack_mode=skip
904    ...  ELSE
905    ...    Redfish Power off  stack_mode=skip
906
907    Redfish.Get  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
908    Ping Host  ${OPENBMC_HOST}
909
910
911Verify IP On Redfish URI
912    [Documentation]  Verify given IP on redfish URI.
913    [Arguments]  ${ip_address}
914
915    # Description of argument(s):
916    # ip_address   Configured IP address which need to verified.
917
918    ${network_configurations}=  Get Network Configuration
919
920    FOR  ${network_configuration}  IN  @{network_configurations}
921        ${ip_found}=  Set Variable If  '${network_configuration['Address']}' == '${ip_address}'  ${True}
922        ...  ${False}
923        Exit For Loop If  ${ip_found}
924    END
925    Run Keyword If  '${ip_found}' == '${False}'
926    ...  Fail  msg=Configured IP address not found on EthernetInterface URI.
927
928
929Enable IPv4 DHCP Settings
930    [Documentation]  Set IPv4 DHCP enabled status true/false in redfish URI.
931    [Arguments]  ${status}=${True}
932
933    # Description of argument(s):
934    # status   IPv4 DHCPEnabled status which needs to be set.
935    #          (e.g. True or False)
936
937    ${active_channel_config}=  Get Active Channel Config
938    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
939    ${DHCPv4}=  Create Dictionary  DHCPEnabled=${status}
940
941    ${payload}=  Create Dictionary  DHCPv4=${DHCPv4}
942    Redfish.patch  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
943    ...  body=&{payload}  valid_status_codes=[${HTTP_NO_CONTENT}, ${HTTP_OK}]
944
945    Sleep  ${NETWORK_TIMEOUT}s
946    Wait For Host To Ping  ${OPENBMC_HOST}  ${NETWORK_TIMEOUT}
947
948
949Get IPv4 DHCP Enabled Status
950    [Documentation]  Return IPv4 DHCP enabled status from redfish URI.
951
952    ${active_channel_config}=  Get Active Channel Config
953    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
954    ${resp}=  Redfish.Get Attribute  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}  DHCPv4
955    ${status}=  Set Variable  ${resp['DHCPEnabled']}
956    Return From Keyword  ${status}
957
958
959Get DHCP IP Info
960    [Documentation]  Return DHCP IP address, gateway and subnetmask from redfish URI.
961
962    ${active_channel_config}=  Get Active Channel Config
963    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
964    ${resp_list}=  Redfish.Get Attribute  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}  IPv4Addresses
965    FOR  ${resp}  IN  @{resp_list}
966        Continue For Loop If  '${resp['AddressOrigin']}' != 'DHCP'
967        ${ip_addr}=  Set Variable  ${resp['Address']}
968        ${gateway}=  Set Variable  ${resp['Gateway']}
969        ${subnetmask}=  Set Variable  ${resp['SubnetMask']}
970        Return From Keyword  ${ip_addr}  ${gateway}  ${subnetmask}
971    END
972