*** Settings ***

Documentation   This testsuite is for testing boot policy function.

Resource           ../lib/rest_client.robot
Resource           ../lib/ipmi_client.robot
Resource           ../lib/utils.robot
Resource           ../lib/openbmc_ffdc.robot
Resource           ../lib/state_manager.robot
Resource           ../lib/boot_utils.robot

Suite Setup        Suite Setup Execution
Test Teardown      FFDC On Test Case Fail
Suite Teardown     Suite Teardown Execution

Force Tags  boot_policy_test

*** Variables ***
${ONETIME}    ${1}
${PERMANENT}  ${0}

${stack_mode}       skip

*** Test Cases ***

Set Boot Policy To ONETIME via REST
    [Documentation]   Set boot policy to ONETIME using REST URI and verify
    ...               using ipmitool.
    [Tags]  Set_Boot_Policy_To_ONETIME_via_REST

    Set Boot Policy  ${ONETIME}
    ${boot}=   Read Attribute  ${CONTROL_URI}host0/boot/one_time  Enabled
    Should Be Equal  ${boot}  ${ONETIME}
    ${output}=  Run IPMI Standard Command  chassis bootparam get 5
    Should Contain  ${output}  Options apply to only next boot

Set Boot Policy To PERMANENT via REST
    [Documentation]   Set boot policy to PERMANENT using REST URI and verify
    ...               using ipmitool.
    [Tags]  Set_Boot_Policy_To_PERMANENT_via_REST

    Set Boot Policy  ${PERMANENT}
    ${boot}=   Read Attribute  ${CONTROL_URI}host0/boot/one_time  Enabled
    Should Be Equal  ${boot}  ${PERMANENT}
    ${output}=  Run IPMI Standard Command  chassis bootparam get 5
    Should Contain  ${output}  Options apply to all future boots

Set Boot Policy To ONETIME via IPMITOOL
    [Documentation]   Set boot policy to ONETIME via ipmitool and verify
    ...               using REST URI.
    [Tags]  Set_Boot_Policy_To_ONETIME_via_IPMITOOL

    Run IPMI command  0x0 0x8 0x05 0x80 0x00 0x00 0x00 0x00
    ${boot}=   Read Attribute  ${CONTROL_URI}host0/boot/one_time  Enabled
    Should Be Equal  ${boot}  ${ONETIME}
    ${output}=  Run IPMI Standard Command  chassis bootparam get 5
    Should Contain  ${output}  Options apply to only next boot

Set Boot Policy To PERMANENT via IPMITOOL
    [Documentation]   Set boot policy to PERMANENT via ipmitool and verify
    ...               using REST URI.
    [Tags]  Set_Boot_Policy_To_PERMANENT_via_IPMITOOL

    Run IPMI command   0x0 0x8 0x05 0xC0 0x00 0x00 0x00 0x0
    ${boot}=   Read Attribute  ${CONTROL_URI}host0/boot/one_time  Enabled
    Should Be Equal  ${boot}  ${PERMANENT}
    ${output}=  Run IPMI Standard Command  chassis bootparam get 5
    Should Contain  ${output}  Options apply to all future boots

Test Boot Order via REST
    [Documentation]   Set boot policy to PERMANENT and boot device to CDROM
    ...               and verify that the order doesn't change post power on.
    [Tags]  Test_Boot_Order_via_REST


    Set Boot Policy  ${PERMANENT}
    Set Boot Source  ${BOOT_SOURCE_CDROM}

    ${boot}=   Read Attribute  ${CONTROL_URI}host0/boot/one_time  Enabled
    Should Be Equal  ${boot}  ${PERMANENT}

    ${flag}=   Read Attribute  ${CONTROL_URI}host0/boot/  BootSource
    Should Be Equal  ${flag}  ${BOOT_SOURCE_CDROM}

Persist ONETIME Boot Policy After Reset
    [Documentation]   Verify ONETIME boot policy order does not change
    ...               on warm reset.
    [Tags]  Persist_ONETIME_Boot_Policy_After_Reset

    Set Boot Policy  ${ONETIME}
    Set Boot Source  ${BOOT_SOURCE_NETWORK}

    OBMC Reboot (off)

    ${boot}=   Read Attribute  ${CONTROL_URI}host0/boot/one_time  Enabled
    Should Be Equal  ${boot}  ${ONETIME}

    ${flag}=   Read Attribute  ${CONTROL_URI}host0/boot/  BootSource
    Should Be Equal  ${flag}  ${BOOT_SOURCE_NETWORK}

Persist PERMANENT Boot Policy After Reset
    [Documentation]   Verify PERMANENT boot policy order does not change
    ...               on warm reset.
    [Tags]  Persist_PERMANENT_Boot_Policy_After_Reset

    Set Boot Policy  ${PERMANENT}
    Set Boot Source  ${BOOT_SOURCE_CDROM}

    OBMC Reboot (off)

    ${boot}=   Read Attribute  ${CONTROL_URI}host0/boot/one_time  Enabled
    Should Be Equal  ${boot}  ${PERMANENT}

    ${flag}=   Read Attribute  ${CONTROL_URI}host0/boot/  BootSource
    Should Be Equal  ${flag}  ${BOOT_SOURCE_CDROM}

Verify Boot Mode Persistency After BMC Reboot
    [Documentation]  Verify boot mode persistency after BMC reboot.
    [Tags]  Verify_Boot_Mode_Persistency_After_BMC_Reboot
    [Teardown]  Run Keywords  Restore Bootmode Setting
    ...  AND  FFDC On Test Case Fail

    # Record initial bootmode setting.
    ${boot_mode}=  Read Attribute
    ...  ${CONTROL_HOST_URI}/boot  BootMode
    Set Suite Variable  ${initial_boot_mode}  ${boot_mode}

    # Set bootmode to non default value.
    Set Boot Mode  ${BOOT_MODE_SAFE}

    OBMC Reboot (off)

    ${boot_mode_after}=  Read Attribute
    ...  ${CONTROL_HOST_URI}/boot  BootMode

    Should Be Equal As Strings
    ...  ${boot_mode_after}  ${BOOT_MODE_SAFE}

*** Keywords ***

Set Boot Mode
    [Documentation]  Set the host boot mode via REST.
    [Arguments]    ${args}
    ${bootmode}=  Set Variable  ${args}
    ${valueDict}=  Create Dictionary  data=${bootmode}
    Write Attribute  ${CONTROL_HOST_URI}/boot/  BootMode  data=${valueDict}

Set Boot Policy
    [Documentation]  Set the host boot policy via REST.
    [Arguments]    ${args}
    ${bootpolicy}=  Set Variable  ${args}
    ${valueDict}=  Create Dictionary   data=${bootpolicy}
    Write Attribute
    ...  ${CONTROL_HOST_URI}/boot/one_time  Enabled  data=${valueDict}

Set Boot Source
    [Documentation]  Set given boot source.
    [Arguments]  ${boot_source}
    # Description of argument(s):
    # boot_source  Boot source which need to be set.

    ${valueDict}=  Create Dictionary  data=${boot_source}
    Write Attribute  ${CONTROL_HOST_URI}/boot/  BootSource  data=${valueDict}

Suite Teardown Execution
    [Documentation]  Restore default settings.
    Set Boot Policy  ${ONETIME}
    Set Boot Source  ${BOOT_SOURCE_DEFAULT}

Suite Setup Execution
    [Documentation]  Do the initial suite setup.

    Smart Power Off

Restore Bootmode Setting
    [Documentation]  Restore initial bootmode setting.

    Set Boot Mode  ${initial_boot_mode}
