*** Settings ***
Documentation  This suite will verifiy the Generic Configuration Rest Interfaces
...            Details of valid interfaces can be found here...
...            https://github.com/openbmc/docs/blob/master/rest-api.md

Resource          ../lib/rest_client.robot
Resource          ../lib/openbmc_ffdc.robot
Test Teardown     Log FFDC


*** Variables ***
${MIN_POWER_VALUE}    0
${MAX_POWER_VALUE}    1000

*** Test Cases ***


Get the boot_flags

    [Documentation]   ***GOOD PATH***
    ...               This test case tries to get the boot flags
    ...              

    ${resp}=   Read Attribute   /org/openbmc/settings/host0/   boot_flags
    should not be empty   ${resp}

Get the power
 
    [Documentation]   ***GOOD PATH***
    ...               This test case tries to get the power value and it should be 
    ...               between ${MIN_POWER_VALUE} and ${MAX_POWER_VALUE}

    ${powerValue}=   Read Attribute   /org/openbmc/settings/host0/   power_cap
    should be true   ${powerValue} >= ${MIN_POWER_VALUE} and ${powerValue} <= ${MAX_POWER_VALUE}

Set the power with string of characters

    [Documentation]   ***BAD PATH***
    ...               This test case set the power values with string of characters
    ...               Expectation is to return error.

    ${valueToBeSet}=   Set Variable   abcdefg
    ${valueDict}=   create dictionary   data=${valueToBeSet}
    Write Attribute   /org/openbmc/settings/host0   power_cap   data=${valueDict}
    ${value}=   Read Attribute    /org/openbmc/settings/host0   power_cap    
    should not be true    '${value}'=='${valueToBeSet}'

Set the power with greater then MAX_POWER_VALUE

    [Documentation]   ***BAD PATH***
    ...               This test case sets the power value which is greater 
    ...               then MAX_ALLOWED_VALUE,Expectation is to return error

    ${valueToBeSet}=   Set Variable     ${1010}
    ${valueDict}=   create dictionary   data=${valueToBeSet}
    Write Attribute   /org/openbmc/settings/host0   power_cap   data=${valueDict}
    ${value}=      Read Attribute    /org/openbmc/settings/host0   power_cap
    should not be equal   ${value}   ${valueToBeSet} 

Set the power with MIN_POWER_VALUE

    [Documentation]   ***BAD PATH***
    ...               This test case sets the power value less then 
    ...               MIN_ALLOWED_VALUE,Expectation is it should get error.

    ${valueToBeSet}=   Set Variable     ${MIN_POWER_VALUE}
    ${valueDict}=   create dictionary   data=${valueToBeSet}
    Write Attribute   /org/openbmc/settings/host0    power_cap      data=${valueDict}
    ${value}=      Read Attribute    /org/openbmc/settings/host0    power_cap
    Should Be Equal     ${value}      ${valueToBeSet}

Set the power with MAX_POWER_VALUE

    [Documentation]   ***GOOD PATH***
    ...               This test case sets the power value with MAX_POWER_VALUE
    ...               and it should be set.
 
    ${valueToBeSet}=   Set Variable     ${MAX_POWER_VALUE}
    ${valueDict}=   create dictionary   data=${valueToBeSet}
    Write Attribute   /org/openbmc/settings/host0    power_cap      data=${valueDict}
    ${value}=      Read Attribute    /org/openbmc/settings/host0    power_cap
    Should Be Equal     ${value}      ${valueToBeSet}

Set the boot flags with string

    [Documentation]   ***BAD PATH***
    ...               This test case sets the boot flag with some invalid string 
    ...               Expectation is it should not be set.

    ${valueToBeSet}=   Set Variable     3ab56f
    ${valueDict} =   create dictionary   data=${valueToBeSet}
    Write Attribute  /org/openbmc/settings/host0    boot_flags      data=${valueDict}
    ${value}=      Read Attribute    /org/openbmc/settings/host0    boot_flags
    Should not Be Equal     ${value}      ${valueToBeSet}

