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
12Force Tags     MAC_Test
13
14*** Variables ***
15
16# AA:AA:AA:AA:AA:AA series is a valid MAC and does not exist in
17# our network, so this is chosen to avoid MAC conflict.
18${valid_mac}         AA:E2:84:14:28:79
19${zero_mac}          00:00:00:00:00:00
20${broadcast_mac}     FF:FF:FF:FF:FF:FF
21${out_of_range_mac}  AA:FF:FF:FF:FF:100
22
23# There will be 6 bytes in MAC address (e.g. xx.xx.xx.xx.xx.xx).
24# Here trying to configure xx.xx.xx.xx.xx
25${less_byte_mac}     AA:AA:AA:AA:BB
26# Here trying to configure xx.xx.xx.xx.xx.xx.xx
27${more_byte_mac}     AA:AA:AA:AA:AA:AA:BB
28
29# MAC address with special characters.
30${special_char_mac}  &A:$A:AA:AA:AA:^^
31
32*** Test Cases ***
33
34Configure Valid MAC And Verify
35    [Documentation]  Configure valid MAC via Redfish and verify.
36    [Tags]  Configure_Valid_MAC_And_Verify
37
38    Configure MAC Settings  ${valid_mac}  valid
39
40    # Verify whether new MAC is configured on BMC and FW_Env.
41    Validate MAC On BMC  ${valid_mac}
42    Verify MAC Address Via FW_Env  ${valid_mac}  valid
43
44Configure Zero MAC And Verify
45    [Documentation]  Configure zero MAC via Redfish and verify.
46    [Tags]  Configure_Zero_MAC_And_Verify
47
48    [Template]  Configure MAC Settings
49    # MAC address  scenario
50    ${zero_mac}    error
51
52Configure Broadcast MAC And Verify
53    [Documentation]  Configure broadcast MAC via Redfish and verify.
54    [Tags]  Configure_Broadcast_MAC_And_Verify
55
56    [Template]  Configure MAC Settings
57    # MAC address    scenario
58    ${broadcast_mac}  error
59
60Configure Invalid MAC And Verify
61    [Documentation]  Configure invalid MAC address which is a string.
62    [Tags]  Configure_Invalid_MAC_And_Verify
63
64    [Template]  Configure MAC Settings
65    # MAC Address        Expected_Result
66    ${special_char_mac}  error
67
68Configure Valid MAC And Check Persistency
69    [Documentation]  Configure valid MAC and check persistency.
70    [Tags]  Configure_Valid_MAC_And_Check_Persistency
71
72    Configure MAC Settings  ${valid_mac}  valid
73
74    # Verify whether new MAC is configured on BMC.
75    Validate MAC On BMC  ${valid_mac}
76
77    # Reboot BMC and check whether MAC is persistent on BMC and FW_Env.
78    OBMC Reboot (off)
79    Validate MAC On BMC  ${valid_mac}
80    Verify MAC Address Via FW_Env  ${valid_mac}  valid
81
82Configure Invalid MAC And Verify On FW_Env
83    [Documentation]  Configure Invalid  MAC via Redfish and verify on FW_Env.
84    [Tags]  Configure_Invalid_MAC_And_Verify_On_FW_Env
85
86    [Template]  Configure MAC Settings
87
88    # invalid_MAC        scenario
89    ${zero_mac}          error
90    ${broadcast_mac}     error
91    ${special_char_mac}  error
92    ${less_byte_mac}     error
93
94Configure Invalid MAC And Verify Persistency On FW_Env
95    [Documentation]  Configure invalid MAC and verify persistency on FW_Env.
96    [Tags]  Configure_Invalid_MAC_And_Verify_Persistency_On_FW_Env
97
98    Configure MAC Settings  ${special_char_mac}  error
99
100    # Reboot BMC and check whether MAC is persistent on FW_Env.
101    OBMC Reboot (off)
102    Verify MAC Address Via FW_Env  ${special_char_mac}  error
103
104Configure Out Of Range MAC And Verify
105    [Documentation]  Configure out of range MAC via Redfish and verify.
106    [Tags]  Configure_Out_Of_Range_MAC_And_Verify
107
108    Configure MAC Settings  ${out_of_range_mac}  valid
109
110    # Verify whether new MAC is configured on FW_Env.
111    Verify MAC Address Via FW_Env  ${out_of_range_mac}  valid
112
113Configure Less Byte MAC And Verify
114    [Documentation]  Configure less byte MAC via Redfish and verify.
115    [Tags]  Configure_Less_Byte_MAC_And_Verify
116
117    [Template]  Configure MAC Settings
118    # MAC address     scenario
119    ${less_byte_mac}  error
120
121Configure More Byte MAC And Verify
122    [Documentation]  Configure more byte MAC via Redfish and verify.
123    [Tags]  Configure_More_Byte_MAC_And_Verify
124
125    Configure MAC Settings  ${more_byte_mac}  valid
126    # Verify whether new MAC is configured on FW_Env.
127    Verify MAC Address Via FW_Env  ${more_byte_mac}  valid
128
129*** Keywords ***
130
131Test Teardown Execution
132    [Documentation]  Do the post test teardown.
133
134    # Revert to initial MAC address.
135    Configure MAC Settings  ${initial_mac_address}  valid
136
137    # Verify whether new MAC is configured on BMC and FW_Env.
138    Validate MAC On BMC  ${initial_mac_address}
139    Validate MAC On Fw_Env  ${initial_mac_address}
140
141    FFDC On Test Case Fail
142    Redfish.Logout
143
144
145Suite Setup Execution
146    [Documentation]  Do suite setup tasks.
147
148    Redfish.Login
149    ${active_channel_config}=  Get Active Channel Config
150    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
151
152    # Get BMC MAC address.
153    ${resp}=  redfish.Get  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
154    Set Suite Variable  ${initial_mac_address}  ${resp.dict['MACAddress']}
155
156    Validate MAC On BMC  ${initial_mac_address}
157
158    Redfish.Logout
159
160
161Configure MAC Settings
162    [Documentation]  Configure MAC settings via Redfish.
163    [Arguments]  ${mac_address}  ${expected_result}
164
165    # Description of argument(s):
166    # mac_address      MAC address of BMC.
167    # expected_result  Expected status of MAC configuration.
168
169    ${active_channel_config}=  Get Active Channel Config
170    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
171
172    Redfish.Login
173    ${payload}=  Create Dictionary  MACAddress=${mac_address}
174
175    Redfish.Patch  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}  body=&{payload}
176    ...  valid_status_codes=[200, 400, 500]
177
178    # After any modification on network interface, BMC restarts network
179    # Note: Network restart takes around 15-18s after patch request processing.
180    Sleep  ${NETWORK_TIMEOUT}s
181
182    Redfish.Get  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
183
184    # Verify whether new MAC address is populated on BMC system.
185    # It should not allow to configure invalid settings.
186    ${status}=  Run Keyword And Return Status
187    ...  Validate MAC On BMC  ${mac_address}
188
189    Run Keyword If  '${expected_result}' == 'error'
190    ...      Should Be Equal  ${status}  ${False}
191    ...      msg=Allowing the configuration of an invalid MAC.
192    ...  ELSE
193    ...      Should Be Equal  ${status}  ${True}
194    ...      msg=Not allowing the configuration of a valid MAC.
195
196    Verify MAC Address Via FW_Env  ${mac_address}  ${expected_result}
197
198Verify MAC Address Via FW_Env
199    [Documentation]  Verify MAC address on FW_Env.
200    [Arguments]  ${mac_address}  ${expected_result}
201
202    # Description of argument(s):
203    # mac_address      MAC address of BMC.
204    # expected_result  Expected status of MAC configuration.
205
206    ${status}=  Run Keyword And Return Status
207    ...  Validate MAC On FW_Env  ${mac_address}
208
209    Run Keyword If  '${expected_result}' == 'error'
210    ...      Should Be Equal  ${status}  ${False}
211    ...      msg=Allowing the configuration of an invalid MAC.
212    ...  ELSE
213    ...      Should Be Equal  ${status}  ${True}
214    ...      msg=Not allowing the configuration of a valid MAC.
215