• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_audio_test.h"
17 
18 #include <hisysevent.h>
19 
20 #include "battery_stats_client.h"
21 
22 using namespace testing::ext;
23 using namespace OHOS::HiviewDFX;
24 using namespace OHOS::PowerMgr;
25 using namespace std;
26 
SetUpTestCase()27 void StatsAudioTest::SetUpTestCase()
28 {
29     ParserAveragePowerFile();
30     system("hidumper -s 3302 -a -u");
31 }
32 
TearDownTestCase()33 void StatsAudioTest::TearDownTestCase()
34 {
35     system("hidumper -s 3302 -a -r");
36 }
37 
SetUp()38 void StatsAudioTest::SetUp()
39 {
40     auto& statsClient = BatteryStatsClient::GetInstance();
41     statsClient.SetOnBattery(true);
42 }
43 
TearDown()44 void StatsAudioTest::TearDown()
45 {
46     auto& statsClient = BatteryStatsClient::GetInstance();
47     statsClient.SetOnBattery(false);
48 }
49 
50 namespace {
51 /**
52  * @tc.name: StatsAudioTest_001
53  * @tc.desc: test Reset function(Audio)
54  * @tc.type: FUNC
55  */
56 HWTEST_F (StatsAudioTest, StatsAudioTest_001, TestSize.Level0)
57 {
58     auto& statsClient = BatteryStatsClient::GetInstance();
59     statsClient.Reset();
60 
61     int32_t uid = 10003;
62     int32_t pid = 3458;
63     int32_t stateRunning = 2;
64     int32_t stateStopped = 3;
65 
66     HiSysEvent::Write("AUDIO", "AUDIO_STREAM_CHANGE", HiSysEvent::EventType::BEHAVIOR, "PID", pid,
67         "UID", uid, "STATE", stateRunning);
68     usleep(POWER_CONSUMPTION_DURATION_US);
69     HiSysEvent::Write("AUDIO", "AUDIO_STREAM_CHANGE", HiSysEvent::EventType::BEHAVIOR, "PID", pid,
70         "UID", uid, "STATE", stateStopped);
71 
72     double powerMahBefore = statsClient.GetAppStatsMah(uid);
73     statsClient.Reset();
74     double powerMahAfter = statsClient.GetAppStatsMah(uid);
75     GTEST_LOG_(INFO) << __func__ << ": before consumption = " << powerMahBefore << " mAh";
76     GTEST_LOG_(INFO) << __func__ << ": after consumption = " << powerMahAfter << " mAh";
77     EXPECT_TRUE(powerMahBefore > StatsUtils::DEFAULT_VALUE && powerMahAfter == StatsUtils::DEFAULT_VALUE);
78 }
79 
80 /**
81  * @tc.name: StatsAudioTest_002
82  * @tc.desc: test GetAppStatsMah function(Audio)
83  * @tc.type: FUNC
84  */
85 HWTEST_F (StatsAudioTest, StatsAudioTest_002, TestSize.Level0)
86 {
87     auto& statsClient = BatteryStatsClient::GetInstance();
88     statsClient.Reset();
89 
90     double audioOnAverageMa = g_statsParser->GetAveragePowerMa(StatsUtils::CURRENT_AUDIO_ON);
91     int32_t uid = 10003;
92     int32_t pid = 3458;
93     int32_t stateRunning = 2;
94     int32_t stateStopped = 3;
95 
96     HiSysEvent::Write("AUDIO", "AUDIO_STREAM_CHANGE", HiSysEvent::EventType::BEHAVIOR, "PID", pid,
97         "UID", uid, "STATE", stateRunning);
98     usleep(POWER_CONSUMPTION_DURATION_US);
99     HiSysEvent::Write("AUDIO", "AUDIO_STREAM_CHANGE", HiSysEvent::EventType::BEHAVIOR, "PID", pid,
100         "UID", uid, "STATE", stateStopped);
101 
102     double expectedPower = POWER_CONSUMPTION_DURATION_US * audioOnAverageMa / US_PER_HOUR;
103     double actualPower = statsClient.GetAppStatsMah(uid);
104     double devPrecent = abs(expectedPower - actualPower) / expectedPower;
105     GTEST_LOG_(INFO) << __func__ << ": expected consumption = " << expectedPower << " mAh";
106     GTEST_LOG_(INFO) << __func__ << ": actual consumption = " << actualPower << " mAh";
107     EXPECT_LE(devPrecent, DEVIATION_PERCENT_THRESHOLD);
108 }
109 
110 /**
111  * @tc.name: StatsAudioTest_003
112  * @tc.desc: test GetAppStatsPercent function(Audio)
113  * @tc.type: FUNC
114  */
115 HWTEST_F (StatsAudioTest, StatsAudioTest_003, TestSize.Level0)
116 {
117     auto& statsClient = BatteryStatsClient::GetInstance();
118     statsClient.Reset();
119 
120     int32_t uid = 10003;
121     int32_t pid = 3458;
122     int32_t stateRunning = 2;
123     int32_t stateStopped = 3;
124     double fullPercent = 1;
125     double zeroPercent = 0;
126 
127     HiSysEvent::Write("AUDIO", "AUDIO_STREAM_CHANGE", HiSysEvent::EventType::BEHAVIOR, "PID", pid,
128         "UID", uid, "STATE", stateRunning);
129     usleep(POWER_CONSUMPTION_DURATION_US);
130     HiSysEvent::Write("AUDIO", "AUDIO_STREAM_CHANGE", HiSysEvent::EventType::BEHAVIOR, "PID", pid,
131         "UID", uid, "STATE", stateStopped);
132 
133     double actualPercent = statsClient.GetAppStatsPercent(uid);
134     GTEST_LOG_(INFO) << __func__ << ": actual percent = " << actualPercent;
135     EXPECT_TRUE(actualPercent >= zeroPercent && actualPercent <= fullPercent);
136 }
137 
138 /**
139  * @tc.name: StatsAudioTest_004
140  * @tc.desc: test GetAppStatsMah function, Audio state composite test
141  * @tc.type: FUNC
142  */
143 HWTEST_F (StatsAudioTest, StatsAudioTest_004, TestSize.Level0)
144 {
145     auto& statsClient = BatteryStatsClient::GetInstance();
146     statsClient.Reset();
147 
148     double audioOnAverageMa = g_statsParser->GetAveragePowerMa(StatsUtils::CURRENT_AUDIO_ON);
149     int32_t uid = 10003;
150     int32_t pid = 3458;
151     int32_t stateRunning = 2;
152     int32_t stateStopped = 3;
153     int32_t stateReleased = 4;
154     int32_t statePaused = 5;
155 
156     HiSysEvent::Write("AUDIO", "AUDIO_STREAM_CHANGE", HiSysEvent::EventType::BEHAVIOR, "PID", pid,
157         "UID", uid, "STATE", stateRunning);
158     usleep(POWER_CONSUMPTION_DURATION_US);
159     HiSysEvent::Write("AUDIO", "AUDIO_STREAM_CHANGE", HiSysEvent::EventType::BEHAVIOR, "PID", pid,
160         "UID", uid, "STATE", stateStopped);
161 
162     HiSysEvent::Write("AUDIO", "AUDIO_STREAM_CHANGE", HiSysEvent::EventType::BEHAVIOR, "PID", pid,
163         "UID", uid, "STATE", stateRunning);
164     usleep(POWER_CONSUMPTION_DURATION_US);
165     HiSysEvent::Write("AUDIO", "AUDIO_STREAM_CHANGE", HiSysEvent::EventType::BEHAVIOR, "PID", pid,
166         "UID", uid, "STATE", stateReleased);
167 
168     HiSysEvent::Write("AUDIO", "AUDIO_STREAM_CHANGE", HiSysEvent::EventType::BEHAVIOR, "PID", pid,
169         "UID", uid, "STATE", stateRunning);
170     usleep(POWER_CONSUMPTION_DURATION_US);
171     HiSysEvent::Write("AUDIO", "AUDIO_STREAM_CHANGE", HiSysEvent::EventType::BEHAVIOR, "PID", pid,
172         "UID", uid, "STATE", statePaused);
173 
174     double expectedPower = 3 * POWER_CONSUMPTION_DURATION_US * audioOnAverageMa / US_PER_HOUR;
175     double actualPower = statsClient.GetAppStatsMah(uid);
176     double devPrecent = abs(expectedPower - actualPower) / expectedPower;
177     GTEST_LOG_(INFO) << __func__ << ": expected consumption = " << expectedPower << " mAh";
178     GTEST_LOG_(INFO) << __func__ << ": actual consumption = " << actualPower << " mAh";
179     EXPECT_LE(devPrecent, DEVIATION_PERCENT_THRESHOLD);
180 }
181 
182 /**
183  * @tc.name: StatsAudioTest_005
184  * @tc.desc: test GetAppStatsMah function, Audio abnormal state test
185  * @tc.type: FUNC
186  */
187 HWTEST_F (StatsAudioTest, StatsAudioTest_005, TestSize.Level0)
188 {
189     auto& statsClient = BatteryStatsClient::GetInstance();
190     statsClient.Reset();
191 
192     double audioOnAverageMa = g_statsParser->GetAveragePowerMa(StatsUtils::CURRENT_AUDIO_ON);
193     int32_t uid = 10003;
194     int32_t pid = 3458;
195     int32_t stateRunning = 2;
196     int32_t stateStopped = 3;
197     int32_t stateInvalid = -1;
198     int32_t stateAbnormal = 101;
199 
200     HiSysEvent::Write("AUDIO", "AUDIO_STREAM_CHANGE", HiSysEvent::EventType::BEHAVIOR, "PID", pid,
201         "UID", uid, "STATE", stateInvalid);
202     usleep(POWER_CONSUMPTION_DURATION_US);
203     HiSysEvent::Write("AUDIO", "AUDIO_STREAM_CHANGE", HiSysEvent::EventType::BEHAVIOR, "PID", pid,
204         "UID", uid, "STATE", stateRunning);
205     usleep(POWER_CONSUMPTION_DURATION_US);
206     HiSysEvent::Write("AUDIO", "AUDIO_STREAM_CHANGE", HiSysEvent::EventType::BEHAVIOR, "PID", pid,
207         "UID", uid, "STATE", stateAbnormal);
208     usleep(POWER_CONSUMPTION_DURATION_US);
209     HiSysEvent::Write("AUDIO", "AUDIO_STREAM_CHANGE", HiSysEvent::EventType::BEHAVIOR, "PID", pid,
210         "UID", uid, "STATE", stateStopped);
211 
212     double expectedPower = 2 * POWER_CONSUMPTION_DURATION_US * audioOnAverageMa / US_PER_HOUR;
213     double actualPower = statsClient.GetAppStatsMah(uid);
214     double devPrecent = abs(expectedPower - actualPower) / expectedPower;
215     GTEST_LOG_(INFO) << __func__ << ": expected consumption = " << expectedPower << " mAh";
216     GTEST_LOG_(INFO) << __func__ << ": actual consumption = " << actualPower << " mAh";
217     EXPECT_LE(devPrecent, DEVIATION_PERCENT_THRESHOLD);
218 }
219 
220 /**
221  * @tc.name: StatsAudioTest_006
222  * @tc.desc: test GetAppStatsMah(Audio) and GetAppStatsPercent(Sensor) function
223  * @tc.type: FUNC
224  */
225 HWTEST_F (StatsAudioTest, StatsAudioTest_006, TestSize.Level0)
226 {
227     auto& statsClient = BatteryStatsClient::GetInstance();
228     statsClient.Reset();
229 
230     double audioOnAverageMa = g_statsParser->GetAveragePowerMa(StatsUtils::CURRENT_AUDIO_ON);
231     int32_t uid = 10003;
232     int32_t pid = 3458;
233     int32_t stateRunning = 2;
234     int32_t stateStopped = 3;
235 
236     HiSysEvent::Write("AUDIO", "AUDIO_STREAM_CHANGE", HiSysEvent::EventType::BEHAVIOR, "PID", pid,
237         "UID", uid, "STATE", stateRunning);
238     usleep(POWER_CONSUMPTION_DURATION_US);
239     HiSysEvent::Write("AUDIO", "AUDIO_STREAM_CHANGE", HiSysEvent::EventType::BEHAVIOR, "PID", pid,
240         "UID", uid, "STATE", stateStopped);
241 
242     double expectedPower = POWER_CONSUMPTION_DURATION_US * audioOnAverageMa / US_PER_HOUR;
243     double actualPower = statsClient.GetAppStatsMah(uid);
244     double devPrecent = abs(expectedPower - actualPower) / expectedPower;
245     GTEST_LOG_(INFO) << __func__ << ": expected consumption = " << expectedPower << " mAh";
246     GTEST_LOG_(INFO) << __func__ << ": actual consumption = " << actualPower << " mAh";
247     EXPECT_LE(devPrecent, DEVIATION_PERCENT_THRESHOLD);
248 
249     uid = 10004;
250     pid = 3459;
251     int32_t stateOn = 1;
252     int32_t stateOff = 0;
253     double fullPercent = 1;
254     double zeroPercent = 0;
255 
256     HiSysEvent::Write(HiSysEvent::Domain::POWERMGR, "POWER_SENSOR_GRAVITY", HiSysEvent::EventType::STATISTIC, "PID",
257         pid, "UID", uid, "STATE", stateOn);
258     usleep(POWER_CONSUMPTION_DURATION_US);
259     HiSysEvent::Write(HiSysEvent::Domain::POWERMGR, "POWER_SENSOR_GRAVITY", HiSysEvent::EventType::STATISTIC, "PID",
260         pid, "UID", uid, "STATE", stateOff);
261 
262     double actualPercent = statsClient.GetAppStatsPercent(uid);
263     GTEST_LOG_(INFO) << __func__ << ": actual percent = " << actualPercent;
264     EXPECT_TRUE(actualPercent >= zeroPercent && actualPercent <= fullPercent);
265 }
266 }