*** Settings ***
Documentation       This suite is for Verifying BMC & BIOS version exposed part
...                 of system inventory

Resource            ../../lib/rest_client.robot
Resource            ../../lib/openbmc_ffdc.robot
Resource            ../../lib/connection_client.robot
Resource            ../../lib/code_update_utils.robot

Test Teardown       FFDC On Test Case Fail

*** Variables ***

${BMC_SW_PATH}   ${HOST_INVENTORY_URI}system/chassis/motherboard/boxelder/bmc
${HOST_SW_PATH}  ${HOST_INVENTORY_URI}system/chassis

*** Test Cases ***

Verify Software Purposes
    [Documentation]  Verify that all software objects have a valid 'Purpose'
    ...              field.
    [Tags]  Verify_Software_Purpose

    ${object_uris}=  Read Properties  ${SOFTWARE_VERSION_URI}list

    FOR  ${uri}  IN  @{object_uris}
      ${object}=  Read Properties  ${uri}
      Continue For Loop If  not 'Purpose' in ${object}
      Should Contain Any  &{object}[Purpose]  ${VERSION_PURPOSE_HOST}  ${VERSION_PURPOSE_BMC}
    END


BMC Software Hex ID
    [Documentation]  Verify BMC images have valid 8-digit hex IDs.
    [Tags]  BMC_Software_Hex_ID
    [Template]  Verify Software Hex IDs

    # Software Purpose
    ${VERSION_PURPOSE_BMC}


BMC Software Version
    [Documentation]  Verify BMC version and activation status.
    [Tags]  BMC_Software_Version
    [Template]  Verify Software Version

    # Software Purpose
    ${VERSION_PURPOSE_BMC}


BMC Software Path
    [Documentation]  Verify BMC images have valid 'Path' properties.
    [Tags]  BMC_Software_Path
    [Template]  Verify Software Path

    # Software Version
    ${VERSION_PURPOSE_BMC}


BMC Software RequestedActivation
    [Documentation]  Veriify BMC images have valid 'RequestedActivation'
    ...  properties.
    [Tags]  BMC_Software_RequestedActivation
    [Template]  Verify Software RequestedActivation

    # Software Purpose
    ${VERSION_PURPOSE_BMC}


BMC Software Activation Association
    [Documentation]  Verify BMC association.
    [Tags]  BMC_Software_Activation_Association
    [Template]  Verify Software Activation Association

    # Software Purpose           Association path
    ${VERSION_PURPOSE_BMC}       ${BMC_SW_PATH}


Host Software Hex ID
    [Documentation]  Verify host images have valid 8-digit hex IDs.
    [Tags]  Host_Software_Hex_ID
    [Template]  Verify Software Hex IDs

    # Software Purpose
    ${VERSION_PURPOSE_HOST}


Host Software Version
    [Documentation]  Verify host version and activation status.
    [Tags]  Host_Software_Version
    [Template]  Verify Software Version

    # Software Purpose
    ${VERSION_PURPOSE_HOST}


Host Software Path
    [Documentation]  Verify host images have valid 'Path' properties.
    [Tags]  Host_Software_Path
    [Template]  Verify Software Path

    # Software Version
    ${VERSION_PURPOSE_HOST}


Host Software RequestedActivation
    [Documentation]  Veriify host images have valid 'RequestedActivation'
    ...  properties.
    [Tags]  BMC_Software_RequestedActivation
    [Template]  Verify Software RequestedActivation

    # Software Purpose
    ${VERSION_PURPOSE_HOST}


Host Software Activation Association
    [Documentation]  Verify Host association.
    [Tags]  Host_Software_Activation_Association
    [Template]  Verify Software Activation Association

    # Software Purpose           Association path
    ${VERSION_PURPOSE_HOST}      ${HOST_SW_PATH}


*** Keywords ***

Verify Software Hex IDs
    [Documentation]  Verify software has valid hex IDs.
    [Arguments]  ${software_purpose}

    ${software_ids}=  Get Software Objects Id  ${software_purpose}

    : FOR  ${id}  IN  @{software_ids}
    \  Length Should Be  ${id}  ${8}
    \  Should Match Regexp  ${id}  [0-9a-f]*


Verify Software Path
    [Documentation]  Verify software has valid 'Path' properties.
    [Arguments]  ${software_purpose}

    ${software_uris}=  Get Software Objects  ${software_purpose}

    : FOR  ${uri}  IN  @{software_uris}
    \  ${software_object}=  Get Host Software Property  ${uri}
    \  Return From Keyword If  len('&{software_object}[Path]') == ${0}
    \  BMC Execute Command  [ -d "${path}" ]


Verify Software RequestedActivation
    [Documentation]  Verify that software has valid 'Purpose' properties.
    [Arguments]  ${software_purpose}

    ${software_uris}=  Get Software Objects  ${software_purpose}

    : FOR  ${uri}  IN  @{software_uris}
    \  ${software_object}=  Get Host Software Property  ${uri}
    \  Should Contain Any  &{software_object}[RequestedActivation]
    ...  ${REQUESTED_ACTIVE}  ${REQUESTED_NONE}


Verify Software Activation Association
    [Documentation]  Verify software activation association.
    [Arguments]  ${software_purpose}  ${assoiation_path}

    # Description of argument(s):
    # software_purpose    BMC or host software purpose.
    # assoiation_path     BMC or host inventory path.

    # Example:
    # "/xyz/openbmc_project/software/a0d9ba0d": {
    #     "Activation": "xyz.openbmc_project.Software.Activation.Activations.Active",
    #     "Path": "",
    #     "Priority": 0,
    #     "Purpose": "xyz.openbmc_project.Software.Version.VersionPurpose.BMC",
    #     "RequestedActivation": "xyz.openbmc_project.Software.Activation.RequestedActivations.None",
    #     "Version": "v1.99.9-143-g69cab69",
    #     "associations": [
    #        [
    #            "inventory",
    #            "activation",
    #            "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc"
    #        ]
    #    ]
    # },
    # "/xyz/openbmc_project/software/a0d9ba0d/inventory": {
    #    "endpoints": [
    #        "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc"
    #    ]
    # },

    ${obj_path_list}=  Get Software Objects  ${software_purpose}

    : FOR  ${index}  IN  @{obj_path_list}
    \  Verify Inventory Association  ${index}  ${assoiation_path}


Verify Inventory Association
    [Documentation]  Verify software inventory association.
    [Arguments]  ${software_path}  ${assoiation_path}

    # Description of argument(s):
    # software_path       BMC or host software id.
    # assoiation_path     BMC or host inventory path.

    # Example:
    #    "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc/activation": {
    #    "endpoints": [
    #        "/xyz/openbmc_project/software/e42627b5",
    #        "/xyz/openbmc_project/software/a0d9ba0d"
    #    ]
    # },

    ${sw_attr_data}=  Read Attribute  ${software_path}  Associations
    List Should Contain Value  @{sw_attr_data}  ${assoiation_path}

    # Verify the inventory path in software manager entry.
    ${sw_endpoint_data}=  Read Attribute
    ...  ${software_path}${/}inventory  endpoints
    List Should Contain Value  ${sw_endpoint_data}  ${assoiation_path}

    # Verify the inventory path.
    ${inv_endpoint_data}=  Read Attribute
    ...  ${assoiation_path}${/}activation  endpoints
    List Should Contain Value  ${inv_endpoint_data}  ${software_path}


Verify Software Version
    [Documentation]  Verify version and activation status.
    [Arguments]  ${software_purpose}

    # Description of argument(s):
    # software_purpose    BMC or host software purpose.

    # Example:
    # /xyz/openbmc_project/software/list
    # [
    #   "/xyz/openbmc_project/software/2f974579",
    #   "/xyz/openbmc_project/software/136cf504"
    # ]
    ${obj_list}=  Get Software Objects  ${software_purpose}
    : FOR  ${index}  IN  @{obj_list}
    \  ${resp}=  Get Host Software Property  ${index}
    \  Verify Software Properties  ${resp}  ${software_purpose}
    \  Run Keyword If  '${software_purpose}' == '${VERSION_PURPOSE_BMC}'
    ...  Check BMC Version  ${index}  ${resp["Version"]}


Verify Software Properties
    [Documentation]  Verify the software object properties.
    [Arguments]  ${software_property}  ${software_purpose}

    # Description of argument(s):
    # software_property   JSON response data.
    # software_purpose    BMC or host software purpose
    #        (e.g. "xyz.openbmc_project.Software.Version.VersionPurpose.BMC"
    #              "xyz.openbmc_project.Software.Version.VersionPurpose.Host").

    Check Activation Status  ${software_property["Activation"]}


Check BMC Version
    [Documentation]  Get BMC version from /etc/os-release and compare.
    [Arguments]  ${software_object}  ${version}

    # Description of argument(s):
    # software_object   Software object path.
    # version           Software version (e.g. "2.9.0-dev-257-gc97c74782")

    ${min_value}=  Get Least Value Priority Image  ${VERSION_PURPOSE_BMC}
    ${priority_value}=  Read Software Attribute  ${software_object}  Priority

    Return From Keyword If  ${priority_value} != ${min_value}

    Open Connection And Log In
    ${cmd}=  Set Variable  grep ^VERSION_ID= /etc/os-release | cut -f 2 -d '='
    ${output}  ${stderr}  ${rc}=  BMC Execute Command  ${cmd}
    Should Be Equal As Strings  ${version}  ${output}


Check Activation Status
    [Documentation]  Check if software state is "Active".
    [Arguments]  ${status}

    # Description of argument(s):
    # status  Activation status
    # (e.g. "xyz.openbmc_project.Software.Activation.Activations.Active")
    Should Be Equal As Strings  ${ACTIVE}  ${status}
