*** Settings ***

Documentation  Test LED groups in OpenBMC.

Resource       ../lib/rest_client.robot
Resource       ../lib/resource.robot
Resource       ../lib/openbmc_ffdc.robot

Suite Setup    Setup The Suite
Test Teardown  FFDC On Test Case Fail

Force Tags  LED_Group

*** Variables ***


*** Test Cases ***

Verify CPU Fault LEDs Group
    [Documentation]  Verify CPU's fault LEDs.
    [Tags]  Verify_CPU_Fault_LEDs_Group

    Verify LED Group  cpu  fault

Verify Fan Fault LEDs Group
    [Documentation]  Verify fan's fault LEDs.
    [Tags]  Verify_Fan_Fault_LEDs_Group

    Verify LED Group  fan  fault

Verify DIMM Fault LEDs Group
    [Documentation]  Verify DIMM's fault LEDs.
    [Tags]  Verify_DIMM_Fault_LEDs_Group

    Verify LED Group  dimm  fault

Verify GPU Fault LEDs Group
    [Documentation]  Verify GPU's fault LEDs.
    [Tags]  Verify_GPU_Fault_LEDs_Group

    Verify LED Group  gv100card  fault

Verify Power Supply Fault LEDs Group
    [Documentation]  Verify power supply's fault LEDs.
    [Tags]  Verify_Power_Supply_Fault_LEDs_Group

    Verify LED Group  powersupply  fault

Verify Enclosure Fault LED Group
    [Documentation]  Validate enclosure's fault LED.
    [Tags]  Verify_Enclosure_Fault_LED_Group

    Verify LED Group  enclosure  fault

Verify Power State LEDs Group
    [Documentation]  Verify power state LEDs.
    [Tags]  Verify_Power_State_LEDs_Group

    Verify LED Group  power

Verify Enclosure Identify LED Group
    [Documentation]  Validate enclosure's identify LED.
    [Tags]  Verify_Enclosure_Identify_LED_Group

    Verify LED Group  enclosure  identify

Verify Fan Identify LEDs Group
    [Documentation]  Verify fan's identify LEDs.
    [Tags]  Verify_Fan_Identify_LEDs_Group

    Verify LED Group  fan  identify

Verify Other Fault LEDs Group
    [Documentation]  Verify other fault LEDs.
    [Tags]  Verify_Other_Fault_LEDs_Group

    Verify LED Group  system_fault
    Verify LED Group  boxelder_fault
    Verify LED Group  bmc_fault
    Verify LED Group  motherboard_fault

Verify Enclosure Fault LED On Assertion
    [Documentation]  Verify enclosure fault LED on assertion.
    [Tags]  Verify_Enclosure_Fault_LED_On_Assertion

    Set LED State  On  cpu0_fault
    ${resp}=  Get System LED State  rear_fault
    Should Be Equal  ${resp}  On


Verify Rear Power LED Association With Group LED
    [Documentation]  Verify rear power LED state association with
    ...  power on group LED.
    [Tags]  Verify_Rear_Power_LED_Association_With_Group_LED

    Set LED State  On  power_on
    ${resp}=  Get System LED State  rear_power
    Should Be Equal  ${resp}  On

    Set LED State  Off  power_on
    ${resp}=  Get System LED State  rear_power
    Should Be Equal  ${resp}  Blink


***Keywords***

Set LED State
    [Documentation]  Set state of given LED to on or off.
    [Arguments]  ${state}  ${led_name}
    # Description of arguments:
    # state     LED's state to set, i.e. On or Off
    # led_name  Name of LED

    ${data}=  Run Keyword If
    ...  '${state}' == 'On'  Create Dictionary  data=${True}
    ...  ELSE IF  '${state}' == 'Off'  Create Dictionary  data=${False}
    ...  ELSE  Fail  msg=Invalid LED state

    ${resp}=  OpenBMC Put Request
    ...  ${LED_GROUPS_URI}${led_name}/attr/Asserted  data=${data}
    ${jsondata}=  to JSON  ${resp.content}
    Should Be Equal As Strings  ${jsondata['status']}  ok

Verify LED Group
    [Documentation]  Set and validate state of all LEDs with given name.
    [Arguments]  ${led_prefix}  ${led_suffix}=${EMPTY}
    # Description of arguments:
    # led_prefix  LED name's prefix
    # led_suffix  LED name's suffix

    ${led_list}=  Get LED List  ${led_prefix}  ${led_suffix}

    ${list_length}=  Get Length  ${led_list}
    Should Be True  ${list_length} > 0
    ...  msg=No ${led_prefix} ${led_suffix} LED found

    FOR  ${led}  IN  @{led_list}
      Set LED State  On  ${led}
      ${resp}=  Get LED State XYZ  ${led}
      Should Be Equal  ${resp}  ${1}
      Set LED State  Off  ${led}
      ${resp}=  Get LED State XYZ  ${led}
      Should Be Equal  ${resp}  ${0}
    END

Setup The Suite
    [Documentation]  Test setup before running this suite.

    ${resp}=  Read Properties  ${LED_GROUPS_URI}
    Set Suite Variable  ${LED_GROUPS}  ${resp}

Get LED List
    [Documentation]  Returns all LEDs with given name.
    [Arguments]  ${led_prefix}  ${led_suffix}=${EMPTY}
    # Description of arguments:
    # led_prefix  LED name's prefix
    # led_suffix  LED name's suffix

    ${list}=  Get Matches
    ...  ${LED_GROUPS}  regexp=^.*[0-9a-z_].${led_prefix}.*${led_suffix}
    ${led_list}=  Create List

    FOR  ${element}  IN  @{list}
      ${element}=  Remove String  ${element}  ${LED_GROUPS_URI}
      Append To List  ${led_list}  ${element}
    END
    Sort List  ${led_list}

    [Return]  ${led_list}
