1*** Settings ***
2Documentation  Test BMC network interface functionalities.
3
4Resource       ../../lib/bmc_redfish_resource.robot
5Resource       ../../lib/bmc_network_utils.robot
6Resource       ../../lib/openbmc_ffdc.robot
7Library        ../../lib/bmc_network_utils.py
8
9Suite Setup    Suite Setup Execution
10Test Teardown  Test Teardown Execution
11
12*** Variables ***
13
14# AA:AA:AA:AA:AA:AA series is a valid MAC and does not exist in
15# our network, so this is chosen to avoid MAC conflict.
16${valid_mac}         AA:E2:84:14:28:79
17
18*** Test Cases ***
19
20Configure Valid MAC And Verify
21    [Documentation]  Configure valid MAC via Redfish and verify.
22    [Tags]  Configure_Valid_MAC_And_Verify
23
24    Configure MAC Settings  ${valid_mac}  valid
25
26    # Verify whether new MAC is configured on BMC.
27    Validate MAC On BMC  ${valid_mac}
28
29
30*** Keywords ***
31
32Test Teardown Execution
33    [Documentation]  Do the post test teardown.
34
35    FFDC On Test Case Fail
36    Redfish.Logout
37
38
39Suite Setup Execution
40    [Documentation]  Do suite setup tasks.
41
42    Redfish.Login
43
44    # Get BMC MAC address.
45    ${resp}=  redfish.Get  ${REDFISH_NW_ETH0_URI}
46    Set Suite Variable  ${initial_mac_address}  ${resp.dict['MACAddress']}
47
48    Validate MAC On BMC  ${initial_mac_address}
49
50    Redfish.Logout
51
52Configure MAC Settings
53    [Documentation]  Configure MAC settings via Redfish.
54    [Arguments]  ${mac_address}  ${expected_result}
55
56    # Description of argument(s):
57    # mac_address      MAC address of BMC.
58    # expected_result  Expected status of MAC configuration.
59
60    Redfish.Login
61    ${payload}=  Create Dictionary  MACAddress=${mac_address}
62
63    ${resp}=  Redfish.Patch  ${REDFISH_NW_ETH0_URI}  body=&{payload}
64
65    # After any modification on network interface, BMC restarts network
66    # module, wait until it is reachable.
67
68    Wait For Host To Ping  ${OPENBMC_HOST}
69    ...  ${NETWORK_TIMEOUT}  ${NETWORK_RETRY_TIME}
70
71    # Verify whether new MAC address is populated on BMC system.
72    # It should not allow to configure invalid settings.
73
74    ${status}=  Run Keyword And Return Status
75    ...  Validate MAC On BMC  ${mac_address}
76
77    Run Keyword If  '${expected_result}' == 'error'
78    ...      Should Be Equal  ${status}  ${False}
79    ...      msg=Allowing the configuration of an invalid MAC.
80    ...  ELSE
81    ...      Should Be Equal  ${status}  ${True}
82    ...      msg=Not allowing the configuration of a valid MAC.
83
84