xref: /openbmc/openbmc-test-automation/redfish/systems/test_systems_inventory.robot (revision 2067a770fe31056ce24dcc630b99b03c77efa2b8)
1*** Settings ***
2Documentation       Inventory of hardware FRUs under redfish.
3
4Resource            ../../lib/bmc_redfish_resource.robot
5Resource            ../../lib/bmc_redfish_utils.robot
6Resource            ../../lib/openbmc_ffdc.robot
7Library             ../../lib/gen_robot_valid.py
8
9Suite Setup         Suite Setup Execution
10Suite Teardown      Suite Teardown Execution
11Test Setup          Printn
12Test Teardown       Test Teardown Execution
13
14Test Tags           Systems_Inventory
15
16*** Variables ***
17
18# The passing criteria.  Must have at least this many.
19${min_num_dimms}   2
20${min_num_cpus}    1
21${min_num_cores}   18
22${min_num_power_supplies}  1
23
24
25*** Test Cases ***
26
27Verify CPU And Core Count
28    [Documentation]  Get the total number of CPUs and cores in the system.
29    ...              Verify counts are above minimums.
30    [Tags]  Verify_CPU_And_Core_Count
31
32    # Select only CPUs with Health = "OK".
33    ${cpus_ok}=  Filter Struct  ${cpu_info}  [('Health', 'OK')]
34    ${num_cpus}=   Get Length  ${cpus_ok}
35
36    Rprint Vars  num_cpus  min_num_cpus
37
38    # Assert that num_cpus is greater than or equal to min_num_cpus.
39    Valid Range  num_cpus  ${min_num_cpus}
40
41    # Get the number of cores.
42    ${total_num_cores}=  Set Variable  ${0}
43    FOR  ${cpu}  IN  @{cpus_ok}
44        ${cores}=   Get CPU TotalCores  ${cpu}
45        ${total_num_cores}=  Evaluate  $total_num_cores + ${cores}
46    END
47
48    Rprint Vars  total_num_cores  min_num_cores
49
50    # Assert that total_num_cores is greater than or equal to
51    # min_num_cores.
52    Valid Range  total_num_cores  ${min_num_cores}
53
54
55Get Memory Inventory Via Redfish And Verify
56    [Documentation]  Get the number of DIMMs that are functional and enabled.
57    [Tags]  Get_Memory_Inventory_Via_Redfish_And_Verify
58
59    Verify FRU Inventory Minimums  Memory  ${min_num_dimms}
60
61
62Get Memory Summary State And Verify Enabled
63    [Documentation]  Check that the state of the MemorySummary attribute
64    ...              under /redfish/v1/Systems/system is 'Enabled'.
65    [Tags]  Get_Memory_Summary_State_And_Verify_Enabled
66
67    ${status}=  Redfish.Get Attribute  ${SYSTEM_BASE_URI}  MemorySummary
68    ${memory_summary_state}=  Set Variable  ${status['Status']['State']}
69    Rprint Vars  memory_summary_state
70
71    Should Be Equal As Strings  Enabled  ${memory_summary_state}
72    ...  msg=MemorySummary State is not 'Enabled'.
73
74
75Get System Serial And Verify Populated
76    [Documentation]  Check that the System SerialNumber is non-blank.
77    [Tags]  Get_System_Serial_And_Verify_Populated
78
79    ${serial_number}=  Redfish.Get Attribute  ${SYSTEM_BASE_URI}  SerialNumber
80    Valid Value  serial_number
81    Rprint Vars  serial_number
82
83
84Get Model And Verify Populated
85    [Documentation]  Check that the Model is non-blank.
86    [Tags]  Get_Model_And_Verify_Populated
87
88    ${model}=  Redfish.Get Attribute  ${SYSTEM_BASE_URI}  Model
89    Valid Value  model
90    Rprint Vars  model
91
92
93Get Available Power Supplies And Verify
94    [Documentation]  Get the number of functional power supplies and
95    ...              verify that it is at or above the minimum.
96    [Tags]  Get_Available_Power_Supplies_And_Verify
97
98    # Select only power supplies with Health = "OK".
99    ${power_supplies_ok}=  Filter Struct  ${power_supplies}  [('Health', 'OK')]
100
101    # Count the power supplies that are Enabled or StandbyOffline.
102    ${total_num_supplies}=  Set Variable  ${0}
103    FOR  ${power_supply}  IN  @{power_supplies_ok}
104        # Example of power_supply:
105        # power_supply = {'@odata.id': '/redfish/v1/Chassis/chassis/Power#/PowerSupplies/0',
106        # 'Manufacturer': '', 'MemberId': 'powersupply0', 'Model': '2100', 'Name':
107        # 'powersupply0', 'PartNumber': 'PNPWR123', 'PowerInputWatts': 394.0,
108        # 'SerialNumber': '75B12W', 'Status': {'Health': 'OK', 'State': 'Enabled'}}
109        ${state}=  Set Variable  ${power_supply['Status']['State']}
110        ${good_state}=  Evaluate
111        ...  any(x in '${state}' for x in ('Enabled', 'StandbyOffline'))
112
113        IF  not ${good_state}  CONTINUE
114        ${total_num_supplies}=  Evaluate  $total_num_supplies + ${1}
115    END
116
117    Rprint Vars  total_num_supplies  min_num_power_supplies
118
119    Valid Range  total_num_supplies  ${min_num_power_supplies}
120
121
122Get Motherboard Serial And Verify Populated
123    [Documentation]  Check that the Motherboard SerialNumber is non-blank.
124    [Tags]  Get_Motherboard_Serial_And_Verify_Populated
125
126    ${serial_number}=  Redfish.Get Attribute  ${REDFISH_CHASSIS_URI}${CHASSIS_ID}  SerialNumber
127    Valid Value  serial_number
128    Rprint Vars  serial_number
129
130
131Verify Motherboard Manufacturer Field Value Populated
132    [Documentation]  Check that the Motherboard manufacturer is non-blank.
133    [Tags]  Verify_Motherboard_Manufacturer_Field_Value_Populated
134
135    ${motherboard_manufacturer}=  Redfish.Get Attribute  ${REDFISH_CHASSIS_URI}${CHASSIS_ID}  Manufacturer
136    Valid Value  motherboard_manufacturer
137    Rprint Vars  motherboard_manufacturer
138
139
140Verify Motherboard Partnumber Field Value Populated
141    [Documentation]  Check that the Motherboard partnumber is non-blank.
142    [Tags]  Verify_Motherboard_Partnumber_Field_Value_Populated
143
144    ${motherboard_part_number}=  Redfish.Get Attribute  ${REDFISH_CHASSIS_URI}${CHASSIS_ID}  PartNumber
145    Valid Value  motherboard_part_number
146    Rprint Vars  motherboard_part_number
147
148
149Check GPU States When Power On
150    [Documentation]  Check the State of each of the GPUs
151    ...              in the system.  A system may have 0-6 GPUs.
152    [Tags]  Check_GPU_States_When_Power_On
153
154    # System was powered-on in Suite Setup.
155    GPU State Check
156
157
158Check GPU States When Power Off
159    [Documentation]  Check the State of the GPUs when power is Off.
160    [Tags]  Check_GPU_States_When_Power_Off
161
162    Redfish Power Off
163    GPU State Check
164
165Verify Systems Collection With Unsupported Methods
166    [Documentation]  Verify Systems collection with Unsupported methods
167    [Tags]  Verify_Systems_Collection_With_Unsupported_Methods
168
169    # Get operation on Systems Collection
170    Redfish.Get    /redfish/v1/Systems
171    ...    valid_status_codes=[${HTTP_OK}]
172
173    # Put operation on Systems Collection
174    Redfish.Put  /redfish/v1/Systems
175    ...  valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
176
177    # Post operation on Systems Collection
178    Redfish.Post  /redfish/v1/Systems
179    ...  valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
180
181    # Delete operation on Systems Collection
182    Redfish.Delete  /redfish/v1/Systems
183    ...  valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
184
185    # Patch operation on Systems Collection
186    Redfish.Patch  /redfish/v1/Systems
187    ...  valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
188
189Verify Systems Instance Collection With Unsupported Methods
190    [Documentation]  Verify Systems Instance collection with Unsupported methods
191    [Tags]  Verify_Systems_Instance_Collection_With_Unsupported_Methods
192
193    # Get operation on Systems Instance Collection
194    Redfish.Get    /redfish/v1/Systems/system
195    ...    valid_status_codes=[${HTTP_OK}]
196
197    # Put operation on Systems Instance Collection
198    Redfish.Put  /redfish/v1/Systems/system
199    ...  valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
200
201    # Post operation on Systems Instance Collection
202    Redfish.Post  /redfish/v1/Systems/system
203    ...  valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
204
205    # Delete operation on Systems Instance Collection
206    Redfish.Delete  /redfish/v1/Systems/system
207    ...  valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
208
209Verify And Modify Systems Instance Collection Properties
210    [Documentation]    Verify And Modify Systems Instance Collection Properties
211    [Tags]    Verify_And_Modify_Systems_Instance_Collection_Properties
212    [Template]  Modify Systems Instance Collection Properties
213
214    #Action_type                    #Parameter
215    AutomaticRetryConfig            Disabled
216    AutomaticRetryConfig            RetryAttempts
217    BootSourceOverrideTarget        Pxe
218    BootSourceOverrideTarget        Hdd
219    BootSourceOverrideTarget        Cd
220    BootSourceOverrideTarget        Usb
221    BootSourceOverrideTarget        BiosSetup
222    BootSourceOverrideTarget        Diags
223    BootSourceOverrideTarget        None
224    BootSourceOverrideMode          Legacy
225    BootSourceOverrideMode          UEFI
226
227
228*** Keywords ***
229
230Modify Systems Instance Collection Properties
231    [Documentation]    Modify Systems Instance Collection Properties
232    [Arguments]    ${action_type}    ${parameter}
233    # Description of argument(s):
234    # action_type     The action_type to modify the systems Instance Properties.
235    # parameter       The parameter value to set for the specified action_type.
236
237    # Get original action_type from Systems Instance Properties
238    ${resp}=    Redfish.Get Properties    /redfish/v1/Systems/system
239    ...    valid_status_codes=[${HTTP_OK}]
240    ${default_action_type}=    Set Variable    ${resp["Boot"]["${action_type}"]}
241
242    # Set new action_type in Systems Instance Properties
243    ${payload}=    Catenate    { "Boot":{"${action_type}":"${parameter}"}}
244    Redfish.Patch    /redfish/v1/Systems/system    body=${payload}
245    ...    valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
246
247    # Verify Modified action_type in Systems Instance Properties
248    ${resp}=    Redfish.Get Properties    /redfish/v1/Systems/system
249    ...    valid_status_codes=[${HTTP_OK}]
250    Should Be Equal As Strings    ${resp["Boot"]["${action_type}"]}    ${parameter}
251
252    # Restore default action_type in Systems Instance Properties
253    ${payload}=    Catenate    { "Boot":{"${action_type}":"${default_action_type}"}}
254    Redfish.Patch    /redfish/v1/Systems/system    body=${payload}
255    ...    valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
256
257    # Verify Restored action_type in Systems Instance Properties
258    ${resp}=    Redfish.Get Properties    /redfish/v1/Systems/system
259    ...    valid_status_codes=[${HTTP_OK}]
260    Should Be Equal As Strings    ${resp["Boot"]["${action_type}"]}    ${default_action_type}
261
262Get CPU TotalCores
263    [Documentation]  Return the TotalCores of a CPU.
264    ...              Return 0 if this attribute is missing or NONE.
265    [Arguments]      ${processor}
266
267    # Description of Argument(s):
268    # processor     The Redfish URI of a CPU (e.g.
269    #               "/redfish/v1/Systems/system/Processors/cpu0").
270
271    ${total_cores}=  Redfish.Get Attribute  ${processor}  TotalCores
272    IF  ${total_cores} is ${NONE}  RETURN  ${0}
273    RETURN  ${total_cores}
274
275
276GPU State Check
277    [Documentation]  The state of every "OK" GPU should be
278    ...              "Absent", "Enabled", or "UnavailableOffline".
279
280    # Select only GPUs with Health = "OK".
281    ${gpus_ok}=  Filter Struct  ${gpu_info}  [('Health', 'OK')]
282
283    FOR  ${gpu}  IN  @{gpus_ok}
284        ${status}=  Redfish.Get Attribute  ${gpu}  Status
285        ${state}=  Set Variable  ${status['State']}
286        ${good_state}=  Evaluate
287        ...  any(x in '${state}' for x in ('Absent', 'Enabled', 'UnavailableOffline'))
288        Rprint Vars  gpu  state
289        IF  not ${good_state}
290            Fail  msg=GPU State is not Absent, Enabled, or UnavailableOffline.
291        END
292    END
293
294
295Get Inventory URIs
296    [Documentation]  Get and return a tuple of lists of URIs for CPU,
297    ...              GPU and PowerSupplies.
298
299
300    ${processor_info}=  Redfish_Utils.Enumerate Request
301    ...  ${SYSTEM_BASE_URI}Processors  return_json=0
302
303    ${cpu_info}=  Filter Struct  ${processor_info}
304    ...  [('ProcessorType', 'CPU')]  regex=1
305
306    ${gpu_info}=  Filter Struct  ${processor_info}
307    ...  [('ProcessorType', 'Accelerator')]  regex=1
308
309    ${power_supplies}=  Redfish.Get Attribute
310    ...  ${REDFISH_CHASSIS_URI}${CHASSIS_ID}/Power  PowerSupplies
311
312    RETURN  ${cpu_info}  ${gpu_info}  ${power_supplies}
313
314
315Verify FRU Inventory Minimums
316    [Documentation]  Verify a minimum number of FRUs.
317    [Arguments]  ${fru_type}  ${min_num_frus}
318
319    # Description of Argument(s):
320    # fru_type      The type of FRU (e.g. "Processors", "Memory", etc.).
321    # min_num_frus  The minimum acceptable number of FRUs found.
322
323    # A valid FRU  will have a "State" key of "Enabled" and a "Health" key
324    # of "OK".
325
326    ${status}  ${num_valid_frus}=  Run Key U  Get Num Valid FRUs \ ${fru_type}
327
328    Rprint Vars  fru_type  num_valid_frus  min_num_frus
329
330    Return From Keyword If  ${num_valid_frus} >= ${min_num_frus}
331    Fail  Too few "${fru_type}" FRUs found, found only ${num_valid_frus}.
332
333
334Suite Teardown Execution
335    [Documentation]  Do the post suite teardown.
336
337    Redfish.Logout
338
339
340Suite Setup Execution
341    [Documentation]  Do test case setup tasks.
342
343    Redfish.Login
344    Redfish Power On  stack_mode=skip
345
346    ${cpu_info}  ${gpu_info}  ${power_supplies}=  Get Inventory URIs
347
348    Set Suite Variable  ${cpu_info}
349    Set Suite Variable  ${gpu_info}
350    Set Suite Variable  ${power_supplies}
351
352
353Test Teardown Execution
354    [Documentation]  Do the post test teardown.
355
356    FFDC On Test Case Fail
357