*** Settings ***

Documentation  Test Open BMC GUI Power Operations under GUI Header.

Resource  ../../../lib/state_manager.robot
Resource  ../../lib/resource.robot

Test Setup      Test Setup Execution
Test Teardown   Close Browser

Force Tags      Header_Power_Operations

*** Test Cases ***

Power On The Host
    [Documentation]  Power on the host.
    [Tags]  Power_On_the_Host

    Expected Initial Test State  Off
    GUI Power On
    Wait Until Keyword Succeeds  10 min  10 sec  Is Host Running
    Wait Until Page Contains  Running

Click Immediate Shutdown Then No
    [Documentation]  Click the "Immediate shutdown" button and then click the
    ...  "No" button.
    [Tags]  Click_Immediate_Shutdown_Then_No

    Expected Initial Test State  Running
    Controller Server Power Click Button  power__hard-shutdown
    Controller Power Operations Confirmation Click Button  ${power_operations}
    ...  ${power_off}  ${confirm_msg}  ${no}

    Is Host Running
    Wait Until Page Contains  Running

Click Cold Reboot Then No
    [Documentation]  Click the "Cold reboot" button and then click the "No"
    ...  button.
    [Tags]  Click_Cold_Reboot_Then_No

    Expected Initial Test State  Running
    Controller Server Power Click Button  power__cold-boot
    Controller Power Operations Confirmation Click Button  ${power_operations}
    ...  ${cold_boot}  ${confirm_msg}  ${no}

    Is Host Running
    Page Should Contain  Running

Click Warm Reboot Then No
    [Documentation]  Click the "Warm reboot" button and then click the "No"
    ...  button.
    [Tags]  Click_Warm_Reboot_Then_No

    Expected Initial Test State  Running
    Controller Server Power Click Button  power__warm-boot
    Controller Power Operations Confirmation Click Button  ${power_operations}
    ...  ${warm_boot}  ${confirm_msg}  ${no}
    Is Host Running
    Page Should Contain  Running

Click Orderly Shutdown Then No
    [Documentation]  Click the "Orderly shutdown" button and then click the
    ...  "No" button.
    [Tags]  Click_Orderly_Shutdown_Then_No

    Expected Initial Test State  Running
    Controller Server Power Click Button  power__soft-shutdown
    Controller Power Operations Confirmation Click Button  ${power_operations}
    ...  ${shut_down}  ${confirm_msg}  ${no}
    Wait Until Keyword Succeeds  10 min  10 sec  Is Host Running
    Page Should Contain  Running

Click Warm Reboot Then Yes
    [Documentation]  Click the "Warm reboot" button and then click the "Yes"
    ...  button.
    [Tags]  Click_Warm_Reboot_Then_Yes

    Expected Initial Test State  Running
    Controller Server Power Click Button  power__warm-boot
    Controller Power Operations Confirmation Click Button  ${power_operations}
    ...  ${warm_boot}  ${confirm_msg}  ${yes}
    Wait Until Keyword Succeeds  10 min  10 sec  Is Host Running
    Page Should Contain  Running

Click Cold Reboot Then Yes
    [Documentation]  Click the "Cold reboot" button and then click the "Yes"
    ...  button.
    [Tags]  Click_Cold_Reboot_Then_Yes

    Expected Initial Test State  Running
    Controller Server Power Click Button  power__cold-boot
    Controller Power Operations Confirmation Click Button  ${power_operations}
    ...  ${cold_boot}  ${confirm_msg}  ${yes}
    Page Should Contain  Standby
    Wait Until Keyword Succeeds  10 min  10 sec  Is Host Running
    Page Should Contain  Running

Click Orderly Shutdown Then Yes
    [Documentation]  Click the "Orderly shutdown" button and then click the
    ...  "Yes" button.
    [Tags]  Click_Orderly_Shutdown_Then_Yes

    Expected Initial Test State  Running
    Controller Server Power Click Button  power__soft-shutdown
    Controller Power Operations Confirmation Click Button  ${power_operations}
    ...  ${shut_down}  ${confirm_msg}  ${yes}
    Page Should Contain  Off
    Wait Until Keyword Succeeds  6 min  10 sec  Is Host Off

Click Immediate Shutdown Then Yes
    [Documentation]  Click "Immediate shutdown" button and then click the "Yes"
    ...  button.
    [Tags]  Click_Immediate_Shutdown_Then_Yes

    Expected Initial Test State  Running

    # By this time GUI logs out. So relaunching it.
    Close Browser
    Launch Browser And Login OpenBMC GUI

    Controller Server Power Click Button  power__hard-shutdown
    Controller Power Operations Confirmation Click Button  ${power_operations}
    ...  ${power_off}  ${confirm_msg}  ${yes}

    Wait Until Page Contains  Off
    Wait Until Keyword Succeeds  6 min  10 sec  Is Host Off

OpenBMC GUI Logoff
    [Documentation]  Log out from openBMC GUI.
    [Tags]  OpenBMC_GUI_Logoff

    Log  ${xpath_openbmc_url}
    Log To Console  ${xpath_openbmc_url}
    Click Element  header


*** Keywords ***

Test Setup Execution
   [Documentation]  Do testcase setup tasks.

   # Launch the GUI and navigate to server power page.
   Launch Browser And Login OpenBMC GUI
   Click Element  ${xpath_select_server_power}
   Wait Until Page Contains  Server power operations

