*** Settings ***
Documentation    Verify openbmctool.py functionality.

# This module tests the functionality of openbmctool.py.
# The following tests are performed:
#
# FRU status
# FRU print
# FRU list
# FRU list of a single FRU
# sensors print
# sensors list
# sensors list of a single sensor
# health check
# service data
# remote logging
# local_users queryenabled
#
# It is the responsibility of the user to include openbmctool.py's
# directory PATH in $PATH.
#
# Test Parameters:
# OPENBMC_HOST          The BMC host name or IP address.
# OPENBMC_USERNAME      The username to login to the BMC.
# OPENBMC_PASSWORD      Password for OPENBMC_USERNAME.
# LOGGING_HOST          The hostname or IP address of the remote
#                       logging server.  The default value is
#                       '10.10.10.10'.
# LOGGING_PORT          The port number for remote logging on the
#                       LOGGING_HOST.  The default value is '514'.


Library                 String
Library                 OperatingSystem
Library                 ../../lib/gen_print.py
Library                 ../../lib/gen_robot_print.py
Library                 ../../lib/openbmctool_utils.py
Library                 ../../lib/gen_misc.py
Library                 ../../lib/gen_robot_valid.py
Resource                ../../syslib/utils_os.robot
Resource                ../../lib/resource.robot


Suite Setup             Suite Setup Execution
Test Setup              Rprintn

*** Variables ***

${min_number_items}     ${30}
${min_number_sensors}   ${15}
${LOGGING_HOST}         10.10.10.10
${LOGGING_PORT}         514



*** Test Cases ***

Verify Openbmctool FRU Commands
    [Documentation]  Verify FRU commands work.
    [Tags]  Verify_Openbmctool_FRU_Commands

    Verify FRU Status
    Verify FRU Print
    Verify FRU List
    # Verify FRU List With Single FRU
    # Known issue - openbmctool.py FRU list with single FRU is not working yet.
    # See https://github.com/openbmc/openbmc-tools/issues/32.


Verify Openbmctool Sensors Commands
    [Documentation]  Verify sensors commands work.
    [Tags]  Verify_Openbmctool_Sensors_Commands

    Verify Sensors Print
    Verify Sensors List
    # Verify Sensors List With Single Sensor
    # Known issue - openbmctool.py sensors list with single sensor is
    # not working yet.  See https://github.com/openbmc/openbmc-tools/issues/33.


Verify Openbmctool Health Check Commands
    [Documentation]  Verify health check command works.
    [Tags]  Verify_Openbmctool_Health_Check_Commands

    ${health_results}=  Get Health Check  verify=${1}
    Rprint Vars  health_results


Verify Openbmctool Service Data Commands
    [Documentation]  Verify collect service data command works.
    [Tags]  Verify_Openbmctool_Service_Data_Commands

    ${service_paths}=  Collect Service Data  verify=${1}
    Rprint Vars  service_paths


Verify Openbmctool Remote Logging Operations
    [Documentation]  Verify logging commands work.
    [Tags]  Verify_Openbmctool_Remote_Logging_Operations

    # Verify Logging View
    ${remote_logging_view}=  Get Remote Logging View  verify=${True}

    # Save previous remote logging settings, if any.
    ${remote_config}=  Get Remote Logging Settings

    # Enable remote logging and verify.
    Verify Logging Parameters  ${LOGGING_HOST}  ${LOGGING_PORT}

    # Disable remote logging and verify.  Disable will clear any
    # previous settings.
    Verify Logging Disable  ${LOGGING_HOST}

    # Set original parameters back, if any.
    Run Keyword If  ${remote_config}
    ...  Verify Logging Parameters
    ...  ${remote_config['Address']}  ${remote_config['Port']}


Verify Openbmctool Local Users Queryenabled
    [Documentation]  Verify "local_users queryenabled" function.
    [Tags]  Verify_Openbmctool_Local_Users_Queryenabled

    # Example output from "queryenabled":
    # User: root  Enabled: 1
    # User: freddy  Enabled: 1
    # User: ldap4  Enabled: {'description': "The ..."

    ${rc}  ${num_users}=  Openbmctool Execute Command
    ...  local_users queryenabled | grep -c 'User.*Enabled'
    Rprint Vars  num_users
    Check Greater Than Minimum  ${num_users}  ${0}  local users


*** Keywords ***


Verify FRU Status
    [Documentation]  Verify that the 'fru status' command works.

    ${fru_status}=  Get Fru Status
    ${num_frus}=  Get Length  ${fru_status}
    Rprint Vars  num_frus
    Check Greater Than Minimum  ${num_frus}  ${min_number_items}  frus


Verify FRU Print
    [Documentation]  Verify that the 'fru print' command works.

    ${rc}  ${num_frus}=  Openbmctool Execute Command
    ...  fru print | wc -l
    Rprint Vars  num_frus
    Check Greater Than Minimum  ${num_frus}  ${min_number_items}  frus


Verify FRU List
    [Documentation]  Verify that the 'fru list' command works.

    # Note: The output from 'fru list' is the same as 'fru print'.
    ${rc}  ${num_frus}=  Openbmctool Execute Command
    ...  fru list | wc -l
    Rprint Vars  num_frus
    Check Greater Than Minimum  ${num_frus}  ${min_number_items}  frus


Verify FRU List With Single FRU
    [Documentation]  Verify that 'fru list' with parameter works.

    # Get the name of one FRU, in this case the first one listed.
    ${fru_status}=  Get Fru Status
    ${fruname}=  Set Variable  ${fru_status[0]['component']}
    Rprint Vars  fruname
    Should Not Be Empty  ${fruname}  msg=Could not find a FRU.
    # Get a fru list specifying just the FRU.
    ${rc}  ${output}=  Openbmctool Execute Command
    ...  fru list ${fruname} | wc -l
    ${fru_detail}=  Convert to Integer  ${output}
    Rprint Vars  fru_detail
    Should Be True  ${fru_detail} <= ${min_number_items}
    ...  msg=Too many lines reported for fru status ${fruname}
    Should Be True  ${fru_detail} > ${4}
    ...  msg=Too few lines reported for fru status ${fruname}


Verify Sensors Print
    [Documentation]  Verify that sensors print works.

    ${sensor_status}=  Get Sensors Print
    ${num_sensors}=  Get Length  ${sensor_status}
    Rprint Vars  num_sensors
    Check Greater Than Minimum  ${num_sensors}  ${min_number_sensors}  sensors


Verify Sensors List
    [Documentation]  Verify that sensors list works.

    # Note: The output from 'sensors list' is the same as 'sensors print'.
    ${sensor_status}=  Get Sensors List
    ${num_sensors}=  Get Length  ${sensor_status}
    Rprint Vars  num_sensors
    Check Greater Than Minimum  ${num_sensors}  ${min_number_sensors}  sensors


Verify Sensors List With Single Sensor
    [Documentation]  Verify that sensors list with parameter works.

    ${sensor}=  Set Variable  ambient
    ${rc}  ${num_sensors}=  Openbmctool Execute Command
    ...  sensors list ${sensor} | wc -l
    Rprint Vars  sensor  num_sensors
    ${num_sensors}=  Convert to Integer  ${num_sensors}
    Should Be True  ${num_sensors} < ${10}
    ...  msg=Too many lines reported for list sensor ${sensor}


Verify Logging Parameters
    [Documentation]  Verify remote_logging_config.
    [Arguments]  ${log_host}  ${log_port}

    # Description of argument(s):
    # log_host  The host name or IP address of remote logging server.
    # log_port  The port number for remote logging on log_host.

    ${rc}  ${result}=  Openbmctool Execute Command JSON
    ...  logging remote_logging_config -a ${log_host} -p ${log_port}
    ...  print_output=${False}  ignore_err=${False}

    ${remote_logging_view}=  Get Remote Logging View  verify=${True}

    Rvalid Value  remote_logging_view['Address']  valid_values=['${log_host}']
    Rvalid Value  remote_logging_view['Port']  valid_values=[int(${log_port})]


Verify Logging Disable
    [Documentation]  Verify remote_logging disable
    [Arguments]  ${log_host}

    # Description of argument(s):
    # log_host  The host name or IP address of remote logging server.

    ${rc}  ${result}=  Openbmctool Execute Command JSON
    ...  logging remote_logging disable

    ${remote_logging_view}=  Get Remote Logging View  verify=${True}
    Rvalid Value  remote_logging_view['Address']  valid_values=['']


Get Remote Logging Settings
    [Documentation]  Return the remote config settings as a dictionary
    ...              if active.  Otherwise, return ${False}.

    ${remote_config}=  Read Properties  ${BMC_LOGGING_URI}config/remote
    Return From Keyword If
    ...  '${remote_config["Address"]}' == '' or '${remote_config["Port"]}' == '0'
    ...  ${False}

    [Return]  ${remote_config}


Check Greater Than Minimum
    [Documentation]  Value should be greater than minimum, otherwise fail.
    [Arguments]  ${value_to_test}  ${minimum_value}  ${label}

    # Description of argument(s):
    # value_to_test  Value to compare to the minimum.
    # minimum_value  The minimum acceptable value.
    # label          Name to print if failure.

    ${value_to_test}=  Convert to Integer  ${value_to_test}
    Should Be True  ${value_to_test} > ${minimum_value}
    ...  msg=There should be at least ${minimum_value} ${label}.


Suite Setup Execution
    [Documentation]  Verify connectivity to run openbmctool commands.

    # Verify connectivity to the BMC host.
    ${bmc_version}=  Run Keyword And Ignore Error  Get BMC Version
    Run Keyword If  '${bmc_version[0]}' == 'FAIL'  Fail
    ...  msg=Could not connect to BMC ${OPENBMC_HOST} to get firmware version.

    # Verify can find the openbmctool.
    ${openbmctool_file_path}=  which  openbmctool.py
    Rprintn
    Rprint Vars  openbmctool_file_path

    # Get the version number from openbmctool.
    ${openbmctool_version}=  Get Openbmctool Version

    Rprint Vars  openbmctool_version  OPENBMC_HOST  bmc_version[1]
