1663c2da5Smanashsarma*** Settings *** 2663c2da5Smanashsarma 3663c2da5SmanashsarmaDocumentation Test telemetry functionality of OpenBMC. 4663c2da5Smanashsarma 5663c2da5SmanashsarmaResource ../../lib/bmc_redfish_resource.robot 6663c2da5SmanashsarmaResource ../../lib/openbmc_ffdc.robot 7663c2da5Smanashsarma 8663c2da5SmanashsarmaSuite Setup Suite Setup Execution 9663c2da5SmanashsarmaSuite Teardown Redfish.Logout 10d0cb6e10SmanashsarmaTest Setup Delete All Telemetry Reports 11663c2da5SmanashsarmaTest Teardown Test Teardown Execution 12663c2da5Smanashsarma 13*6fb70d98SMatt FischerTest Tags Telemetry_Report 145431685fSGeorge Keishing 15663c2da5Smanashsarma*** Variables *** 16663c2da5Smanashsarma 17663c2da5Smanashsarma${metric_definition_base_uri} /redfish/v1/TelemetryService/MetricReportDefinitions 18663c2da5Smanashsarma${metric_report_base_uri} /redfish/v1/TelemetryService/MetricReports 1920dc0fd4Smanashsarma&{user_tele_def} ambient temperature=Ambient.*Temp pcie temperature=PCIE.*Temp 2020dc0fd4Smanashsarma... processor temperature=proc.*temp dimm temperature=dimm.*temp 2120dc0fd4Smanashsarma... battery voltage=Battery_Voltage total power=total_power 2220dc0fd4Smanashsarma... relative humidity=Relative_Humidity 23663c2da5Smanashsarma 24d0cb6e10Smanashsarma 25663c2da5Smanashsarma*** Test Cases *** 26663c2da5Smanashsarma 27663c2da5SmanashsarmaVerify Basic Telemetry Report Creation 28d0cb6e10Smanashsarma [Documentation] Verify basic telemetry report creations for different metrics. 29663c2da5Smanashsarma [Tags] Verify_Basic_Telemetry_Report_Creation 30d0cb6e10Smanashsarma [Template] Create Basic Telemetry Report 31663c2da5Smanashsarma 32d874e9e0Smanashsarma # Metric definition Metric ReportDefinition Type Report Actions Append Limit Expected Result 3320dc0fd4Smanashsarma ambient temperature OnRequest LogToMetricReportsCollection 3420dc0fd4Smanashsarma processor temperature Periodic LogToMetricReportsCollection 500 3520dc0fd4Smanashsarma dimm temperature Periodic LogToMetricReportsCollection 1000 3620dc0fd4Smanashsarma total power OnRequest LogToMetricReportsCollection 3720dc0fd4Smanashsarma invalid value OnRequest LogToMetricReportsCollection 100 fail 3820dc0fd4Smanashsarma relative humidity OnRequest LogToMetricReportsCollection 3920dc0fd4Smanashsarma battery voltage Periodic LogToMetricReportsCollection 100 401a0c6bf6Smanashsarma 4146e243dfSmanashsarma 4246e243dfSmanashsarmaVerify Error After Exceeding Maximum Report Creation 4346e243dfSmanashsarma [Documentation] Verify error while creating telemetry report more than max report limit. 4446e243dfSmanashsarma [Tags] Verify_Error_After_Exceeding_Maximum_Report_Creation 4546e243dfSmanashsarma 4646e243dfSmanashsarma ${report_name}= Set Variable Testreport 4746e243dfSmanashsarma 4846e243dfSmanashsarma # Create maximum number of reports. 4946e243dfSmanashsarma ${resp}= Redfish.Get Properties /redfish/v1/TelemetryService 5046e243dfSmanashsarma FOR ${i} IN RANGE ${resp["MaxReports"]} 5120dc0fd4Smanashsarma Create Basic Telemetry Report total power Periodic LogToMetricReportsCollection 5246e243dfSmanashsarma END 5346e243dfSmanashsarma 5446e243dfSmanashsarma # Attempt another report creation and it should fail. 553e469a87SGeorge Keishing Create Basic Telemetry Report 563e469a87SGeorge Keishing ... total power Periodic LogToMetricReportsCollection expected_result=fail 5746e243dfSmanashsarma 5846e243dfSmanashsarma # Now delete the reports created. 5946e243dfSmanashsarma Delete All Telemetry Reports 6046e243dfSmanashsarma 61d0cb6e10Smanashsarma 6220dc0fd4SmanashsarmaVerify Basic Telemetry Report Creation For PCIE 6320dc0fd4Smanashsarma [Documentation] Verify basic telemetry report creations for PCIE. 6420dc0fd4Smanashsarma [Tags] Verify_Basic_Telemetry_Report_Creation_For_PCIE 6520dc0fd4Smanashsarma 663e469a87SGeorge Keishing Create Basic Telemetry Report 673e469a87SGeorge Keishing ... pcie temperature OnRequest LogToMetricReportsCollection 6820dc0fd4Smanashsarma 6920dc0fd4Smanashsarma 70663c2da5Smanashsarma*** Keywords *** 71663c2da5Smanashsarma 72663c2da5SmanashsarmaSuite Setup Execution 73663c2da5Smanashsarma [Documentation] Do test case setup tasks. 74663c2da5Smanashsarma 75663c2da5Smanashsarma Redfish.Login 76d0cb6e10Smanashsarma Redfish Power On stack_mode=skip 773e469a87SGeorge Keishing ${metric_definitions_list}= 783e469a87SGeorge Keishing ... Redfish_Utils.Get Member List /redfish/v1/TelemetryService/MetricDefinitions 7920dc0fd4Smanashsarma 803e469a87SGeorge Keishing # Create a dictionary of ordinary english naming and actual naming of 813e469a87SGeorge Keishing # telemtry definition. 8220dc0fd4Smanashsarma ${english_actual_teleDef}= Create Dictionary 8320dc0fd4Smanashsarma 8420dc0fd4Smanashsarma Set Suite Variable ${english_actual_teleDef} 8520dc0fd4Smanashsarma Set Suite Variable ${metric_definitions_list} 8620dc0fd4Smanashsarma 8720dc0fd4Smanashsarma Set To Dictionary ${english_actual_teleDef} invalid value invalid_value 8820dc0fd4Smanashsarma 8920dc0fd4Smanashsarma # Find and collect actual telemetry definitions. 9020dc0fd4Smanashsarma FOR ${key} IN @{user_tele_def.keys()} 9120dc0fd4Smanashsarma Add To Telemetry definition Record ${key} ${user_tele_def['${key}']} 9220dc0fd4Smanashsarma END 9320dc0fd4Smanashsarma 9420dc0fd4Smanashsarma 9520dc0fd4SmanashsarmaAdd To Telemetry definition Record 963e469a87SGeorge Keishing [Documentation] Find actual telemetry definitions available and store. 973e469a87SGeorge Keishing ... Definitions are stored in a dictionary as key and value 983e469a87SGeorge Keishing ... as described in argument documentation. 9920dc0fd4Smanashsarma [Arguments] ${key} ${value} 10020dc0fd4Smanashsarma 10120dc0fd4Smanashsarma # Description of argument(s): 1023e469a87SGeorge Keishing # key Name of metric definition in plain english. 1033e469a87SGeorge Keishing # Example: ambient temperature 1043e469a87SGeorge Keishing # value Equivalent regex expression of telemetry definition. 1053e469a87SGeorge Keishing # Example: Ambient.*Temp 10620dc0fd4Smanashsarma 10720dc0fd4Smanashsarma FOR ${item} IN @{metric_definitions_list} 10820dc0fd4Smanashsarma ${regex_matching_output}= Get Regexp Matches ${item} ${value} 10920dc0fd4Smanashsarma IF ${regex_matching_output} != [] 11020dc0fd4Smanashsarma Set To Dictionary ${english_actual_teleDef} ${key}=${regex_matching_output}[0] 11120dc0fd4Smanashsarma Exit For Loop 11220dc0fd4Smanashsarma END 11320dc0fd4Smanashsarma END 114663c2da5Smanashsarma 115663c2da5Smanashsarma 116663c2da5SmanashsarmaTest Teardown Execution 117663c2da5Smanashsarma [Documentation] Do test teardown operation. 118663c2da5Smanashsarma 119663c2da5Smanashsarma FFDC On Test Case Fail 120d0cb6e10Smanashsarma Delete All Telemetry Reports 12146e243dfSmanashsarma 12246e243dfSmanashsarma 12346e243dfSmanashsarmaCreate Basic Telemetry Report 12446e243dfSmanashsarma [Documentation] Create a basic telemetry report with single metric. 125d0cb6e10Smanashsarma [Arguments] ${metric_definition_name} ${metric_definition_type} 126d0cb6e10Smanashsarma ... ${report_action} ${append_limit}=10 ${expected_result}=success 12746e243dfSmanashsarma 12846e243dfSmanashsarma # Description of argument(s): 12946e243dfSmanashsarma # metric_definition_name Name of metric definition like Ambient_0_Temp. 130d0cb6e10Smanashsarma # metric_definition_type Name of telemetry report which needs to be created. 131d0cb6e10Smanashsarma # report_action Telemetry report action. 132d0cb6e10Smanashsarma # append_limit Append limit of the metric data in the report. 13346e243dfSmanashsarma # expected_result Expected result of report creation - success or fail. 13446e243dfSmanashsarma 13520dc0fd4Smanashsarma ${metric_definition_name}= Set Variable ${english_actual_teleDef}[${metric_definition_name}] 13646e243dfSmanashsarma ${resp}= Redfish.Get Properties 13746e243dfSmanashsarma ... /redfish/v1/TelemetryService/MetricDefinitions/${metric_definition_name} 138d874e9e0Smanashsarma ... valid_status_codes=[${HTTP_OK}, ${HTTP_NOT_FOUND}] 139d874e9e0Smanashsarma ${telemetry_data_unavailable}= Run Keyword And Return Status Should Contain ${resp} error 140d874e9e0Smanashsarma IF ${telemetry_data_unavailable} == ${True} 141d874e9e0Smanashsarma ${metricProperties}= Set Variable "" 142d874e9e0Smanashsarma ELSE 143d874e9e0Smanashsarma ${metricProperties}= Set Variable ${resp["MetricProperties"]} 144d874e9e0Smanashsarma END 14546e243dfSmanashsarma # Example of response from above Redfish GET request. 14646e243dfSmanashsarma # "@odata.id": "/redfish/v1/TelemetryService/MetricDefinitions/Ambient_0_Temp", 14746e243dfSmanashsarma # "@odata.type": "#MetricDefinition.v1_0_3.MetricDefinition", 14846e243dfSmanashsarma # "Id": "Ambient_0_Temp", 14946e243dfSmanashsarma # "IsLinear": true, 15046e243dfSmanashsarma # "MaxReadingRange": 127.0, 15146e243dfSmanashsarma # "MetricDataType": "Decimal", 15246e243dfSmanashsarma # "MetricProperties": [ 15346e243dfSmanashsarma # "/redfish/v1/Chassis/chassis/Sensors/temperature_Ambient_0_Temp" 15446e243dfSmanashsarma # ], 15546e243dfSmanashsarma # "MetricType": "Gauge", 15646e243dfSmanashsarma # "MinReadingRange": -128.0, 15746e243dfSmanashsarma # "Name": "Ambient_0_Temp", 15846e243dfSmanashsarma # "Units": "Cel" 15946e243dfSmanashsarma 160d0cb6e10Smanashsarma # Report name is from random generated string with length 16 which 161d0cb6e10Smanashsarma # is enough to maintain uniqueness in report name. 162d0cb6e10Smanashsarma ${report_name}= Generate Random String 16 [NUMBERS]abcdef 16346e243dfSmanashsarma ${body}= Catenate {"Id": "${report_name}", 164d0cb6e10Smanashsarma ... "MetricReportDefinitionType": "${metric_definition_type}", 165d0cb6e10Smanashsarma ... "Name": "Report", 166d0cb6e10Smanashsarma ... "ReportActions":["${report_action}"], 167d0cb6e10Smanashsarma ... "Metrics":[{"CollectionDuration": "PT30.000S", 168d874e9e0Smanashsarma ... "MetricProperties":${metricProperties}}], 169d0cb6e10Smanashsarma ... "ReportUpdates": "AppendWrapsWhenFull", 170d0cb6e10Smanashsarma ... "AppendLimit": ${append_limit}, 171d0cb6e10Smanashsarma ... "Schedule": {"RecurrenceInterval": "PT5.000S"}} 172d0cb6e10Smanashsarma 17346e243dfSmanashsarma ${body}= Replace String ${body} ' " 17446e243dfSmanashsarma ${dict} Evaluate json.loads('''${body}''') json 17546e243dfSmanashsarma 17646e243dfSmanashsarma ${status_code_expected}= Set Variable If 17746e243dfSmanashsarma ... '${expected_result}' == 'success' [${HTTP_CREATED}] 17846e243dfSmanashsarma ... '${expected_result}' == 'fail' [${HTTP_BAD_REQUEST}] 17946e243dfSmanashsarma 18046e243dfSmanashsarma Redfish.Post ${metric_definition_base_uri} body=&{dict} 18146e243dfSmanashsarma ... valid_status_codes=${status_code_expected} 18246e243dfSmanashsarma 183d0cb6e10Smanashsarma IF '${expected_result}' == 'success' 184d0cb6e10Smanashsarma # Verify definition of report has attributes provided at the time of creation. 185d0cb6e10Smanashsarma ${resp_report}= Redfish.Get ${metric_definition_base_uri}/${report_name} 186d0cb6e10Smanashsarma ... valid_status_codes=[${HTTP_OK}] 187d0cb6e10Smanashsarma Should Be True '${resp_report.dict["MetricReportDefinitionType"]}' == '${metric_definition_type}' 188d0cb6e10Smanashsarma Should Be True '${resp_report.dict["AppendLimit"]}' == '${AppendLimit}' 189d0cb6e10Smanashsarma Should Be True '${resp_report.dict["ReportActions"][0]}' == '${report_action}' 190d0cb6e10Smanashsarma Should Be True 191d0cb6e10Smanashsarma ... '${resp_report.dict["Metrics"]}[0][MetricProperties][0]' == '${resp["MetricProperties"][0]}' 192d0cb6e10Smanashsarma END 193d0cb6e10Smanashsarma 19446e243dfSmanashsarma 19546e243dfSmanashsarmaDelete All Telemetry Reports 19646e243dfSmanashsarma [Documentation] Delete all existing telemetry reports. 19746e243dfSmanashsarma 19846e243dfSmanashsarma ${report_list}= Redfish_Utils.Get Member List /redfish/v1/TelemetryService/MetricReportDefinitions 19946e243dfSmanashsarma FOR ${report} IN @{report_list} 20046e243dfSmanashsarma Redfish.Delete ${report} valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}] 20146e243dfSmanashsarma END 202