• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }