| *** Settings *** |
| Documentation System inventory related test. |
| |
| Resource ../lib/rest_client.robot |
| Resource ../lib/utils.robot |
| Resource ../lib/state_manager.robot |
| Resource ../lib/openbmc_ffdc.robot |
| Resource ../lib/list_utils.robot |
| Resource ../lib/boot_utils.robot |
| Resource ../lib/fan_utils.robot |
| Library ../lib/utilities.py |
| Library Collections |
| |
| Variables ../data/variables.py |
| Variables ../data/inventory.py |
| |
| Suite Setup Suite Setup Execution |
| Test Teardown FFDC On Test Case Fail |
| |
| Force Tags Inventory |
| |
| ***Variables*** |
| |
| ${LOOP_COUNT} ${1} |
| |
| *** Test Cases *** |
| |
| Verify System Inventory Path |
| [Documentation] Check if system inventory path exist. |
| [Tags] Verify_System_Inventory_Path |
| # When the host is booted, system inventory path should exist. |
| # Example: /xyz/openbmc_project/inventory/system |
| Get Inventory system |
| |
| |
| Verify Boxelder Present Property |
| [Documentation] Boxelder should be present by default. |
| [Tags] Verify_Boxelder_Present_Property |
| # Example: |
| # "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc": |
| # { |
| # "BuildDate": "", |
| # "FieldReplaceable": 0, |
| # "Manufacturer": "<Manufacturer Name>", |
| # "Model": "", |
| # "PartNumber": "01DH051", |
| # "Present": 1, |
| # "PrettyName": "BMC PLANAR ", |
| # "SerialNumber": "000000000000" |
| # }, |
| ${json_data}= Get Inventory system/chassis/motherboard/boxelder/bmc |
| Should Be True ${json_data["data"]["Present"]} |
| Should Not Be Equal As Strings |
| ... ${json_data["data"]["SerialNumber"]} 000000000000 |
| ... msg=BMC planar serial number invalid. |
| |
| |
| Verify UUID Entry |
| [Documentation] UUID entry should exist in BMC planar property. |
| [Tags] Verify_UUID_Entry |
| # Example: |
| # "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc": |
| # { |
| # "BuildDate": "", |
| # "FieldReplaceable": 0, |
| # "Manufacturer": "<Manufacturer Name>", |
| # "Model": "", |
| # "PartNumber": "01DH051", |
| # "Present": 1, |
| # "PrettyName": "BMC PLANAR ", |
| # "SerialNumber": "000000000000" |
| # "UUID": "" |
| # }, |
| ${resp}= OpenBMC Get Request |
| ... ${HOST_INVENTORY_URI}system/chassis/motherboard/boxelder/bmc/attr/UUID |
| Should Be Equal As Strings ${resp.status_code} ${HTTP_OK} |
| |
| |
| Verify Boxelder MAC Address Property Is Populated |
| [Documentation] Boxelder should be present by default. |
| [Tags] Verify_Boxelder_MAC_Address_Property_Is_Populated |
| # Example: |
| # /xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc/ethernet |
| # { |
| # "FieldReplaceable": 0, |
| # "MACAddress": "00:00:00:00:00:00", |
| # "Present": 1, |
| # "PrettyName": "" |
| # } |
| |
| ${json_data}= Get Inventory |
| ... system/chassis/motherboard/boxelder/bmc/ethernet |
| Should Be True ${json_data["data"]["Present"]} |
| Should Not Be Equal As Strings |
| ... ${json_data["data"]["MACAddress"]} 00:00:00:00:00:00 |
| |
| # eth0 Link encap:Ethernet HWaddr 70:E2:84:14:23:F9 |
| ${mac_addr} ${stderr} ${rc}= BMC Execute Command |
| ... /sbin/ifconfig -a | grep eth0 | grep HWaddr | awk -F'HWaddr ' '{print $2}' |
| ... return_stderr=True |
| Should Be Empty ${stderr} |
| Should Be Equal As Strings ${json_data["data"]["MACAddress"]} |
| ... ${mac_addr.strip()} msg=MAC address configured incorrectly. |
| ... ignore_case=True |
| |
| |
| Verify Chassis Motherboard Properties |
| [Documentation] Check if chassis motherboard properties are |
| ... populated valid. |
| [Tags] Verify_Chassis_Motherboard_Properties |
| # When the host is booted, the following properties should |
| # be populated Manufacturer, PartNumber, SerialNumber and |
| # it should not be zero's. |
| # Example: |
| # "data": { |
| # "/xyz/openbmc_project/inventory/system/chassis/motherboard": { |
| # "BuildDate": "", |
| # "Manufacturer": "0000000000000000", |
| # "Model": "", |
| # "PartNumber": "0000000", |
| # "Present": 0, |
| # "PrettyName": "SYSTEM PLANAR ", |
| # "SerialNumber": "000000000000" |
| # } |
| ${properties}= Get Inventory system/chassis/motherboard |
| Should Not Be Equal As Strings |
| ... ${properties["data"]["PartNumber"]} 0000000 |
| ... msg=motherboard part number invalid. |
| Should Not Be Equal As Strings |
| ... ${properties["data"]["SerialNumber"]} 000000000000 |
| ... msg=motherboard serial number invalid. |
| |
| Verify CPU Present |
| [Documentation] Check if the FRU "Present" is set for CPU's. |
| [Tags] Verify_CPU_Present |
| # System inventory cpu list: |
| # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0 |
| # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1 |
| # Example: |
| # "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0": { |
| # "FieldReplaceable": 1, |
| # "BuildDate": "", |
| # "Cached": 0, |
| # "SerialNumber": "YA3933741574", |
| # "Version": "10", |
| # "Model": "", |
| # "PrettyName": "PROCESSOR MODULE", |
| # "PartNumber": "01HL322", |
| # "Present": 1, |
| # "Manufacturer": "<Manufacturer Name>" |
| # }, |
| # The CPU properties "Present" should be boolean 1. |
| |
| ${cpu_list}= Get Endpoint Paths ${HOST_INVENTORY_URI}system cpu |
| FOR ${cpu_uri} IN @{cpu_list} |
| ${present}= Read Attribute ${cpu_uri} Present |
| Should Be True ${present} |
| END |
| |
| Verify DIMM Present |
| [Documentation] Check if the FRU "Present" is set for DIMM's. |
| [Tags] Verify_DIMM_Present |
| # Example: |
| # "/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0": { |
| # "FieldReplaceable": 1, |
| # "BuildDate": "", |
| # "Cached": 0, |
| # "SerialNumber": "0x0300cf4f", |
| # "Version": "0x00", |
| # "Model": "M393A1G40EB1-CRC ", |
| # "PrettyName": "0x0c", |
| # "PartNumber": "", |
| # "Present": 1, |
| # "Manufacturer": "0xce80" |
| # }, |
| |
| # The DIMM properties "Present" should be boolean 1. |
| |
| ${dimm_list}= Get Endpoint Paths ${HOST_INVENTORY_URI}system dimm |
| FOR ${dimm_uri} IN @{dimm_list} |
| ${present}= Read Attribute ${dimm_uri} Present |
| Should Be True ${present} |
| END |
| |
| Verify FRU Properties |
| [Documentation] Verify the FRU properties fields. |
| [Tags] Verify_FRU_Properties |
| # Example: |
| # A FRU would have "FieldReplaceable" set to boolean 1 and should have |
| # the following entries |
| # "fru": [ |
| # "FieldReplaceable" |
| # "BuildDate", |
| # "Cached" |
| # "SerialNumber", |
| # "Version", |
| # "Model", |
| # "PrettyName", |
| # "PartNumber", |
| # "Present", |
| # "Manufacturer", |
| # ] |
| # and FRU which doesn't have one of this fields is an error. |
| # "/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0": { |
| # "FieldReplaceable": 1, |
| # "BuildDate": "", |
| # "Cached": 0, |
| # "SerialNumber": "0x0300cf4f", |
| # "Version": "0x00", |
| # "Model": "M393A1G40EB1-CRC ", |
| # "PrettyName": "0x0c", |
| # "PartNumber": "", |
| # "Present": 1, |
| # "Manufacturer": "0xce80" |
| # }, |
| |
| ${system_list}= Get Endpoint Paths ${HOST_INVENTORY_URI}system * |
| ${fru_list}= Qualified FRU List @{system_list} |
| Validate FRU Properties Fields fru EQU @{fru_list} |
| |
| |
| Verify GPU Properties |
| [Documentation] Verify the GPU properties fields. |
| [Tags] Verify_GPU_Properties |
| # Example: |
| # A GPU property should have the following entries: |
| # "gpu":[ |
| # "FieldReplaceable", |
| # "PrettyName", |
| # "Present", |
| # "Functional" |
| # ] |
| # GPU inventory: |
| # "/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card2": { |
| # "FieldReplaceable": 1, |
| # "Functional": 1, |
| # "Present": 1, |
| # "PrettyName": "" |
| # }, |
| |
| |
| ${system_list}= Get Endpoint Paths |
| ... ${HOST_INVENTORY_URI}system/chassis/motherboard gv* |
| Validate FRU Properties Fields gpu EQU @{system_list} |
| |
| |
| Verify Core Properties |
| [Documentation] Verify the core property fields. |
| [Tags] Verify_Core_Properties |
| # Example: |
| # A core property should have the following entries: |
| # "core":[ |
| # "PrettyName", |
| # "Present", |
| # "Functional" |
| # ] |
| # core inventory: |
| # "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core0": { |
| # "Functional": 1, |
| # "Present": 1, |
| # "PrettyName": "" |
| # }, |
| |
| ${system_list}= Get Endpoint Paths |
| ... ${HOST_INVENTORY_URI}system/chassis/motherboard core* |
| Validate FRU Properties Fields core EQU @{system_list} |
| |
| |
| Verify Fan Properties |
| [Documentation] Verify the fan property fields. |
| [Tags] Verify_Fan_Properties |
| # Example: |
| # A fan property should have the following entries: |
| # "core":[ |
| # "PrettyName", |
| # "Present", |
| # "MeetsMinimumShipLevel", |
| # "Functional" |
| # ] |
| # fan inventory: |
| # "/xyz/openbmc_project/inventory/system/chassis/motherboard/fan0": { |
| # "Functional": 1, |
| # "MeetsMinimumShipLevel": 1, |
| # "Present": 1, |
| # "PrettyName": "fan0" |
| # }, |
| |
| ${water_cooled}= Is Water Cooled |
| |
| ${system_list}= Get Endpoint Paths |
| ... ${HOST_INVENTORY_URI}system/chassis/motherboard fan* |
| |
| Printn |
| Rprint Vars water_cooled system_list |
| |
| Run Keyword If ${water_cooled} |
| ... Validate FRU Properties Fields fan_wc SUBSET @{system_list} |
| ... ELSE |
| ... Validate FRU Properties Fields fan EQU @{system_list} |
| |
| |
| Verify Core Functional State |
| [Documentation] Verify that "Present" core property is set if "Functional" |
| ... core property is set. |
| [Tags] Verify_Core_Functional_State |
| # Example: |
| # "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core5":{ |
| # "Functional": 1, |
| # "Present": 1, |
| # "PrettyName": "" |
| # }, |
| ${core_list}= Get Endpoint Paths ${HOST_INVENTORY_URI}system core |
| FOR ${core_uri} IN @{core_list} |
| ${status}= Run Keyword And Return Status |
| ... Check URL Property Is Functional ${core_uri} |
| Continue For Loop If '${status}' == '${False}' |
| ${present}= Read Attribute ${core_uri} Present |
| Should Be True ${present} |
| ... msg=${core_uri} is functional but not present. |
| END |
| |
| |
| Verify DIMM Functional State |
| [Documentation] Verify that "Present" DIMM property is set if "Functional" |
| ... DIMM property is set. |
| [Tags] Verify_DIMM_Functional_State |
| # Example: |
| # "/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0": { |
| # "BuildDate": "", |
| # "Cached": 0, |
| # "FieldReplaceable": 1, |
| # "Functional": 1, |
| # "Manufacturer": "0xce80", |
| # "Model": "M393A1G40EB1-CRC ", |
| # "PartNumber": "", |
| # "Present": 1, |
| # "PrettyName": "0x0c", |
| # "SerialNumber": "0x0300cf4f", |
| # "Version": "0x00" |
| # }, |
| |
| ${dimm_list}= Get Endpoint Paths ${HOST_INVENTORY_URI}system dimm |
| FOR ${dimm_uri} IN @{dimm_list} |
| ${status}= Run Keyword And Return Status |
| ... Check URL Property Is Functional ${dimm_uri} |
| Continue For Loop If '${status}' == '${False}' |
| ${present}= Read Attribute ${dimm_uri} Present |
| Should Be True ${present} |
| ... msg=${dimm_uri} is functional but not present. |
| END |
| |
| |
| Verify Fan Functional State |
| [Documentation] Verify that "Present" fan property is set if "Functional" |
| ... fan property is set. |
| [Tags] Verify_Fan_Functional_State |
| # Example: |
| # "/xyz/openbmc_project/inventory/system/chassis/motherboard/fan0": { |
| # "Functional": 1, |
| # "Present": 1, |
| # "PrettyName": "fan0" |
| # }, |
| |
| ${fan_list}= Get Endpoint Paths ${HOST_INVENTORY_URI}system fan* |
| Should Not Be Empty ${fan_list} |
| FOR ${fan_uri} IN @{fan_list} |
| ${status}= Run Keyword And Return Status |
| ... Check URL Property Is Functional ${fan_uri} |
| Continue For Loop If '${status}' == '${False}' |
| ${present}= Read Attribute ${fan_uri} Present |
| Should Be True ${present} |
| ... msg=${fan_uri} is functional but "Present" is not set. |
| END |
| |
| |
| Verify CPU Functional State |
| [Documentation] Verify that "Present" CPU property is set if "Functional" |
| ... CPU property is set. |
| [Tags] Verify_CPU_Functional_State |
| |
| # Example of cpu* endpoint data: |
| # "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0": { |
| # "Functional": 1, |
| # "Present": 1, |
| # "PrettyName": "cpu0" |
| # }, |
| |
| ${cpu_list}= Get Endpoint Paths ${HOST_INVENTORY_URI}system cpu* |
| Should Not Be Empty ${cpu_list} |
| FOR ${cpu_uri} IN @{cpu_list} |
| ${status}= Run Keyword And Return Status |
| ... Check URL Property Is Functional ${cpu_uri} |
| Continue For Loop If '${status}' == '${False}' |
| ${present}= Read Attribute ${cpu_uri} Present |
| Should Be True ${present} |
| ... msg=${cpu_uri} is functional but "Present" is not set. |
| END |
| |
| |
| Verify GPU Functional State |
| [Documentation] Verify that "Functional" GPU property is set if "Present" |
| ... GPU property is set |
| [Tags] Verify_GPU_Functional_State |
| |
| # Example of gv* endpoint data: |
| # "/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card4": { |
| # "Functional": 1, |
| # "Present": 1, |
| # "PrettyName": "" |
| # }, |
| |
| |
| ${gpu_list}= Get Endpoint Paths |
| ... ${HOST_INVENTORY_URI}system/chassis/motherboard gv* |
| Should Not Be Empty ${gpu_list} |
| FOR ${gpu_uri} IN @{gpu_list} |
| ${status}= Run Keyword And Return Status |
| ... Check URL Property Is Functional ${gpu_uri} |
| Continue For Loop If '${status}' == '${False}' |
| ${present}= Read Attribute ${gpu_uri} Present |
| Should Be True ${present} |
| ... msg=${gpu_uri} is functional but "Present" is not set. |
| END |
| |
| Check Air Or Water Cooled |
| [Documentation] Check if this system is Air or water cooled. |
| [Tags] Check_Air_Or_Water_Cooled |
| # Example: |
| # "/xyz/openbmc_project/inventory/system/chassis": { |
| # "AirCooled": 1, |
| # "WaterCooled": 0 |
| # }, |
| |
| ${air_cooled}= Read Attribute |
| ... /xyz/openbmc_project/inventory/system/chassis AirCooled |
| Log AirCooled:${air_cooled} |
| |
| ${water_cooled}= Read Attribute |
| ... /xyz/openbmc_project/inventory/system/chassis WaterCooled |
| Log WaterCooled:${water_cooled} |
| |
| Run Keyword If ${air_cooled}==${0} and ${water_cooled}==${0} |
| ... Fail Neither AirCooled or WaterCooled. |
| |
| Verify Minimal CPU Inventory |
| [Documentation] Verify minimal CPU inventory. |
| [Tags] Verify_Minimal_CPU_Inventory |
| [Template] Minimum Inventory |
| |
| # item minimum_count |
| cpu 1 |
| |
| Verify Minimal DIMM Inventory |
| [Documentation] Verify minimal DIMM inventory. |
| [Tags] Verify_Minimal_DIMM_Inventory |
| [Template] Minimum Inventory |
| |
| # item minimum_count |
| dimm 2 |
| |
| Verify Minimal Core Inventory |
| [Documentation] Verify minimal core inventory. |
| [Tags] Verify_Minimal_Core_Inventory |
| [Template] Minimum Inventory |
| |
| # item minimum_count |
| core 1 |
| |
| Verify Minimal Memory Buffer Inventory |
| [Documentation] Verify minimal memory buffer inventory. |
| [Tags] Verify_Minimal_Memory_Buffer_Inventory |
| [Template] Minimum Inventory |
| |
| # item minimum_count |
| memory_buffer 1 |
| |
| Verify Minimal Fan Inventory |
| [Documentation] Verify minimal fan inventory. |
| [Tags] Verify_Minimal_Fan_Inventory |
| [Template] Minimum Inventory |
| |
| # item minimum_count |
| fan 2 |
| |
| Verify Minimal Main Planar Inventory |
| [Documentation] Verify minimal main planar inventory. |
| [Tags] Verify_Minimal_Main_Planar_Inventory |
| [Template] Minimum Inventory |
| |
| # item minimum_count |
| main_planar 1 |
| |
| Verify Minimal System Inventory |
| [Documentation] Verify minimal system inventory. |
| [Tags] Verify_Minimal_System_Inventory |
| [Template] Minimum Inventory |
| |
| # item minimum_count |
| system 1 |
| |
| Verify Minimal Power Supply Inventory |
| [Documentation] Verify minimal power supply inventory. |
| [Tags] Verify_Minimal_Power_Supply_Inventory |
| [Template] Minimum Inventory |
| # Example: |
| # "/xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply0", |
| # "/xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply1", |
| |
| # item minimum_count |
| powersupply 1 |
| |
| |
| Verify Inventory List After Reboot |
| [Documentation] Verify inventory list after reboot. |
| [Tags] Verify_Inventory_List_After_Reboot |
| |
| Repeat Keyword ${LOOP_COUNT} times Choose Boot Option reboot |
| |
| |
| Verify Inventory List After Reset |
| [Documentation] Verify inventory list after reset. |
| [Tags] Verify_Inventory_List_After_Reset |
| |
| Repeat Keyword ${LOOP_COUNT} times Choose Boot Option reset |
| |
| *** Keywords *** |
| |
| Suite Setup Execution |
| [Documentation] Do the initial suite setup. |
| |
| Smart Power Off |
| REST Power On |
| Delete All Error Logs |
| |
| Get Inventory |
| [Documentation] Get the properties of an endpoint. |
| [Arguments] ${endpoint} |
| # Description of arguments: |
| # endpoint string for which url path ending. |
| # Example: "system" is the endpoint for url |
| # /xyz/openbmc_project/inventory/system |
| ${resp}= OpenBMC Get Request ${HOST_INVENTORY_URI}${endpoint} |
| Should Be Equal As Strings ${resp.status_code} ${HTTP_OK} |
| ${jsondata}= To JSON ${resp.content} |
| [Return] ${jsondata} |
| |
| |
| Qualified FRU List |
| [Documentation] Build the list of valid FRUs. |
| [Arguments] @{system_list} |
| # Description of arguments: |
| # system_list List of system inventory URLs. |
| # Example: |
| # /xyz/openbmc_project/inventory/system/chassis/motherboard |
| # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0 |
| # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1 |
| # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0 |
| # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm1 |
| # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm2 |
| # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm3 |
| # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm4 |
| # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm5 |
| # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm6 |
| # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm7 |
| |
| ${fru_list}= Create List |
| FOR ${fru_uri} IN @{system_list} |
| ${resp}= OpenBMC Get Request ${fru_uri}/attr/FieldReplaceable |
| ... quiet=${1} |
| ${jsondata}= To JSON ${resp.content} |
| ${status}= Run Keyword And Return Status |
| ... Should Be True ${jsondata['data']} == ${1} |
| Run Keyword If '${status}' == '${True}' |
| ... Append To List ${fru_list} ${fru_uri} |
| END |
| |
| ${fru_valid_list}= Filter GPU FRU Entries ${fru_list} |
| |
| [Return] ${fru_valid_list} |
| |
| |
| Filter GPU FRU Entries |
| [Documentation] Remove GPU entries from FRU list and return the result. |
| [Arguments] ${fru_list} |
| |
| # Description of arguments: |
| # fru_list List of FRU system inventory URIs. |
| # Example FRUs list: |
| # [u'/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0', |
| # u'/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1', |
| # u'/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0', |
| # u'/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm1', |
| # u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card0', |
| # u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card1', |
| # u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card3', |
| # u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card4'] |
| |
| # Example of the matched GPU FRUs entries: |
| # [u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card0', |
| # u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card1', |
| # u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card3', |
| # u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card4'] |
| |
| ${gpu_matches}= Get Matches ${fru_list} *gv* |
| |
| Remove Values From List ${fru_list} @{gpu_matches} |
| [Return] ${fru_list} |
| |
| |
| Validate FRU Properties Fields |
| [Documentation] Compare valid FRUs from system to expected FRU set. |
| [Arguments] ${fru_type} ${comparison_type} @{fru_list} |
| |
| # Description of argument(s): |
| # fru_type FRU type name (e.g. "gpu", "fru", "fan", etc.). |
| # comparison_type A string indicating the comparison method. |
| # "EQU" for equality, "SUBSET" for subset comparison. |
| # fru_list List of FRU URLs. |
| |
| # Get the pre-defined fru_type attributes from the inventory dictionary |
| # for the fru_type. Example: |
| # set(['Version', 'PartNumber', 'SerialNumber', 'FieldReplaceable', |
| # 'BuildDate', 'Present', 'Manufacturer', 'PrettyName', 'Cached', 'Model']) |
| ${fru_set}= List To Set ${inventory_dict['${fru_type}']} |
| |
| Rprint Vars fru_set |
| |
| # Iterate through the url of the FRU and compare its attributes with |
| # the pre-defined fru_type attributes. |
| FOR ${fru_url_path} IN @{fru_list} |
| ${fru_field}= Read Properties ${fru_url_path} |
| ${fru_keys}= List To Set ${fru_field.viewkeys()} |
| Rprint Vars fru_keys |
| Run Keyword If '${comparison_type}' == 'EQU' |
| ... Should Be Equal ${fru_keys} ${fru_set} |
| ... ELSE |
| ... Should Be True $fru_set.issubset($fru_keys) |
| END |
| |
| |
| Check URL Property Is Functional |
| [Documentation] Verify that the given url property is functional. |
| [Arguments] ${url_path} |
| # Description of arguments: |
| # url_path Full url path of the inventory object. |
| # Example: DIMM / core property url's |
| # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0 |
| # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core0 |
| ${state}= Read Attribute ${url_path} Functional |
| Should Be True ${state} |
| |
| Choose Boot Option |
| [Documentation] Choose BMC reset or host reboot. |
| [Arguments] ${option} |
| |
| Run Keyword If '${option}' == 'reboot' |
| ... Verify Inventory List Before And After Reboot |
| ... ELSE |
| ... Verify Inventory List Before And After Reset |
| |
| |
| Verify Inventory List Before And After Reboot |
| [Documentation] Verify inventory list before and after reboot. |
| |
| REST Power On stack_mode=skip quiet=1 |
| Delete All Error Logs |
| ${inventory_before}= Get URL List ${HOST_INVENTORY_URI} |
| Host Reboot |
| Delete All Error Logs |
| ${inventory_after}= Get URL List ${HOST_INVENTORY_URI} |
| Lists Should Be Equal ${inventory_before} ${inventory_after} |
| |
| |
| Verify Inventory List Before And After Reset |
| [Documentation] Verify inventory list before and after BMC reset. |
| |
| REST Power On stack_mode=skip quiet=1 |
| Delete All Error Logs |
| ${inventory_before}= Get URL List ${HOST_INVENTORY_URI} |
| OBMC Reboot (run) |
| Delete All Error Logs |
| ${inventory_after}= Get URL List ${HOST_INVENTORY_URI} |
| Lists Should Be Equal ${inventory_before} ${inventory_after} |
| |
| |
| Minimum Inventory |
| [Documentation] Check for minimum inventory. |
| [Arguments] ${item} ${minimum_count} |
| |
| # Description of argument(s): |
| # item Inventory name (example: "fan/cpu/dimm/etc"). |
| # minimum_count The minimum number of the given item. |
| |
| ${count}= Get Number Hardware Items ${item} |
| Should Be True ${count}>=${minimum_count} |
| |
| Get Number Hardware Items |
| [Documentation] Get the count of the total present currently on inventory. |
| [Arguments] ${item} |
| |
| # Description of argument(s): |
| # item Inventory name (example: "fan/cpu/dimm/etc"). |
| |
| ${count_inventory} Set Variable ${0} |
| ${list}= Get Endpoint Paths ${HOST_INVENTORY_URI}system/ |
| ... ${item} |
| |
| FOR ${element} IN @{list} |
| ${present}= Read Properties ${element} |
| ${count_inventory}= Set Variable if ${present['Present']} == 1 |
| ... ${count_inventory+1} ${count_inventory} |
| END |
| [return] ${count_inventory} |