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
12Test Tags     Bmc_Network_Mac
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}
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}
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}    ${HTTP_BAD_REQUEST}
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}  ${HTTP_BAD_REQUEST}
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}  ${HTTP_BAD_REQUEST}
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}
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}
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}          ${HTTP_BAD_REQUEST}
90    ${broadcast_mac}     ${HTTP_BAD_REQUEST}
91    ${special_char_mac}  ${HTTP_BAD_REQUEST}
92    ${less_byte_mac}     ${HTTP_BAD_REQUEST}
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}  ${HTTP_BAD_REQUEST}
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}  ${HTTP_BAD_REQUEST}
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}  ${HTTP_BAD_REQUEST}
109
110    # Verify whether new MAC is configured on FW_Env.
111    Verify MAC Address Via FW_Env  ${out_of_range_mac}  ${HTTP_BAD_REQUEST}
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}  ${HTTP_BAD_REQUEST}
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}  ${HTTP_BAD_REQUEST}
126    # Verify whether new MAC is configured on FW_Env.
127    Verify MAC Address Via FW_Env  ${more_byte_mac}  ${HTTP_BAD_REQUEST}
128
129
130*** Keywords ***
131
132Test Teardown Execution
133    [Documentation]  Do the post test teardown.
134
135    # Revert to initial MAC address.
136    Configure MAC Settings  ${initial_mac_address}
137
138    # Verify whether new MAC is configured on BMC and FW_Env.
139    Validate MAC On BMC  ${initial_mac_address}
140    Validate MAC On Fw_Env  ${initial_mac_address}
141
142    FFDC On Test Case Fail
143    Redfish.Logout
144
145
146Suite Setup Execution
147    [Documentation]  Do suite setup tasks.
148
149    Redfish.Login
150    ${active_channel_config}=  Get Active Channel Config
151    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
152
153    # Get BMC MAC address.
154    ${resp}=  redfish.Get  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
155    Set Suite Variable  ${initial_mac_address}  ${resp.dict['MACAddress']}
156
157    Validate MAC On BMC  ${initial_mac_address}
158
159    Redfish.Logout
160
161
162Configure MAC Settings
163    [Documentation]  Configure MAC settings via Redfish.
164    [Arguments]  ${mac_address}  ${valid_status_code}=${HTTP_OK}
165
166    # Description of argument(s):
167    # mac_address         MAC address of BMC.
168    # valid_status_code   Expected response code, default is ${HTTP_OK}.
169
170    ${active_channel_config}=  Get Active Channel Config
171    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
172
173    Redfish.Login
174    ${payload}=  Create Dictionary  MACAddress=${mac_address}
175
176    Redfish.Patch  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}  body=&{payload}
177    ...  valid_status_codes=[${valid_status_code},${HTTP_INTERNAL_SERVER_ERROR}]
178
179    # After any modification on network interface, BMC restarts network
180    # Note: Network restart takes around 15-18s after patch request processing.
181    Sleep  ${NETWORK_TIMEOUT}s
182
183    Redfish.Get  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
184
185    # Verify whether new MAC address is populated on BMC system.
186    # It should not allow to configure invalid settings.
187    ${status}=  Run Keyword And Return Status
188    ...  Validate MAC On BMC  ${mac_address}
189
190    Run Keyword If  ${valid_status_code} == ${HTTP_BAD_REQUEST}
191    ...      Should Be Equal  ${status}  ${False}
192    ...      msg=Allowing the configuration of an invalid MAC.
193    ...  ELSE
194    ...      Should Be Equal  ${status}  ${True}
195    ...      msg=Not allowing the configuration of a valid MAC.
196
197    Verify MAC Address Via FW_Env  ${mac_address}  ${valid_status_code}
198
199Verify MAC Address Via FW_Env
200    [Documentation]  Verify MAC address on FW_Env.
201    [Arguments]  ${mac_address}  ${valid_status_code}=${HTTP_OK}
202
203    # Description of argument(s):
204    # mac_address         MAC address of BMC.
205    # valid_status_code   Expected response code, default is ${HTTP_OK}.
206
207    ${status}=  Run Keyword And Return Status
208    ...  Validate MAC On FW_Env  ${mac_address}
209
210    Run Keyword If  ${valid_status_code} == ${HTTP_BAD_REQUEST}
211    ...      Should Be Equal  ${status}  ${False}
212    ...      msg=Allowing the configuration of an invalid MAC.
213    ...  ELSE
214    ...      Should Be Equal  ${status}  ${True}
215    ...      msg=Not allowing the configuration of a valid MAC.
216