1*** Settings ***
2
3Documentation       Test telemetry functionality of OpenBMC.
4
5Resource            ../../lib/bmc_redfish_resource.robot
6Resource            ../../lib/openbmc_ffdc.robot
7
8Suite Setup         Suite Setup Execution
9Suite Teardown      Redfish.Logout
10Test Teardown       Test Teardown Execution
11
12*** Variables ***
13
14${metric_definition_base_uri}  /redfish/v1/TelemetryService/MetricReportDefinitions
15${metric_report_base_uri}      /redfish/v1/TelemetryService/MetricReports
16
17*** Test Cases ***
18
19Verify Basic Telemetry Report Creation
20    [Documentation]  Verify if a telemetry basic report is created.
21    [Tags]  Verify_Basic_Telemetry_Report_Creation
22    [Teardown]  Redfish.Delete  ${metric_definition_base_uri}/${report_name}
23    ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
24
25    ${report_name}=  Set Variable  Test_basic_report_ambient_temp
26    ${resp}=  Redfish.Get Properties
27    ...  /redfish/v1/TelemetryService/MetricDefinitions/Ambient_0_Temp
28    ${body}=  Catenate  {"Id": "${report_name}",
29    ...  "MetricReportDefinitionType": "OnRequest",
30    ...  "ReportActions":["LogToMetricReportsCollection"],
31    ...  "Metrics":[{"MetricProperties":${resp["MetricProperties"]}}]}
32    ${body}=  Replace String  ${body}  '  "
33    ${dict}  Evaluate  json.loads('''${body}''')  json
34
35    Redfish.Post  ${metric_definition_base_uri}  body=&{dict}
36     ...  valid_status_codes=[${HTTP_CREATED}]
37
38    Redfish.Get  ${metric_report_base_uri}/Test_basic_report_ambient_temp
39     ...  valid_status_codes=[${HTTP_OK}]
40
41
42Verify Basic Periodic Telemetry Report Creation
43    [Documentation]  Verify if a telemetry basic periodic report is created.
44    [Tags]  Verify_Basic_Periodic_Telemetry_Report_Creation
45    [Teardown]  Redfish.Delete  ${metric_definition_base_uri}/${report_name}
46    ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
47
48    ${report_name}=  Set Variable  Test_basic_periodic_report_ambient_temp
49    ${resp}=  Redfish.Get Properties
50    ...  /redfish/v1/TelemetryService/MetricDefinitions/Ambient_0_Temp
51    ${body}=  Catenate  {"Id": "${report_name}",
52    ...  "MetricReportDefinitionType": "Periodic",
53    ...  "Name": "Report",
54    ...  "ReportActions":["LogToMetricReportsCollection"],
55    ...  "Metrics":[{"CollectionDuration": "PT30.000S",
56    ...  "CollectionFunction": "Average","MetricProperties":${resp["MetricProperties"]}}],
57    ...  "ReportUpdates": "AppendWrapsWhenFull",
58    ...  "AppendLimit":10,
59    ...  "Schedule": {"RecurrenceInterval": "PT5.000S"}}
60    ${body}=  Replace String  ${body}  '  "
61    ${dict}  Evaluate  json.loads('''${body}''')  json
62
63    Redfish.Post  ${metric_definition_base_uri}  body=&{dict}
64     ...  valid_status_codes=[${HTTP_CREATED}]
65
66    ${resp}=  Redfish.Get  ${metric_definition_base_uri}/${report_name}
67    Should Be True  '${resp.dict["MetricReportDefinitionType"]}' == 'Periodic'
68
69
70Verify Error After Exceeding Maximum Report Creation
71    [Documentation]  Verify error while creating telemetry report more than max report limit.
72    [Tags]  Verify_Error_After_Exceeding_Maximum_Report_Creation
73
74    ${report_name}=  Set Variable  Testreport
75
76    # Delete any existing reports.
77    Delete All Telemetry Reports
78
79    # Create maximum number of reports.
80    ${resp}=  Redfish.Get Properties  /redfish/v1/TelemetryService
81    FOR  ${i}  IN RANGE  ${resp["MaxReports"]}
82        Create Basic Telemetry Report   Ambient_0_Temp   ${report_name}${i}  success
83    END
84
85    # Attempt another report creation and it should fail.
86    Create Basic Telemetry Report   Ambient_0_Temp   ${report_name}${resp["MaxReports"]}  fail
87
88    # Now delete the reports created.
89    Delete All Telemetry Reports
90
91*** Keywords ***
92
93Suite Setup Execution
94    [Documentation]  Do test case setup tasks.
95
96    Redfish.Login
97
98
99Test Teardown Execution
100    [Documentation]  Do test teardown operation.
101
102    FFDC On Test Case Fail
103
104
105Create Basic Telemetry Report
106    [Documentation]  Create a basic telemetry report with single metric.
107    [Arguments]  ${metric_definition_name}   ${report_name}  ${expected_result}=success
108
109    # Description of argument(s):
110    # metric_definition_name    Name of metric definition like Ambient_0_Temp.
111    # report_name               Name of telemetry report which needs to be created.
112    # expected_result           Expected result of report creation - success or fail.
113
114    ${resp}=  Redfish.Get Properties
115    ...  /redfish/v1/TelemetryService/MetricDefinitions/${metric_definition_name}
116    # Example of response from above Redfish GET request.
117    # "@odata.id": "/redfish/v1/TelemetryService/MetricDefinitions/Ambient_0_Temp",
118    # "@odata.type": "#MetricDefinition.v1_0_3.MetricDefinition",
119    # "Id": "Ambient_0_Temp",
120    # "IsLinear": true,
121    # "MaxReadingRange": 127.0,
122    # "MetricDataType": "Decimal",
123    # "MetricProperties": [
124    #     "/redfish/v1/Chassis/chassis/Sensors/temperature_Ambient_0_Temp"
125    # ],
126    # "MetricType": "Gauge",
127    # "MinReadingRange": -128.0,
128    # "Name": "Ambient_0_Temp",
129    # "Units": "Cel"
130
131    ${body}=  Catenate  {"Id": "${report_name}",
132    ...  "MetricReportDefinitionType": "OnRequest",
133    ...  "ReportActions":["LogToMetricReportsCollection"],
134    ...  "Metrics":[{"MetricProperties":${resp["MetricProperties"]}}]}
135    ${body}=  Replace String  ${body}  '  "
136    ${dict}  Evaluate  json.loads('''${body}''')  json
137
138    ${status_code_expected}=  Set Variable If
139    ...  '${expected_result}' == 'success'  [${HTTP_CREATED}]
140    ...  '${expected_result}' == 'fail'  [${HTTP_BAD_REQUEST}]
141
142    Redfish.Post  ${metric_definition_base_uri}  body=&{dict}
143     ...  valid_status_codes=${status_code_expected}
144
145
146Delete All Telemetry Reports
147    [Documentation]  Delete all existing telemetry reports.
148
149    ${report_list}=  Redfish_Utils.Get Member List  /redfish/v1/TelemetryService/MetricReportDefinitions
150    FOR  ${report}  IN  @{report_list}
151      Redfish.Delete  ${report}  valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
152    END
153