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