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 "stats_service_core_test.h"
17 #include "stats_log.h"
18
19 #include "battery_stats_core.h"
20 #include "battery_stats_service.h"
21
22 using namespace OHOS;
23 using namespace OHOS::PowerMgr;
24 using namespace std;
25 using namespace testing::ext;
26
27 namespace {
28 static sptr<BatteryStatsService> g_statsService = nullptr;
29 } // namespace
30
SetUpTestCase()31 void StatsServiceCoreTest::SetUpTestCase()
32 {
33 g_statsService = BatteryStatsService::GetInstance();
34 g_statsService->OnStart();
35 }
36
TearDownTestCase()37 void StatsServiceCoreTest::TearDownTestCase()
38 {
39 g_statsService->OnStop();
40 }
41
SetUp()42 void StatsServiceCoreTest::SetUp()
43 {
44 auto statsService = BatteryStatsService::GetInstance();
45 auto statsCore = statsService->GetBatteryStatsCore();
46 statsCore->Reset();
47 }
48
TearDown()49 void StatsServiceCoreTest::TearDown()
50 {
51 auto statsService = BatteryStatsService::GetInstance();
52 auto statsCore = statsService->GetBatteryStatsCore();
53 statsCore->Reset();
54 }
55
56 namespace {
57 /**
58 * @tc.name: StatsServiceCoreTest_001
59 * @tc.desc: test BatteryStatsCore function GetEntity
60 * @tc.type: FUNC
61 * @tc.require: issueI663DX
62 */
63 HWTEST_F (StatsServiceCoreTest, StatsServiceCoreTest_001, TestSize.Level0)
64 {
65 STATS_HILOGI(LABEL_TEST, "StatsServiceCoreTest_001 start");
66 auto statsService = BatteryStatsService::GetInstance();
67 auto statsCore = statsService->GetBatteryStatsCore();
68 EXPECT_EQ(nullptr, statsCore->GetEntity(BatteryStatsInfo::CONSUMPTION_TYPE_INVALID));
69 EXPECT_NE(nullptr, statsCore->GetEntity(BatteryStatsInfo::CONSUMPTION_TYPE_APP));
70 EXPECT_NE(nullptr, statsCore->GetEntity(BatteryStatsInfo::CONSUMPTION_TYPE_BLUETOOTH));
71 EXPECT_NE(nullptr, statsCore->GetEntity(BatteryStatsInfo::CONSUMPTION_TYPE_IDLE));
72 EXPECT_NE(nullptr, statsCore->GetEntity(BatteryStatsInfo::CONSUMPTION_TYPE_PHONE));
73 EXPECT_NE(nullptr, statsCore->GetEntity(BatteryStatsInfo::CONSUMPTION_TYPE_SCREEN));
74 EXPECT_NE(nullptr, statsCore->GetEntity(BatteryStatsInfo::CONSUMPTION_TYPE_USER));
75 EXPECT_NE(nullptr, statsCore->GetEntity(BatteryStatsInfo::CONSUMPTION_TYPE_WIFI));
76 EXPECT_NE(nullptr, statsCore->GetEntity(BatteryStatsInfo::CONSUMPTION_TYPE_CAMERA));
77 EXPECT_NE(nullptr, statsCore->GetEntity(BatteryStatsInfo::CONSUMPTION_TYPE_FLASHLIGHT));
78 EXPECT_NE(nullptr, statsCore->GetEntity(BatteryStatsInfo::CONSUMPTION_TYPE_AUDIO));
79 EXPECT_NE(nullptr, statsCore->GetEntity(BatteryStatsInfo::CONSUMPTION_TYPE_SENSOR));
80 EXPECT_NE(nullptr, statsCore->GetEntity(BatteryStatsInfo::CONSUMPTION_TYPE_GNSS));
81 EXPECT_NE(nullptr, statsCore->GetEntity(BatteryStatsInfo::CONSUMPTION_TYPE_CPU));
82 EXPECT_NE(nullptr, statsCore->GetEntity(BatteryStatsInfo::CONSUMPTION_TYPE_WAKELOCK));
83 EXPECT_NE(nullptr, statsCore->GetEntity(BatteryStatsInfo::CONSUMPTION_TYPE_ALARM));
84 STATS_HILOGI(LABEL_TEST, "StatsServiceCoreTest_001 end");
85 }
86
87 /**
88 * @tc.name: StatsServiceCoreTest_002
89 * @tc.desc: test BatteryStatsCore function update
90 * @tc.type: FUNC
91 * @tc.require: issueI663DX
92 */
93 HWTEST_F (StatsServiceCoreTest, StatsServiceCoreTest_002, TestSize.Level0)
94 {
95 STATS_HILOGI(LABEL_TEST, "StatsServiceCoreTest_002 start");
96 auto statsService = BatteryStatsService::GetInstance();
97 auto statsCore = statsService->GetBatteryStatsCore();
98 statsService->SetOnBattery(true);
99 int64_t time = 100;
100 int64_t data = 10;
101 statsCore->UpdateStats(StatsUtils::STATS_TYPE_WIFI_SCAN, time, data);
102 statsCore->UpdateStats(StatsUtils::STATS_TYPE_WAKELOCK_HOLD, time, data);
103 std::shared_ptr<BatteryStatsEntity> wifiEntity = statsCore->GetEntity(BatteryStatsInfo::CONSUMPTION_TYPE_WIFI);
104 EXPECT_EQ(data, wifiEntity->GetConsumptionCount(StatsUtils::STATS_TYPE_WIFI_SCAN));
105
106 statsCore->UpdateStats(StatsUtils::STATS_TYPE_WIFI_ON, StatsUtils::STATS_STATE_ACTIVATED);
107 usleep(SERVICE_POWER_CONSUMPTION_DURATION_US);
108 statsCore->UpdateStats(StatsUtils::STATS_TYPE_WIFI_SCAN, StatsUtils::STATS_STATE_DEACTIVATED);
109 usleep(SERVICE_POWER_CONSUMPTION_DURATION_US);
110 statsCore->UpdateStats(StatsUtils::STATS_TYPE_WIFI_ON, StatsUtils::STATS_STATE_DEACTIVATED);
111 EXPECT_GT(wifiEntity->GetActiveTimeMs(StatsUtils::STATS_TYPE_WIFI_ON),
112 ((2 * SERVICE_POWER_CONSUMPTION_DURATION_US) / 3) * 2 / US_PER_MS);
113 statsService->SetOnBattery(false);
114 STATS_HILOGI(LABEL_TEST, "StatsServiceCoreTest_002 end");
115 }
116
117 /**
118 * @tc.name: StatsServiceCoreTest_003
119 * @tc.desc: test BatteryStatsCore with entity is nullptr
120 * @tc.type: FUNC
121 * @tc.require: issueI663DX
122 */
123 HWTEST_F (StatsServiceCoreTest, StatsServiceCoreTest_003, TestSize.Level0)
124 {
125 STATS_HILOGI(LABEL_TEST, "StatsServiceCoreTest_003 start");
126 std::shared_ptr<BatteryStatsCore> statsCore = std::make_shared<BatteryStatsCore>();
127 std::string expectedDebugInfo;
128 expectedDebugInfo.append("BATTERY STATS DUMP:\n").append("\n");
129 std::string actualDebugInfo {};
130 statsCore->DumpInfo(actualDebugInfo);
131 auto index = actualDebugInfo.find(expectedDebugInfo);
132 EXPECT_TRUE(index != string::npos);
133 STATS_HILOGI(LABEL_TEST, "StatsServiceCoreTest_003 end");
134 }
135
136 /**
137 * @tc.name: StatsServiceCoreTest_004
138 * @tc.desc: test Entity Function
139 * @tc.type: FUNC
140 * @tc.require: issueI663DX
141 */
142 HWTEST_F (StatsServiceCoreTest, StatsServiceCoreTest_004, TestSize.Level0)
143 {
144 STATS_HILOGI(LABEL_TEST, "StatsServiceCoreTest_004 start");
145 auto statsService = BatteryStatsService::GetInstance();
146 auto statsCore = statsService->GetBatteryStatsCore();
147 int32_t uid = 1003;
148
149 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, statsCore->GetEntity(
150 BatteryStatsInfo::CONSUMPTION_TYPE_ALARM)->GetConsumptionCount(StatsUtils::STATS_TYPE_INVALID));
151 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, statsCore->GetEntity(
152 BatteryStatsInfo::CONSUMPTION_TYPE_ALARM)->GetEntityPowerMah());
153 EXPECT_EQ(nullptr, statsCore->GetEntity(
154 BatteryStatsInfo::CONSUMPTION_TYPE_ALARM)->GetOrCreateCounter(StatsUtils::STATS_TYPE_INVALID));
155
156 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, statsCore->GetEntity(
157 BatteryStatsInfo::CONSUMPTION_TYPE_AUDIO)->GetActiveTimeMs(uid, StatsUtils::STATS_TYPE_INVALID));
158 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, statsCore->GetEntity(
159 BatteryStatsInfo::CONSUMPTION_TYPE_AUDIO)->GetEntityPowerMah());
160 EXPECT_EQ(nullptr, statsCore->GetEntity(
161 BatteryStatsInfo::CONSUMPTION_TYPE_AUDIO)->GetOrCreateTimer(uid, StatsUtils::STATS_TYPE_INVALID));
162
163 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, statsCore->GetEntity(
164 BatteryStatsInfo::CONSUMPTION_TYPE_BLUETOOTH)->GetActiveTimeMs(uid, StatsUtils::STATS_TYPE_INVALID));
165 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, statsCore->GetEntity(
166 BatteryStatsInfo::CONSUMPTION_TYPE_BLUETOOTH)->GetActiveTimeMs(StatsUtils::STATS_TYPE_INVALID));
167 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, statsCore->GetEntity(
168 BatteryStatsInfo::CONSUMPTION_TYPE_BLUETOOTH)->GetEntityPowerMah());
169 EXPECT_EQ(nullptr, statsCore->GetEntity(
170 BatteryStatsInfo::CONSUMPTION_TYPE_BLUETOOTH)->GetOrCreateTimer(uid, StatsUtils::STATS_TYPE_INVALID));
171 EXPECT_EQ(nullptr, statsCore->GetEntity(
172 BatteryStatsInfo::CONSUMPTION_TYPE_BLUETOOTH)->GetOrCreateTimer(StatsUtils::STATS_TYPE_INVALID));
173
174 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, statsCore->GetEntity(
175 BatteryStatsInfo::CONSUMPTION_TYPE_CAMERA)->GetActiveTimeMs(uid, StatsUtils::STATS_TYPE_INVALID));
176 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, statsCore->GetEntity(
177 BatteryStatsInfo::CONSUMPTION_TYPE_CAMERA)->GetEntityPowerMah());
178 EXPECT_EQ(nullptr, statsCore->GetEntity(
179 BatteryStatsInfo::CONSUMPTION_TYPE_CAMERA)->GetOrCreateTimer(uid, StatsUtils::STATS_TYPE_INVALID));
180
181 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, statsCore->GetEntity(
182 BatteryStatsInfo::CONSUMPTION_TYPE_FLASHLIGHT)->GetActiveTimeMs(uid, StatsUtils::STATS_TYPE_INVALID));
183 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, statsCore->GetEntity(
184 BatteryStatsInfo::CONSUMPTION_TYPE_FLASHLIGHT)->GetEntityPowerMah());
185 EXPECT_EQ(nullptr, statsCore->GetEntity(
186 BatteryStatsInfo::CONSUMPTION_TYPE_FLASHLIGHT)->GetOrCreateTimer(uid, StatsUtils::STATS_TYPE_INVALID));
187
188 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, statsCore->GetEntity(
189 BatteryStatsInfo::CONSUMPTION_TYPE_GNSS)->GetActiveTimeMs(uid, StatsUtils::STATS_TYPE_INVALID));
190 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, statsCore->GetEntity(
191 BatteryStatsInfo::CONSUMPTION_TYPE_GNSS)->GetEntityPowerMah());
192 EXPECT_EQ(nullptr, statsCore->GetEntity(
193 BatteryStatsInfo::CONSUMPTION_TYPE_GNSS)->GetOrCreateTimer(uid, StatsUtils::STATS_TYPE_INVALID));
194 STATS_HILOGI(LABEL_TEST, "StatsServiceCoreTest_004 end");
195 }
196
197 /**
198 * @tc.name: StatsServiceCoreTest_005
199 * @tc.desc: test Entity Function
200 * @tc.type: FUNC
201 * @tc.require: issueI663DX
202 */
203 HWTEST_F (StatsServiceCoreTest, StatsServiceCoreTest_005, TestSize.Level0)
204 {
205 STATS_HILOGI(LABEL_TEST, "StatsServiceCoreTest_005 start");
206 auto statsService = BatteryStatsService::GetInstance();
207 auto statsCore = statsService->GetBatteryStatsCore();
208 int32_t uid = 1003;
209
210 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, statsCore->GetEntity(
211 BatteryStatsInfo::CONSUMPTION_TYPE_PHONE)->GetActiveTimeMs(StatsUtils::STATS_TYPE_INVALID));
212 EXPECT_EQ(nullptr, statsCore->GetEntity(
213 BatteryStatsInfo::CONSUMPTION_TYPE_PHONE)->GetOrCreateTimer(StatsUtils::STATS_TYPE_INVALID));
214
215 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, statsCore->GetEntity(
216 BatteryStatsInfo::CONSUMPTION_TYPE_SCREEN)->GetActiveTimeMs(StatsUtils::STATS_TYPE_INVALID));
217 EXPECT_EQ(nullptr, statsCore->GetEntity(
218 BatteryStatsInfo::CONSUMPTION_TYPE_SCREEN)->GetOrCreateTimer(StatsUtils::STATS_TYPE_INVALID));
219
220 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, statsCore->GetEntity(
221 BatteryStatsInfo::CONSUMPTION_TYPE_SENSOR)->GetActiveTimeMs(uid, StatsUtils::STATS_TYPE_INVALID));
222 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, statsCore->GetEntity(
223 BatteryStatsInfo::CONSUMPTION_TYPE_SENSOR)->GetEntityPowerMah());
224 EXPECT_EQ(nullptr, statsCore->GetEntity(
225 BatteryStatsInfo::CONSUMPTION_TYPE_SENSOR)->GetOrCreateTimer(uid, StatsUtils::STATS_TYPE_INVALID));
226
227 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, statsCore->GetEntity(
228 BatteryStatsInfo::CONSUMPTION_TYPE_USER)->GetEntityPowerMah());
229
230 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, statsCore->GetEntity(
231 BatteryStatsInfo::CONSUMPTION_TYPE_WAKELOCK)->GetActiveTimeMs(uid, StatsUtils::STATS_TYPE_INVALID));
232 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, statsCore->GetEntity(
233 BatteryStatsInfo::CONSUMPTION_TYPE_WAKELOCK)->GetEntityPowerMah());
234 EXPECT_EQ(nullptr, statsCore->GetEntity(
235 BatteryStatsInfo::CONSUMPTION_TYPE_WAKELOCK)->GetOrCreateTimer(uid, StatsUtils::STATS_TYPE_INVALID));
236
237 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, statsCore->GetEntity(
238 BatteryStatsInfo::CONSUMPTION_TYPE_WIFI)->GetActiveTimeMs(StatsUtils::STATS_TYPE_INVALID));
239 EXPECT_EQ(nullptr, statsCore->GetEntity(
240 BatteryStatsInfo::CONSUMPTION_TYPE_WIFI)->GetOrCreateTimer(StatsUtils::STATS_TYPE_INVALID));
241 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, statsCore->GetEntity(
242 BatteryStatsInfo::CONSUMPTION_TYPE_WIFI)->GetConsumptionCount(StatsUtils::STATS_TYPE_INVALID));
243 EXPECT_EQ(nullptr, statsCore->GetEntity(
244 BatteryStatsInfo::CONSUMPTION_TYPE_WIFI)->GetOrCreateCounter(StatsUtils::STATS_TYPE_INVALID));
245 STATS_HILOGI(LABEL_TEST, "StatsServiceCoreTest_005 end");
246 }
247
248 /**
249 * @tc.name: StatsServiceCoreTest_006
250 * @tc.desc: test Cpu and Idle Entity Function
251 * @tc.type: FUNC
252 * @tc.require: issueI663DX
253 */
254 HWTEST_F (StatsServiceCoreTest, StatsServiceCoreTest_006, TestSize.Level0)
255 {
256 STATS_HILOGI(LABEL_TEST, "StatsServiceCoreTest_006 start");
257 auto statsService = BatteryStatsService::GetInstance();
258 auto statsCore = statsService->GetBatteryStatsCore();
259 auto cpuEntity = statsCore->GetEntity(BatteryStatsInfo::CONSUMPTION_TYPE_CPU);
260 auto idleEntity = statsCore->GetEntity(BatteryStatsInfo::CONSUMPTION_TYPE_IDLE);
261 int32_t invalidUid = -1;
262 cpuEntity->Reset();
263 cpuEntity->UpdateCpuTime();
264 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, cpuEntity->GetCpuTimeMs(invalidUid));
265 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, cpuEntity->GetEntityPowerMah(invalidUid));
266 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, cpuEntity->GetStatsPowerMah(StatsUtils::STATS_TYPE_CPU_ACTIVE));
267 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, cpuEntity->GetStatsPowerMah(StatsUtils::STATS_TYPE_CPU_CLUSTER));
268 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, cpuEntity->GetStatsPowerMah(StatsUtils::STATS_TYPE_CPU_SPEED));
269 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, cpuEntity->GetStatsPowerMah(StatsUtils::STATS_TYPE_INVALID));
270
271 idleEntity->Reset();
272 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, idleEntity->GetActiveTimeMs(StatsUtils::STATS_TYPE_INVALID));
273 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, idleEntity->GetStatsPowerMah(StatsUtils::STATS_TYPE_PHONE_IDLE));
274 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, idleEntity->GetStatsPowerMah(StatsUtils::STATS_TYPE_CPU_SUSPEND));
275 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, idleEntity->GetStatsPowerMah(StatsUtils::STATS_TYPE_INVALID));
276 STATS_HILOGI(LABEL_TEST, "StatsServiceCoreTest_006 end");
277 }
278
279 /**
280 * @tc.name: StatsServiceCoreTest_007
281 * @tc.desc: test Uid Entity Function
282 * @tc.type: FUNC
283 * @tc.require: issueI663DX
284 */
285 HWTEST_F (StatsServiceCoreTest, StatsServiceCoreTest_007, TestSize.Level0)
286 {
287 STATS_HILOGI(LABEL_TEST, "StatsServiceCoreTest_007 start");
288 auto statsService = BatteryStatsService::GetInstance();
289 auto statsCore = statsService->GetBatteryStatsCore();
290 auto uidEntity = statsCore->GetEntity(BatteryStatsInfo::CONSUMPTION_TYPE_APP);
291 int32_t invalidUid = -1;
292 uidEntity->Reset();
293 uidEntity->UpdateUidMap(invalidUid);
294 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, uidEntity->GetStatsPowerMah(StatsUtils::STATS_TYPE_BLUETOOTH_BR_SCAN));
295 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, uidEntity->GetStatsPowerMah(StatsUtils::STATS_TYPE_BLUETOOTH_BLE_SCAN));
296 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, uidEntity->GetStatsPowerMah(StatsUtils::STATS_TYPE_CAMERA_ON));
297 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, uidEntity->GetStatsPowerMah(StatsUtils::STATS_TYPE_FLASHLIGHT_ON));
298 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, uidEntity->GetStatsPowerMah(StatsUtils::STATS_TYPE_GNSS_ON));
299 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, uidEntity->GetStatsPowerMah(StatsUtils::STATS_TYPE_SENSOR_GRAVITY_ON));
300 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, uidEntity->GetStatsPowerMah(StatsUtils::STATS_TYPE_SENSOR_PROXIMITY_ON));
301 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, uidEntity->GetStatsPowerMah(StatsUtils::STATS_TYPE_AUDIO_ON));
302 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, uidEntity->GetStatsPowerMah(StatsUtils::STATS_TYPE_WAKELOCK_HOLD));
303 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, uidEntity->GetStatsPowerMah(StatsUtils::STATS_TYPE_CPU_CLUSTER));
304 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, uidEntity->GetStatsPowerMah(StatsUtils::STATS_TYPE_CPU_SPEED));
305 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, uidEntity->GetStatsPowerMah(StatsUtils::STATS_TYPE_CPU_ACTIVE));
306 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, uidEntity->GetStatsPowerMah(StatsUtils::STATS_TYPE_ALARM));
307 EXPECT_EQ(StatsUtils::DEFAULT_VALUE, uidEntity->GetStatsPowerMah(StatsUtils::STATS_TYPE_INVALID));
308 STATS_HILOGI(LABEL_TEST, "StatsServiceCoreTest_007 end");
309 }
310 }