blob: 6c69cde1e5555374e6fd38446509d60e6ef69496 [file] [log] [blame]
*** Settings ***
Documentation Test IPMI FRU data.
Resource ../../lib/rest_client.robot
Resource ../../lib/ipmi_client.robot
Resource ../../lib/openbmc_ffdc.robot
Resource ../../lib/boot_utils.robot
Library ../../lib/ipmi_utils.py
Library ../../data/model.py
Test Teardown Test Teardown Execution
Suite Setup Suite Setup Execution
*** Test Cases ***
Test FRU Info At Power On
[Documentation] Verify FRU info via IPMI and REST at power on.
[Tags] Test_FRU_Info_At_Power_On
${component_name_list}= Get FRU Component Name List ${OPENBMC_MODEL}
&{ipmi_rest_fru_field_map}= Get Ipmi Rest Fru Field Map ${OPENBMC_MODEL}
Set Global Variable ${ipmi_rest_fru_field_map}
Rprint Vars ipmi_rest_fru_field_map component_name_list
FOR ${component_name} IN @{component_name_list}
Verify FRU Info ${component_name}
END
*** Keywords ***
Get Component Fru Info Via REST
[Documentation] Get FRU Information Via REST for the given component.
[Arguments] ${component_name}
# Description of argument(s):
# component_name The name of the component (e.g. "cpu", "dimm", etc.).
${inventory_uris}= Read Properties ${HOST_INVENTORY_URI}list quiet=${1}
# From the inventory_uris, select just the ones for the component of
# interest.
${component_uris}= Get Matches ${inventory_uris}
... regexp=^.*[0-9a-z_].${component_name}\[0-9]*$
# Get the component information for each record.
${component_frus}= Create List
FOR ${component_uri} IN @{component_uris}
${result}= Read Properties ${component_uri} quiet=${1}
${component}= Fetch From Right ${component_uri} /
Set To Dictionary ${result} fru_device_description ${component}
Append To List ${component_frus} ${result}
END
[Return] ${component_frus}
Verify FRU Info
[Documentation] Verify FRU information of given component.
[Arguments] ${component_name}
# Description of argument(s):
# component_name The name of the component (e.g. "cpu", "dimm", etc.).
${ipmi_fru_component_info}= Get Component FRU Info ${component_name}
... ${fru_objs}
# Example of output from "Get Component FRU Info" keyword for CPU component.
#
# ipmi_fru_info:
# ipmi_fru_info[0]:
# [fru_device_description]: cpu0 (ID 1)
# [board_mfg_date]: Sun Dec 31 18:00:00 1995
# [board_mfg]: <Manufacturer Name>
# [board_product]: PROCESSOR MODULE
# [board_serial]: YA1934301835
# [board_part_number]: 02CY211
# ipmi_fru_info[1]:
# [fru_device_description]: cpu1 (ID 2)
# [board_mfg_date]: Sun Dec 31 18:00:00 1995
# [board_mfg]: <Manufacturer Name>
# [board_product]: PROCESSOR MODULE
# [board_serial]: YA1934301834
# [board_part_number]: 02CY211
${rest_fru_component_info}= Get Component FRU Info Via REST
... ${component_name}
# Example of output from "Get Component FRU Info Via REST" keyword for
# CPU component.
#
# rest_fru_info:
# rest_fru_info[0]:
# [FieldReplaceable]: 1
# [BuildDate]: 1996-01-01 - 00:00:00
# [fru_device_description]: cpu0
# [Cached]: 0
# [SerialNumber]: YA1934301835
# [Functional]: 1
# [Version]: 22
# [Model]: <blank>
# [PrettyName]: PROCESSOR MODULE
# [PartNumber]: 02CY211
# [Present]: 1
# [Manufacturer]: <Manufacturer Name>
# rest_fru_info[1]:
# [FieldReplaceable]: 1
# [BuildDate]: 1996-01-01 - 00:00:00
# [fru_device_description]: cpu1
# [Cached]: 0
# [SerialNumber]: YA1934301834
# [Functional]: 1
# [Version]: 22
# [Model]: <blank>
# [PrettyName]: PROCESSOR MODULE
# [PartNumber]: 02CY211
# [Present]: 1
# [Manufacturer]: <Manufacturer Name>
${inventory_uris}= Read Properties
... ${HOST_INVENTORY_URI}list quiet=${1}
# From the inventory_uris, select just the ones for the component of
# interest. Example for cpu:
# /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0
# /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1
${component_uris}= Get Matches ${inventory_uris}
... regexp=^.*[0-9a-z_].${component_name}\[0-9]*$
FOR ${uri} IN @{component_uris}
${sub_component}= Fetch From Right ${uri} /
${ipmi_index}= Get Index Of FRU Sub Component Info
... ${ipmi_fru_component_info} ${sub_component}
${rest_index}= Get Index Of FRU Sub Component Info
... ${rest_fru_component_info} ${sub_component}
${ipmi_fru_sub_component}=
... Get From List ${ipmi_fru_component_info} ${ipmi_index}
${rest_fru_sub_component}=
... Get From List ${rest_fru_component_info} ${rest_index}
Compare IPMI And REST FRU Component Info ${ipmi_fru_sub_component}
... ${rest_fru_sub_component} ${component_name}
END
Get Index Of FRU Sub Component Info
[Documentation] Get index of FRU sub component info from FRU component
... data.
[Arguments] ${fru_component_info} ${sub_component}
# fru_component_info FRU component data as a list of dictionaries.
# ipmi_cpu_fru_info[0]:
# fru_device_description: cpu0 (ID 1)
# board_mfg_date: Sun Dec 31 18:00:00 1995
# board_mfg: <Manufacturer Name>
# board_product: PROCESSOR MODULE
# board_serial: YA1934302970
# board_part_number: 02CY211
# ipmi_cpu_fru_info[1]:
# fru_device_description: cpu1 (ID 2)
# board_mfg_date: Sun Dec 31 18:00:00 1995
# board_mfg: <Manufacturer Name>
# board_product: PROCESSOR MODULE
# board_serial: YA1934302965
# board_part_number: 02CY211
# sub_component Sub component name (e.g. "cpu0", "cpu1", etc.).
${sub_component_count}= Get Length ${fru_component_info}
${index}= Set Variable ${0}
FOR ${rest_fru_sub_component} IN @{fru_component_info}
${fru_component_section}=
... Get From List ${fru_component_info} ${index}
# Get FRU name from IPMI's fru_device_description field.
# Example "cpu0" from "cpu0 (ID 1)".
${fru_name}= Fetch From Left
... ${fru_component_section['fru_device_description']} ${SPACE}
${status}= Run Keyword And Return Status Should Be Equal
... ${fru_name} ${sub_component}
Exit For Loop If '${status}' == '${True}'
${index}= Evaluate ${index} + 1
Exit For Loop If ${index} >= ${sub_component_count}
END
[Return] ${index}
Compare IPMI And REST FRU Component Info
[Documentation] Compare IPMI And REST FRU Component data objects.
[Arguments] ${ipmi_fru_component_obj} ${rest_fru_component_obj}
... ${component_name}
# Description of argument(s):
# ipmi_fru_component_obj IPMI FRU component data in dictionary.
# Example:
# fru_device_description: cpu0 (ID 1)
# board_mfg_date: Sun Dec 31 18:00:00 1995
# board_mfg: <Manufacturer Name>
# board_product: PROCESSOR MODULE
# board_serial: YA1934302970
# board_part_number: 02CY211
# rest_fru_component_obj REST FRU component data in dictionary.
# Example:
# FieldReplaceable: 1
# BuildDate: 1996-01-01 - 00:00:00
# Cached: 0
# SerialNumber: YA1934302970
# Functional: 1
# Version: 22
# Model: <blank>
# PrettyName: PROCESSOR MODULE
# PartNumber: 02CY211
# Present: 1
# Manufacturer: <Manufacturer Name>
# component_name The name of the component (e.g. "cpu", "dimm", etc.).
# Get key_map from ipmi_rest_fru_field_map.
${key_map}= Set Variable ${ipmi_rest_fru_field_map['${component_name}']}
FOR ${ipmi_key} IN @{ipmi_rest_fru_field_map['${component_name}'].keys()}
${rest_key}= Set Variable ${key_map['${ipmi_key}']}
Should Contain ${rest_fru_component_obj['${rest_key}']}
... ${ipmi_fru_component_obj['${ipmi_key}']}
... msg=Comparison failed.
END
Test Teardown Execution
[Documentation] Do the post test teardown.
FFDC On Test Case Fail
Suite Setup Execution
[Documentation] Do test setup initialization.
REST Power On stack_mode=skip quiet=1
${fru_objs}= Get Fru Info
Set Suite Variable ${fru_objs}