*** 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

Variables              ../data/ipmi_rest_fru_field_map.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
    [Template]  Verify FRU Info

    # component_name
    cpu
    dimm
    fan
    bmc
    system
    powersupply
    gv100card


*** 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}

