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