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_alarm_test.h"
17 #include "stats_log.h"
18
19 #include <hisysevent.h>
20
21 #include "battery_stats_client.h"
22 #include "stats_hisysevent.h"
23
24 using namespace testing::ext;
25 using namespace OHOS::HiviewDFX;
26 using namespace OHOS::PowerMgr;
27 using namespace std;
28
SetUpTestCase()29 void StatsAlarmTest::SetUpTestCase()
30 {
31 ParserAveragePowerFile();
32 system("hidumper -s 3302 -a -u");
33 }
34
TearDownTestCase()35 void StatsAlarmTest::TearDownTestCase()
36 {
37 system("hidumper -s 3302 -a -r");
38 }
39
SetUp()40 void StatsAlarmTest::SetUp()
41 {
42 auto& statsClient = BatteryStatsClient::GetInstance();
43 statsClient.SetOnBattery(true);
44 }
45
TearDown()46 void StatsAlarmTest::TearDown()
47 {
48 auto& statsClient = BatteryStatsClient::GetInstance();
49 statsClient.SetOnBattery(false);
50 }
51
52 namespace {
53 /**
54 * @tc.name: StatsAlarmTest_001
55 * @tc.desc: test Reset function(Alarm)
56 * @tc.type: FUNC
57 * @tc.require: issueI5OKAY
58 */
HWTEST_F(StatsAlarmTest, StatsAlarmTest_001, TestSize.Level0)59 HWTEST_F (StatsAlarmTest, StatsAlarmTest_001, TestSize.Level0)
60 {
61 STATS_HILOGI(LABEL_TEST, "StatsAlarmTest_001 start");
62 auto& statsClient = BatteryStatsClient::GetInstance();
63 statsClient.Reset();
64
65 int32_t uid = 10003;
66 int32_t pid = 3458;
67 int16_t count = 2;
68
69 for (int16_t i = 0; i < count; i++) {
70 HiSysEventWrite(HiSysEvent::Domain::TIME, StatsHiSysEvent::MISC_TIME_STATISTIC_REPORT,
71 HiSysEvent::EventType::STATISTIC, "CALLER_PID", pid, "CALLER_UID", uid);
72 usleep(POWER_CONSUMPTION_TRIGGERED_US);
73 }
74
75 double powerMahBefore = statsClient.GetAppStatsMah(uid);
76 statsClient.Reset();
77 double powerMahAfter = statsClient.GetAppStatsMah(uid);
78 GTEST_LOG_(INFO) << __func__ << ": before consumption = " << powerMahBefore << " mAh";
79 GTEST_LOG_(INFO) << __func__ << ": after consumption = " << powerMahAfter << " mAh";
80 EXPECT_TRUE(powerMahBefore >= StatsUtils::DEFAULT_VALUE && powerMahAfter == StatsUtils::DEFAULT_VALUE);
81 STATS_HILOGI(LABEL_TEST, "StatsAlarmTest_001 end");
82 }
83
84 /**
85 * @tc.name: StatsAlarmTest_002
86 * @tc.desc: test GetPartStatsMah function(Alarm)
87 * @tc.type: FUNC
88 * @tc.require: issueI5OKAY
89 */
HWTEST_F(StatsAlarmTest, StatsAlarmTest_002, TestSize.Level0)90 HWTEST_F (StatsAlarmTest, StatsAlarmTest_002, TestSize.Level0)
91 {
92 STATS_HILOGI(LABEL_TEST, "StatsAlarmTest_002 start");
93 auto& statsClient = BatteryStatsClient::GetInstance();
94 statsClient.Reset();
95
96 double alarmOnAverageMa = g_statsParser->GetAveragePowerMa(StatsUtils::CURRENT_ALARM_ON);
97 int32_t uid = 10003;
98 int32_t pid = 3458;
99 int16_t count = 2;
100
101 for (int16_t i = 0; i < count; i++) {
102 HiSysEventWrite(HiSysEvent::Domain::TIME, StatsHiSysEvent::MISC_TIME_STATISTIC_REPORT,
103 HiSysEvent::EventType::STATISTIC, "CALLER_PID", pid, "CALLER_UID", uid);
104 usleep(POWER_CONSUMPTION_TRIGGERED_US);
105 }
106
107 double expectedPower = count * alarmOnAverageMa;
108 double actualPower = statsClient.GetAppStatsMah(uid);
109 double devPrecent = abs(expectedPower - actualPower) / expectedPower;
110 GTEST_LOG_(INFO) << __func__ << ": expected consumption = " << expectedPower << " mAh";
111 GTEST_LOG_(INFO) << __func__ << ": actual consumption = " << actualPower << " mAh";
112 EXPECT_LE(devPrecent, DEVIATION_PERCENT_THRESHOLD);
113 STATS_HILOGI(LABEL_TEST, "StatsAlarmTest_002 end");
114 }
115
116 /**
117 * @tc.name: StatsAlarmTest_003
118 * @tc.desc: test GetAppStatsPercent function(Alarm)
119 * @tc.type: FUNC
120 * @tc.require: issueI5OKAY
121 */
HWTEST_F(StatsAlarmTest, StatsAlarmTest_003, TestSize.Level0)122 HWTEST_F (StatsAlarmTest, StatsAlarmTest_003, TestSize.Level0)
123 {
124 STATS_HILOGI(LABEL_TEST, "StatsAlarmTest_003 start");
125 auto& statsClient = BatteryStatsClient::GetInstance();
126 statsClient.Reset();
127
128 int32_t uid = 10003;
129 int32_t pid = 3458;
130 int16_t count = 2;
131 double fullPercent = 1;
132 double zeroPercent = 0;
133
134 for (int16_t i = 0; i < count; i++) {
135 HiSysEventWrite(HiSysEvent::Domain::TIME, StatsHiSysEvent::MISC_TIME_STATISTIC_REPORT,
136 HiSysEvent::EventType::STATISTIC, "CALLER_PID", pid, "CALLER_UID", uid);
137 }
138
139 double actualPercent = statsClient.GetAppStatsPercent(uid);
140 GTEST_LOG_(INFO) << __func__ << ": actual percent = " << actualPercent;
141 EXPECT_TRUE(actualPercent >= zeroPercent && actualPercent <= fullPercent);
142 STATS_HILOGI(LABEL_TEST, "StatsAlarmTest_003 end");
143 }
144
145 /**
146 * @tc.name: StatsAlarmTest_004
147 * @tc.desc: test SetOnBattery function(Alarm)
148 * @tc.type: FUNC
149 * @tc.require: issueI5OKAY
150 */
HWTEST_F(StatsAlarmTest, StatsAlarmTest_004, TestSize.Level0)151 HWTEST_F (StatsAlarmTest, StatsAlarmTest_004, TestSize.Level0)
152 {
153 STATS_HILOGI(LABEL_TEST, "StatsAlarmTest_004 start");
154 auto& statsClient = BatteryStatsClient::GetInstance();
155 statsClient.Reset();
156 statsClient.SetOnBattery(false);
157
158 int32_t uid = 10003;
159 int32_t pid = 3458;
160 int16_t count = 2;
161
162 for (int16_t i = 0; i < count; i++) {
163 HiSysEventWrite(HiSysEvent::Domain::TIME, StatsHiSysEvent::MISC_TIME_STATISTIC_REPORT,
164 HiSysEvent::EventType::STATISTIC, "CALLER_PID", pid, "CALLER_UID", uid);
165 usleep(POWER_CONSUMPTION_TRIGGERED_US);
166 }
167
168 double expectedPower = StatsUtils::DEFAULT_VALUE;
169 double actualPower = statsClient.GetAppStatsMah(uid);
170 GTEST_LOG_(INFO) << __func__ << ": expected consumption = " << expectedPower << " mAh";
171 GTEST_LOG_(INFO) << __func__ << ": actual consumption = " << actualPower << " mAh";
172 EXPECT_EQ(expectedPower, actualPower);
173 statsClient.SetOnBattery(true);
174 STATS_HILOGI(LABEL_TEST, "StatsAlarmTest_004 end");
175 }
176 }