blob: 1ebe07f5319477794824ce0f23bcfb60a7ceba2d [file] [log] [blame]
*** Settings ***
Documentation Test telemetry functionality of OpenBMC.
Resource ../../lib/bmc_redfish_resource.robot
Resource ../../lib/openbmc_ffdc.robot
Suite Setup Suite Setup Execution
Suite Teardown Redfish.Logout
Test Setup Delete All Telemetry Reports
Test Teardown Test Teardown Execution
Force Tags Telemetry_Report
*** Variables ***
${metric_definition_base_uri} /redfish/v1/TelemetryService/MetricReportDefinitions
${metric_report_base_uri} /redfish/v1/TelemetryService/MetricReports
&{user_tele_def} ambient temperature=Ambient.*Temp pcie temperature=PCIE.*Temp
... processor temperature=proc.*temp dimm temperature=dimm.*temp
... battery voltage=Battery_Voltage total power=total_power
... relative humidity=Relative_Humidity
*** Test Cases ***
Verify Basic Telemetry Report Creation
[Documentation] Verify basic telemetry report creations for different metrics.
[Tags] Verify_Basic_Telemetry_Report_Creation
[Template] Create Basic Telemetry Report
# Metric definition Metric ReportDefinition Type Report Actions Append Limit Expected Result
ambient temperature OnRequest LogToMetricReportsCollection
processor temperature Periodic LogToMetricReportsCollection 500
dimm temperature Periodic LogToMetricReportsCollection 1000
total power OnRequest LogToMetricReportsCollection
invalid value OnRequest LogToMetricReportsCollection 100 fail
relative humidity OnRequest LogToMetricReportsCollection
battery voltage Periodic LogToMetricReportsCollection 100
Verify Error After Exceeding Maximum Report Creation
[Documentation] Verify error while creating telemetry report more than max report limit.
[Tags] Verify_Error_After_Exceeding_Maximum_Report_Creation
${report_name}= Set Variable Testreport
# Create maximum number of reports.
${resp}= Redfish.Get Properties /redfish/v1/TelemetryService
FOR ${i} IN RANGE ${resp["MaxReports"]}
Create Basic Telemetry Report total power Periodic LogToMetricReportsCollection
END
# Attempt another report creation and it should fail.
Create Basic Telemetry Report total power Periodic LogToMetricReportsCollection expected_result=fail
# Now delete the reports created.
Delete All Telemetry Reports
Verify Basic Telemetry Report Creation For PCIE
[Documentation] Verify basic telemetry report creations for PCIE.
[Tags] Verify_Basic_Telemetry_Report_Creation_For_PCIE
Create Basic Telemetry Report pcie temperature OnRequest LogToMetricReportsCollection
*** Keywords ***
Suite Setup Execution
[Documentation] Do test case setup tasks.
Redfish.Login
Redfish Power On stack_mode=skip
${metric_definitions_list}= Redfish_Utils.Get Member List /redfish/v1/TelemetryService/MetricDefinitions
# Create a dictionary of ordinary english naming and actual naming of telemtry definition.
${english_actual_teleDef}= Create Dictionary
Set Suite Variable ${english_actual_teleDef}
Set Suite Variable ${metric_definitions_list}
Set To Dictionary ${english_actual_teleDef} invalid value invalid_value
# Find and collect actual telemetry definitions.
FOR ${key} IN @{user_tele_def.keys()}
Add To Telemetry definition Record ${key} ${user_tele_def['${key}']}
END
Add To Telemetry definition Record
[Documentation] Find actual telemetry definitions available and store. Definitions are
... stored in a dictionary as key and value as decribed in argument documentation.
[Arguments] ${key} ${value}
# Description of argument(s):
# key Name of metric definition in plain english. Example: ambient temperature
# value Equivalent regex expression of telemetry definition. Example: Ambient.*Temp
FOR ${item} IN @{metric_definitions_list}
${regex_matching_output}= Get Regexp Matches ${item} ${value}
IF ${regex_matching_output} != []
Set To Dictionary ${english_actual_teleDef} ${key}=${regex_matching_output}[0]
Exit For Loop
END
END
Test Teardown Execution
[Documentation] Do test teardown operation.
FFDC On Test Case Fail
Delete All Telemetry Reports
Create Basic Telemetry Report
[Documentation] Create a basic telemetry report with single metric.
[Arguments] ${metric_definition_name} ${metric_definition_type}
... ${report_action} ${append_limit}=10 ${expected_result}=success
# Description of argument(s):
# metric_definition_name Name of metric definition like Ambient_0_Temp.
# metric_definition_type Name of telemetry report which needs to be created.
# report_action Telemetry report action.
# append_limit Append limit of the metric data in the report.
# expected_result Expected result of report creation - success or fail.
${metric_definition_name}= Set Variable ${english_actual_teleDef}[${metric_definition_name}]
${resp}= Redfish.Get Properties
... /redfish/v1/TelemetryService/MetricDefinitions/${metric_definition_name}
... valid_status_codes=[${HTTP_OK}, ${HTTP_NOT_FOUND}]
${telemetry_data_unavailable}= Run Keyword And Return Status Should Contain ${resp} error
IF ${telemetry_data_unavailable} == ${True}
${metricProperties}= Set Variable ""
ELSE
${metricProperties}= Set Variable ${resp["MetricProperties"]}
END
# Example of response from above Redfish GET request.
# "@odata.id": "/redfish/v1/TelemetryService/MetricDefinitions/Ambient_0_Temp",
# "@odata.type": "#MetricDefinition.v1_0_3.MetricDefinition",
# "Id": "Ambient_0_Temp",
# "IsLinear": true,
# "MaxReadingRange": 127.0,
# "MetricDataType": "Decimal",
# "MetricProperties": [
# "/redfish/v1/Chassis/chassis/Sensors/temperature_Ambient_0_Temp"
# ],
# "MetricType": "Gauge",
# "MinReadingRange": -128.0,
# "Name": "Ambient_0_Temp",
# "Units": "Cel"
# Report name is from random generated string with length 16 which
# is enough to maintain uniqueness in report name.
${report_name}= Generate Random String 16 [NUMBERS]abcdef
${body}= Catenate {"Id": "${report_name}",
... "MetricReportDefinitionType": "${metric_definition_type}",
... "Name": "Report",
... "ReportActions":["${report_action}"],
... "Metrics":[{"CollectionDuration": "PT30.000S",
... "MetricProperties":${metricProperties}}],
... "ReportUpdates": "AppendWrapsWhenFull",
... "AppendLimit": ${append_limit},
... "Schedule": {"RecurrenceInterval": "PT5.000S"}}
${body}= Replace String ${body} ' "
${dict} Evaluate json.loads('''${body}''') json
${status_code_expected}= Set Variable If
... '${expected_result}' == 'success' [${HTTP_CREATED}]
... '${expected_result}' == 'fail' [${HTTP_BAD_REQUEST}]
Redfish.Post ${metric_definition_base_uri} body=&{dict}
... valid_status_codes=${status_code_expected}
IF '${expected_result}' == 'success'
# Verify definition of report has attributes provided at the time of creation.
${resp_report}= Redfish.Get ${metric_definition_base_uri}/${report_name}
... valid_status_codes=[${HTTP_OK}]
Should Be True '${resp_report.dict["MetricReportDefinitionType"]}' == '${metric_definition_type}'
Should Be True '${resp_report.dict["AppendLimit"]}' == '${AppendLimit}'
Should Be True '${resp_report.dict["ReportActions"][0]}' == '${report_action}'
Should Be True
... '${resp_report.dict["Metrics"]}[0][MetricProperties][0]' == '${resp["MetricProperties"][0]}'
END
Delete All Telemetry Reports
[Documentation] Delete all existing telemetry reports.
${report_list}= Redfish_Utils.Get Member List /redfish/v1/TelemetryService/MetricReportDefinitions
FOR ${report} IN @{report_list}
Redfish.Delete ${report} valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
END