1 /*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "thermal_config_sensor_cluster_test.h"
17
18 #ifdef THERMAL_GTEST
19 #define private public
20 #define protected public
21 #define final
22 #endif
23
24 #include <map>
25 #include <string>
26 #include <vector>
27
28 #include "config_policy_utils.h"
29 #include "power_mgr_client.h"
30 #include "thermal_config_sensor_cluster.h"
31 #include "thermal_log.h"
32 #include "thermal_service.h"
33
34 using namespace OHOS::PowerMgr;
35 using namespace OHOS;
36 using namespace testing::ext;
37 using namespace std;
38
39 namespace {
40 sptr<ThermalService> g_service = nullptr;
41 } // namespace
42
GetOneCfgFile(const char * pathSuffix,char * buf,unsigned int bufLength)43 char* GetOneCfgFile(const char *pathSuffix, char *buf, unsigned int bufLength)
44 {
45 THERMAL_HILOGI(LABEL_TEST, "mock GetOneCfgFile.");
46 return nullptr;
47 }
48
SetUpTestCase()49 void ThermalConfigSensorClusterTest::SetUpTestCase()
50 {
51 g_service = ThermalService::GetInstance();
52 g_service->InitSystemTestModules();
53 g_service->OnStart();
54 }
55
56 namespace {
57 /**
58 * @tc.name: ThermalConfigSensorClusterTest001
59 * @tc.desc: test CheckStandard
60 * @tc.type: FUNC
61 */
62 HWTEST_F(ThermalConfigSensorClusterTest, ThermalConfigSensorClusterTest001, TestSize.Level0)
63 {
64 THERMAL_HILOGI(LABEL_TEST, "ThermalConfigSensorClusterTest001 start.");
65
66 ThermalConfigSensorCluster cluster;
67 cluster.sensorInfolist_.clear();
68 EXPECT_FALSE(cluster.CheckStandard());
69
70 // The first for loop returns the value false
71 LevelItem item;
72 item.level = 2;
73 std::vector<LevelItem> vecLevel;
74 vecLevel.push_back(item);
75 cluster.sensorInfolist_["test"] = vecLevel;
76 EXPECT_FALSE(cluster.CheckStandard());
77
78 // continue
79 vecLevel.clear();
80 item.level = 1;
81 vecLevel.push_back(item);
82 cluster.sensorInfolist_["test"] = vecLevel;
83 std::vector<AuxLevelItem> auxLevel;
84 cluster.auxSensorInfolist_["test"] = auxLevel;
85 EXPECT_TRUE(cluster.CheckStandard());
86
87 // The second for loop returns the value false
88 AuxLevelItem auxItem;
89 auxLevel.push_back(auxItem);
90 auxLevel.push_back(auxItem);
91 cluster.auxSensorInfolist_["test"] = auxLevel;
92 EXPECT_FALSE(cluster.CheckStandard());
93
94 THERMAL_HILOGI(LABEL_TEST, "ThermalConfigSensorClusterTest001 end.");
95 }
96
97 /**
98 * @tc.name: ThermalConfigSensorClusterTest002
99 * @tc.desc: test UpdateThermalLevel
100 * @tc.type: FUNC
101 */
102 HWTEST_F(ThermalConfigSensorClusterTest, ThermalConfigSensorClusterTest002, TestSize.Level0)
103 {
104 THERMAL_HILOGI(LABEL_TEST, "ThermalConfigSensorClusterTest002 start.");
105
106 // Null data return
107 ThermalConfigSensorCluster cluster;
108 TypeTempMap typeTempInfo;
109 cluster.UpdateThermalLevel(typeTempInfo);
110 EXPECT_NE(cluster.latestLevel_, 1);
111
112 THERMAL_HILOGI(LABEL_TEST, "ThermalConfigSensorClusterTest002 end.");
113 }
114
115 /**
116 * @tc.name: ThermalConfigSensorClusterTest003
117 * @tc.desc: test AscJudgment if branch
118 * @tc.type: FUNC
119 */
120 HWTEST_F(ThermalConfigSensorClusterTest, ThermalConfigSensorClusterTest003, TestSize.Level0)
121 {
122 THERMAL_HILOGI(LABEL_TEST, "ThermalConfigSensorClusterTest003 start.");
123 // inner if branch (curTemp >= threshold)
124 LevelItem item1;
125 item1.threshold = 0;
126 LevelItem item2;
127 item2.threshold = 0;
128 item2.level = 999;
129 std::vector<LevelItem> levItems1;
130 levItems1.push_back(item1);
131 levItems1.push_back(item2);
132 int32_t curTemp = 1;
133 uint32_t level = 1;
134 ThermalConfigSensorCluster cluster;
135 cluster.AscJudgment(levItems1, curTemp, level);
136 EXPECT_EQ(level, item2.level);
137
138 const int32_t INDEX0 = 0;
139 const int32_t INDEX1 = 1;
140 // The break branch in the for loop
141 levItems1.at(INDEX1).threshold = 3;
142 level = 1;
143 cluster.AscJudgment(levItems1, curTemp, level);
144 EXPECT_NE(level, item2.level);
145
146 // inner else if branch (curTemp < thresholdClr)
147 levItems1.at(INDEX0).thresholdClr = 2;
148 levItems1.at(INDEX0).level = 999;
149 levItems1.at(INDEX1).threshold = 2;
150 levItems1.at(INDEX1).thresholdClr = 2;
151 level = 1;
152 cluster.AscJudgment(levItems1, curTemp, level);
153 EXPECT_EQ(level, levItems1.at(INDEX0).level - 1);
154 THERMAL_HILOGI(LABEL_TEST, "ThermalConfigSensorClusterTest003 end.");
155 }
156
157 /**
158 * @tc.name: ThermalConfigSensorClusterTest004
159 * @tc.desc: test AscJudgment else if branch
160 * @tc.type: FUNC
161 */
162 HWTEST_F(ThermalConfigSensorClusterTest, ThermalConfigSensorClusterTest004, TestSize.Level0)
163 {
164 THERMAL_HILOGI(LABEL_TEST, "ThermalConfigSensorClusterTest004 start.");
165
166 LevelItem item;
167 item.thresholdClr = 2;
168 item.level = 999;
169 std::vector<LevelItem> levItems;
170 levItems.push_back(item);
171 int32_t curTemp = 1;
172 uint32_t level = 1;
173 ThermalConfigSensorCluster cluster;
174 cluster.AscJudgment(levItems, curTemp, level);
175 EXPECT_EQ(level, item.level - 1);
176
177 THERMAL_HILOGI(LABEL_TEST, "ThermalConfigSensorClusterTest004 end.");
178 }
179
180 /**
181 * @tc.name: ThermalConfigSensorClusterTest005
182 * @tc.desc: test AscJudgment else branch
183 * @tc.type: FUNC
184 */
185 HWTEST_F(ThermalConfigSensorClusterTest, ThermalConfigSensorClusterTest005, TestSize.Level0)
186 {
187 THERMAL_HILOGI(LABEL_TEST, "ThermalConfigSensorClusterTest005 start.");
188
189 LevelItem item;
190 item.threshold = 1;
191 item.level = 999;
192 std::vector<LevelItem> levItems;
193 levItems.push_back(item);
194 levItems.push_back(item);
195 int32_t curTemp = 1;
196 uint32_t level = 0;
197 ThermalConfigSensorCluster cluster;
198 cluster.AscJudgment(levItems, curTemp, level);
199 EXPECT_EQ(level, item.level);
200
201 THERMAL_HILOGI(LABEL_TEST, "ThermalConfigSensorClusterTest005 end.");
202 }
203
204 /**
205 * @tc.name: ThermalConThermalConfigSensorClusterTest006
206 * @tc.desc: test DescJudgment if branch
207 * @tc.type: FUNC
208 */
209 HWTEST_F(ThermalConfigSensorClusterTest, ThermalConfigSensorClusterTest006, TestSize.Level0)
210 {
211 THERMAL_HILOGI(LABEL_TEST, "ThermalConfigSensorClusterTest006 start.");
212 // inner if branch (curTemp <= nextUptemp)
213 LevelItem item1;
214 item1.threshold = 1;
215 LevelItem item2;
216 item2.threshold = 1;
217 item2.level = 999;
218 std::vector<LevelItem> levItems;
219 levItems.push_back(item1);
220 levItems.push_back(item2);
221 int32_t curTemp = 1;
222 uint32_t level = 1;
223 ThermalConfigSensorCluster cluster;
224 cluster.DescJudgment(levItems, curTemp, level);
225 EXPECT_EQ(level, item2.level);
226
227 const int32_t INDEX0 = 0;
228 const int32_t INDEX1 = 1;
229 // inner else if branch (curTemp > curDownTemp)
230 levItems.at(INDEX0).thresholdClr = 0;
231 levItems.at(INDEX0).level = 999;
232 levItems.at(INDEX1).threshold = 0;
233 levItems.at(INDEX1).thresholdClr = 0;
234 level = 1;
235 cluster.DescJudgment(levItems, curTemp, level);
236 EXPECT_EQ(level, levItems.at(INDEX0).level - 1);
237 THERMAL_HILOGI(LABEL_TEST, "ThermalConfigSensorClusterTest006 end.");
238 }
239
240 /**
241 * @tc.name: ThermalConfigSensorClusterTest007
242 * @tc.desc: test DescJudgment else if branch
243 * @tc.type: FUNC
244 */
245 HWTEST_F(ThermalConfigSensorClusterTest, ThermalConfigSensorClusterTest007, TestSize.Level0)
246 {
247 THERMAL_HILOGI(LABEL_TEST, "ThermalConfigSensorClusterTest007 start.");
248
249 LevelItem item;
250 item.thresholdClr = 2;
251 item.level = 999;
252 std::vector<LevelItem> levItems;
253 levItems.push_back(item);
254 int32_t curTemp = 3;
255 uint32_t level = 1;
256 ThermalConfigSensorCluster cluster;
257 cluster.DescJudgment(levItems, curTemp, level);
258 EXPECT_EQ(level, item.level - 1);
259
260 THERMAL_HILOGI(LABEL_TEST, "ThermalConfigSensorClusterTest007 end.");
261 }
262
263 /**
264 * @tc.name: ThermalConfigSensorClusterTest008
265 * @tc.desc: test DescJudgment else branch
266 * @tc.type: FUNC
267 */
268 HWTEST_F(ThermalConfigSensorClusterTest, ThermalConfigSensorClusterTest008, TestSize.Level0)
269 {
270 THERMAL_HILOGI(LABEL_TEST, "ThermalConfigSensorClusterTest008 start.");
271
272 LevelItem item;
273 item.threshold = 2;
274 item.level = 999;
275 std::vector<LevelItem> levItems;
276 levItems.push_back(item);
277 levItems.push_back(item);
278 int32_t curTemp = 2;
279 uint32_t level = 0;
280 ThermalConfigSensorCluster cluster;
281 cluster.DescJudgment(levItems, curTemp, level);
282 EXPECT_EQ(level, item.level);
283
284 THERMAL_HILOGI(LABEL_TEST, "ThermalConfigSensorClusterTest008 end.");
285 }
286
287 /**
288 * @tc.name: ThermalConfigSensorClusterTest009
289 * @tc.desc: test IsAuxSensorTrigger
290 * @tc.type: FUNC
291 */
292 HWTEST_F(ThermalConfigSensorClusterTest, ThermalConfigSensorClusterTest009, TestSize.Level0)
293 {
294 THERMAL_HILOGI(LABEL_TEST, "ThermalConfigSensorClusterTest009 start.");
295
296 TypeTempMap typeTempInfo;
297 uint32_t level = 0;
298 ThermalConfigSensorCluster cluster;
299 // Returns true when level = 0
300 EXPECT_TRUE(cluster.IsAuxSensorTrigger(typeTempInfo, level));
301
302 // No matching item is found
303 std::vector<AuxLevelItem> auxLevel;
304 cluster.auxSensorInfolist_["test1"] = auxLevel;
305 level = 1;
306 EXPECT_TRUE(cluster.IsAuxSensorTrigger(typeTempInfo, level));
307 EXPECT_NE(level, 0);
308
309 AuxLevelItem item;
310 item.lowerTemp = 1;
311 item.upperTemp = 1;
312 auxLevel.push_back(item);
313 cluster.auxSensorInfolist_["test1"] = auxLevel;
314 cluster.auxSensorInfolist_["test"] = auxLevel;
315 cluster.auxSensorInfolist_["test2"] = auxLevel;
316 typeTempInfo["test"] = 1; // The range is lowerTemp and upperTemp
317 typeTempInfo["test2"] = 5; // The range is not lowerTemp or upperTemp
318 level = 1;
319 EXPECT_FALSE(cluster.IsAuxSensorTrigger(typeTempInfo, level));
320 EXPECT_EQ(level, 0);
321
322 THERMAL_HILOGI(LABEL_TEST, "ThermalConfigSensorClusterTest009 end.");
323 }
324
325 /**
326 * @tc.name: ThermalConfigSensorClusterTest010
327 * @tc.desc: test IsTempRateTrigger rateMap and sensorInfolist_ No match
328 * @tc.type: FUNC
329 */
330 HWTEST_F(ThermalConfigSensorClusterTest, ThermalConfigSensorClusterTest010, TestSize.Level0)
331 {
332 THERMAL_HILOGI(LABEL_TEST, "ThermalConfigSensorClusterTest010 start.");
333 g_service->RegisterThermalHdiCallback();
334 ThermalConfigSensorCluster cluster;
335 std::vector<LevelItem> vecLevel;
336 cluster.sensorInfolist_["test"] = vecLevel;
337 uint32_t level = 2;
338 EXPECT_TRUE(cluster.IsTempRateTrigger(level));
339
340 // continue
341 auto& rateMap = g_service->serviceSubscriber_->sensorsRateMap_;
342 rateMap["test"] = 3.14;
343 LevelItem item1;
344 item1.level = 1;
345 LevelItem item2;
346 item2.level = 2;
347 item2.tempRiseRate = 2.14;
348 vecLevel.push_back(item1);
349 vecLevel.push_back(item2);
350 cluster.sensorInfolist_["test"] = vecLevel;
351 EXPECT_TRUE(cluster.IsTempRateTrigger(level));
352
353 // false is returned if the condition is not met
354 vecLevel.clear();
355 item1.level = 2;
356 item1.tempRiseRate = 4.14;
357 vecLevel.push_back(item1);
358 cluster.sensorInfolist_["test"] = vecLevel;
359 EXPECT_FALSE(cluster.IsTempRateTrigger(level));
360 EXPECT_EQ(level, 0);
361 THERMAL_HILOGI(LABEL_TEST, "ThermalConfigSensorClusterTest010 end.");
362 }
363 } // namespace