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    [Teardown]  Run Keywords
175    ...  Delete IP Address  ${test_ipv4_addr}  AND  Test Teardown Execution
176
177    Add IP Address  ${test_ipv4_addr}  ${test_subnet_mask}  ${test_gateway}
178
179    # Reboot BMC and verify persistency.
180    OBMC Reboot (off)
181    Redfish.Login
182    Verify IP On BMC  ${test_ipv4_addr}
183
184Add Fourth Octet Threshold IP And Verify
185    [Documentation]  Add fourth octet threshold IP and verify.
186    [Tags]  Add_Fourth_Octet_Threshold_IP_And_Verify
187    [Teardown]  Run Keywords
188    ...  Delete IP Address  10.7.7.254  AND  Test Teardown Execution
189
190     Add IP Address  10.7.7.254  ${test_subnet_mask}  ${test_gateway}
191
192Add Fourth Octet Lowest IP And Verify
193    [Documentation]  Add fourth octet lowest IP and verify.
194    [Tags]  Add_Fourth_Octet_Lowest_IP_And_Verify
195    [Teardown]  Run Keywords
196    ...  Delete IP Address  10.7.7.1  AND  Test Teardown Execution
197
198     Add IP Address  10.7.7.1  ${test_subnet_mask}  ${test_gateway}
199
200Add Third Octet Threshold IP And Verify
201    [Documentation]  Add third octet threshold IP and verify.
202    [Tags]  Add_Third_Octet_Threshold_IP_And_Verify
203    [Teardown]  Run Keywords
204    ...  Delete IP Address  10.7.255.7  AND  Test Teardown Execution
205
206     Add IP Address  10.7.255.7  ${test_subnet_mask}  ${test_gateway}
207
208Add Third Octet Lowest IP And Verify
209    [Documentation]  Add third octet lowest IP and verify.
210    [Tags]  Add_Third_Octet_Lowest_IP_And_Verify
211    [Teardown]  Run Keywords
212    ...  Delete IP Address  10.7.0.7  AND  Test Teardown Execution
213
214     Add IP Address  10.7.0.7  ${test_subnet_mask}  ${test_gateway}
215
216Add Second Octet Threshold IP And Verify
217    [Documentation]  Add second octet threshold IP and verify.
218    [Tags]  Add_Second_Octet_Threshold_IP_And_Verify
219    [Teardown]  Run Keywords
220    ...  Delete IP Address  10.255.7.7  AND  Test Teardown Execution
221
222     Add IP Address  10.255.7.7  ${test_subnet_mask}  ${test_gateway}
223
224Add Second Octet Lowest IP And Verify
225    [Documentation]  Add second octet lowest IP and verify.
226    [Tags]  Add_Second_Octet_Lowest_IP_And_Verify
227    [Teardown]  Run Keywords
228    ...  Delete IP Address  10.0.7.7  AND  Test Teardown Execution
229
230     Add IP Address  10.0.7.7  ${test_subnet_mask}  ${test_gateway}
231
232Add First Octet Threshold IP And Verify
233    [Documentation]  Add first octet threshold IP and verify.
234    [Tags]  Add_First_Octet_Threshold_IP_And_Verify
235    [Teardown]  Run Keywords
236    ...  Delete IP Address  223.7.7.7  AND  Test Teardown Execution
237
238     Add IP Address  223.7.7.7  ${test_subnet_mask}  ${test_gateway}
239
240Add First Octet Lowest IP And Verify
241    [Documentation]  Add first octet lowest IP and verify.
242    [Tags]  Add_First_Octet_Lowest_IP_And_Verify
243    [Teardown]  Run Keywords
244    ...  Delete IP Address  1.7.7.7  AND  Test Teardown Execution
245
246     Add IP Address  1.7.7.7  ${test_subnet_mask}  ${test_gateway}
247
248Configure Invalid Netmask
249    [Documentation]  Verify error while setting invalid netmask.
250    [Tags]  Configure_Invalid_Netmask
251    [Template]  Add IP Address
252
253    # ip               subnet_mask         gateway          valid_status_codes
254    ${test_ipv4_addr}  ${invalid_netmask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
255
256Configure Out Of Range Netmask
257    [Documentation]  Verify error while setting out of range netmask.
258    [Tags]  Configure_Out_Of_Range_Netmask
259    [Template]  Add IP Address
260
261    # ip               subnet_mask              gateway          valid_status_codes
262    ${test_ipv4_addr}  ${out_of_range_netmask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
263
264Configure Alpha Netmask
265    [Documentation]  Verify error while setting alpha netmask.
266    [Tags]  Configure_Alpha_Netmask
267    [Template]  Add IP Address
268
269    # ip               subnet_mask       gateway          valid_status_codes
270    ${test_ipv4_addr}  ${alpha_netmask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
271
272Configure More Byte Netmask
273    [Documentation]  Verify error while setting more byte netmask.
274    [Tags]  Configure_More_Byte_Netmask
275    [Template]  Add IP Address
276
277    # ip               subnet_mask           gateway          valid_status_codes
278    ${test_ipv4_addr}  ${more_byte_netmask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
279
280Configure Less Byte Netmask
281    [Documentation]  Verify error while setting less byte netmask.
282    [Tags]  Configure_Less_Byte_Netmask
283    [Template]  Add IP Address
284
285    # ip               subnet_mask           gateway          valid_status_codes
286    ${test_ipv4_addr}  ${less_byte_netmask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
287
288Configure Threshold Netmask And Verify
289    [Documentation]  Configure threshold netmask and verify.
290    [Tags]  Configure_Threshold_Netmask_And_verify
291    [Teardown]  Run Keywords
292    ...   Delete IP Address  ${test_ipv4_addr}  AND  Test Teardown Execution
293
294     Add IP Address  ${test_ipv4_addr}  ${threshold_netmask}  ${test_gateway}
295
296Configure Lowest Netmask And Verify
297    [Documentation]  Configure lowest netmask and verify.
298    [Tags]  Configure_Lowest_Netmask_And_verify
299    [Teardown]  Run Keywords
300    ...   Delete IP Address  ${test_ipv4_addr}  AND  Test Teardown Execution
301
302     Add IP Address  ${test_ipv4_addr}  ${lowest_netmask}  ${test_gateway}
303
304Configure Network ID
305    [Documentation]  Verify error while configuring network ID.
306    [Tags]  Configure_Network_ID
307    [Template]  Add IP Address
308    [Teardown]  Clear IP Settings On Fail  ${network_id}
309
310    # ip           subnet_mask          gateway          valid_status_codes
311    ${network_id}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
312
313Configure Less Octet IP
314    [Documentation]  Verify error while Configuring less octet IP address.
315    [Tags]  Configure_Less_Octet_IP
316    [Template]  Add IP Address
317
318    # ip              subnet_mask          gateway          valid_status_codes
319    ${less_octet_ip}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
320
321Configure Empty IP
322    [Documentation]  Verify error while Configuring empty IP address.
323    [Tags]  Configure_Empty_IP
324    [Template]  Add IP Address
325
326    # ip      subnet_mask          gateway          valid_status_codes
327    ${EMPTY}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
328
329Configure Special Char IP
330    [Documentation]  Configure invalid IP address containing special chars.
331    [Tags]  Configure_Special_Char_IP
332    [Template]  Add IP Address
333
334    # ip          subnet_mask          gateway          valid_status_codes
335    @@@.%%.44.11  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
336
337Configure Hexadecimal IP
338    [Documentation]  Configure invalid IP address containing hex value.
339    [Tags]  Configure_Hexadecimal_IP
340    [Template]  Add IP Address
341
342    # ip       subnet_mask          gateway          valid_status_codes
343    ${hex_ip}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
344
345Configure Negative Octet IP
346    [Documentation]  Configure invalid IP address containing negative octet.
347    [Tags]  Configure_Negative_Octet_IP
348    [Template]  Add IP Address
349
350    # ip            subnet_mask          gateway          valid_status_codes
351    ${negative_ip}  ${test_subnet_mask}  ${test_gateway}  ${HTTP_BAD_REQUEST}
352
353Configure Incomplete IP For Gateway
354    [Documentation]  Configure incomplete IP for gateway and expect an error.
355    [Tags]  Configure_Incomplete_IP_For_Gateway
356    [Template]  Add IP Address
357
358    # ip               subnet_mask          gateway           valid_status_codes
359    ${test_ipv4_addr}  ${test_subnet_mask}  ${less_octet_ip}  ${HTTP_BAD_REQUEST}
360
361Configure Special Char IP For Gateway
362    [Documentation]  Configure special char IP for gateway and expect an error.
363    [Tags]  Configure_Special_Char_IP_For_Gateway
364    [Template]  Add IP Address
365
366    # ip               subnet_mask          gateway       valid_status_codes
367    ${test_ipv4_addr}  ${test_subnet_mask}  @@@.%%.44.11  ${HTTP_BAD_REQUEST}
368
369Configure Hexadecimal IP For Gateway
370    [Documentation]  Configure hexadecimal IP for gateway and expect an error.
371    [Tags]  Configure_Hexadecimal_IP_For_Gateway
372    [Template]  Add IP Address
373
374    # ip               subnet_mask          gateway    valid_status_codes
375    ${test_ipv4_addr}  ${test_subnet_mask}  ${hex_ip}  ${HTTP_BAD_REQUEST}
376
377Get DNS Server And Verify
378    [Documentation]  Get DNS server via Redfish and verify.
379    [Tags]  Get_DNS_Server_And_Verify
380
381    Verify CLI and Redfish Nameservers
382
383Configure DNS Server And Verify
384    [Documentation]  Configure DNS server and verify.
385    [Tags]  Configure_DNS_Server_And_Verify
386    [Setup]  DNS Test Setup Execution
387    [Teardown]  Run Keywords
388    ...  Configure Static Name Servers  AND  Test Teardown Execution
389
390    Configure Static Name Servers  ${static_name_servers}
391    Verify CLI and Redfish Nameservers
392
393Delete DNS Server And Verify
394    [Documentation]  Delete DNS server and verify.
395    [Tags]  Delete_DNS_Server_And_Verify
396    [Setup]  DNS Test Setup Execution
397    [Teardown]  Run Keywords
398    ...  Configure Static Name Servers  AND  Test Teardown Execution
399
400    Delete Static Name Servers
401    Verify CLI and Redfish Nameservers
402
403Configure DNS Server And Check Persistency
404    [Documentation]  Configure DNS server and check persistency on reboot.
405    [Tags]  Configure_DNS_Server_And_Check_Persistency
406    [Setup]  DNS Test Setup Execution
407    [Teardown]  Run Keywords
408    ...  Configure Static Name Servers  AND  Test Teardown Execution
409
410    Configure Static Name Servers  ${static_name_servers}
411    # Reboot BMC and verify persistency.
412    OBMC Reboot (off)
413    Redfish.Login
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  Test Teardown Execution
484
485     Add IP Address  ${test_ipv4_addr}  ${test_subnet_mask}  ${test_gateway}
486
487     Update IP Address  ${test_ipv4_addr}  ${test_ipv4_addr2}  ${test_subnet_mask}  ${test_gateway}
488
489
490Configure Invalid Values For DNS Server
491    [Documentation]  Configure invalid values for DNS server and expect an error.
492    [Tags]  Configure_Invalid_Value_For_DNS_Server
493    [Setup]  DNS Test Setup Execution
494    [Template]  Configure Static Name Servers
495    [Teardown]  Run Keywords
496    ...  Configure Static Name Servers  AND  Test Teardown Execution
497
498     # static_name_servers        valid_status_codes
499      0xa.0xb.0xc.0xd             ${HTTP_BAD_REQUEST}
500      10.-7.-7.-7                 ${HTTP_BAD_REQUEST}
501      10.3.36                     ${HTTP_BAD_REQUEST}
502      @@@.%%.44.11                ${HTTP_BAD_REQUEST}
503
504
505Config Multiple DNS Servers And Verify
506    [Documentation]  Config multiple DNS servers and verify.
507    [Tags]  Config_Multiple_DNS_Servers_And_Verify
508    [Setup]  DNS Test Setup Execution
509    [Teardown]  Run Keywords
510    ...  Configure Static Name Servers  AND  Test Teardown Execution
511
512     @{list_name_servers}=  Create List  10.5.5.10  10.20.5.10  10.5.6.7
513     Configure Static Name Servers  ${list_name_servers}
514     Verify CLI and Redfish Nameservers
515
516
517Configure And Verify Multiple Static IPv4 Addresses
518    [Documentation]  Configure multiple static ipv4 address via Redfish and verify.
519    [Tags]  Configure_And_Verify_Multiple_Static_IPv4_Addresses
520    [Teardown]  Run Keywords  Delete Multiple Static IPv4 Addresses  ${test_ipv4_addresses}
521    ...  AND  Test Teardown Execution
522
523    ${test_ipv4_addresses}=  Create List  ${test_ipv4_addr}  ${test_ipv4_addr2}
524    Configure Multiple Static IPv4 Addresses   ${test_ipv4_addresses}  ${test_subnet_mask}  ${test_gateway}
525
526
527Configure Multiple Static IPv4 Addresses And Check Persistency
528    [Documentation]  Configure multiple static ipv4 address via Redfish and check persistency.
529    [Tags]  Configure_Multiple_Static_IPv4_Addresses_And_Check_Persistency
530    [Teardown]  Run Keywords  Delete Multiple Static IPv4 Addresses  ${test_ipv4_addresses}
531    ...  AND  Test Teardown Execution
532
533    ${test_ipv4_addresses}=  Create List  ${test_ipv4_addr}  ${test_ipv4_addr2}
534    Configure Multiple Static IPv4 Addresses  ${test_ipv4_addresses}  ${test_subnet_mask}  ${test_gateway}
535
536    # Reboot BMC and verify persistency.
537    OBMC Reboot (off)
538    Redfish.Login
539    FOR  ${ip}  IN  @{test_ipv4_addresses}
540      Verify IP And Netmask On BMC  ${ip}  ${test_subnet_mask}
541    END
542
543
544Configure And Verify Multiple IPv4 Addresses
545    [Documentation]  Configure multiple IPv4 addresses and verify.
546    [Tags]  Configure_And_Verify_Multiple_IPv4_Addresse
547    [Teardown]  Run Keywords
548    ...  Delete IP Address  ${test_ipv4_addr}  AND  Delete IP Address  ${test_ipv4_addr2}
549    ...  AND  Test Teardown Execution
550
551    ${ip1}=  Create dictionary  Address=${test_ipv4_addr}
552    ...  SubnetMask=255.255.0.0  Gateway=${test_gateway}
553    ${ip2}=  Create dictionary  Address=${test_ipv4_addr2}
554    ...  SubnetMask=255.255.252.0  Gateway=${test_gateway}
555
556    ${empty_dict}=  Create Dictionary
557    ${patch_list}=  Create List
558    ${network_configurations}=  Get Network Configuration
559    ${num_entries}=  Get Length  ${network_configurations}
560
561    FOR  ${INDEX}  IN RANGE  0  ${num_entries}
562      Append To List  ${patch_list}  ${empty_dict}
563    END
564
565    # We need not check for existence of IP on BMC while adding.
566    Append To List  ${patch_list}  ${ip1}  ${ip2}
567    ${payload}=  Create Dictionary  IPv4StaticAddresses=${patch_list}
568    ${active_channel_config}=  Get Active Channel Config
569    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
570    Redfish.patch  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}  body=&{payload}
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
579*** Keywords ***
580
581Test Setup Execution
582    [Documentation]  Test setup execution.
583
584    Redfish.Login
585
586    @{network_configurations}=  Get Network Configuration
587    Set Test Variable  @{network_configurations}
588
589    # Get BMC IP address and prefix length.
590    ${ip_data}=  Get BMC IP Info
591    Set Test Variable  ${ip_data}
592
593
594Verify Netmask On BMC
595    [Documentation]  Verify netmask on BMC.
596    [Arguments]  ${netmask}
597
598    # Description of the argument(s):
599    # netmask  netmask value to be verified.
600
601    ${prefix_length}=  Netmask Prefix Length  ${netmask}
602
603    Should Contain Match  ${ip_data}  */${prefix_length}
604    ...  msg=Prefix length does not exist.
605
606Verify IP And Netmask On BMC
607    [Documentation]  Verify IP and netmask on BMC.
608    [Arguments]  ${ip}  ${netmask}
609
610    # Description of the argument(s):
611    # ip       IP address to be verified.
612    # netmask  netmask value to be verified.
613
614    ${prefix_length}=  Netmask Prefix Length  ${netmask}
615    @{ip_data}=  Get BMC IP Info
616
617    ${ip_with_netmask}=  Catenate  ${ip}/${prefix_length}
618    Should Contain  ${ip_data}  ${ip_with_netmask}
619    ...  msg=IP and netmask pair does not exist.
620
621Validate Hostname On BMC
622    [Documentation]  Verify that the hostname read via Redfish is the same as the
623    ...  hostname configured on system.
624    [Arguments]  ${hostname}
625
626    # Description of argument(s):
627    # hostname  A hostname value which is to be compared to the hostname
628    #           configured on system.
629
630    ${sys_hostname}=  Get BMC Hostname
631    Should Be Equal  ${sys_hostname}  ${hostname}
632    ...  ignore_case=True  msg=Hostname does not exist.
633
634Test Teardown Execution
635    [Documentation]  Test teardown execution.
636
637    FFDC On Test Case Fail
638    Redfish.Logout
639
640Clear IP Settings On Fail
641    [Documentation]  Clear IP settings on fail.
642    [Arguments]  ${ip}
643
644    # Description of argument(s):
645    # ip  IP address to be deleted.
646
647    Run Keyword If  '${TEST STATUS}' == 'FAIL'
648    ...  Delete IP Address  ${ip}
649
650    Test Teardown Execution
651
652Verify CLI and Redfish Nameservers
653    [Documentation]  Verify that nameservers obtained via Redfish do not
654    ...  match those found in /etc/resolv.conf.
655
656    ${active_channel_config}=  Get Active Channel Config
657    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
658
659    ${redfish_nameservers}=  Redfish.Get Attribute
660    ...  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}  StaticNameServers
661    ${resolve_conf_nameservers}=  CLI Get Nameservers
662    Rqprint Vars  redfish_nameservers  resolve_conf_nameservers
663
664    # Check that the 2 lists are equivalent.
665    ${match}=  Evaluate  set($redfish_nameservers) == set($resolve_conf_nameservers)
666    Should Be True  ${match}
667    ...  The nameservers obtained via Redfish do not match those found in /etc/resolv.conf.
668
669
670Configure Static Name Servers
671    [Documentation]  Configure DNS server on BMC.
672    [Arguments]  ${static_name_servers}=${original_nameservers}
673     ...  ${valid_status_codes}=${HTTP_OK}
674
675    # Description of the argument(s):
676    # static_name_servers  A list of static name server IPs to be
677    #                      configured on the BMC.
678
679    ${active_channel_config}=  Get Active Channel Config
680    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
681
682    ${type} =  Evaluate  type($static_name_servers).__name__
683    ${static_name_servers}=  Set Variable If  '${type}'=='str'
684    ...  '${static_name_servers}'  ${static_name_servers}
685
686    # Currently BMC is sending 500 response code instead of 400 for invalid scenarios.
687    Redfish.Patch  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
688    ...  body={'StaticNameServers': ${static_name_servers}}
689    ...  valid_status_codes=[${valid_status_codes}, ${HTTP_INTERNAL_SERVER_ERROR}]
690
691    # Patch operation takes 1 to 3 seconds to set new value.
692    Sleep  3s
693
694    # Check if newly added DNS server is configured on BMC.
695    ${cli_nameservers}=  CLI Get Nameservers
696    ${cmd_status}=  Run Keyword And Return Status
697    ...  List Should Contain Sub List  ${cli_nameservers}  ${static_name_servers}
698
699    Run Keyword If  '${valid_status_codes}' == '${HTTP_OK}'
700    ...  Should Be True  ${cmd_status} == ${True}
701    ...  ELSE  Should Be True  ${cmd_status} == ${False}
702
703Delete Static Name Servers
704    [Documentation]  Delete static name servers.
705
706    Configure Static Name Servers  static_name_servers=@{EMPTY}
707
708    # Check if all name servers deleted on BMC.
709    ${nameservers}=  CLI Get Nameservers
710    Should Be Empty  ${nameservers}
711
712DNS Test Setup Execution
713    [Documentation]  Do DNS test setup execution.
714
715    Redfish.Login
716
717    ${active_channel_config}=  Get Active Channel Config
718    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
719
720    ${original_nameservers}=  Redfish.Get Attribute
721    ...  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}  StaticNameServers
722
723    Rprint Vars  original_nameservers
724    # Set suite variables to trigger restoration during teardown.
725    Set Suite Variable  ${original_nameservers}
726
727Suite Setup Execution
728    [Documentation]  Do suite setup execution.
729
730    ${test_gateway}=  Get BMC Default Gateway
731    Set Suite Variable  ${test_gateway}
732
733Update IP Address
734    [Documentation]  Update IP address of BMC.
735    [Arguments]  ${ip}  ${new_ip}  ${netmask}  ${gw_ip}  ${valid_status_codes}=${HTTP_OK}
736
737    # Description of argument(s):
738    # ip                  IP address to be replaced (e.g. "10.7.7.7").
739    # new_ip              New IP address to be configured.
740    # netmask             Netmask value.
741    # gw_ip               Gateway IP address.
742    # valid_status_codes  Expected return code from patch operation
743    #                     (e.g. "200").  See prolog of rest_request
744    #                     method in redfish_plus.py for details.
745
746    ${empty_dict}=  Create Dictionary
747    ${patch_list}=  Create List
748    ${ip_data}=  Create Dictionary  Address=${new_ip}  SubnetMask=${netmask}  Gateway=${gw_ip}
749
750    # Find the position of IP address to be modified.
751    @{network_configurations}=  Get Network Configuration
752    FOR  ${network_configuration}  IN  @{network_configurations}
753      Run Keyword If  '${network_configuration['Address']}' == '${ip}'
754      ...  Append To List  ${patch_list}  ${ip_data}
755      ...  ELSE  Append To List  ${patch_list}  ${empty_dict}
756    END
757
758    ${ip_found}=  Run Keyword And Return Status  List Should Contain Value
759    ...  ${patch_list}  ${ip_data}  msg=${ip} does not exist on BMC
760    Pass Execution If  ${ip_found} == ${False}  ${ip} does not exist on BMC
761
762    # Run patch command only if given IP is found on BMC
763    ${data}=  Create Dictionary  IPv4StaticAddresses=${patch_list}
764
765    Redfish.patch  ${REDFISH_NW_ETH0_URI}  body=&{data}  valid_status_codes=[${valid_status_codes}]
766
767    # Note: Network restart takes around 15-18s after patch request processing.
768    Sleep  ${NETWORK_TIMEOUT}s
769    Wait For Host To Ping  ${OPENBMC_HOST}  ${NETWORK_TIMEOUT}
770
771    Verify IP On BMC  ${new_ip}
772    Validate Network Config On BMC
773
774Configure Multiple Static IPv4 Addresses
775    [Documentation]  Configure multiple static ipv4 address via Redfish and verify.
776    [Arguments]  ${ip_addreses}  ${subnet_mask}  ${gateway}
777
778    # Description of argument(s):
779    # ip_addreses         A list of IP addresses to be added (e.g.["10.7.7.7"]).
780    # subnet_mask         Subnet mask for the IP to be added (e.g. "255.255.0.0").
781    # gateway             Gateway for the IP to be added (e.g. "10.7.7.1").
782
783    FOR  ${ip}  IN   @{ip_addreses}
784       Add IP Address  ${ip}  ${subnet_mask}  ${gateway}
785    END
786    Validate Network Config On BMC
787
788
789Delete Multiple Static IPv4 Addresses
790    [Documentation]  Delete multiple static ipv4 address via Redfish.
791    [Arguments]  ${ip_addreses}
792
793    # Description of argument(s):
794    # ip_addreses         A list of IP addresses to be deleted (e.g.["10.7.7.7"]).
795
796    FOR  ${ip}  IN   @{ip_addreses}
797       Delete IP Address  ${ip}
798    END
799    Validate Network Config On BMC
800