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