*** Settings ***
Documentation   This suite tests Vital Product Data (VPD) using Redfish.

Resource        ../../lib/openbmc_ffdc.robot
Library         ../../lib/vpd_utils.py

Suite Setup     Redfish.Login
Suite Teardown  Redfish.Logout
Test Teardown   FFDC On Test Case Fail


*** Test Cases ***

Verify BMC VPD Data Via Redfish
    [Documentation]  Verify BMC VPD details via Redfish output.
    [Tags]  Verify_BMC_VPD_Data_Via_Redfish
    [Template]  Verify Redfish VPD Data

    # Component  Field
    BMC          Model
    BMC          PartNumber
    BMC          SerialNumber
    BMC          SparePartNumber
    BMC          Location


Verify Chassis VPD Data Via Redfish
    [Documentation]  Verify Chassis VPD details via Redfish output.
    [Tags]  Verify_Chassis_VPD_Data_Via_Redfish
    [Template]  Verify Redfish VPD Data

    # Skipping chassis's spare part number test because it has issue.
    # Component  Field
    Chassis      Model
    Chassis      PartNumber
    Chassis      SerialNumber
    #Chassis      SparePartNumber
    Chassis      Location


Verify CPU VPD Data Via Redfish
    [Documentation]  Verify CPU VPD details via Redfish output.
    [Tags]  Verify_CPU_VPD_Data_Via_Redfish
    [Template]  Verify Redfish VPD Data

    # Component  Field
    CPU          Model
    CPU          PartNumber
    CPU          SerialNumber
    CPU          SparePartNumber
    CPU          Location


Verify TPM VPD Data Via Redfish
    [Documentation]  Verify TPM VPD details via Redfish output.
    [Tags]  Verify_TPM_VPD_Data_Via_Redfish
    [Template]  Verify Redfish VPD Data

    # Component     Field
    TPM             Model
    TPM             PartNumber
    TPM             SerialNumber
    TPM             SparePartNumber
    TPM             Location


Verify TOD Battery VPD Data Via Redfish
    [Documentation]  Verify TOD battery VPD details via Redfish output.
    [Tags]  Verify_TOD_Battery_VPD_Data_Via_Redfish
    [Template]  Verify Redfish VPD Data

    # Component     Field
    TOD Battery     Model
    TOD Battery     PartNumber
    TOD Battery     SerialNumber
    TOD Battery     SparePartNumber
    TOD Battery     Location


Verify VRM VPD Data Via Redfish
    [Documentation]  Verify voltage regulator module VPD details via Redfish output.
    [Tags]  Verify_VRM_VPD_Data_Via_Redfish
    [Template]  Verify Redfish VPD Data

    # Component     Field
    VRM             Model
    VRM             PartNumber
    VRM             SerialNumber
    VRM             SparePartNumber
    VRM             Location


Verify OP Panel VPD Data Via Redfish
    [Documentation]  Verify operator panel VPD details via Redfish output.
    [Tags]  Verify_OP_Panel_VPD_Data_Via_Redfish
    [Template]  Verify Redfish VPD Data

    # Component     Field
    OP Panel        Model
    OP Panel        PartNumber
    OP Panel        SerialNumber
    OP Panel        SparePartNumber
    OP Panel        Location


Verify OP Panel LCD VPD Data Via Redfish
    [Documentation]  Verify operator panel LCD VPD details via Redfish output.
    [Tags]  Verify_OP_Panel_LCD_VPD_Data_Via_Redfish
    [Template]  Verify Redfish VPD Data

    # Component     Field
    OP Panel LCD    Model
    OP Panel LCD    PartNumber
    OP Panel LCD    SerialNumber
    OP Panel LCD    SparePartNumber
    OP Panel LCD    Location


Verify Disk Backplane VPD Data Via Redfish
    [Documentation]  Verify disk backplane VPD details via Redfish output.
    [Tags]  Verify_Disk_Backplane_VPD_Data_Via_Redfish
    [Template]  Verify Redfish VPD Data

    # Component     Field
    Disk Backplane  Model
    Disk Backplane  PartNumber
    Disk Backplane  SerialNumber
    Disk Backplane  SparePartNumber
    Disk Backplane  Location


Verify System VPD Data Via Redfish
    [Documentation]  Verify system Model and SN via Redfish output.
    [Tags]  Verify_System_VPD_Data_Via_Redfish
    [Template]  Verify Redfish VPD Data

    # Component     Field
    System          Model
    System          SerialNumber


*** Keywords ***

Verify Redfish VPD Data
    [Documentation]  Verify Redfish VPD data of given component.
    [Arguments]  ${component}  ${field}

    # Description of arguments:
    # component       VPD component (e.g. /system/chassis/motherboard/vdd_vrm1).
    # field           VPD field (e.g. Model, PartNumber etc.).

    ${redfish_component_uri}  ${redfish_component_name}=  Run Keyword If
    ...  '${component}' == 'BMC'  Set Variable  /redfish/v1/Managers/bmc  OpenBmc Manager
    ...  ELSE IF  '${component}' == 'Chassis'
    ...    Set Variable  /redfish/v1/Chassis/chassis  RackMount
    ...  ELSE IF  '${component}' == 'CPU'
    ...    Set Variable  /redfish/v1/Systems/system/Processors/cpu0  Processor
    ...  ELSE IF  '${component}' == 'TPM'
    ...    Set Variable  /redfish/v1/Chassis/chassis/Assembly  TPM Card
    ...  ELSE IF  '${component}' == 'TOD Battery'
    ...    Set Variable  /redfish/v1/Chassis/chassis/Assembly  Time Of Day Battery
    ...  ELSE IF  '${component}' == 'VRM'
    ...    Set Variable  /redfish/v1/Chassis/chassis/Assembly  Voltage Regulator Module
    ...  ELSE IF  '${component}' == 'OP Panel'
    ...    Set Variable  /redfish/v1/Chassis/chassis/Assembly  Operator Panel Base
    ...  ELSE IF  '${component}' == 'OP Panel LCD'
    ...    Set Variable  /redfish/v1/Chassis/chassis/Assembly  Operator Panel LCD
    ...  ELSE IF  '${component}' == 'Disk Backplane'
    ...    Set Variable  /redfish/v1/Chassis/chassis/Assembly  NVMe Backplane
    ...  ELSE IF  '${component}' == 'System'
    ...    Set Variable  /redfish/v1/Systems/system  System

    ${resp}=  Run Keyword If  '${redfish_component_uri}' == '/redfish/v1/Chassis/chassis/Assembly'
    ...  Get Assembly Component VPD  ${redfish_component_name}
    ...  ELSE  Redfish.Get Properties  ${redfish_component_uri}

    ${vpd_field}=  Set Variable If
    ...  '${field}' == 'Model'  CC
    ...  '${field}' == 'PartNumber'  PN
    ...  '${field}' == 'SerialNumber'  SN
    ...  '${field}' == 'SparePartNumber'  FN
    ...  '${field}' == 'Location'  LocationCode

    ${vpd_component}=  Set Variable If
    ...  '${component}' == 'CPU'  /system/chassis/motherboard/dcm0/cpu0
    ...  '${component}' == 'Chassis'  /system/chassis
    ...  '${component}' == 'BMC'  /system/chassis/motherboard/bmc
    ...  '${component}' == 'TPM'  /system/chassis/motherboard/tpm
    ...  '${component}' == 'TOD Battery'  /system/chassis/motherboard/bmc/tod_battery
    ...  '${component}' == 'VRM'  /system/chassis/motherboard/vrm0
    ...  '${component}' == 'OP Panel'  /system/chassis/motherboard/dasd_backplane/panel0
    ...  '${component}' == 'OP Panel LCD'  /system/chassis/motherboard/dasd_backplane/panel1
    ...  '${component}' == 'Disk Backplane'  /system/chassis/motherboard/dasd_backplane
    ...  '${component}' == 'System'  /system

    ${vpd_records}=  Vpdtool  -o -O ${vpd_component}

    Run Keyword if  '${field}' == 'Location'
    ...    Should Be Equal As Strings  ${resp["Location"]["PartLocation"]["ServiceLabel"]}
    ...    ${vpd_records['${vpd_component}']['${vpd_field}']}

    # Check whether the vpd details from redfish and vpdtool are the same.
    ...  ELSE IF  '${component}' == 'System'
    ...    Should Be Equal As Strings  ${resp["${field}"]}  ${vpd_records['${vpd_component}']['${field}']}
    ...  ELSE
    ...    Should Be Equal As Strings  ${resp["${field}"]}  ${vpd_records['${vpd_component}']['${vpd_field}']}


Get Assembly Component VPD
    [Documentation]  Returns Redfish VPD data of given assembly component.
    [Arguments]  ${component_name}

    # Description of argument(s):
    # component_name  Assembly's component name (e.g. tpm_wilson, tod_battery).

    ${resp}=  Redfish.Get Properties  /redfish/v1/Chassis/chassis/Assembly
    FOR  ${assembly_component}  IN  @{resp["Assemblies"]}
        ${output}=  Set Variable If
        ...  "${component_name}" == "${assembly_component["Name"]}"  ${assembly_component}
        Exit For Loop IF  "${component_name}" == "${assembly_component["Name"]}"
    END
    [Return]  ${output}
