1 /*
2  * Copyright (c) 2022-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 "stats_util_test.h"
17 #include "stats_log.h"
18 
19 #include "battery_stats_parser.h"
20 #include "stats_helper.h"
21 #include "stats_hisysevent.h"
22 #include "stats_utils.h"
23 
24 using namespace testing::ext;
25 using namespace OHOS::PowerMgr;
26 using namespace std;
27 
SetUpTestCase()28 void StatsUtilTest::SetUpTestCase()
29 {
30 }
31 
TearDownTestCase()32 void StatsUtilTest::TearDownTestCase()
33 {
34 }
35 
SetUp()36 void StatsUtilTest::SetUp()
37 {
38     StatsHelper::SetOnBattery(true);
39 }
40 
TearDown()41 void StatsUtilTest::TearDown()
42 {
43     StatsHelper::SetOnBattery(false);
44 }
45 
46 namespace {
47 /**
48  * @tc.name: StatsHiSysEvent_001
49  * @tc.desc: test StatsHiSysEvent function
50  * @tc.type: FUNC
51  * @tc.require: issueI5X13X
52  */
HWTEST_F(StatsUtilTest, StatsHiSysEvent_001, TestSize.Level0)53 HWTEST_F (StatsUtilTest, StatsHiSysEvent_001, TestSize.Level0)
54 {
55     STATS_HILOGI(LABEL_TEST, "StatsHiSysEvent_001 start");
56     EXPECT_TRUE(StatsHiSysEvent::CheckHiSysEvent(StatsHiSysEvent::POWER_RUNNINGLOCK));
57     EXPECT_FALSE(StatsHiSysEvent::CheckHiSysEvent("POWER_RUNNINGLOCK_WRONG"));
58     STATS_HILOGI(LABEL_TEST, "StatsHiSysEvent_001 end");
59 }
60 
61 /**
62  * @tc.name: StatsUtils_001
63  * @tc.desc: test class StatsUtils ConvertStatsType function
64  * @tc.type: FUNC
65  * @tc.require: issueI5X13X
66  */
HWTEST_F(StatsUtilTest, StatsUtils_001, TestSize.Level0)67 HWTEST_F (StatsUtilTest, StatsUtils_001, TestSize.Level0)
68 {
69     STATS_HILOGI(LABEL_TEST, "StatsUtils_001 start");
70     EXPECT_EQ("", StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_INVALID));
71     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_BLUETOOTH_BR_ON),
72         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_BLUETOOTH_BR_ON));
73     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_BLUETOOTH_BR_SCAN),
74         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_BLUETOOTH_BR_SCAN));
75     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_BLUETOOTH_BLE_ON),
76         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_BLUETOOTH_BLE_ON));
77     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_BLUETOOTH_BLE_SCAN),
78         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_BLUETOOTH_BLE_SCAN));
79     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_WIFI_ON),
80         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_WIFI_ON));
81     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_WIFI_SCAN),
82         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_WIFI_SCAN));
83     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_PHONE_ACTIVE),
84         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_PHONE_ACTIVE));
85     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_PHONE_DATA),
86         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_PHONE_DATA));
87     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_BATTERY),
88         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_BATTERY));
89     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_WORKSCHEDULER),
90         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_WORKSCHEDULER));
91     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_THERMAL),
92         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_THERMAL));
93     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_DISTRIBUTEDSCHEDULER),
94         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_DISTRIBUTEDSCHEDULER));
95     STATS_HILOGI(LABEL_TEST, "StatsUtils_001 end");
96 }
97 
98 /**
99  * @tc.name: StatsUtils_002
100  * @tc.desc: test class StatsUtils ConvertStatsType function
101  * @tc.type: FUNC
102  * @tc.require: issueI5X13X
103  */
HWTEST_F(StatsUtilTest, StatsUtils_002, TestSize.Level0)104 HWTEST_F (StatsUtilTest, StatsUtils_002, TestSize.Level0)
105 {
106     STATS_HILOGI(LABEL_TEST, "StatsUtils_002 start");
107     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_CAMERA_ON),
108         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_CAMERA_ON));
109     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_CAMERA_FLASHLIGHT_ON),
110         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_CAMERA_FLASHLIGHT_ON));
111     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_FLASHLIGHT_ON),
112         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_FLASHLIGHT_ON));
113     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_GNSS_ON),
114         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_GNSS_ON));
115     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_SENSOR_GRAVITY_ON),
116         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_SENSOR_GRAVITY_ON));
117     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_SENSOR_PROXIMITY_ON),
118         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_SENSOR_PROXIMITY_ON));
119     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_AUDIO_ON),
120         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_AUDIO_ON));
121     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_SCREEN_ON),
122         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_SCREEN_ON));
123     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_SCREEN_BRIGHTNESS),
124         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_SCREEN_BRIGHTNESS));
125     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_ALARM),
126         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_ALARM));
127     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_WAKELOCK_HOLD),
128         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_WAKELOCK_HOLD));
129     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_PHONE_IDLE),
130         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_PHONE_IDLE));
131     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_CPU_CLUSTER),
132         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_CPU_CLUSTER));
133     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_CPU_SPEED),
134         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_CPU_SPEED));
135     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_CPU_ACTIVE),
136         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_CPU_ACTIVE));
137     EXPECT_EQ(GET_VARIABLE_NAME(STATS_TYPE_CPU_SUSPEND),
138         StatsUtils::ConvertStatsType(StatsUtils::StatsType::STATS_TYPE_CPU_SUSPEND));
139     STATS_HILOGI(LABEL_TEST, "StatsUtils_002 end");
140 }
141 
142 /**
143  * @tc.name: StatsHelper_001
144  * @tc.desc: test class ActiveTimer function
145  * @tc.type: FUNC
146  * @tc.require: issueI5X13X
147  */
HWTEST_F(StatsUtilTest, StatsHelper_001, TestSize.Level0)148 HWTEST_F (StatsUtilTest, StatsHelper_001, TestSize.Level0)
149 {
150     STATS_HILOGI(LABEL_TEST, "StatsHelper_001 start");
151     int64_t activeTimeMs = StatsUtils::DEFAULT_VALUE;
152     int64_t devTimeMs = StatsUtils::DEFAULT_VALUE;
153     std::shared_ptr<StatsHelper::ActiveTimer> timer = std::make_shared<StatsHelper::ActiveTimer>();
154     EXPECT_TRUE(timer != nullptr);
155 
156     timer->StartRunning();
157     usleep(TIMER_DURATION_MS * US_PER_MS);
158     timer->StopRunning();
159     activeTimeMs = timer->GetRunningTimeMs();
160     devTimeMs = abs(activeTimeMs - TIMER_DURATION_MS);
161     EXPECT_LE(devTimeMs, DEVIATION_TIMER_THRESHOLD);
162 
163     int64_t addTimeMs = 20;
164     timer->AddRunningTimeMs(addTimeMs);
165     activeTimeMs = timer->GetRunningTimeMs();
166     devTimeMs = abs(activeTimeMs - TIMER_DURATION_MS - addTimeMs);
167     EXPECT_LE(devTimeMs, DEVIATION_TIMER_THRESHOLD);
168 
169     timer->AddRunningTimeMs(StatsUtils::DEFAULT_VALUE);
170     EXPECT_EQ(timer->GetRunningTimeMs(), activeTimeMs);
171 
172     timer->Reset();
173     activeTimeMs = timer->GetRunningTimeMs();
174     EXPECT_EQ(activeTimeMs, StatsUtils::DEFAULT_VALUE);
175     STATS_HILOGI(LABEL_TEST, "StatsHelper_001 end");
176 }
177 
178 /**
179  * @tc.name: StatsHelper_002
180  * @tc.desc: test class ActiveTimer function
181  * @tc.type: FUNC
182  * @tc.require: issueI5X13X
183  */
HWTEST_F(StatsUtilTest, StatsHelper_002, TestSize.Level0)184 HWTEST_F (StatsUtilTest, StatsHelper_002, TestSize.Level0)
185 {
186     STATS_HILOGI(LABEL_TEST, "StatsHelper_002 start");
187     int64_t activeTimeMs = StatsUtils::DEFAULT_VALUE;
188     int64_t devTimeMs = StatsUtils::DEFAULT_VALUE;
189     std::shared_ptr<StatsHelper::ActiveTimer> timer = std::make_shared<StatsHelper::ActiveTimer>();
190     EXPECT_TRUE(timer != nullptr);
191 
192     timer->StartRunning();
193     usleep(TIMER_DURATION_MS * US_PER_MS);
194     activeTimeMs = timer->GetRunningTimeMs();
195     devTimeMs = abs(activeTimeMs - TIMER_DURATION_MS);
196     EXPECT_LE(devTimeMs, DEVIATION_TIMER_THRESHOLD);
197     timer->StopRunning();
198 
199     timer->Reset();
200     activeTimeMs = timer->GetRunningTimeMs();
201     EXPECT_EQ(activeTimeMs, StatsUtils::DEFAULT_VALUE);
202     STATS_HILOGI(LABEL_TEST, "StatsHelper_002 end");
203 }
204 
205 /**
206  * @tc.name: StatsHelper_003
207  * @tc.desc: test class ActiveTimer function
208  * @tc.type: FUNC
209  * @tc.require: issueI5X13X
210  */
HWTEST_F(StatsUtilTest, StatsHelper_003, TestSize.Level0)211 HWTEST_F (StatsUtilTest, StatsHelper_003, TestSize.Level0)
212 {
213     STATS_HILOGI(LABEL_TEST, "StatsHelper_003 start");
214     int64_t activeTimeMs = StatsUtils::DEFAULT_VALUE;
215     int64_t devTimeMs = StatsUtils::DEFAULT_VALUE;
216     std::shared_ptr<StatsHelper::ActiveTimer> timer = std::make_shared<StatsHelper::ActiveTimer>();
217     EXPECT_TRUE(timer != nullptr);
218 
219     StatsHelper::SetOnBattery(false);
220     EXPECT_FALSE(StatsHelper::IsOnBattery());
221     timer->StartRunning();
222     usleep(TIMER_DURATION_MS * US_PER_MS);
223     StatsHelper::SetOnBattery(true);
224     EXPECT_TRUE(StatsHelper::IsOnBattery());
225     usleep(TIMER_DURATION_MS * US_PER_MS);
226     timer->StopRunning();
227 
228     activeTimeMs = timer->GetRunningTimeMs();
229     devTimeMs = abs(activeTimeMs - TIMER_DURATION_MS);
230     EXPECT_LE(devTimeMs, DEVIATION_TIMER_THRESHOLD);
231 
232     timer->Reset();
233     activeTimeMs = timer->GetRunningTimeMs();
234     EXPECT_EQ(activeTimeMs, StatsUtils::DEFAULT_VALUE);
235     STATS_HILOGI(LABEL_TEST, "StatsHelper_003 end");
236 }
237 
238 /**
239  * @tc.name: StatsHelper_004
240  * @tc.desc: test class Counter function
241  * @tc.type: FUNC
242  * @tc.require: issueI5X13X
243  */
HWTEST_F(StatsUtilTest, StatsHelper_004, TestSize.Level0)244 HWTEST_F (StatsUtilTest, StatsHelper_004, TestSize.Level0)
245 {
246     STATS_HILOGI(LABEL_TEST, "StatsHelper_004 start");
247     int64_t activeCount = StatsUtils::DEFAULT_VALUE;
248     int64_t addCount = 20;
249     std::shared_ptr<StatsHelper::Counter> counter = std::make_shared<StatsHelper::Counter>();
250     EXPECT_TRUE(counter != nullptr);
251 
252     StatsHelper::SetOnBattery(false);
253     EXPECT_FALSE(StatsHelper::IsOnBattery());
254     counter->AddCount(addCount);
255     counter->AddCount(StatsUtils::DEFAULT_VALUE);
256     StatsHelper::SetOnBattery(true);
257     EXPECT_TRUE(StatsHelper::IsOnBattery());
258     counter->AddCount(addCount);
259 
260     activeCount = counter->GetCount();
261     EXPECT_EQ(activeCount, addCount);
262 
263     counter->Reset();
264     activeCount = counter->GetCount();
265     EXPECT_EQ(activeCount, StatsUtils::DEFAULT_VALUE);
266     STATS_HILOGI(LABEL_TEST, "StatsHelper_004 end");
267 }
268 
269 /**
270  * @tc.name: StatsHelper_005
271  * @tc.desc: test class Counter function
272  * @tc.type: FUNC
273  * @tc.require: issueI5X13X
274  */
HWTEST_F(StatsUtilTest, StatsHelper_005, TestSize.Level0)275 HWTEST_F (StatsUtilTest, StatsHelper_005, TestSize.Level0)
276 {
277     STATS_HILOGI(LABEL_TEST, "StatsHelper_005 start");
278     StatsHelper::SetOnBattery(false);
279     EXPECT_FALSE(StatsHelper::IsOnBattery());
280     StatsHelper::SetScreenOff(false);
281     EXPECT_FALSE(StatsHelper::IsOnBatteryScreenOff());
282 
283     StatsHelper::SetOnBattery(false);
284     EXPECT_FALSE(StatsHelper::IsOnBattery());
285     StatsHelper::SetScreenOff(true);
286     EXPECT_FALSE(StatsHelper::IsOnBatteryScreenOff());
287 
288     StatsHelper::SetOnBattery(true);
289     EXPECT_TRUE(StatsHelper::IsOnBattery());
290     StatsHelper::SetScreenOff(false);
291     EXPECT_FALSE(StatsHelper::IsOnBatteryScreenOff());
292 
293     StatsHelper::SetOnBattery(true);
294     EXPECT_TRUE(StatsHelper::IsOnBattery());
295     StatsHelper::SetScreenOff(true);
296     EXPECT_TRUE(StatsHelper::IsOnBatteryScreenOff());
297 
298     StatsHelper::SetScreenOff(false);
299     STATS_HILOGI(LABEL_TEST, "StatsHelper_005 end");
300 }
301 
302 /**
303  * @tc.name: StatsHelper_006
304  * @tc.desc: test class Counter function
305  * @tc.type: FUNC
306  * @tc.require: issueI5X13X
307  */
HWTEST_F(StatsUtilTest, StatsHelper_006, TestSize.Level0)308 HWTEST_F (StatsUtilTest, StatsHelper_006, TestSize.Level0)
309 {
310     STATS_HILOGI(LABEL_TEST, "StatsHelper_006 start");
311     int64_t timeMs = StatsUtils::DEFAULT_VALUE;
312     int64_t durationTimeMs = StatsUtils::DEFAULT_VALUE;
313     int64_t devTimeMs = StatsUtils::DEFAULT_VALUE;
314     StatsHelper::SetOnBattery(false);
315     EXPECT_FALSE(StatsHelper::IsOnBattery());
316     timeMs = StatsHelper::GetOnBatteryUpTimeMs();
317     usleep(TIMER_DURATION_MS * US_PER_MS);
318     durationTimeMs = abs(StatsHelper::GetOnBatteryUpTimeMs() - timeMs);
319     EXPECT_EQ(durationTimeMs, 0);
320 
321     StatsHelper::SetOnBattery(true);
322     EXPECT_TRUE(StatsHelper::IsOnBattery());
323     timeMs = StatsHelper::GetOnBatteryUpTimeMs();
324     usleep(TIMER_DURATION_MS * US_PER_MS);
325     durationTimeMs = abs(StatsHelper::GetOnBatteryUpTimeMs() - timeMs);
326     devTimeMs = abs(durationTimeMs - TIMER_DURATION_MS);
327     EXPECT_LE(devTimeMs, DEVIATION_TIMER_THRESHOLD);
328     STATS_HILOGI(LABEL_TEST, "StatsHelper_006 end");
329 }
330 
331 /**
332  * @tc.name: StatsParserTest_001
333  * @tc.desc: test Init
334  * @tc.type: FUNC
335  */
HWTEST_F(StatsUtilTest, StatsParserTest_001, TestSize.Level0)336 HWTEST_F (StatsUtilTest, StatsParserTest_001, TestSize.Level0)
337 {
338     STATS_HILOGI(LABEL_TEST, "StatsParserTest_001 start");
339     auto parser = std::make_shared<BatteryStatsParser>();
340     EXPECT_TRUE(parser != nullptr);
341     bool ret = parser->Init();
342     EXPECT_TRUE(ret);
343     STATS_HILOGI(LABEL_TEST, "StatsParserTest_001 end");
344 }
345 }