|  | *** 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} | 
|  |  | 
|  |  | 
|  | 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. "v1.99.2-107-g2be34d2-dirty") | 
|  |  | 
|  | ${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[1:-1]} | 
|  |  | 
|  |  | 
|  | 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} |