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

    ${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]  Host_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]*
    END


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}" ]
    END


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


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


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"]}
    END


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}
