*** 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     FFDC On Test Case Fail


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

${SETTING_HOST}       ${SETTINGS_URI}host0

${RANGE_MSG_ERR}      ValueError: Invalid input. Data not in allowed range
${VALUE_MSG_ERR}      ValueError: Invalid input. Data not in allowed values

*** Test Cases ***


Get Boot Flags

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

    ${resp}=   Read Attribute   ${SETTING_HOST}   boot_flags
    should not be empty   ${resp}

Get Power Value

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

    ${powerValue}=   Read Attribute   ${SETTING_HOST}   power_cap
    should be true   ${powerValue} >= ${MIN_POWER_VALUE} and ${powerValue} <= ${MAX_POWER_VALUE}


Set Powercap Value With String
    [Documentation]  Set the power values with string and expect error.
    [Tags]  Set_Powercap_Value_With_String

    ${valueToBeSet}=  Set Variable   abcdefg
    ${error_msg}=  Run Keyword And Expect Error
    ...  *   Write To Power Attribute  power_cap  ${valueToBeSet}
    Should Contain  ${error_msg}  ${RANGE_MSG_ERR}

    ${value}=   Read Attribute    ${SETTING_HOST}   power_cap
    Should Not Be True    '${value}'=='${valueToBeSet}'


Set Powercap Value Greater Than Allowed Range
    [Documentation]  Set the power value greater then MAX_ALLOWED_VALUE
    ...              and expect error.
    [Tags]  Set_Powercap_Value_Greater_Than_Allowed_Range

    ${valueToBeSet}=  Set Variable   ${1010}
    ${error_msg}=  Run Keyword And Expect Error
    ...  *   Write To Power Attribute  power_cap  ${valueToBeSet}
    Should Contain  ${error_msg}  ${RANGE_MSG_ERR}

    ${value}=  Read Attribute    ${SETTING_HOST}   power_cap
    Should Not Be Equal  ${value}  ${valueToBeSet}


Set 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.
    [Tags]  Set_Power_With_Min_Power_Value

    ${valueToBeSet}=   Set Variable     ${MIN_POWER_VALUE}
    ${valueDict}=   create dictionary   data=${valueToBeSet}
    Write Attribute   ${SETTING_HOST}   power_cap      data=${valueDict}
    ${value}=      Read Attribute   ${SETTING_HOST}    power_cap
    Should Be Equal     ${value}      ${valueToBeSet}

Set Power With Max Power Value

    [Documentation]   ***GOOD PATH***
    ...               This test case sets the power value with MAX_POWER_VALUE
    ...               and it should be set.
    [Tags]  Set_Power_With_Max_Power_Value

    ${valueToBeSet}=   Set Variable     ${MAX_POWER_VALUE}
    ${valueDict}=   create dictionary   data=${valueToBeSet}
    Write Attribute   ${SETTING_HOST}    power_cap   data=${valueDict}
    ${value}=      Read Attribute   ${SETTING_HOST}    power_cap
    Should Be Equal     ${value}      ${valueToBeSet}


Set Boot Flag With String
    [Documentation]   Set boot flag with invalid string and expect error.
    [Tags]  Set_Boot_Flag_With_String

    ${valueToBeSet}=   Set Variable     3ab56f
    ${error_msg}=  Run Keyword And Expect Error
    ...  *   Write To Power Attribute  boot_flags  ${valueToBeSet}
    Should Contain  ${error_msg}  ${VALUE_MSG_ERR}
    ${value}=  Read Attribute  ${SETTING_HOST}  boot_flags
    Should Not Be Equal  ${value}  ${valueToBeSet}


*** Keywords ***

Write To Power Attribute
    [Documentation]  Write to Powercap value.
    [Arguments]   ${attrib}  ${args}
    ${value}=  Create Dictionary   data=${args}
    ${resp}=  OpenBMC Put Request
    ...  ${SETTING_HOST}/attr/${attrib}  data=${value}
    ${jsondata}=  To JSON   ${resp.content}
    Should Be Equal   ${jsondata['status']}   ${HTTP_OK}
    ...  msg=${jsondata}

