*** 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.
    ...               Existing Issue: https://github.com/openbmc/openbmc/issues/552
    [Tags]  known_issue

    ${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
    ...               Existing Issue: https://github.com/openbmc/openbmc/issues/552
    [Tags]  known_issue

    ${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.
    ...               Existing Issue: https://github.com/openbmc/openbmc/issues/552
    [Tags]  known_issue

    ${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}

