*** 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 Teardown Test Teardown Execution *** Variables *** ${metric_definition_base_uri} /redfish/v1/TelemetryService/MetricReportDefinitions ${metric_report_base_uri} /redfish/v1/TelemetryService/MetricReports *** Test Cases *** Verify Basic Telemetry Report Creation [Documentation] Verify if a telemetry basic report is created. [Tags] Verify_Basic_Telemetry_Report_Creation [Teardown] Redfish.Delete ${metric_definition_base_uri}/${report_name} ... valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}] ${report_name}= Set Variable Test_basic_report_ambient_temp ${resp}= Redfish.Get Properties ... /redfish/v1/TelemetryService/MetricDefinitions/Ambient_0_Temp ${body}= Catenate {"Id": "${report_name}", ... "MetricReportDefinitionType": "OnRequest", ... "ReportActions":["LogToMetricReportsCollection"], ... "Metrics":[{"MetricProperties":${resp["MetricProperties"]}}]} ${body}= Replace String ${body} ' " ${dict} Evaluate json.loads('''${body}''') json Redfish.Post ${metric_definition_base_uri} body=&{dict} ... valid_status_codes=[${HTTP_CREATED}] Redfish.Get ${metric_report_base_uri}/Test_basic_report_ambient_temp ... valid_status_codes=[${HTTP_OK}] Verify Basic Periodic Telemetry Report Creation [Documentation] Verify if a telemetry basic periodic report is created. [Tags] Verify_Basic_Periodic_Telemetry_Report_Creation [Teardown] Redfish.Delete ${metric_definition_base_uri}/${report_name} ... valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}] ${report_name}= Set Variable Test_basic_periodic_report_ambient_temp ${resp}= Redfish.Get Properties ... /redfish/v1/TelemetryService/MetricDefinitions/Ambient_0_Temp ${body}= Catenate {"Id": "${report_name}", ... "MetricReportDefinitionType": "Periodic", ... "Name": "Report", ... "ReportActions":["LogToMetricReportsCollection"], ... "Metrics":[{"CollectionDuration": "PT30.000S", ... "CollectionFunction": "Average","MetricProperties":${resp["MetricProperties"]}}], ... "ReportUpdates": "AppendWrapsWhenFull", ... "AppendLimit":10, ... "Schedule": {"RecurrenceInterval": "PT5.000S"}} ${body}= Replace String ${body} ' " ${dict} Evaluate json.loads('''${body}''') json Redfish.Post ${metric_definition_base_uri} body=&{dict} ... valid_status_codes=[${HTTP_CREATED}] ${resp}= Redfish.Get ${metric_definition_base_uri}/${report_name} Should Be True '${resp.dict["MetricReportDefinitionType"]}' == 'Periodic' 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 # Delete any existing reports. Delete All Telemetry Reports # Create maximum number of reports. ${resp}= Redfish.Get Properties /redfish/v1/TelemetryService FOR ${i} IN RANGE ${resp["MaxReports"]} Create Basic Telemetry Report Ambient_0_Temp ${report_name}${i} success END # Attempt another report creation and it should fail. Create Basic Telemetry Report Ambient_0_Temp ${report_name}${resp["MaxReports"]} fail # Now delete the reports created. Delete All Telemetry Reports *** Keywords *** Suite Setup Execution [Documentation] Do test case setup tasks. Redfish.Login Test Teardown Execution [Documentation] Do test teardown operation. FFDC On Test Case Fail Create Basic Telemetry Report [Documentation] Create a basic telemetry report with single metric. [Arguments] ${metric_definition_name} ${report_name} ${expected_result}=success # Description of argument(s): # metric_definition_name Name of metric definition like Ambient_0_Temp. # report_name Name of telemetry report which needs to be created. # expected_result Expected result of report creation - success or fail. ${resp}= Redfish.Get Properties ... /redfish/v1/TelemetryService/MetricDefinitions/${metric_definition_name} # 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" ${body}= Catenate {"Id": "${report_name}", ... "MetricReportDefinitionType": "OnRequest", ... "ReportActions":["LogToMetricReportsCollection"], ... "Metrics":[{"MetricProperties":${resp["MetricProperties"]}}]} ${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} 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