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
11Test Setup     Test Setup Execution
12Test Teardown  Test Teardown Execution
13Suite Setup    Suite Setup Execution
14
15Force Tags     Network_Conf_Test
16
17*** Variables ***
18${test_hostname}           openbmc
19${test_ipv4_addr}          10.7.7.7
20${test_ipv4_invalid_addr}  0.0.1.a
21${test_subnet_mask}        255.255.0.0
22${broadcast_ip}            10.7.7.255
23${loopback_ip}             127.0.0.2
24${multicast_ip}            224.6.6.6
25${out_of_range_ip}         10.7.7.256
26${test_ipv4_addr2}         10.7.7.8
27
28# Valid netmask is 4 bytes long and has continuos block of 1s.
29# Maximum valid value in each octet is 255 and least value is 0.
30# 253 is not valid, as binary value is 11111101.
31${invalid_netmask}         255.255.253.0
32${alpha_netmask}           ff.ff.ff.ff
33# Maximum value of octet in netmask is 255.
34${out_of_range_netmask}    255.256.255.0
35${more_byte_netmask}       255.255.255.0.0
36${less_byte_netmask}       255.255.255
37${threshold_netmask}       255.255.255.255
38${lowest_netmask}          128.0.0.0
39
40# There will be 4 octets in IP address (e.g. xx.xx.xx.xx)
41# but trying to configure xx.xx.xx
42${less_octet_ip}           10.3.36
43
44# For the address 10.6.6.6, the 10.6.6.0 portion describes the
45# network ID and the 6 describe the host.
46
47${network_id}              10.7.7.0
48${hex_ip}                  0xa.0xb.0xc.0xd
49${negative_ip}             10.-7.-7.7
50${hex_ip}                  0xa.0xb.0xc.0xd
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
122Add Valid IPv4 Address And Verify
123    [Documentation]  Add IPv4 Address via Redfish and verify.
124    [Tags]  Add_Valid_IPv4_Addres_And_Verify
125    [Teardown]   Run Keywords
126    ...  Delete IP Address  ${test_ipv4_addr}  AND  Test Teardown Execution
127
128     Add IP Address  ${test_ipv4_addr}  ${test_subnet_mask}  ${test_gateway}
129
130Add Invalid IPv4 Address And Verify
131    [Documentation]  Add Invalid IPv4 Address via Redfish and verify.
132    [Tags]  Add_Invalid_IPv4_Addres_And_Verify
133
134    Add IP Address  ${test_ipv4_invalid_addr}  ${test_subnet_mask}
135    ...  ${test_gateway}  valid_status_codes=${HTTP_BAD_REQUEST}
136
137Configure Out Of Range IP
138    [Documentation]  Configure out-of-range IP address.
139    [Tags]  Configure_Out_Of_Range_IP
140    [Template]  Add IP Address
141
142    # ip                subnet_mask          gateway          valid_status_codes
143    ${out_of_range_ip}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
144
145Configure Broadcast IP
146    [Documentation]  Configure broadcast IP address.
147    [Tags]  Configure_Broadcast_IP
148    [Template]  Add IP Address
149    [Teardown]  Clear IP Settings On Fail  ${broadcast_ip}
150
151    # ip             subnet_mask          gateway          valid_status_codes
152    ${broadcast_ip}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
153
154Configure Multicast IP
155    [Documentation]  Configure multicast IP address.
156    [Tags]  Configure_Multicast_IP
157    [Template]  Add IP Address
158    [Teardown]  Clear IP Settings On Fail  ${multicast_ip}
159
160    # ip             subnet_mask          gateway          valid_status_codes
161    ${multicast_ip}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
162
163Configure Loopback IP
164    [Documentation]  Configure loopback IP address.
165    [Tags]  Configure_Loopback_IP
166    [Template]  Add IP Address
167    [Teardown]  Clear IP Settings On Fail  ${loopback_ip}
168
169    # ip            subnet_mask          gateway          valid_status_codes
170    ${loopback_ip}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
171
172Add Valid IPv4 Address And Check Persistency
173    [Documentation]  Add IPv4 address and check peristency.
174    [Tags]  Add_Valid_IPv4_Addres_And_Check_Persistency
175    [Teardown]  Run Keywords
176    ...  Delete IP Address  ${test_ipv4_addr}  AND  Test Teardown Execution
177
178    Add IP Address  ${test_ipv4_addr}  ${test_subnet_mask}  ${test_gateway}
179
180    # Reboot BMC and verify persistency.
181    OBMC Reboot (off)
182    Redfish.Login
183    Verify IP On BMC  ${test_ipv4_addr}
184
185Add Fourth Octet Threshold IP And Verify
186    [Documentation]  Add fourth octet threshold IP and verify.
187    [Tags]  Add_Fourth_Octet_Threshold_IP_And_Verify
188    [Teardown]  Run Keywords
189    ...  Delete IP Address  10.7.7.254  AND  Test Teardown Execution
190
191     Add IP Address  10.7.7.254  ${test_subnet_mask}  ${test_gateway}
192
193Add Fourth Octet Lowest IP And Verify
194    [Documentation]  Add fourth octet lowest IP and verify.
195    [Tags]  Add_Fourth_Octet_Lowest_IP_And_Verify
196    [Teardown]  Run Keywords
197    ...  Delete IP Address  10.7.7.1  AND  Test Teardown Execution
198
199     Add IP Address  10.7.7.1  ${test_subnet_mask}  ${test_gateway}
200
201Add Third Octet Threshold IP And Verify
202    [Documentation]  Add third octet threshold IP and verify.
203    [Tags]  Add_Third_Octet_Threshold_IP_And_Verify
204    [Teardown]  Run Keywords
205    ...  Delete IP Address  10.7.255.7  AND  Test Teardown Execution
206
207     Add IP Address  10.7.255.7  ${test_subnet_mask}  ${test_gateway}
208
209Add Third Octet Lowest IP And Verify
210    [Documentation]  Add third octet lowest IP and verify.
211    [Tags]  Add_Third_Octet_Lowest_IP_And_Verify
212    [Teardown]  Run Keywords
213    ...  Delete IP Address  10.7.0.7  AND  Test Teardown Execution
214
215     Add IP Address  10.7.0.7  ${test_subnet_mask}  ${test_gateway}
216
217Add Second Octet Threshold IP And Verify
218    [Documentation]  Add second octet threshold IP and verify.
219    [Tags]  Add_Second_Octet_Threshold_IP_And_Verify
220    [Teardown]  Run Keywords
221    ...  Delete IP Address  10.255.7.7  AND  Test Teardown Execution
222
223     Add IP Address  10.255.7.7  ${test_subnet_mask}  ${test_gateway}
224
225Add Second Octet Lowest IP And Verify
226    [Documentation]  Add second octet lowest IP and verify.
227    [Tags]  Add_Second_Octet_Lowest_IP_And_Verify
228    [Teardown]  Run Keywords
229    ...  Delete IP Address  10.0.7.7  AND  Test Teardown Execution
230
231     Add IP Address  10.0.7.7  ${test_subnet_mask}  ${test_gateway}
232
233Add First Octet Threshold IP And Verify
234    [Documentation]  Add first octet threshold IP and verify.
235    [Tags]  Add_First_Octet_Threshold_IP_And_Verify
236    [Teardown]  Run Keywords
237    ...  Delete IP Address  223.7.7.7  AND  Test Teardown Execution
238
239     Add IP Address  223.7.7.7  ${test_subnet_mask}  ${test_gateway}
240
241Add First Octet Lowest IP And Verify
242    [Documentation]  Add first octet lowest IP and verify.
243    [Tags]  Add_First_Octet_Lowest_IP_And_Verify
244    [Teardown]  Run Keywords
245    ...  Delete IP Address  1.7.7.7  AND  Test Teardown Execution
246
247     Add IP Address  1.7.7.7  ${test_subnet_mask}  ${test_gateway}
248
249Configure Invalid Netmask
250    [Documentation]  Verify error while setting invalid netmask.
251    [Tags]  Configure_Invalid_Netmask
252    [Template]  Add IP Address
253
254    # ip               subnet_mask         gateway          valid_status_codes
255    ${test_ipv4_addr}  ${invalid_netmask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
256
257Configure Out Of Range Netmask
258    [Documentation]  Verify error while setting out of range netmask.
259    [Tags]  Configure_Out_Of_Range_Netmask
260    [Template]  Add IP Address
261
262    # ip               subnet_mask              gateway          valid_status_codes
263    ${test_ipv4_addr}  ${out_of_range_netmask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
264
265Configure Alpha Netmask
266    [Documentation]  Verify error while setting alpha netmask.
267    [Tags]  Configure_Alpha_Netmask
268    [Template]  Add IP Address
269
270    # ip               subnet_mask       gateway          valid_status_codes
271    ${test_ipv4_addr}  ${alpha_netmask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
272
273Configure More Byte Netmask
274    [Documentation]  Verify error while setting more byte netmask.
275    [Tags]  Configure_More_Byte_Netmask
276    [Template]  Add IP Address
277
278    # ip               subnet_mask           gateway          valid_status_codes
279    ${test_ipv4_addr}  ${more_byte_netmask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
280
281Configure Less Byte Netmask
282    [Documentation]  Verify error while setting less byte netmask.
283    [Tags]  Configure_Less_Byte_Netmask
284    [Template]  Add IP Address
285
286    # ip               subnet_mask           gateway          valid_status_codes
287    ${test_ipv4_addr}  ${less_byte_netmask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
288
289Configure Threshold Netmask And Verify
290    [Documentation]  Configure threshold netmask and verify.
291    [Tags]  Configure_Threshold_Netmask_And_verify
292    [Teardown]  Run Keywords
293    ...   Delete IP Address  ${test_ipv4_addr}  AND  Test Teardown Execution
294
295     Add IP Address  ${test_ipv4_addr}  ${threshold_netmask}  ${test_gateway}
296
297Configure Lowest Netmask And Verify
298    [Documentation]  Configure lowest netmask and verify.
299    [Tags]  Configure_Lowest_Netmask_And_verify
300    [Teardown]  Run Keywords
301    ...   Delete IP Address  ${test_ipv4_addr}  AND  Test Teardown Execution
302
303     Add IP Address  ${test_ipv4_addr}  ${lowest_netmask}  ${test_gateway}
304
305Configure Network ID
306    [Documentation]  Verify error while configuring network ID.
307    [Tags]  Configure_Network_ID
308    [Template]  Add IP Address
309    [Teardown]  Clear IP Settings On Fail  ${network_id}
310
311    # ip           subnet_mask          gateway          valid_status_codes
312    ${network_id}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
313
314Configure Less Octet IP
315    [Documentation]  Verify error while Configuring less octet IP address.
316    [Tags]  Configure_Less_Octet_IP
317    [Template]  Add IP Address
318
319    # ip              subnet_mask          gateway          valid_status_codes
320    ${less_octet_ip}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
321
322Configure Empty IP
323    [Documentation]  Verify error while Configuring empty IP address.
324    [Tags]  Configure_Empty_IP
325    [Template]  Add IP Address
326
327    # ip      subnet_mask          gateway          valid_status_codes
328    ${EMPTY}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
329
330Configure Special Char IP
331    [Documentation]  Configure invalid IP address containing special chars.
332    [Tags]  Configure_Special_Char_IP
333    [Template]  Add IP Address
334
335    # ip          subnet_mask          gateway          valid_status_codes
336    @@@.%%.44.11  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
337
338Configure Hexadecimal IP
339    [Documentation]  Configure invalid IP address containing hex value.
340    [Tags]  Configure_Hexadecimal_IP
341    [Template]  Add IP Address
342
343    # ip       subnet_mask          gateway          valid_status_codes
344    ${hex_ip}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
345
346Configure Negative Octet IP
347    [Documentation]  Configure invalid IP address containing negative octet.
348    [Tags]  Configure_Negative_Octet_IP
349    [Template]  Add IP Address
350
351    # ip            subnet_mask          gateway          valid_status_codes
352    ${negative_ip}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
353
354Configure Incomplete IP For Gateway
355    [Documentation]  Configure incomplete IP for gateway and expect an error.
356    [Tags]  Configure_Incomplete_IP_For_Gateway
357    [Template]  Add IP Address
358
359    # ip               subnet_mask          gateway           valid_status_codes
360    ${test_ipv4_addr}  ${test_subnet_mask}  ${less_octet_ip}  ${HTTP_BAD_REQUEST}
361
362Configure Special Char IP For Gateway
363    [Documentation]  Configure special char IP for gateway and expect an error.
364    [Tags]  Configure_Special_Char_IP_For_Gateway
365    [Template]  Add IP Address
366
367    # ip               subnet_mask          gateway       valid_status_codes
368    ${test_ipv4_addr}  ${test_subnet_mask}  @@@.%%.44.11  ${HTTP_BAD_REQUEST}
369
370Configure Hexadecimal IP For Gateway
371    [Documentation]  Configure hexadecimal IP for gateway and expect an error.
372    [Tags]  Configure_Hexadecimal_IP_For_Gateway
373    [Template]  Add IP Address
374
375    # ip               subnet_mask          gateway    valid_status_codes
376    ${test_ipv4_addr}  ${test_subnet_mask}  ${hex_ip}  ${HTTP_BAD_REQUEST}
377
378Get DNS Server And Verify
379    [Documentation]  Get DNS server via Redfish and verify.
380    [Tags]  Get_DNS_Server_And_Verify
381
382    Verify CLI and Redfish Nameservers
383
384Configure DNS Server And Verify
385    [Documentation]  Configure DNS server and verify.
386    [Tags]  Configure_DNS_Server_And_Verify
387    [Setup]  DNS Test Setup Execution
388    [Teardown]  Run Keywords
389    ...  Configure Static Name Servers  AND  Test Teardown Execution
390
391    Configure Static Name Servers  ${static_name_servers}
392    Verify CLI and Redfish Nameservers
393
394Delete DNS Server And Verify
395    [Documentation]  Delete DNS server and verify.
396    [Tags]  Delete_DNS_Server_And_Verify
397    [Setup]  DNS Test Setup Execution
398    [Teardown]  Run Keywords
399    ...  Configure Static Name Servers  AND  Test Teardown Execution
400
401    Delete Static Name Servers
402    Verify CLI and Redfish Nameservers
403
404Configure DNS Server And Check Persistency
405    [Documentation]  Configure DNS server and check persistency on reboot.
406    [Tags]  Configure_DNS_Server_And_Check_Persistency
407    [Setup]  DNS Test Setup Execution
408    [Teardown]  Run Keywords
409    ...  Configure Static Name Servers  AND  Test Teardown Execution
410
411    Configure Static Name Servers  ${static_name_servers}
412    # Reboot BMC and verify persistency.
413    OBMC Reboot (off)
414    Verify CLI and Redfish Nameservers
415
416Configure Loopback IP For Gateway
417    [Documentation]  Configure loopback IP for gateway and expect an error.
418    [Tags]  Configure_Loopback_IP_For_Gateway
419    [Template]  Add IP Address
420    [Teardown]  Clear IP Settings On Fail  ${test_ipv4_addr}
421
422    # ip               subnet_mask          gateway         valid_status_codes
423    ${test_ipv4_addr}  ${test_subnet_mask}  ${loopback_ip}  ${HTTP_BAD_REQUEST}
424
425Configure Network ID For Gateway
426    [Documentation]  Configure network ID for gateway and expect an error.
427    [Tags]  Configure_Network_ID_For_Gateway
428    [Template]  Add IP Address
429    [Teardown]  Clear IP Settings On Fail  ${test_ipv4_addr}
430
431    # ip               subnet_mask          gateway        valid_status_codes
432    ${test_ipv4_addr}  ${test_subnet_mask}  ${network_id}  ${HTTP_BAD_REQUEST}
433
434Configure Multicast IP For Gateway
435    [Documentation]  Configure multicast IP for gateway and expect an error.
436    [Tags]  Configure_Multicast_IP_For_Gateway
437    [Template]  Add IP Address
438    [Teardown]  Clear IP Settings On Fail  ${test_ipv4_addr}
439
440    # ip               subnet_mask          gateway           valid_status_codes
441    ${test_ipv4_addr}  ${test_subnet_mask}  ${multicast_ip}  ${HTTP_BAD_REQUEST}
442
443Configure Broadcast IP For Gateway
444    [Documentation]  Configure broadcast IP for gateway and expect an error.
445    [Tags]  Configure_Broadcast_IP_For_Gateway
446    [Template]  Add IP Address
447    [Teardown]  Clear IP Settings On Fail  ${test_ipv4_addr}
448
449    # ip               subnet_mask          gateway          valid_status_codes
450    ${test_ipv4_addr}  ${test_subnet_mask}  ${broadcast_ip}  ${HTTP_BAD_REQUEST}
451
452Configure Null Value For DNS Server
453    [Documentation]  Configure null value for DNS server and expect an error.
454    [Tags]  Configure_Null_Value_For_DNS_Server
455    [Setup]  DNS Test Setup Execution
456    [Teardown]  Run Keywords
457    ...  Configure Static Name Servers  AND  Test Teardown Execution
458
459    Configure Static Name Servers  ${null_value}  ${HTTP_BAD_REQUEST}
460
461Configure Empty Value For DNS Server
462    [Documentation]  Configure empty value for DNS server and expect an error.
463    [Tags]  Configure_Empty_Value_For_DNS_Server
464    [Setup]  DNS Test Setup Execution
465    [Teardown]  Run Keywords
466    ...  Configure Static Name Servers  AND  Test Teardown Execution
467
468    Configure Static Name Servers  ${empty_dictionary}  ${HTTP_BAD_REQUEST}
469
470Configure String Value For DNS Server
471    [Documentation]  Configure string value for DNS server and expect an error.
472    [Tags]  Configure_String_Value_For_DNS_Server
473    [Setup]  DNS Test Setup Execution
474    [Teardown]  Run Keywords
475    ...  Configure Static Name Servers  AND  Test Teardown Execution
476
477    Configure Static Name Servers  ${string_value}  ${HTTP_BAD_REQUEST}
478
479Modify IPv4 Address And Verify
480    [Documentation]  Modify IP address via Redfish and verify.
481    [Tags]  Modify_IPv4_Addres_And_Verify
482    [Teardown]  Run Keywords
483    ...  Delete IP Address  ${test_ipv4_addr2}  AND  Delete IP Address  ${test_ipv4_addr}
484    ...  AND  Test Teardown Execution
485
486     Add IP Address  ${test_ipv4_addr}  ${test_subnet_mask}  ${test_gateway}
487
488     Update IP Address  ${test_ipv4_addr}  ${test_ipv4_addr2}  ${test_subnet_mask}  ${test_gateway}
489
490
491*** Keywords ***
492
493Test Setup Execution
494    [Documentation]  Test setup execution.
495
496    Redfish.Login
497
498    @{network_configurations}=  Get Network Configuration
499    Set Test Variable  @{network_configurations}
500
501    # Get BMC IP address and prefix length.
502    ${ip_data}=  Get BMC IP Info
503    Set Test Variable  ${ip_data}
504
505
506Verify Netmask On BMC
507    [Documentation]  Verify netmask on BMC.
508    [Arguments]  ${netmask}
509
510    # Description of the argument(s):
511    # netmask  netmask value to be verified.
512
513    ${prefix_length}=  Netmask Prefix Length  ${netmask}
514
515    Should Contain Match  ${ip_data}  */${prefix_length}
516    ...  msg=Prefix length does not exist.
517
518Verify IP And Netmask On BMC
519    [Documentation]  Verify IP and netmask on BMC.
520    [Arguments]  ${ip}  ${netmask}
521
522    # Description of the argument(s):
523    # ip       IP address to be verified.
524    # netmask  netmask value to be verified.
525
526    ${prefix_length}=  Netmask Prefix Length  ${netmask}
527    @{ip_data}=  Get BMC IP Info
528
529    ${ip_with_netmask}=  Catenate  ${ip}/${prefix_length}
530    Should Contain  ${ip_data}  ${ip_with_netmask}
531    ...  msg=IP and netmask pair does not exist.
532
533Validate Hostname On BMC
534    [Documentation]  Verify that the hostname read via Redfish is the same as the
535    ...  hostname configured on system.
536    [Arguments]  ${hostname}
537
538    # Description of argument(s):
539    # hostname  A hostname value which is to be compared to the hostname
540    #           configured on system.
541
542    ${sys_hostname}=  Get BMC Hostname
543    Should Be Equal  ${sys_hostname}  ${hostname}
544    ...  ignore_case=True  msg=Hostname does not exist.
545
546Test Teardown Execution
547    [Documentation]  Test teardown execution.
548
549    FFDC On Test Case Fail
550    Redfish.Logout
551
552Clear IP Settings On Fail
553    [Documentation]  Clear IP settings on fail.
554    [Arguments]  ${ip}
555
556    # Description of argument(s):
557    # ip  IP address to be deleted.
558
559    Run Keyword If  '${TEST STATUS}' == 'FAIL'
560    ...  Delete IP Address  ${ip}
561
562    Test Teardown Execution
563
564Verify CLI and Redfish Nameservers
565    [Documentation]  Verify that nameservers obtained via Redfish do not
566    ...  match those found in /etc/resolv.conf.
567
568    ${active_channel_config}=  Get Active Channel Config
569    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
570
571    ${redfish_nameservers}=  Redfish.Get Attribute
572    ...  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}  StaticNameServers
573    ${resolve_conf_nameservers}=  CLI Get Nameservers
574    Rqprint Vars  redfish_nameservers  resolve_conf_nameservers
575
576    # Check that the 2 lists are equivalent.
577    ${match}=  Evaluate  set($redfish_nameservers) == set($resolve_conf_nameservers)
578    Should Be True  ${match}
579    ...  The nameservers obtained via Redfish do not match those found in /etc/resolv.conf.
580
581
582Configure Static Name Servers
583    [Documentation]  Configure DNS server on BMC.
584    [Arguments]  ${static_name_servers}=${original_nameservers}
585     ...  ${valid_status_codes}=${HTTP_OK}
586
587    # Description of the argument(s):
588    # static_name_servers  A list of static name server IPs to be
589    #                      configured on the BMC.
590
591    ${active_channel_config}=  Get Active Channel Config
592    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
593
594    # Currently BMC is sending 500 response code instead of 400 for invalid scenarios.
595    Redfish.Patch  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
596    ...  body={'StaticNameServers': ${static_name_servers}}
597    ...  valid_status_codes=[${valid_status_codes}, ${HTTP_INTERNAL_SERVER_ERROR}]
598
599    # Patch operation takes 1 to 3 seconds to set new value.
600    Sleep  3s
601
602    # Check if newly added DNS server is configured on BMC.
603    ${cli_nameservers}=  CLI Get Nameservers
604    ${cmd_status}=  Run Keyword And Return Status
605    ...  List Should Contain Sub List  ${cli_nameservers}  ${static_name_servers}
606
607    Run Keyword If  '${valid_status_codes}' == '${HTTP_OK}'
608    ...  Should Be True  ${cmd_status} == ${True}
609    ...  ELSE  Should Be True  ${cmd_status} == ${False}
610
611Delete Static Name Servers
612    [Documentation]  Delete static name servers.
613
614    Configure Static Name Servers  @{EMPTY}
615
616    # Check if all name servers deleted on BMC.
617    ${nameservers}=  CLI Get Nameservers
618    Should Be Empty  ${nameservers}
619
620DNS Test Setup Execution
621    [Documentation]  Do DNS test setup execution.
622
623    Redfish.Login
624
625    ${active_channel_config}=  Get Active Channel Config
626    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
627
628    ${original_nameservers}=  Redfish.Get Attribute
629    ...  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}  StaticNameServers
630
631    Rprint Vars  original_nameservers
632    # Set suite variables to trigger restoration during teardown.
633    Set Suite Variable  ${original_nameservers}
634
635Suite Setup Execution
636    [Documentation]  Do suite setup execution.
637
638    ${test_gateway}=  Get BMC Default Gateway
639    Set Suite Variable  ${test_gateway}
640
641Update IP Address
642    [Documentation]  Update IP address of BMC.
643    [Arguments]  ${ip}  ${new_ip}  ${netmask}  ${gw_ip}  ${valid_status_codes}=${HTTP_OK}
644
645    # Description of argument(s):
646    # ip                  IP address to be replaced (e.g. "10.7.7.7").
647    # new_ip              New IP address to be configured.
648    # netmask             Netmask value.
649    # gw_ip               Gateway IP address.
650    # valid_status_codes  Expected return code from patch operation
651    #                     (e.g. "200").  See prolog of rest_request
652    #                     method in redfish_plus.py for details.
653
654    ${empty_dict}=  Create Dictionary
655    ${patch_list}=  Create List
656    ${ip_data}=  Create Dictionary  Address=${new_ip}  SubnetMask=${netmask}  Gateway=${gw_ip}
657
658    # Find the position of IP address to be modified.
659    @{network_configurations}=  Get Network Configuration
660    FOR  ${network_configuration}  IN  @{network_configurations}
661      Run Keyword If  '${network_configuration['Address']}' == '${ip}'
662      ...  Append To List  ${patch_list}  ${ip_data}
663      ...  ELSE  Append To List  ${patch_list}  ${empty_dict}
664    END
665
666    ${ip_found}=  Run Keyword And Return Status  List Should Contain Value
667    ...  ${patch_list}  ${ip_data}  msg=${ip} does not exist on BMC
668    Pass Execution If  ${ip_found} == ${False}  ${ip} does not exist on BMC
669
670    # Run patch command only if given IP is found on BMC
671    ${data}=  Create Dictionary  IPv4StaticAddresses=${patch_list}
672
673    Redfish.patch  ${REDFISH_NW_ETH0_URI}  body=&{data}  valid_status_codes=[${valid_status_codes}]
674
675    # Note: Network restart takes around 15-18s after patch request processing.
676    Sleep  ${NETWORK_TIMEOUT}s
677    Wait For Host To Ping  ${OPENBMC_HOST}  ${NETWORK_TIMEOUT}
678
679    Verify IP On BMC  ${new_ip}
680    Validate Network Config On BMC
681