*** Settings ***
Documentation     Update the PNOR code on a target BMC.
...               Execution Method:
...               python -m robot -v OPENBMC_HOST:<hostname>
...               -v DELETE_OLD_PNOR_IMAGES:<"true" or "false">
...               -v IMAGE_FILE_PATH:<path/*.tar>
...               -v ALTERNATE_IMAGE_FILE_PATH:<path/*.tar>
...               host_code_update.robot
...
...               Code update method BMC
...               Update work flow sequence:
...                 - Upload image via REST
...                 - Verify that the file exists on the BMC
...                 - Check that software "Activation" is set to "Ready"
...                 - Set "Requested Activation" to "Active"
...                 - Wait for code update to complete
...                 - Verify the new version

Library           ../../lib/bmc_ssh_utils.py
Library           ../../lib/code_update_utils.py
Library           ../../lib/gen_robot_keyword.py
Variables         ../../data/variables.py
Resource          ../../lib/boot_utils.robot
Resource          code_update_utils.robot
Resource          ../../lib/code_update_utils.robot
Resource          ../../lib/openbmc_ffdc.robot
Resource          ../../lib/state_manager.robot
Resource          ../../lib/dump_utils.robot

Test Teardown     Code Update Test Teardown

Force Tags        Host_Code_Update

*** Variables ***

${QUIET}                          ${1}
${IMAGE_FILE_PATH}                ${EMPTY}
${DELETE_OLD_PNOR_IMAGES}         false
${DELETE_OLD_GUARD_FILE}          false
${ALTERNATE_IMAGE_FILE_PATH}      ${EMPTY}

*** Test Cases ***

REST Host Code Update
    [Documentation]  Do a PNOR code update by uploading image on BMC via REST.
    # 1. Delete error logs if there is any.
    # 1. Do code update.
    # 2. Do post update the following:
    #    - Collect FFDC if error log exist and delete error logs.
    [Tags]  REST_Host_Code_Update
    [Setup]  Code Update Setup

    Run Keyword And Ignore Error  List Installed Images  Host

    Upload And Activate Image  ${IMAGE_FILE_PATH}
    OBMC Reboot (off)


Post Update Boot To OS
    [Documentation]  Boot the host OS
    [Tags]  Post_Update_Boot_To_OS
    [Setup]  Start SOL Console Logging
    [Teardown]  Run Keywords  Stop SOL Console Logging
    ...         AND  Code Update Test Teardown

    Run Keyword If  '${PREV_TEST_STATUS}' == 'FAIL'
    ...  Fail  Code update failed. No need to boot to OS.
    Delete Error Logs
    REST Power On
    Verify Running Host Image  ${IMAGE_FILE_PATH}


REST Host Code Update While OS Is Running
    [Documentation]  Do a PNOR code update while the host is running.
    [Tags]  REST_Host_Code_Update_While_OS_Is_Running
    [Teardown]  Run Keywords  REST Power Off  stack_mode=skip
    ...         AND  Code Update Test Teardown

    Run Keyword If  '${PREV_TEST_STATUS}' == 'FAIL'
    ...  Fail  Cannot boot the OS.

    REST Power On  stack_mode=skip
    Upload And Activate Image
    ...  ${ALTERNATE_IMAGE_FILE_PATH}  skip_if_active=true
    REST Power On  stack_mode=normal
    Verify Running Host Image  ${ALTERNATE_IMAGE_FILE_PATH}

Host Image Priority Attribute Test
    [Documentation]  Set "Priority" attribute.
    [Tags]  Host_Image_Priority_Attribute_Test
    [Template]  Temporarily Set PNOR Attribute

    # Property        Value
    Priority          ${0}
    Priority          ${1}
    Priority          ${127}
    Priority          ${255}


Host Set Priority To Invalid Values
    [Documentation]  Attempt to set the priority of an image to an invalid
    ...              value and expect an error.
    [Tags]  Host_Set_Priority_To_Invalid_Values
    [Template]  Set Priority To Invalid Value And Expect Error

    # Version Type              Priority
    ${VERSION_PURPOSE_HOST}    ${-1}
    ${VERSION_PURPOSE_HOST}    ${256}


Set RequestedActivation To None
    [Documentation]  Set the RequestedActivation of the image to None and
    ...              verify that it is in fact set to None.
    [Tags]  Set_RequestedActivation_To_None

    ${software_objects}=  Get Software Objects
    Set Host Software Property  @{software_objects}[0]  RequestedActivation
    ...  ${REQUESTED_NONE}
    ${software_properties}=  Get Host Software Property  @{software_objects}[0]
    Should Be Equal As Strings  &{software_properties}[RequestedActivation]
    ...  ${REQUESTED_NONE}


Set RequestedActivation And Activation To Invalid Value
    [Documentation]  Set the RequestedActivation and Activation propreties of
    ...              the image to an invalid value and verify that it was not
    ...              changed.
    [Template]  Set Property To Invalid Value And Verify No Change
    [Tags]  Set_RequestedActivation_And_Activation_To_Invalid_Value

    # Property              Version Type
    RequestedActivation     ${VERSION_PURPOSE_HOST}
    Activation              ${VERSION_PURPOSE_HOST}


Upload And Activate Multiple Host Images
    [Documentation]  Upload another PNOR image and verify that its state is
    ...              different from all others.
    [Tags]  Upload_And_Activate_Multiple_Host_Images
    [Template]  Activate Image And Verify No Duplicate Priorities
    [Setup]  Upload And Activate Multiple BMC Images Setup

    # Image File Path              Image Purpose
    ${ALTERNATE_IMAGE_FILE_PATH}   ${VERSION_PURPOSE_HOST}


Set Same Priority For Multiple Host Images
    [Documentation]  Attempt to set the priority to be the same for two PNOR
    ...              images and verify that the priorities are not the same.
    [Tags]  Set_Same_Priority_For_Multiple_Host_Images

    Run Keyword If  '${PREV_TEST_STATUS}' == 'FAIL'
    ...  Fail  Activation of alternate image failed. Cannot set priority.
    Set Same Priority For Multiple Images  ${VERSION_PURPOSE_HOST}


Delete Host Image
    [Documentation]  Delete a PNOR image from the BMC and PNOR flash chip.
    [Tags]  Delete_Host_Image
    [Setup]  Initiate Host PowerOff

    ${software_objects}=  Get Software Objects
    ...  version_type=${VERSION_PURPOSE_HOST}
    ${num_images}=  Get Length  ${software_objects}
    Should Be True  0 < ${num_images}
    ...  msg=There are no PNOR images on the BMC to delete.
    Delete Image And Verify  @{software_objects}[0]  ${VERSION_PURPOSE_HOST}


Verify Host Update When Host Reboot During Activation In Progress
    [Documentation]  Attempt to reboot the host while an image is activating.
    [Tags]  Verify_Host_Update_When_Host_Reboot_During_Activation_In_Progress

    Upload And Activate Image  ${IMAGE_FILE_PATH}
    REST Power On
    Delete Error Logs

    ${version_id}=  Upload And Activate Image  ${ALTERNATE_IMAGE_FILE_PATH}
    ...  wait=${0}

    ${resp}=  OpenBMC Get Request  ${SOFTWARE_VERSION_URI}${version_id}
    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}

    # Reboot Host during activation.
    Host Reboot

    Wait For Activation State Change  ${version_id}  ${ACTIVATING}

    # New image priority should be 0.
    ${new_host_properties}=
    ...  Get Host Software Property  ${SOFTWARE_VERSION_URI}${version_id}
    Should Be Equal As Integers  ${new_host_properties["Priority"]}  ${0}

    # Reboot host to boot up with the new host image version.
    Host Reboot
    Verify Running Host Image  ${ALTERNATE_IMAGE_FILE_PATH}


*** Keywords ***

Temporarily Set PNOR Attribute
    [Documentation]  Update the PNOR attribute value.
    [Arguments]  ${attribute_name}  ${attribute_value}

    # Description of argument(s):
    # attribute_name    Host software attribute name (e.g. "Priority").
    # attribute_value   Value to be written.

    ${image_ids}=  Get Software Objects
    ${init_host_properties}=  Get Host Software Property  ${image_ids[0]}
    ${initial_priority}=  Set Variable  ${init_host_properties["Priority"]}

    Set Host Software Property  ${image_ids[0]}  ${attribute_name}
    ...  ${attribute_value}

    ${cur_host_properties}=  Get Host Software Property  ${image_ids[0]}
    Should Be Equal As Integers  ${cur_host_properties["Priority"]}
    ...  ${attribute_value}

    # Revert to to initial value.
    Set Host Software Property
    ...  ${image_ids[0]}  ${attribute_name}  ${initial_priority}


Code Update Setup
    [Documentation]  Do code update test case setup.
    # - Clean up all existing BMC dumps.
    # - Clean up all currently install PNOR images.

    Run Keyword And Ignore Error  Smart Power Off
    Run Key  Delete All Dumps  ignore=1
    Run Key  Delete Error Logs  ignore=1
    Run Keyword If  'true' == '${DELETE_OLD_PNOR_IMAGES}'
    ...  Delete All PNOR Images
    Run Keyword If  'true' == '${DELETE_OLD_GUARD_FILE}'  BMC Execute Command
    ...  rm -f /var/lib/phosphor-software-manager/pnor/prsv/GUARD


Upload And Activate Multiple BMC Images Setup
    [Documentation]  Check that the ALTERNATE_FILE_PATH variable is set.

    Should Not Be Empty  ${ALTERNATE_IMAGE_FILE_PATH}
    Delete All PNOR Images
    Upload And Activate Image  ${IMAGE_FILE_PATH}  skip_if_active=true

Get PNOR Extended Version
    [Documentation]  Return the PNOR extended version.
    [Arguments]  ${manifest_path}

    # Description of argument(s):
    # manifest_path  Path of the MANIFEST file
    #                (e.g. "/tmp/images/abc123/MANIFEST").

    ${version}= BMC Execute Command
    ...  grep extended_version= ${manifest_path}
    [return] ${version.split(",")}


Code Update Test Teardown
    [Documentation]  Do code update test case teardown.
    # 1. Collect FFDC if test case failed.
    # 2. Collect FFDC if test PASS but error log exists.

    FFDC On Test Case Fail
    Run Keyword If  '${TEST_STATUS}' == 'PASS'  Check Error And Collect FFDC
