xref: /openbmc/bmcweb/test/redfish-core/include/utils/sensor_utils_test.cpp (revision 1aa94df4cb3b7ab864a4c5fb009538c259c2801e)
1 // SPDX-License-Identifier: Apache-2.0
2 // SPDX-FileCopyrightText: Copyright OpenBMC Authors
3 #include "utils/sensor_utils.hpp"
4 
5 #include <optional>
6 #include <string>
7 #include <tuple>
8 
9 #include <gtest/gtest.h>
10 
11 namespace redfish::sensor_utils
12 {
13 namespace
14 {
15 
TEST(SplitSensorNameAndType,Type)16 TEST(SplitSensorNameAndType, Type)
17 {
18     EXPECT_EQ(splitSensorNameAndType("fantach_foo_1").first, "fan_tach");
19     EXPECT_EQ(splitSensorNameAndType("temperature_foo2").first, "temperature");
20 }
21 
TEST(SplitSensorNameAndType,Name)22 TEST(SplitSensorNameAndType, Name)
23 {
24     EXPECT_EQ(splitSensorNameAndType("fantach_foo_1").second, "foo_1");
25     EXPECT_EQ(splitSensorNameAndType("temperature_foo2").second, "foo2");
26 }
27 
TEST(SplitSensorNameAndType,Error)28 TEST(SplitSensorNameAndType, Error)
29 {
30     EXPECT_TRUE(splitSensorNameAndType("fantach").first.empty());
31     EXPECT_TRUE(splitSensorNameAndType("temperature").second.empty());
32 }
33 
TEST(GetSensorId,Success)34 TEST(GetSensorId, Success)
35 {
36     std::string sensorId;
37 
38     sensorId = getSensorId("fan0_0", "fan_tach");
39     EXPECT_EQ(sensorId, "fantach_fan0_0");
40 
41     sensorId = getSensorId("0_1", "fan_pwm");
42     EXPECT_EQ(sensorId, "fanpwm_0_1");
43 
44     sensorId = getSensorId("fan2", "fan_tach");
45     EXPECT_EQ(sensorId, "fantach_fan2");
46 
47     sensorId = getSensorId("fan_3", "fan_tach");
48     EXPECT_EQ(sensorId, "fantach_fan_3");
49 
50     sensorId = getSensorId("temp2", "temperature");
51     EXPECT_EQ(sensorId, "temperature_temp2");
52 }
53 
TEST(ChassisSubNodeToString,Success)54 TEST(ChassisSubNodeToString, Success)
55 {
56     std::string subNodeStr;
57 
58     subNodeStr = chassisSubNodeToString(ChassisSubNode::environmentMetricsNode);
59     EXPECT_EQ(subNodeStr, "EnvironmentMetrics");
60 
61     subNodeStr = chassisSubNodeToString(ChassisSubNode::powerNode);
62     EXPECT_EQ(subNodeStr, "Power");
63 
64     subNodeStr = chassisSubNodeToString(ChassisSubNode::sensorsNode);
65     EXPECT_EQ(subNodeStr, "Sensors");
66 
67     subNodeStr = chassisSubNodeToString(ChassisSubNode::thermalNode);
68     EXPECT_EQ(subNodeStr, "Thermal");
69 
70     subNodeStr = chassisSubNodeToString(ChassisSubNode::thermalMetricsNode);
71     EXPECT_EQ(subNodeStr, "ThermalMetrics");
72 
73     subNodeStr = chassisSubNodeToString(ChassisSubNode::unknownNode);
74     EXPECT_EQ(subNodeStr, "");
75 }
76 
TEST(ChassisSubNodeFromString,Success)77 TEST(ChassisSubNodeFromString, Success)
78 {
79     ChassisSubNode subNode = ChassisSubNode::unknownNode;
80 
81     subNode = chassisSubNodeFromString("EnvironmentMetrics");
82     EXPECT_EQ(subNode, ChassisSubNode::environmentMetricsNode);
83 
84     subNode = chassisSubNodeFromString("Power");
85     EXPECT_EQ(subNode, ChassisSubNode::powerNode);
86 
87     subNode = chassisSubNodeFromString("Sensors");
88     EXPECT_EQ(subNode, ChassisSubNode::sensorsNode);
89 
90     subNode = chassisSubNodeFromString("Thermal");
91     EXPECT_EQ(subNode, ChassisSubNode::thermalNode);
92 
93     subNode = chassisSubNodeFromString("ThermalMetrics");
94     EXPECT_EQ(subNode, ChassisSubNode::thermalMetricsNode);
95 
96     subNode = chassisSubNodeFromString("BadNode");
97     EXPECT_EQ(subNode, ChassisSubNode::unknownNode);
98 
99     subNode = chassisSubNodeFromString("");
100     EXPECT_EQ(subNode, ChassisSubNode::unknownNode);
101 }
102 
TEST(IsExcerptNode,True)103 TEST(IsExcerptNode, True)
104 {
105     EXPECT_TRUE(isExcerptNode(ChassisSubNode::environmentMetricsNode));
106     EXPECT_TRUE(isExcerptNode(ChassisSubNode::thermalMetricsNode));
107 }
108 
TEST(IsExcerptNode,False)109 TEST(IsExcerptNode, False)
110 {
111     EXPECT_FALSE(isExcerptNode(ChassisSubNode::sensorsNode));
112     EXPECT_FALSE(isExcerptNode(ChassisSubNode::powerNode));
113     EXPECT_FALSE(isExcerptNode(ChassisSubNode::thermalNode));
114     EXPECT_FALSE(isExcerptNode(ChassisSubNode::unknownNode));
115 }
116 
TEST(UpdateSensorStatistics,ParametersValid)117 TEST(UpdateSensorStatistics, ParametersValid)
118 {
119     nlohmann::json sensorJson;
120     Reading reading =
121         std::make_tuple("metricId1", "metadata1", 42.5, 1234567890);
122     Readings metrics = {reading};
123     Statistics statistics = std::make_tuple(1234567890, metrics);
124     SensorPaths sensorPaths;
125     ReadingParameters readingParams = {std::make_tuple(
126         sensorPaths,
127         "xyz.openbmc_project.Telemetry.Report.OperationType.Maximum",
128         "metricId1", 60)};
129 
130     updateSensorStatistics(sensorJson, statistics, readingParams);
131 
132     EXPECT_EQ(sensorJson["PeakReading"], 42.5);
133     EXPECT_EQ(sensorJson["PeakReadingTime"], 1234567890);
134 }
135 
TEST(UpdateSensorStatistics,EmptyMetrics)136 TEST(UpdateSensorStatistics, EmptyMetrics)
137 {
138     nlohmann::json sensorJson;
139     Readings metrics;
140     Statistics statistics = std::make_tuple(1234567890, metrics);
141     SensorPaths sensorPaths;
142     ReadingParameters readingParams = {std::make_tuple(
143         sensorPaths,
144         "xyz.openbmc_project.Telemetry.Report.OperationType.Maximum",
145         "metricId1", 60)};
146 
147     updateSensorStatistics(sensorJson, statistics, readingParams);
148 
149     EXPECT_FALSE(sensorJson.contains("PeakReading"));
150     EXPECT_FALSE(sensorJson.contains("PeakReadingTime"));
151 }
152 
TEST(UpdateSensorStatistics,NonMaximumOperationType)153 TEST(UpdateSensorStatistics, NonMaximumOperationType)
154 {
155     nlohmann::json sensorJson;
156     Reading reading =
157         std::make_tuple("metricId1", "metadata1", 42.5, 1234567890);
158     Readings metrics = {reading};
159     Statistics statistics = std::make_tuple(1234567890, metrics);
160     SensorPaths sensorPaths;
161     ReadingParameters readingParams = {std::make_tuple(
162         sensorPaths,
163         "xyz.openbmc_project.Telemetry.Report.OperationType.Minimum",
164         "metricId1", 60)};
165 
166     updateSensorStatistics(sensorJson, statistics, readingParams);
167 
168     EXPECT_FALSE(sensorJson.contains("PeakReading"));
169     EXPECT_FALSE(sensorJson.contains("PeakReadingTime"));
170 }
171 
TEST(UpdateSensorStatistics,ParamsNullopt)172 TEST(UpdateSensorStatistics, ParamsNullopt)
173 {
174     nlohmann::json sensorJson;
175     std::optional<Statistics> statistics = std::nullopt;
176     std::optional<ReadingParameters> readingParams = std::nullopt;
177 
178     updateSensorStatistics(sensorJson, statistics, readingParams);
179 
180     EXPECT_FALSE(sensorJson.contains("PeakReading"));
181     EXPECT_FALSE(sensorJson.contains("PeakReadingTime"));
182 }
183 
184 } // namespace
185 } // namespace redfish::sensor_utils
186