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 }