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