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 <string>
17 
18 #include <gtest/gtest.h>
19 #include "system_ability_definition.h"
20 
21 #include "bundle_active_power_state_callback_service.h"
22 #include "bundle_active_power_state_callback_service.h"
23 #include "bundle_active_stub.h"
24 #include "bundle_active_core.h"
25 #include "bundle_active_continuous_task_observer.h"
26 #include "bundle_active_bundle_mgr_helper.h"
27 #include "bundle_active_app_state_observer.h"
28 #include "bundle_active_usage_database.h"
29 #include "bundle_active_account_helper.h"
30 #include "bundle_active_power_state_callback_service.h"
31 #include "bundle_active_open_callback.h"
32 #include "bundle_active_shutdown_callback_service.h"
33 #include "bundle_active_binary_search.h"
34 #include "bundle_active_debug_mode.h"
35 
36 using namespace testing::ext;
37 
38 namespace OHOS {
39 namespace DeviceUsageStats {
40 
41 class BundleActiveTotalTest : public testing::Test {
42 public:
43     static void SetUpTestCase(void);
44     static void TearDownTestCase(void);
45     void SetUp();
46     void TearDown();
47 };
48 
SetUpTestCase(void)49 void BundleActiveTotalTest::SetUpTestCase(void)
50 {
51 }
52 
TearDownTestCase(void)53 void BundleActiveTotalTest::TearDownTestCase(void)
54 {
55 }
56 
SetUp(void)57 void BundleActiveTotalTest::SetUp(void)
58 {
59 }
60 
TearDown(void)61 void BundleActiveTotalTest::TearDown(void)
62 {
63 }
64 
65 /*
66  * @tc.name: BundleActiveAccountHelperTest_001
67  * @tc.desc: test the interface of bundle_active_account_helper
68  * @tc.type: FUNC
69  * @tc.require: DTS2023121404861
70  */
HWTEST_F(BundleActiveTotalTest, BundleActiveAccountHelperTest_001, Function | MediumTest | Level0)71 HWTEST_F(BundleActiveTotalTest, BundleActiveAccountHelperTest_001, Function | MediumTest | Level0)
72 {
73     std::vector<int32_t> activatedOsAccountIds;
74 
75     BundleActiveAccountHelper::GetActiveUserId(activatedOsAccountIds);
76 
77     EXPECT_NE(activatedOsAccountIds.size(), 0);
78 }
79 
80 /*
81  * @tc.name: BundleActiveContinuousTaskObserverTest_001
82  * @tc.desc: test the interface of bundle_active_continuous_task_observer
83  * @tc.type: FUNC
84  * @tc.require: DTS2023121404861
85  */
HWTEST_F(BundleActiveTotalTest, BundleActiveContinuousTaskObserverTest_001, Function | MediumTest | Level0)86 HWTEST_F(BundleActiveTotalTest, BundleActiveContinuousTaskObserverTest_001, Function | MediumTest | Level0)
87 {
88 #ifdef BGTASKMGR_ENABLE
89 #ifdef OS_ACCOUNT_PART_ENABLED
90     std::shared_ptr<AppExecFwk::EventRunner> runner;
91     auto reportHandler = std::make_shared<BundleActiveReportHandler>(runner);
92     auto reportHandler1 = std::make_shared<BundleActiveReportHandler>(runner);
93     BundleActiveContinuousTaskObserver test;
94     test.Init(reportHandler);
95     test.Init(reportHandler1);
96     SUCCEED();
97 
98     std::shared_ptr<OHOS::BackgroundTaskMgr::ContinuousTaskCallbackInfo> continuousTaskCallbackInfo;
99     test.OnContinuousTaskStart(continuousTaskCallbackInfo);
100 
101     test.ReportContinuousTaskEvent(continuousTaskCallbackInfo, true);
102     test.ReportContinuousTaskEvent(continuousTaskCallbackInfo, false);
103     SUCCEED();
104 
105     test.GetBundleMgr();
106     test.bundleMgr_ = nullptr;
107     test.GetBundleMgr();
108     SUCCEED();
109 #endif
110 #endif
111 }
112 
113 /*
114  * @tc.name: BundleActiveBundleMgrHelperTest_001
115  * @tc.desc: test the interface of bundle_active_bundle_mgr_helper
116  * @tc.type: FUNC
117  * @tc.require: DTS2023121404861
118  */
HWTEST_F(BundleActiveTotalTest, BundleActiveBundleMgrHelperTest_001, Function | MediumTest | Level0)119 HWTEST_F(BundleActiveTotalTest, BundleActiveBundleMgrHelperTest_001, Function | MediumTest | Level0)
120 {
121     AppExecFwk::ApplicationFlag flag = AppExecFwk::GET_BASIC_APPLICATION_INFO;
122     AppExecFwk::ApplicationInfo appInfo;
123     AppExecFwk::BundleInfo bundleInfo;
124     BundleActiveBundleMgrHelper test;
125 
126     std::string string = "test";
127     test.GetNameForUid(0, string);
128     test.GetApplicationInfo(string, flag, 0, appInfo);
129     test.GetBundleInfo(string, AppExecFwk::BundleFlag::GET_BUNDLE_WITH_EXTENSION_INFO, bundleInfo, 0);
130     SUCCEED();
131 
132     test.bundleMgr_ = nullptr;
133     test.GetNameForUid(0, string);
134     test.GetApplicationInfo(string, flag, 0, appInfo);
135     test.GetBundleInfo(string, AppExecFwk::BundleFlag::GET_BUNDLE_WITH_EXTENSION_INFO, bundleInfo, 0);
136     SUCCEED();
137 }
138 
139 /*
140  * @tc.name: BundleActiveBundleMgrHelperTest_002
141  * @tc.desc: test GetApplicationInfos
142  * @tc.type: FUNC
143  * @tc.require: issuesI9SQ6G
144  */
HWTEST_F(BundleActiveTotalTest, BundleActiveBundleMgrHelperTest_002, Function | MediumTest | Level0)145 HWTEST_F(BundleActiveTotalTest, BundleActiveBundleMgrHelperTest_002, Function | MediumTest | Level0)
146 {
147     AppExecFwk::ApplicationFlag flag = AppExecFwk::GET_BASIC_APPLICATION_INFO;
148     std::vector<AppExecFwk::ApplicationInfo> appInfos;
149     BundleActiveBundleMgrHelper::GetInstance()->GetApplicationInfos(flag, 0, appInfos);
150     SUCCEED();
151 }
152 
153 /*
154  * @tc.name: BundleActiveBundleMgrHelperTest_003
155  * @tc.desc: test is launcherApp
156  * @tc.type: FUNC
157  * @tc.require: issuesI9SQ6G
158  */
HWTEST_F(BundleActiveTotalTest, BundleActiveBundleMgrHelperTest_003, Function | MediumTest | Level0)159 HWTEST_F(BundleActiveTotalTest, BundleActiveBundleMgrHelperTest_003, Function | MediumTest | Level0)
160 {
161     BundleActiveBundleMgrHelper::GetInstance()->InitLauncherAppMap();
162     BundleActiveBundleMgrHelper::GetInstance()->IsLauncherApp("test", 0);
163     BundleActiveBundleMgrHelper::GetInstance()->launcherAppMap_["test"] = false;
164     BundleActiveBundleMgrHelper::GetInstance()->IsLauncherApp("test", 0);
165     SUCCEED();
166 }
167 
168 /*
169  * @tc.name: BundleActiveAppStateObserverTest_001
170  * @tc.desc: test the interface of bundle_active_app_state_observer
171  * @tc.type: FUNC
172  * @tc.require: DTS2023121404861
173  */
HWTEST_F(BundleActiveTotalTest, BundleActiveAppStateObserverTest_001, Function | MediumTest | Level0)174 HWTEST_F(BundleActiveTotalTest, BundleActiveAppStateObserverTest_001, Function | MediumTest | Level0)
175 {
176     AbilityStateData abilityStateData;
177     auto reportHandler = std::make_shared<BundleActiveReportHandler>();
178     BundleActiveAppStateObserver test;
179     test.Init(reportHandler);
180     test.OnAbilityStateChanged(abilityStateData);
181 
182     test.Init(reportHandler);
183     abilityStateData.abilityState = static_cast<int32_t>(AppExecFwk::AbilityState::ABILITY_STATE_FOREGROUND);
184     test.OnAbilityStateChanged(abilityStateData);
185     SUCCEED();
186 
187     abilityStateData.abilityState = static_cast<int32_t>(AppExecFwk::AbilityState::ABILITY_STATE_BACKGROUND);
188     test.OnAbilityStateChanged(abilityStateData);
189     SUCCEED();
190 
191     abilityStateData.abilityState = static_cast<int32_t>(AppExecFwk::AbilityState::ABILITY_STATE_TERMINATED);
192     test.OnAbilityStateChanged(abilityStateData);
193     SUCCEED();
194 }
195 
196 /*
197  * @tc.name: BundleActiveUsageDatabaseTest_001
198  * @tc.desc: test the interface of bundle_active_usage_database
199  * @tc.type: FUNC
200  * @tc.require: DTS2023121404861
201  */
HWTEST_F(BundleActiveTotalTest, BundleActiveUsageDatabaseTest_001, Function | MediumTest | Level0)202 HWTEST_F(BundleActiveTotalTest, BundleActiveUsageDatabaseTest_001, Function | MediumTest | Level0)
203 {
204     BundleActiveUsageDatabase test;
205     test.InitDatabaseTableInfo(test.ParseStartTime(test.eventTableName_)-1);
206     SUCCEED();
207 }
208 
209 /*
210  * @tc.name: BundleActiveUsageDatabaseTest_002
211  * @tc.desc: test the interface of bundle_active_usage_database
212  * @tc.type: FUNC
213  * @tc.require: DTS2023121404861
214  */
HWTEST_F(BundleActiveTotalTest, BundleActiveUsageDatabaseTest_002, Function | MediumTest | Level0)215 HWTEST_F(BundleActiveTotalTest, BundleActiveUsageDatabaseTest_002, Function | MediumTest | Level0)
216 {
217     BundleActiveUsageDatabase test;
218     test.debugDatabase_ = true;
219     test.DeleteExcessiveTableData(100);
220     test.DeleteExcessiveTableData(0);
221     SUCCEED();
222 }
223 
224 /*
225  * @tc.name: BundleActiveUsageDatabaseTest_003
226  * @tc.desc: test the interface of bundle_active_usage_database
227  * @tc.type: FUNC
228  * @tc.require: DTS2023121404861
229  */
HWTEST_F(BundleActiveTotalTest, BundleActiveUsageDatabaseTest_003, Function | MediumTest | Level0)230 HWTEST_F(BundleActiveTotalTest, BundleActiveUsageDatabaseTest_003, Function | MediumTest | Level0)
231 {
232     BundleActiveUsageDatabase test;
233     auto result = test.GetOverdueTableCreateTime(100, 0);
234     EXPECT_EQ(result, nullptr);
235 }
236 
237 /*
238  * @tc.name: BundleActiveUsageDatabaseTest_005
239  * @tc.desc: test the interface of bundle_active_usage_database
240  * @tc.type: FUNC
241  * @tc.require: DTS2023121404861
242  */
HWTEST_F(BundleActiveTotalTest, BundleActiveUsageDatabaseTest_005, Function | MediumTest | Level0)243 HWTEST_F(BundleActiveTotalTest, BundleActiveUsageDatabaseTest_005, Function | MediumTest | Level0)
244 {
245     BundleActiveUsageDatabase test;
246     test.bundleHistoryTableName_ = "unknownTableName";
247     std::shared_ptr<map<string, std::shared_ptr<BundleActivePackageHistory>>> userHistory;
248     test.PutBundleHistoryData(0, userHistory);
249     test.GetTableIndexSql(0, 0, true, 0);
250     test.GetTableIndexSql(5, 0, true, 0);
251     test.GetTableIndexSql(5, 0, false, 0);
252     test.GetTableIndexSql(5, 0, false, 1);
253     test.GetTableIndexSql(5, 0, false, 2);
254     test.GetTableIndexSql(0, 0, false, 0);
255     SUCCEED();
256 }
257 
258 /*
259  * @tc.name: BundleActiveUsageDatabaseTest_006
260  * @tc.desc: test the interface of bundle_active_usage_database
261  * @tc.type: FUNC
262  * @tc.require: DTS2023121404861
263  */
HWTEST_F(BundleActiveTotalTest, BundleActiveUsageDatabaseTest_006, Function | MediumTest | Level0)264 HWTEST_F(BundleActiveTotalTest, BundleActiveUsageDatabaseTest_006, Function | MediumTest | Level0)
265 {
266     BundleActiveUsageDatabase test;
267     std::shared_ptr<NativeRdb::RdbStore> rdbStore;
268     test.SetNewIndexWhenTimeChanged(5, 0, 0, rdbStore);
269     SUCCEED();
270     test.RenameTableName(0, 0, 0);
271     test.ExecuteRenameTableName("test", 0, 0, rdbStore);
272     SUCCEED();
273 }
274 
275 /*
276  * @tc.name: BundleActiveUsageDatabaseTest_007
277  * @tc.desc: test the interface of bundle_active_usage_database
278  * @tc.type: FUNC
279  * @tc.require: DTS2023121404861
280  */
HWTEST_F(BundleActiveTotalTest, BundleActiveUsageDatabaseTest_007, Function | MediumTest | Level0)281 HWTEST_F(BundleActiveTotalTest, BundleActiveUsageDatabaseTest_007, Function | MediumTest | Level0)
282 {
283     BundleActiveUsageDatabase test;
284     std::shared_ptr<NativeRdb::RdbStore> rdbStore;
285     BundleActiveFormRecord formRecord;
286     test.UpdateFormData(0, "test", "test", formRecord, rdbStore);
287     test.GetSystemEventName(0);
288     test.JudgeQueryCondition(0, 0, 1);
289     SUCCEED();
290 }
291 
292 /*
293  * @tc.name: BundleActivePowerStateCallbackServiceTest_001
294  * @tc.desc: test the interface of bundle_active_usage_database
295  * @tc.type: FUNC
296  * @tc.require: DTS2023121404861
297  */
HWTEST_F(BundleActiveTotalTest, BundleActivePowerStateCallbackServiceTest_001, Function | MediumTest | Level0)298 HWTEST_F(BundleActiveTotalTest, BundleActivePowerStateCallbackServiceTest_001, Function | MediumTest | Level0)
299 {
300 #ifdef DEVICE_USAGES_STATISTICS_POWERMANGER_ENABLE
301     BundleActivePowerStateCallbackService test1(nullptr);
302 
303     std::shared_ptr<BundleActiveCore> bundleActiveCore = std::make_shared<BundleActiveCore>();
304     BundleActivePowerStateCallbackService test2(bundleActiveCore);
305 
306     test2.OnPowerStateChanged(PowerState::AWAKE);
307     SUCCEED();
308     test2.OnPowerStateChanged(PowerState::SLEEP);
309     SUCCEED();
310 #endif
311 }
312 
313 /*
314  * @tc.name: BundleActiveBinarySearchTest_001
315  * @tc.desc: test the interface of bundle_active_binary_search
316  * @tc.type: FUNC
317  * @tc.require: DTS2023121404861
318  */
HWTEST_F(BundleActiveTotalTest, BundleActiveBinarySearchTest_001, Function | MediumTest | Level0)319 HWTEST_F(BundleActiveTotalTest, BundleActiveBinarySearchTest_001, Function | MediumTest | Level0)
320 {
321     std::vector<int64_t> tableNameArray;
322     BundleActiveBinarySearch test;
323     int32_t result = test.BinarySearch(tableNameArray, 0);
324     EXPECT_EQ(result, -1);
325     result = test.BinarySearch(tableNameArray, -100);
326     EXPECT_EQ(result, -1);
327     tableNameArray.push_back(-1);
328     tableNameArray.push_back(0);
329     tableNameArray.push_back(1);
330     result = test.BinarySearch(tableNameArray, 0);
331     EXPECT_EQ(result, 1);
332 }
333 }
334 }