*** Settings ***
Documentation  Contains all keywords and supporting keywords to do various reboots.

Resource    ../resource.txt
Resource    ../utils.robot
Resource    ../connection_client.robot
Library     DateTime

*** Keywords ***
BMC Reboot
    [Documentation]  Gets the uptime of the BMC, then reboots the BMC. If an OS_HOST
    ...  is given, will also attempt to get the uptime of the OS Host and verify that
    ...  the host stayed active during the reboot.

    &{bmc_connection_args}=  Create Dictionary  alias=bmc_connection
    ${OS_exists}=  Set Variable If  '${OS_HOST}' != '${EMPTY}'  ${True}
    ...                             '${OS_HOST}' == '${EMPTY}'  ${False}

    &{os_connection_args}=  Run Keyword If  ${OS_exists} == ${True}
    ...  Create Dictionary  host=${OS_HOST}  alias=os_connection

    Open Connection and Log In  &{bmc_connection_args}

    ${bmc_start_uptime}=  Get Uptime In Seconds

    ${conn_rc}=  Run Keyword and Return Status  Run Keyword If  ${OS_exists} == ${True}
    ...  Open Connection and Log In  ${OS_USERNAME}  ${OS_PASSWORD}  &{os_connection_args}

    ${OS_exists}=  Set Variable If  ${conn_rc} == False  ${False}

    ${ping_rc}=  Run Keyword and Return Status  Ping Host  ${OS_HOST}
    ${OS_exists}=  Set Variable If  ${ping_rc} == ${False}  ${False}

    ${os_start_uptime}=  Run Keyword If  ${OS_exists} == ${True}   Get Uptime In Seconds

    Validate or Open Connection  bmc_connection

    Reboot BMC
    Check If BMC Is Up

    Close All Connections

    Open Connection and Log In  &{bmc_connection_args}

    ${bmc_end_uptime}=  Get Uptime In Seconds
    Should Be True  ${bmc_end_uptime} < ${bmc_start_uptime}

    Run Keyword If  ${OS_exists} == ${True}
    ...  Open Connection and Log In  ${OS_USERNAME}  ${OS_PASSWORD}  &{os_connection_args}

    ${os_end_uptime}=  Run Keyword If  ${OS_exists} == ${True}  Get Uptime In Seconds

    Run Keyword If  ${OS_exists} == ${True}
    ...  Should Be True  ${os_end_uptime} > ${os_start_uptime}

    Close All Connections

Get Uptime In Seconds
    ${uptime_string}  ${stderr}  ${rc}=  Execute Command  cat /proc/uptime
    ...  return_stderr=True  return_rc=True

    Should Be Empty  ${stderr}
    Should Be Equal  ${rc}  ${0}

    ${uptime}  ${idle_time}=  Split String  ${uptime_string}  ${SPACE}

    [Return]  ${uptime}

Reboot BMC
    Start Command  /sbin/reboot
