1 /*
2 * Copyright (c) 2023-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 <cmath>
17 #include <cstdio>
18 #include <fcntl.h>
19 #include <functional>
20 #include <gtest/gtest.h>
21 #include <mutex>
22 #include <securec.h>
23 #include <unistd.h>
24
25 #include "hdf_base.h"
26 #include "osal_time.h"
27 #include "v1_1/ifan_callback.h"
28 #include "v1_1/ithermal_callback.h"
29 #include "v1_1/ithermal_interface.h"
30 #include "v1_1/thermal_types.h"
31
32 using namespace OHOS::HDI;
33 using namespace OHOS::HDI::Thermal::V1_1;
34 using namespace testing::ext;
35
36 namespace {
37 int g_onFanDataEventCount = 0;
38 int g_onThermalDataEventCount = 0;
39 class ThermalCallbackMock : public IThermalCallback {
40 public:
~ThermalCallbackMock()41 virtual ~ThermalCallbackMock() {}
42 using ThermalEventCallback = std::function<int32_t(const HdfThermalCallbackInfo &event)>;
RegisterThermalEvent(const ThermalEventCallback &eventCb)43 static int32_t RegisterThermalEvent(const ThermalEventCallback &eventCb)
44 {
45 (void)eventCb;
46 return 0;
47 }
48 int32_t OnThermalDataEvent(const HdfThermalCallbackInfo &event) override
49 {
50 (void)event;
51 g_onThermalDataEventCount++;
52 return 0;
53 }
54 };
55
56 class FanCallbackMock : public IFanCallback {
57 public:
~FanCallbackMock()58 virtual ~FanCallbackMock() {}
59 using FanEventCallback = std::function<int32_t(const HdfThermalCallbackInfo &event)>;
RegisterFanEvent(const FanEventCallback &eventCb)60 static int32_t RegisterFanEvent(const FanEventCallback &eventCb)
61 {
62 (void)eventCb;
63 return 0;
64 }
65 int32_t OnFanDataEvent(const HdfThermalCallbackInfo &event) override
66 {
67 (void)event;
68 g_onFanDataEventCount++;
69 return 0;
70 }
71 };
72
73 sptr<IThermalInterface> g_thermalInterface = nullptr;
74 sptr<IThermalCallback> g_callback = new ThermalCallbackMock();
75 sptr<IFanCallback> g_fanCallback = new FanCallbackMock();
76 std::mutex g_mutex;
77
78 class HdfThermalHdiTestAdditional : public testing::Test {
79 public:
80 static void SetUpTestCase();
81 static void TearDownTestCase();
82 void SetUp();
83 void TearDown();
84 };
85
SetUpTestCase()86 void HdfThermalHdiTestAdditional::SetUpTestCase() { g_thermalInterface = IThermalInterface::Get(true); }
87
TearDownTestCase()88 void HdfThermalHdiTestAdditional::TearDownTestCase() {}
89
SetUp()90 void HdfThermalHdiTestAdditional::SetUp() {}
91
TearDown()92 void HdfThermalHdiTestAdditional::TearDown() {}
93
94 } // namespace
95
96 namespace {
97 /**
98 * @tc.number SUB_Powermgr_Thermal_SetCpuFreq_0200
99 * @tc.name testSetCpuFreq001
100 * @tc.desc Reliability of function(SetCpuFreq)
101 */
HWTEST_F(HdfThermalHdiTestAdditional, testSetCpuFreq001, Function | MediumTest | Level1)102 HWTEST_F(HdfThermalHdiTestAdditional, testSetCpuFreq001, Function | MediumTest | Level1)
103 {
104 int32_t cpuFreq = 1994100;
105 int32_t ret = 0;
106 int i = 0;
107 for (i = 0; i < 1000; i++) {
108 ret |= g_thermalInterface->SetCpuFreq(cpuFreq);
109 }
110 EXPECT_EQ(0, ret);
111 }
112 /**
113 * @tc.number SUB_Powermgr_Thermal_SetCpuFreq_0300
114 * @tc.name testSetCpuFreq002
115 * @tc.desc Test parameters with abnormal input
116 */
HWTEST_F(HdfThermalHdiTestAdditional, testSetCpuFreq002, Function | MediumTest | Level2)117 HWTEST_F(HdfThermalHdiTestAdditional, testSetCpuFreq002, Function | MediumTest | Level2)
118 {
119 int32_t cpuFreq = -1;
120 int32_t ret = g_thermalInterface->SetCpuFreq(cpuFreq);
121 EXPECT_NE(0, ret);
122 }
123 /**
124 * @tc.number SUB_Powermgr_Thermal_SetCpuFreq_0400
125 * @tc.name testSetCpuFreq003
126 * @tc.desc Test input param
127 */
HWTEST_F(HdfThermalHdiTestAdditional, testSetCpuFreq003, Function | MediumTest | Level1)128 HWTEST_F(HdfThermalHdiTestAdditional, testSetCpuFreq003, Function | MediumTest | Level1)
129 {
130 int32_t cpuFreq = 0x7fffffff;
131 int32_t ret = g_thermalInterface->SetCpuFreq(cpuFreq);
132 EXPECT_EQ(0, ret);
133 }
134 /**
135 * @tc.number SUB_Powermgr_Thermal_SetCpuFreq_0500
136 * @tc.name testSetCpuFreq004
137 * @tc.desc Test input param
138 */
HWTEST_F(HdfThermalHdiTestAdditional, testSetCpuFreq004, Function | MediumTest | Level1)139 HWTEST_F(HdfThermalHdiTestAdditional, testSetCpuFreq004, Function | MediumTest | Level1)
140 {
141 int32_t cpuFreq = 1024;
142 int32_t ret = g_thermalInterface->SetCpuFreq(cpuFreq);
143 EXPECT_EQ(0, ret);
144 }
145 /**
146 * @tc.number SUB_Powermgr_Thermal_SetCpuFreq_0600
147 * @tc.name testSetCpuFreq005
148 * @tc.desc Test parameters with abnormal input
149 */
HWTEST_F(HdfThermalHdiTestAdditional, testSetCpuFreq005, Function | MediumTest | Level2)150 HWTEST_F(HdfThermalHdiTestAdditional, testSetCpuFreq005, Function | MediumTest | Level2)
151 {
152 int32_t cpuFreq = 0;
153 int32_t ret = g_thermalInterface->SetCpuFreq(cpuFreq);
154 EXPECT_NE(0, ret);
155 }
156 /**
157 * @tc.number SUB_Powermgr_Thermal_SetGpuFreq_0200
158 * @tc.name testSetGpuFreq001
159 * @tc.desc Reliability of function(SetGpuFreq)
160 */
HWTEST_F(HdfThermalHdiTestAdditional, testSetGpuFreq001, Function | MediumTest | Level1)161 HWTEST_F(HdfThermalHdiTestAdditional, testSetGpuFreq001, Function | MediumTest | Level1)
162 {
163 int32_t gpuFreq = 1994100;
164 int32_t ret = 0;
165 int i = 0;
166 for (i = 0; i < 1000; i++) {
167 ret |= g_thermalInterface->SetGpuFreq(gpuFreq);
168 }
169 EXPECT_EQ(0, ret);
170 }
171 /**
172 * @tc.number SUB_Powermgr_Thermal_SetGpuFreq_0300
173 * @tc.name testSetGpuFreq002
174 * @tc.desc Test parameters with abnormal input
175 */
HWTEST_F(HdfThermalHdiTestAdditional, testSetGpuFreq002, Function | MediumTest | Level2)176 HWTEST_F(HdfThermalHdiTestAdditional, testSetGpuFreq002, Function | MediumTest | Level2)
177 {
178 int32_t gpuFreq = -1;
179 int32_t ret = g_thermalInterface->SetGpuFreq(gpuFreq);
180 EXPECT_NE(0, ret);
181 }
182 /**
183 * @tc.number SUB_Powermgr_Thermal_SetGpuFreq_0400
184 * @tc.name testSetGpuFreq003
185 * @tc.desc Test input param
186 */
HWTEST_F(HdfThermalHdiTestAdditional, testSetGpuFreq003, Function | MediumTest | Level1)187 HWTEST_F(HdfThermalHdiTestAdditional, testSetGpuFreq003, Function | MediumTest | Level1)
188 {
189 int32_t gpuFreq = 0x7fffffff;
190 int32_t ret = g_thermalInterface->SetGpuFreq(gpuFreq);
191 EXPECT_EQ(0, ret);
192 }
193 /**
194 * @tc.number SUB_Powermgr_Thermal_SetGpuFreq_0500
195 * @tc.name testSetGpuFreq004
196 * @tc.desc Test input param
197 */
HWTEST_F(HdfThermalHdiTestAdditional, testSetGpuFreq004, Function | MediumTest | Level1)198 HWTEST_F(HdfThermalHdiTestAdditional, testSetGpuFreq004, Function | MediumTest | Level1)
199 {
200 int32_t gpuFreq = 1024;
201 int32_t ret = g_thermalInterface->SetGpuFreq(gpuFreq);
202 EXPECT_EQ(0, ret);
203 }
204 /**
205 * @tc.number SUB_Powermgr_Thermal_SetGpuFreq_0600
206 * @tc.name testSetGpuFreq005
207 * @tc.desc Test parameters with abnormal input
208 */
HWTEST_F(HdfThermalHdiTestAdditional, testSetGpuFreq005, Function | MediumTest | Level2)209 HWTEST_F(HdfThermalHdiTestAdditional, testSetGpuFreq005, Function | MediumTest | Level2)
210 {
211 int32_t gpuFreq = 0;
212 int32_t ret = g_thermalInterface->SetGpuFreq(gpuFreq);
213 EXPECT_NE(0, ret);
214 }
215 /**
216 * @tc.number SUB_Powermgr_Thermal_SetBatteryCurrent_0200
217 * @tc.name testSetBatteryCurrent001
218 * @tc.desc Reliability of function(SetBatteryCurrent)
219 */
HWTEST_F(HdfThermalHdiTestAdditional, testSetBatteryCurrent001, Function | MediumTest | Level1)220 HWTEST_F(HdfThermalHdiTestAdditional, testSetBatteryCurrent001, Function | MediumTest | Level1)
221 {
222 int32_t ret = 0;
223 int32_t batteryCurrent = 1000;
224 int i = 0;
225 for (i = 0; i < 1000; i++) {
226 ret |= g_thermalInterface->SetBatteryCurrent(batteryCurrent);
227 }
228 EXPECT_EQ(0, ret);
229 }
230 /**
231 * @tc.number SUB_Powermgr_Thermal_SetBatteryCurrent_0300
232 * @tc.name testSetBatteryCurrent002
233 * @tc.desc Test parameters with abnormal input
234 */
HWTEST_F(HdfThermalHdiTestAdditional, testSetBatteryCurrent002, Function | MediumTest | Level2)235 HWTEST_F(HdfThermalHdiTestAdditional, testSetBatteryCurrent002, Function | MediumTest | Level2)
236 {
237 int32_t ret = 0;
238 int32_t batteryCurrent = -1;
239 ret = g_thermalInterface->SetBatteryCurrent(batteryCurrent);
240 EXPECT_NE(0, ret);
241 }
242 /**
243 * @tc.number SUB_Powermgr_Thermal_SetBatteryCurrent_0400
244 * @tc.name testSetBatteryCurrent003
245 * @tc.desc Test input param
246 */
HWTEST_F(HdfThermalHdiTestAdditional, testSetBatteryCurrent003, Function | MediumTest | Level1)247 HWTEST_F(HdfThermalHdiTestAdditional, testSetBatteryCurrent003, Function | MediumTest | Level1)
248 {
249 int32_t ret = 0;
250 int32_t batteryCurrent = 0x7fffffff;
251 ret = g_thermalInterface->SetBatteryCurrent(batteryCurrent);
252 EXPECT_EQ(0, ret);
253 }
254 /**
255 * @tc.number SUB_Powermgr_Thermal_SetBatteryCurrent_0500
256 * @tc.name testSetBatteryCurrent004
257 * @tc.desc Test input param
258 */
HWTEST_F(HdfThermalHdiTestAdditional, testSetBatteryCurrent004, Function | MediumTest | Level1)259 HWTEST_F(HdfThermalHdiTestAdditional, testSetBatteryCurrent004, Function | MediumTest | Level1)
260 {
261 int32_t ret = 0;
262 int32_t batteryCurrent = 1024;
263 ret = g_thermalInterface->SetBatteryCurrent(batteryCurrent);
264 EXPECT_EQ(0, ret);
265 }
266 /**
267 * @tc.number SUB_Powermgr_Thermal_SetBatteryCurrent_0600
268 * @tc.name testSetBatteryCurrent005
269 * @tc.desc Test input param
270 */
HWTEST_F(HdfThermalHdiTestAdditional, testSetBatteryCurrent005, Function | MediumTest | Level2)271 HWTEST_F(HdfThermalHdiTestAdditional, testSetBatteryCurrent005, Function | MediumTest | Level2)
272 {
273 int32_t ret = 0;
274 int32_t batteryCurrent = 0;
275 ret = g_thermalInterface->SetBatteryCurrent(batteryCurrent);
276 EXPECT_NE(0, ret);
277 }
278 /**
279 * @tc.number SUB_Powermgr_Thermal_GetThermalZoneInfo_0200
280 * @tc.name testGetThermalZoneInfo001
281 * @tc.desc Reliability of function(GetThermalZoneInfo)
282 */
HWTEST_F(HdfThermalHdiTestAdditional, testGetThermalZoneInfo001, Function | MediumTest | Level1)283 HWTEST_F(HdfThermalHdiTestAdditional, testGetThermalZoneInfo001, Function | MediumTest | Level1)
284 {
285 HdfThermalCallbackInfo event;
286 int i = 0;
287 int32_t ret = 0;
288 for (i = 0; i < 30; i++) {
289 ret |= g_thermalInterface->GetThermalZoneInfo(event);
290 }
291 EXPECT_EQ(0, ret);
292 }
293 /**
294 * @tc.number SUB_Powermgr_Thermal_IsolateCpu_0200
295 * @tc.name testIsolateCpu001
296 * @tc.desc Reliability of function(IsolateCpu)
297 */
HWTEST_F(HdfThermalHdiTestAdditional, testIsolateCpu001, Function | MediumTest | Level1)298 HWTEST_F(HdfThermalHdiTestAdditional, testIsolateCpu001, Function | MediumTest | Level1)
299 {
300 #ifdef PRODUCT_SUPPORT
301 int i = 0;
302 int32_t isolateNum = 2;
303 int32_t ret = 0;
304 for (i = 0; i < 1000; i++) {
305 ret |= g_thermalInterface->IsolateCpu(isolateNum);
306 }
307 EXPECT_EQ(0, ret);
308 #endif
309 }
310 /**
311 * @tc.number SUB_Powermgr_Thermal_IsolateCpu_0300
312 * @tc.name testIsolateCpu002
313 * @tc.desc Test parameters with abnormal input
314 */
HWTEST_F(HdfThermalHdiTestAdditional, testIsolateCpu002, Function | MediumTest | Level2)315 HWTEST_F(HdfThermalHdiTestAdditional, testIsolateCpu002, Function | MediumTest | Level2)
316 {
317 int32_t isolateNum = -1;
318 int32_t ret = g_thermalInterface->IsolateCpu(isolateNum);
319 EXPECT_NE(0, ret);
320 }
321 /**
322 * @tc.number SUB_Powermgr_Thermal_IsolateCpu_0400
323 * @tc.name testIsolateCpu003
324 * @tc.desc Test parameters with abnormal input
325 */
HWTEST_F(HdfThermalHdiTestAdditional, testIsolateCpu003, Function | MediumTest | Level2)326 HWTEST_F(HdfThermalHdiTestAdditional, testIsolateCpu003, Function | MediumTest | Level2)
327 {
328 int32_t isolateNum = 0;
329 int32_t ret = g_thermalInterface->IsolateCpu(isolateNum);
330 EXPECT_NE(0, ret);
331 }
332 /**
333 * @tc.number SUB_Powermgr_Thermal_IsolateCpu_0500
334 * @tc.name testIsolateCpu004
335 * @tc.desc Test input param
336 */
HWTEST_F(HdfThermalHdiTestAdditional, testIsolateCpu004, Function | MediumTest | Level1)337 HWTEST_F(HdfThermalHdiTestAdditional, testIsolateCpu004, Function | MediumTest | Level1)
338 {
339 #ifdef PRODUCT_SUPPORT
340 int32_t isolateNum = 0x7fffffff;
341 int32_t ret = g_thermalInterface->IsolateCpu(isolateNum);
342 EXPECT_EQ(0, ret);
343 #endif
344 }
345 /**
346 * @tc.number SUB_Powermgr_Thermal_IsolateCpu_0600
347 * @tc.name testIsolateCpu005
348 * @tc.desc Test input param
349 */
HWTEST_F(HdfThermalHdiTestAdditional, testIsolateCpu005, Function | MediumTest | Level1)350 HWTEST_F(HdfThermalHdiTestAdditional, testIsolateCpu005, Function | MediumTest | Level1)
351 {
352 #ifdef PRODUCT_SUPPORT
353 int32_t isolateNum = 3;
354 int32_t ret = g_thermalInterface->IsolateCpu(isolateNum);
355 EXPECT_EQ(0, ret);
356 #endif
357 }
358 /**
359 * @tc.number SUB_Powermgr_Thermal_Register_0200
360 * @tc.name testRegister001
361 * @tc.desc Reliability of function(Register)
362 */
HWTEST_F(HdfThermalHdiTestAdditional, testRegister001, Function | MediumTest | Level1)363 HWTEST_F(HdfThermalHdiTestAdditional, testRegister001, Function | MediumTest | Level1)
364 {
365 int i = 0;
366 int32_t ret = 0;
367 for (i = 0; i < 1000; i++) {
368 ret |= g_thermalInterface->Register(g_callback);
369 g_thermalInterface->Unregister();
370 }
371 EXPECT_EQ(0, ret);
372 }
373 /**
374 * @tc.number SUB_Powermgr_Thermal_Register_0200
375 * @tc.name testRegister002
376 * @tc.desc Test parameters with abnormal input
377 */
HWTEST_F(HdfThermalHdiTestAdditional, testRegister002, Function | MediumTest | Level2)378 HWTEST_F(HdfThermalHdiTestAdditional, testRegister002, Function | MediumTest | Level2)
379 {
380 int32_t ret;
381 ret = g_thermalInterface->Register(nullptr);
382 EXPECT_NE(0, ret);
383 }
384 /**
385 * @tc.number SUB_Powermgr_Thermal_Unregister_0200
386 * @tc.name testUnregister001
387 * @tc.desc Reliability of function(Unregister)
388 */
HWTEST_F(HdfThermalHdiTestAdditional, testUnregister001, Function | MediumTest | Level1)389 HWTEST_F(HdfThermalHdiTestAdditional, testUnregister001, Function | MediumTest | Level1)
390 {
391 int i = 0;
392 int32_t ret = 0;
393 for (i = 0; i < 1000; i++) {
394 g_thermalInterface->Register(g_callback);
395 ret |= g_thermalInterface->Unregister();
396 }
397 EXPECT_EQ(0, ret);
398 }
399 /**
400 * @tc.number SUB_Powermgr_Thermal_Unregister_0300
401 * @tc.name testUnregister002
402 * @tc.desc Test parameters with abnormal input
403 */
HWTEST_F(HdfThermalHdiTestAdditional, testUnregister002, Function | MediumTest | Level2)404 HWTEST_F(HdfThermalHdiTestAdditional, testUnregister002, Function | MediumTest | Level2)
405 {
406 int32_t ret = g_thermalInterface->Unregister();
407 EXPECT_NE(0, ret);
408 }
409 /**
410 * @tc.number SUB_Powermgr_Thermal_RegisterFanCallback_0200
411 * @tc.name testRegisterFanCallback001
412 * @tc.desc Reliability of function(RegisterFanCallback)
413 */
HWTEST_F(HdfThermalHdiTestAdditional, testRegisterFanCallback001, Function | MediumTest | Level1)414 HWTEST_F(HdfThermalHdiTestAdditional, testRegisterFanCallback001, Function | MediumTest | Level1)
415 {
416 int i = 0;
417 int32_t ret = 0;
418 for (i = 0; i < 1000; i++) {
419 ret |= g_thermalInterface->RegisterFanCallback(g_fanCallback);
420 g_thermalInterface->UnregisterFanCallback();
421 }
422 EXPECT_EQ(0, ret);
423 }
424 /**
425 * @tc.number SUB_Powermgr_Thermal_RegisterFanCallback_0300
426 * @tc.name testRegisterFanCallback002
427 * @tc.desc Test parameters with abnormal input
428 */
HWTEST_F(HdfThermalHdiTestAdditional, testRegisterFanCallback002, Function | MediumTest | Level2)429 HWTEST_F(HdfThermalHdiTestAdditional, testRegisterFanCallback002, Function | MediumTest | Level2)
430 {
431 int32_t ret = g_thermalInterface->RegisterFanCallback(nullptr);
432 EXPECT_NE(0, ret);
433 }
434 /**
435 * @tc.number SUB_Powermgr_Thermal_UnregisterFanCallback_0200
436 * @tc.name testUnregisterFanCallback001
437 * @tc.desc Test input param
438 */
HWTEST_F(HdfThermalHdiTestAdditional, testUnregisterFanCallback001, Function | MediumTest | Level1)439 HWTEST_F(HdfThermalHdiTestAdditional, testUnregisterFanCallback001, Function | MediumTest | Level1)
440 {
441 int i = 0;
442 int32_t ret = 0;
443 for (i = 0; i < 1000; i++) {
444 g_thermalInterface->RegisterFanCallback(g_fanCallback);
445 ret |= g_thermalInterface->UnregisterFanCallback();
446 }
447 EXPECT_EQ(0, ret);
448 }
449 /**
450 * @tc.number SUB_Powermgr_Thermal_UnregisterFanCallback_0300
451 * @tc.name testUnregisterFanCallback002
452 * @tc.desc Test parameters with abnormal input
453 */
HWTEST_F(HdfThermalHdiTestAdditional, testUnregisterFanCallback002, Function | MediumTest | Level2)454 HWTEST_F(HdfThermalHdiTestAdditional, testUnregisterFanCallback002, Function | MediumTest | Level2)
455 {
456 int32_t ret = g_thermalInterface->UnregisterFanCallback();
457 EXPECT_NE(0, ret);
458 }
459 /**
460 * @tc.number SUB_Powermgr_Thermal_OnThermalDataEvent_0100
461 * @tc.name testOnThermalDataEvent001
462 * @tc.desc Test callback
463 */
HWTEST_F(HdfThermalHdiTestAdditional, testOnThermalDataEvent001, Function | MediumTest | Level1)464 HWTEST_F(HdfThermalHdiTestAdditional, testOnThermalDataEvent001, Function | MediumTest | Level1)
465 {
466 int32_t ret = g_thermalInterface->Register(g_callback);
467 EXPECT_EQ(0, ret);
468 sleep(35);
469 EXPECT_EQ(true, (g_onThermalDataEventCount != 0));
470 g_thermalInterface->Unregister();
471 g_onThermalDataEventCount = 0;
472 }
473 /**
474 * @tc.number SUB_Powermgr_Thermal_OnThermalDataEvent_0200
475 * @tc.name testOnThermalDataEvent002
476 * @tc.desc Test callback
477 */
HWTEST_F(HdfThermalHdiTestAdditional, testOnThermalDataEvent002, Function | MediumTest | Level2)478 HWTEST_F(HdfThermalHdiTestAdditional, testOnThermalDataEvent002, Function | MediumTest | Level2)
479 {
480 sleep(35);
481 EXPECT_EQ(false, (g_onThermalDataEventCount != 0));
482 g_onThermalDataEventCount = 0;
483 }
484 } // namespace
485