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

Library         ../../lib/vpd_utils.py
Variables       ../../data/vpd_variables.py
Resource        ../../lib/openbmc_ffdc.robot

Test Teardown   FFDC On Test Case Fail


*** Variables ***

${CMD_GET_PROPERTY_INVENTORY}  busctl get-property xyz.openbmc_project.Inventory.Manager
${DR_WRITE_VALUE}              XYZ Component
${PN_WRITE_VALUE}              XYZ1234
${SN_WRITE_VALUE}              ABCD12345678
@{fields}                      PN  SN  LocationCode
@{vpd_fields}                  PN  SN

*** Test Cases ***

Verify System VPD Data Via Vpdtool
    [Documentation]  Verify the system VPD details via vpdtool output.
    [Tags]  Verify_System_VPD_Data_Via_Vpdtool
    [Template]  Verify VPD Data Via Vpdtool

    # Component     Field
    System          Model
    System          SerialNumber
    System          LocationCode


Verify VPD Component Read
    [Documentation]  Verify details of all VPD component via vpdtool.
    [Tags]  Verify_VPD_Component_Read

    ${vpd_records}=  Vpdtool  -i
    ${components}=  Get Dictionary Keys  ${vpd_records}
    FOR  ${component}  IN  @{components}
        Verify VPD Component Read Operation  ${component}
    END


Verify VPD Field Read
    [Documentation]  Verify reading VPD field value via vpdtool.
    [Tags]  Verify_VPD_Field_Read

    ${vpd_records}=  Vpdtool  -i
    ${components}=  Get Dictionary Keys  ${vpd_records}
    FOR  ${component}  IN  @{components}
       #  drive component field values response in ascii format due to that skipping here. 
       IF  'drive' in '${component}'
           Continue FOR Loop
       ELSE
           Verify VPD Field Read Operation  ${component}
       END
    END


Verify VPD Field Write
    [Documentation]  Verify writing VPD field value via vpdtool.
    [Tags]  Verify_VPD_Field_Write

    ${components}=  Get Dictionary Keys  ${VPD_DETAILS}
    FOR  ${component}  IN  @{components}
        # VPD fields "DR", "CC" and "FN" will be added later.
        @{vpd_fields}=  Create List  SN  PN
        ${field}=  Evaluate  random.choice($vpd_fields)  random
        Verify VPD Field Write Operation  ${component}  ${field}
    END


*** Keywords ***

Verify VPD Component Read Operation
    [Documentation]  Verify reading VPD details of given component via vpdtool.
    [Arguments]  ${component}
    # Description of arguments:
    # component       VDP component (e.g. /system/chassis/motherboard/vdd_vrm1).

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

    # Example output from 'Vpdtool  -o -O /system/chassis/motherboard/vdd_vrm1':
    #  [/system/chassis/motherboard/vdd_vrm1]:
    #    [DR]:                                         CPU POWER CARD
    #    [type]:                                       xyz.openbmc_project.Inventory.Item.Vrm
    #    [CC]:                                         E123
    #    [FN]:                                         F123456
    #    [LocationCode]:                               ABCD.XY1.1234567-P0
    #    [SN]:                                         YL2E32010000
    #    [PN]:                                         PN12345

    ${vpdtool_res}=  Set To Dictionary  ${vpd_records}[${component}]
    FOR  ${vpd_field}  IN  @{fields}
        ${match_key_exists}=  Run Keyword And Return Status 
        ...  Dictionary Should Contain Key  ${vpdtool_res}  ${vpd_field}
          IF  '${match_key_exists}' == 'True'
              #  drive components busctl field response in ascii due to that checking only locationcode.
              IF  'drive' in '${component}'
                  ${vpd_field}=  Set Variable  LocationCode
              END
              # Skip check if VPD field is empty. 
              Run Keyword If  '${vpd_records['${component}']['${vpd_field}']}' == ''
              ...  Continue For Loop
              
              # Get VPD field values via busctl.
              ${busctl_field}=  Set Variable If
              ...  '${vpd_field}' == 'LocationCode'  com.ibm.ipzvpd.Location LocationCode
              ...  '${vpd_field}' == 'PN'  xyz.openbmc_project.Inventory.Decorator.Asset PartNumber
              ...  '${vpd_field}' == 'SN'  xyz.openbmc_project.Inventory.Decorator.Asset SerialNumber
              ${cmd}=  Catenate  ${CMD_GET_PROPERTY_INVENTORY}
              ...  /xyz/openbmc_project/inventory${component} ${busctl_field}
              ${cmd_output}=  BMC Execute Command  ${cmd}
              # Check whether the vpdtool response and busctl response matching.
              Valid Value  vpd_records['${component}']['${vpd_field}'] 
              ...  ['${cmd_output[0].split('"')[1].strip('"')}']
          ELSE
             Continue For Loop
          END
    END


Verify VPD Field Read Operation
    [Documentation]  Verify reading all VPD fields for given component via vpdtool.
    [Arguments]  ${component}
    # Description of arguments:
    # component       VDP component (e.g. /system/chassis/motherboard/vdd_vrm1).

    ${vpd_records}=  Vpdtool  -o -O ${component}
    ${vpdtool_res}=  Set To Dictionary  ${vpd_records}[${component}]
    FOR  ${field}  IN  @{vpd_fields}
         ${match_key_exists}=  Run Keyword And Return Status
         ...  Dictionary Should Contain Key  ${vpdtool_res}  ${field}
         IF  '${match_key_exists}' == 'True'
             ${vpd_records}=  Vpdtool  -r -O ${component} -R VINI -K ${field}
             # Skip check if field value is empty.
             Run Keyword If  '${vpd_records['${component}']['${field}']}' == ''
             ...  Continue For Loop

             ${busctl_field}=  Set Variable If
             ...  '${field}' == 'PN'  xyz.openbmc_project.Inventory.Decorator.Asset PartNumber
             ...  '${field}' == 'SN'  xyz.openbmc_project.Inventory.Decorator.Asset SerialNumber
             ${cmd}=  Catenate  ${CMD_GET_PROPERTY_INVENTORY}
             ...  /xyz/openbmc_project/inventory${component} ${busctl_field}
             ${cmd_output}=  BMC Execute Command  ${cmd}

             # Check vpdtool response and busctl response for the component field.
             Valid Value  vpd_records['${component}']['${field}']
             ...  ['${cmd_output[0].split('"')[1].strip('"')}']
         ELSE
            Continue For Loop
         END
    END


Verify VPD Field Write Operation
    [Documentation]  Verify writing VPD fields for given component via vpdtool.
    [Arguments]  ${component}  ${field}
    [Teardown]  Restore VPD Value  ${component}  ${field}  ${old_field_value}
    # Description of arguments:
    # component       VPD component (e.g. /system/chassis/motherboard/vdd_vrm1).
    # field           VPD component field (e.g. PN, SN)

    ${vpd_records}=  Vpdtool  -r -O ${component} -R VINI -K ${field}
    ${old_field_value}=  Set Variable  ${vpd_records['${component}']['${field}']}

    ${write_value}=  Set Variable If
    ...  '${field}' == 'DR'  ${DR_WRITE_VALUE}
    ...  '${field}' == 'PN'  ${PN_WRITE_VALUE}
    ...  '${field}' == 'SN'  ${SN_WRITE_VALUE}

    Vpdtool  -w -O ${component} -R VINI -K ${field} --value ${write_value}

    Verify VPD Field Value  ${component}  ${field}


Restore VPD Value
    [Documentation]  Restore VPD's field value of given component.
    [Arguments]  ${component}  ${field}  ${value}
    # Description of arguments:
    # component       VPD component (e.g. /system/chassis/motherboard/vdd_vrm1).
    # field           VPD component field (e.g. PN, SN)
    # value           VPD value to be restore.

    Vpdtool  -w -O ${component} -R VINI -K ${field} --value ${value}


Verify VPD Field Value
    [Documentation]  Verify VPD field value via vpdtool.
    [Arguments]  ${component}  ${field}
    # Description of arguments:
    # component       VDP component (e.g. /system/chassis/motherboard/vdd_vrm1).
    # field           VPD field (e.g. DR, SN, PN)

    ${vpd_records}=  Vpdtool  -r -O ${component} -R VINI -K ${field}

    ${busctl_field}=  Set Variable If
    ...  '${field}' == 'DR'  xyz.openbmc_project.Inventory.Item PrettyName
    ...  '${field}' == 'PN'  xyz.openbmc_project.Inventory.Decorator.Asset PartNumber
    ...  '${field}' == 'SN'  xyz.openbmc_project.Inventory.Decorator.Asset SerialNumber

    ${cmd}=  Catenate  ${CMD_GET_PROPERTY_INVENTORY} /xyz/openbmc_project/inventory${component}
    ...  ${busctl_field}
    ${cmd_output}=  BMC Execute Command  ${cmd}

    Valid Value  vpd_records['${component}']['${field}']  ['${cmd_output[0].split('"')[1].strip('"')}']


Verify VPD Data Via Vpdtool
    [Documentation]  Get VPD details of given component via vpdtool and verify it
    ...              using busctl command.
    [Arguments]  ${component}  ${field}
    # Description of arguments:
    # component       VPD component (e.g. System,Chassis etc).
    # field           VPD field (e.g. Serialnumber,LocationCode etc).

    ${component_url}=  Run Keyword If
    ...  '${component}' == 'System'  Set Variable  /system

    # Get VPD details of given component via vpd-tool.
    ${vpd_records}=  Vpdtool  -o -O ${component_url}

    # Get VPD details of given component via busctl command.
    ${busctl_field}=  Set Variable If
    ...  '${field}' == 'LocationCode'  com.ibm.ipzvpd.Location LocationCode
    ...  '${field}' == 'Model'  xyz.openbmc_project.Inventory.Decorator.Asset Model
    ...  '${field}' == 'SerialNumber'  xyz.openbmc_project.Inventory.Decorator.Asset SerialNumber

    ${cmd}=  Catenate  ${CMD_GET_PROPERTY_INVENTORY} /xyz/openbmc_project/inventory/system
    ...  ${busctl_field}
    ${cmd_output}=  BMC Execute Command  ${cmd}
    # Example of cmd_output:
    #   [0]:                                            s "ABCD.XY1.1234567-P0"
    #   [1]:
    #   [2]:                                            0

    # Cross check vpdtool output with busctl response.
    Should Be Equal As Strings  ${vpd_records["/system"]["${field}"]}
    ...  ${cmd_output[0].split('"')[1].strip('"')}
