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