*** Settings ***

Documentation   This testsuite is for testing the Boot Device Functions

Resource        ../lib/rest_client.robot
Resource        ../lib/ipmi_client.robot
Resource        ../lib/openbmc_ffdc.robot

Suite Setup     Open Connection And Log In
Suite Teardown  Close All Connections
Test Setup      Initialize DBUS cmd   "boot_flags"
Test Teardown   Log FFDC
*** Variables ***

*** Test Cases ***

Set the Boot Device as Default using REST API
   [Documentation]   This testcase is to set the boot device as Default using REST
   ...               URI. The Boot device is read using REST API and ipmitool.

    ${bootDevice} =   Set Variable   Default
    ${valueDict} =   create dictionary   data=${bootDevice}
    Write Attribute    /org/openbmc/settings/host0   boot_flags   data=${valueDict}
    Read the Attribute  /org/openbmc/settings/host0    boot_flags
    Response Should Be Equal   Default
    ${output}   ${stderr}=  Execute Command  ${dbuscmd}  return_stderr=True
    Should Be Empty     ${stderr}
    Should Contain   ${output}   Default

Set the Boot Device as Default using ipmitool
   [Documentation]   This testcase is to set the boot device as Default using
   ...               ipmitool. The Boot device is read using REST API and
   ...               ipmitool.

    Run IPMI command   0x0 0x8 0x05 0x80 0x00 0x00 0x00 0x00
    Read the Attribute   /org/openbmc/settings/host0   boot_flags
    Response Should Be Equal   Default
    ${output}   ${stderr}=  Execute Command  ${dbuscmd}  return_stderr=True
    Should Be Empty     ${stderr}
    Should Contain   ${output}   Default

Set the Boot Device as Network using REST API
   [Documentation]   This testcase is to set the boot device as Network using REST
   ...               URI. The Boot device is read using REST API and ipmitool.

    ${bootDevice} =   Set Variable   Network
    ${valueDict} =   create dictionary   data=${bootDevice}
    Write Attribute    /org/openbmc/settings/host0   boot_flags   data=${valueDict}
    Read the Attribute  /org/openbmc/settings/host0    boot_flags
    Response Should Be Equal   Network
    ${output}   ${stderr}=  Execute Command  ${dbuscmd}   return_stderr=True
    Should Be Empty     ${stderr}
    Should Contain   ${output}    Network

Set the Boot Device as Network using ipmitool
   [Documentation]   This testcase is to set the boot device as Network using
   ...               ipmitool. The Boot device is read using REST API and
   ...               ipmitool.

    Run IPMI command   0x0 0x8 0x05 0x80 0x04 0x00 0x00 0x00
    Read the Attribute   /org/openbmc/settings/host0   boot_flags
    Response Should Be Equal   Network
    ${output}   ${stderr}=  Execute Command  ${dbuscmd}  return_stderr=True
    Should Be Empty     ${stderr}
    Should Contain   ${output}    Network

Set the Boot Device as Disk using REST API
   [Documentation]   This testcase is to set the boot device as Disk using REST
   ...               URI. The Boot device is read using REST API and ipmitool.

    ${bootDevice} =   Set Variable   Disk
    ${valueDict} =   create dictionary   data=${bootDevice}
    Write Attribute    /org/openbmc/settings/host0   boot_flags   data=${valueDict}
    Read the Attribute  /org/openbmc/settings/host0    boot_flags
    Response Should Be Equal   Disk
    ${output}   ${stderr}=  Execute Command  ${dbuscmd}  return_stderr=True
    Should Be Empty     ${stderr}
    Should Contain   ${output}    Disk

Set the Boot Device as Disk using ipmitool
   [Documentation]   This testcase is to set the boot device as Disk using
   ...               ipmitool. The Boot device is read using REST API and
   ...               ipmitool.

    Run IPMI command   0x0 0x8 0x05 0x80 0x08 0x00 0x00 0x00
    Read the Attribute   /org/openbmc/settings/host0   boot_flags
    Response Should Be Equal   Disk
    ${output}   ${stderr}=  Execute Command  ${dbuscmd}  return_stderr=True
    Should Be Empty     ${stderr}
    Should Contain   ${output}    Disk

Set the Boot Device as Safe using REST API
   [Documentation]   This testcase is to set the boot device as Safe using REST
   ...               URI. The Boot device is read using REST API and ipmitool.

    ${bootDevice} =   Set Variable   Safe
    ${valueDict} =   create dictionary   data=${bootDevice}
    Write Attribute    /org/openbmc/settings/host0   boot_flags   data=${valueDict}
    Read the Attribute  /org/openbmc/settings/host0    boot_flags
    Response Should Be Equal   Safe
    ${output}   ${stderr}=  Execute Command  ${dbuscmd}  return_stderr=True
    Should Be Empty     ${stderr}
    Should Contain   ${output}   Safe

Set the Boot Device as Safe using ipmitool
   [Documentation]   This testcase is to set the boot device as Safe using
   ...               ipmitool. The Boot device is read using REST API and
   ...               ipmitool.

    Run IPMI command   0x0 0x8 0x05 0x80 0x0C 0x00 0x00 0x00
    Read the Attribute   /org/openbmc/settings/host0   boot_flags
    Response Should Be Equal   Safe
    ${output}   ${stderr}=  Execute Command  ${dbuscmd}   return_stderr=True
    Should Be Empty     ${stderr}
    Should Contain   ${output}   Safe

Set the Boot Device as CDROM using REST API
   [Documentation]   This testcase is to set the boot device as CDROM using REST
   ...               URI. The Boot device is read using REST API and ipmitool.

    ${bootDevice} =   Set Variable   CDROM
    ${valueDict} =   create dictionary   data=${bootDevice}
    Write Attribute    /org/openbmc/settings/host0   boot_flags   data=${valueDict}
    Read the Attribute  /org/openbmc/settings/host0    boot_flags
    Response Should Be Equal   CDROM
    ${output}   ${stderr}=  Execute Command  ${dbuscmd}  return_stderr=True
    Should Be Empty     ${stderr}
    Should Contain   ${output}   CDROM

Set the Boot Device as CDROM using ipmitool
   [Documentation]   This testcase is to set the boot device as CDROM using
   ...               ipmitool. The Boot device is read using REST API and
   ...               ipmitool.

    Run IPMI command   0x0 0x8 0x05 0x80 0x14 0x00 0x00 0x00
    Read the Attribute   /org/openbmc/settings/host0   boot_flags
    Response Should Be Equal   CDROM
    ${output}   ${stderr}=  Execute Command  ${dbuscmd}  return_stderr=True
    Should Be Empty     ${stderr}
    Should Contain   ${output}   CDROM

Set the Boot Device as Setup using REST API
   [Documentation]   This testcase is to set the boot device as Setup using REST
   ...               URI. The Boot device is read using REST API and ipmitool.

    ${bootDevice} =   Set Variable   Setup
    ${valueDict} =   create dictionary   data=${bootDevice}
    Write Attribute    /org/openbmc/settings/host0   boot_flags   data=${valueDict}
    Read the Attribute  /org/openbmc/settings/host0    boot_flags
    Response Should Be Equal   Setup
    ${output}   ${stderr}=  Execute Command  ${dbuscmd}  return_stderr=True
    Should Be Empty     ${stderr}
    Should Contain   ${output}   Setup

Set the Boot Device as Setup using ipmitool
   [Documentation]   This testcase is to set the boot device as Setup using
   ...               ipmitool. The Boot device is read using REST API and
   ...               ipmitool.

    Run IPMI command   0x0 0x8 0x05 0x80 0x18 0x00 0x00 0x00
    Read the Attribute   /org/openbmc/settings/host0   boot_flags
    Response Should Be Equal   Setup
    ${output}   ${stderr}=  Execute Command  ${dbuscmd}   return_stderr=True
    Should Be Empty     ${stderr}
    Should Contain   ${output}   Setup

*** Keywords ***

Response Should Be Equal
    [arguments]    ${args}
    Should Be Equal    ${OUTPUT}    ${args}

Read the Attribute
    [arguments]    ${uri}    ${parm}
    ${output} =     Read Attribute      ${uri}    ${parm}
    set test variable    ${OUTPUT}     ${output}


