1 /*
2  * Copyright (c) 2021-2023 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 <gtest/gtest.h>
17 #include <singleton.h>
18 
19 #define private public
20 #include "context_impl.h"
21 #undef private
22 
23 #include "constants.h"
24 #include "ability_local_record.h"
25 #include "application_context.h"
26 #include "context.h"
27 #include "hap_module_info.h"
28 #include "hilog_tag_wrapper.h"
29 #include "iremote_object.h"
30 #include "mock_ability_token.h"
31 #include "mock_bundle_manager.h"
32 #include "system_ability_definition.h"
33 #include "sys_mgr_client.h"
34 
35 namespace OHOS {
36 namespace AppExecFwk {
37 using namespace testing::ext;
38 using namespace OHOS;
39 using namespace OHOS::AppExecFwk;
40 
41 namespace {
42 const int64_t CONTEXT_CREATE_BY_SYSTEM_APP(0x00000001);
43 } // namespace
44 
45 class ContextImplTest : public testing::Test {
46 public:
ContextImplTest()47     ContextImplTest() : contextImpl_(nullptr)
48     {}
~ContextImplTest()49     ~ContextImplTest()
50     {}
51     std::shared_ptr<AbilityRuntime::ContextImpl> contextImpl_ = nullptr;
52     static void SetUpTestCase(void);
53     static void TearDownTestCase(void);
54     void SetUp();
55     void TearDown();
56 };
57 
SetUpTestCase(void)58 void ContextImplTest::SetUpTestCase(void)
59 {}
60 
TearDownTestCase(void)61 void ContextImplTest::TearDownTestCase(void)
62 {}
63 
SetUp(void)64 void ContextImplTest::SetUp(void)
65 {
66     contextImpl_ = std::make_shared<AbilityRuntime::ContextImpl>();
67     auto config = std::make_shared<AppExecFwk::Configuration>();
68     EXPECT_NE(config, nullptr);
69     contextImpl_->SetConfiguration(config);
70     sptr<IRemoteObject> bundleObject = new (std::nothrow) BundleMgrService();
71     DelayedSingleton<SysMrgClient>::GetInstance()->RegisterSystemAbility(BUNDLE_MGR_SERVICE_SYS_ABILITY_ID,
72         bundleObject);
73 }
74 
TearDown(void)75 void ContextImplTest::TearDown(void)
76 {}
77 
78 /**
79  * @tc.number: AppExecFwk_ContextImpl_GetBundleName_001
80  * @tc.name: GetBundleName
81  * @tc.desc: Test whether GetBundleName is called normally.
82  * @tc.type: FUNC
83  * @tc.require: SR000GH1HL
84  */
85 HWTEST_F(ContextImplTest, AppExecFwk_ContextImpl_GetBundleName_001, Function | MediumTest | Level1)
86 {
87     GTEST_LOG_(INFO) << "AppExecFwk_ContextImpl_GetBundleName_001 start";
88     std::string bundleName = contextImpl_->GetBundleName();
89     EXPECT_STREQ(bundleName.c_str(), "");
90     GTEST_LOG_(INFO) << "AppExecFwk_ContextImpl_GetBundleName_001 end";
91 }
92 
93 /**
94  * @tc.number: AppExecFwk_ContextImpl_GetBundleName_002
95  * @tc.name: GetBundleName
96  * @tc.desc: Test whether GetBundleName is called normally.
97  * @tc.type: FUNC
98  * @tc.require: SR000GH1HL
99  */
100 HWTEST_F(ContextImplTest, AppExecFwk_ContextImpl_GetBundleName_002, Function | MediumTest | Level1)
101 {
102     GTEST_LOG_(INFO) << "AppExecFwk_ContextImpl_GetBundleName_002 start";
103     std::shared_ptr<AppExecFwk::ApplicationInfo> applicationInfo = std::make_shared<AppExecFwk::ApplicationInfo>();
104     applicationInfo->bundleName = "com.test";
105     contextImpl_->SetApplicationInfo(applicationInfo);
106     std::string bundleName = contextImpl_->GetBundleName();
107     EXPECT_STREQ(bundleName.c_str(), "com.test");
108     GTEST_LOG_(INFO) << "AppExecFwk_ContextImpl_GetBundleName_002 end";
109 }
110 
111 /**
112  * @tc.name: AppExecFwk_ContextImpl_GetBundleName_003
113  * @tc.desc: Get bundle name when parent context is not nullptr.
114  * @tc.type: FUNC
115  * @tc.require: issueI61P7Y
116  */
117 HWTEST_F(ContextImplTest, AppExecFwk_ContextImpl_GetBundleName_003, TestSize.Level1)
118 {
119     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
120     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
121     EXPECT_NE(contextImpl, nullptr);
122 
123     auto parentContext = std::make_shared<AbilityRuntime::ContextImpl>();
124     EXPECT_NE(parentContext, nullptr);
125     auto applicationInfo = std::make_shared<AppExecFwk::ApplicationInfo>();
126     EXPECT_NE(applicationInfo, nullptr);
127     applicationInfo->bundleName = "com.test.parentcontext";
128     parentContext->SetApplicationInfo(applicationInfo);
129 
130     contextImpl->SetParentContext(parentContext);
131     std::string bundleName = contextImpl->GetBundleName();
132     EXPECT_EQ(bundleName, "com.test.parentcontext");
133     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
134 }
135 
136 /**
137  * @tc.name: GetBundleCodeDir_0100
138  * @tc.desc: Get bundle code directory.
139  * @tc.type: FUNC
140  * @tc.require: issueI61P7Y
141  */
142 HWTEST_F(ContextImplTest, GetBundleCodeDir_0100, TestSize.Level1)
143 {
144     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
145     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
146     EXPECT_NE(contextImpl, nullptr);
147 
148     // branch when application info is nullptr
149     auto codeDir = contextImpl->GetBundleCodeDir();
150     EXPECT_EQ(codeDir, "");
151 
152     // construct application info
153     auto applicationInfo = std::make_shared<AppExecFwk::ApplicationInfo>();
154     EXPECT_NE(applicationInfo, nullptr);
155     applicationInfo->codePath = "/data/app/el1/bundle/public/testCodeDir";
156     contextImpl->SetApplicationInfo(applicationInfo);
157 
158     // not create by system app
159     codeDir = contextImpl->GetBundleCodeDir();
160     EXPECT_EQ(codeDir, AbilityBase::Constants::LOCAL_CODE_PATH);
161 
162     // create by system app(flag is ContextImpl::CONTEXT_CREATE_BY_SYSTEM_APP)
163     contextImpl->SetFlags(CONTEXT_CREATE_BY_SYSTEM_APP);
164     codeDir = contextImpl->GetBundleCodeDir();
165     EXPECT_EQ(codeDir, "/data/bundles/testCodeDir");
166 
167     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
168 }
169 
170 /**
171  * @tc.name: IsUpdatingConfigurations_0100
172  * @tc.desc: IsUpdatingConfigurations basic test.
173  * @tc.type: FUNC
174  * @tc.require: issueI61P7Y
175  */
176 HWTEST_F(ContextImplTest, IsUpdatingConfigurations_0100, TestSize.Level1)
177 {
178     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
179     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
180     EXPECT_NE(contextImpl, nullptr);
181 
182     auto isUpdating = contextImpl->IsUpdatingConfigurations();
183     EXPECT_EQ(isUpdating, false);
184 
185     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
186 }
187 
188 /**
189  * @tc.name: PrintDrawnCompleted_0100
190  * @tc.desc: PrintDrawnCompleted basic test.
191  * @tc.type: FUNC
192  * @tc.require: issueI61P7Y
193  */
194 HWTEST_F(ContextImplTest, PrintDrawnCompleted_0100, TestSize.Level1)
195 {
196     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
197     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
198     EXPECT_NE(contextImpl, nullptr);
199 
200     auto isComplete = contextImpl->PrintDrawnCompleted();
201     EXPECT_EQ(isComplete, false);
202 
203     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
204 }
205 
206 /**
207  * @tc.name: GetDatabaseDir_0100
208  * @tc.desc: Get base directory basic test.
209  * @tc.type: FUNC
210  * @tc.require: issueI61P7Y
211  */
212 HWTEST_F(ContextImplTest, GetDatabaseDir_0100, TestSize.Level1)
213 {
214     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
215     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
216     EXPECT_NE(contextImpl, nullptr);
217 
218     // not create by system app and parent context is nullptr
219     auto databaseDir = contextImpl->GetDatabaseDir();
220     EXPECT_EQ(databaseDir, "/data/storage/el2/database");
221 
222     // create by system app and parent context is not nullptr
223     contextImpl->SetFlags(CONTEXT_CREATE_BY_SYSTEM_APP);
224     auto parentContext = std::make_shared<AbilityRuntime::ContextImpl>();
225     EXPECT_NE(parentContext, nullptr);
226     auto applicationInfo = std::make_shared<AppExecFwk::ApplicationInfo>();
227     EXPECT_NE(applicationInfo, nullptr);
228     applicationInfo->bundleName = "com.test.database";
229     parentContext->SetApplicationInfo(applicationInfo);
230     contextImpl->SetParentContext(parentContext);
231     databaseDir = contextImpl->GetDatabaseDir();
232     EXPECT_EQ(databaseDir, "/data/app/el2/0/database/com.test.database/");
233 
234     // create by system app and hap module info of parent context is not nullptr
235     AppExecFwk::HapModuleInfo hapModuleInfo;
236     hapModuleInfo.moduleName = "test_moduleName";
237     contextImpl->InitHapModuleInfo(hapModuleInfo);
238     databaseDir = contextImpl->GetDatabaseDir();
239     EXPECT_EQ(databaseDir, "/data/app/el2/0/database/com.test.database/test_moduleName");
240 
241     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
242 }
243 
244 /**
245  * @tc.name: GetDatabaseDir_0200
246  * @tc.desc: Get base directory basic test.
247  * @tc.type: FUNC
248  * @tc.require: issueI8G3YE
249  */
250 HWTEST_F(ContextImplTest, GetDatabaseDir_0200, TestSize.Level1)
251 {
252     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
253     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
254     EXPECT_NE(contextImpl, nullptr);
255 
256     // not create by system app and parent context is nullptr
257     contextImpl->SwitchArea(2);
258     auto databaseDir = contextImpl->GetDatabaseDir();
259     EXPECT_EQ(databaseDir, "/data/storage/el3/database");
260 
261     // create by system app and parent context is not nullptr
262     contextImpl->SetFlags(CONTEXT_CREATE_BY_SYSTEM_APP);
263     auto parentContext = std::make_shared<AbilityRuntime::ContextImpl>();
264     EXPECT_NE(parentContext, nullptr);
265     auto applicationInfo = std::make_shared<AppExecFwk::ApplicationInfo>();
266     EXPECT_NE(applicationInfo, nullptr);
267     applicationInfo->bundleName = "com.test.database";
268     parentContext->SetApplicationInfo(applicationInfo);
269     contextImpl->SetParentContext(parentContext);
270     contextImpl->SwitchArea(2);
271     databaseDir = contextImpl->GetDatabaseDir();
272     EXPECT_EQ(databaseDir, "/data/app/el3/0/database/com.test.database/");
273 
274     // create by system app and hap module info of parent context is not nullptr
275     AppExecFwk::HapModuleInfo hapModuleInfo;
276     hapModuleInfo.moduleName = "test_moduleName";
277     contextImpl->InitHapModuleInfo(hapModuleInfo);
278     contextImpl->SwitchArea(2);
279     databaseDir = contextImpl->GetDatabaseDir();
280     EXPECT_EQ(databaseDir, "/data/app/el3/0/database/com.test.database/test_moduleName");
281 
282     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
283 }
284 
285 /**
286  * @tc.name: GetDatabaseDir_0300
287  * @tc.desc: Get el5 base directory basic test.
288  * @tc.type: FUNC
289  * @tc.require: issuesI9SXYW
290  */
291 HWTEST_F(ContextImplTest, GetDatabaseDir_0300, TestSize.Level1)
292 {
293     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
294     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
295     EXPECT_NE(contextImpl, nullptr);
296 
297     // not create by system app and parent context is nullptr
298     contextImpl->SwitchArea(4);
299     auto databaseDir = contextImpl->GetDatabaseDir();
300     EXPECT_EQ(databaseDir, "/data/storage/el5/database");
301 
302     // create by system app and parent context is not nullptr
303     contextImpl->SetFlags(CONTEXT_CREATE_BY_SYSTEM_APP);
304     auto parentContext = std::make_shared<AbilityRuntime::ContextImpl>();
305     EXPECT_NE(parentContext, nullptr);
306     auto applicationInfo = std::make_shared<AppExecFwk::ApplicationInfo>();
307     EXPECT_NE(applicationInfo, nullptr);
308     applicationInfo->bundleName = "com.test.database";
309     parentContext->SetApplicationInfo(applicationInfo);
310     contextImpl->SetParentContext(parentContext);
311     contextImpl->SwitchArea(4);
312     databaseDir = contextImpl->GetDatabaseDir();
313     EXPECT_EQ(databaseDir, "/data/app/el5/0/database/com.test.database/");
314 
315     // create by system app and hap module info of parent context is not nullptr
316     AppExecFwk::HapModuleInfo hapModuleInfo;
317     hapModuleInfo.moduleName = "test_moduleName";
318     contextImpl->InitHapModuleInfo(hapModuleInfo);
319     contextImpl->SwitchArea(4);
320     databaseDir = contextImpl->GetDatabaseDir();
321     EXPECT_EQ(databaseDir, "/data/app/el5/0/database/com.test.database/test_moduleName");
322 
323     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
324 }
325 
326 /**
327  * @tc.name: GetPreferencesDir_0100
328  * @tc.desc: Get preference directory basic test.
329  * @tc.type: FUNC
330  * @tc.require: issueI61P7Y
331  */
332 HWTEST_F(ContextImplTest, GetPreferencesDir_0100, TestSize.Level1)
333 {
334     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
335     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
336     EXPECT_NE(contextImpl, nullptr);
337 
338     auto preferenceDir = contextImpl->GetPreferencesDir();
339     EXPECT_EQ(preferenceDir, "/data/storage/el2/base/preferences");
340 
341     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
342 }
343 
344 /**
345  * @tc.name: GetTempDir_0100
346  * @tc.desc: Get temp directory basic test.
347  * @tc.type: FUNC
348  * @tc.require: issueI61P7Y
349  */
350 HWTEST_F(ContextImplTest, GetTempDir_0100, TestSize.Level1)
351 {
352     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
353     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
354     EXPECT_NE(contextImpl, nullptr);
355 
356     auto tempDir = contextImpl->GetTempDir();
357     EXPECT_EQ(tempDir, "/data/storage/el2/base/temp");
358 
359     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
360 }
361 
362 /**
363  * @tc.name: GetResourceDir_0100
364  * @tc.desc: Get resource directory basic test.
365  * @tc.type: FUNC
366  * @tc.require: issueI61P7Y
367  */
368 HWTEST_F(ContextImplTest, GetResourceDir_0100, TestSize.Level1)
369 {
370     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
371     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
372     EXPECT_NE(contextImpl, nullptr);
373 
374     auto resourceDir = contextImpl->GetResourceDir();
375     EXPECT_EQ(resourceDir, "");
376 
377     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
378 }
379 
380 /**
381  * @tc.name: GetFilesDir_0100
382  * @tc.desc: Get files directory basic test.
383  * @tc.type: FUNC
384  * @tc.require: issueI61P7Y
385  */
386 HWTEST_F(ContextImplTest, GetFilesDir_0100, TestSize.Level1)
387 {
388     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
389     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
390     EXPECT_NE(contextImpl, nullptr);
391 
392     auto filesDir = contextImpl->GetFilesDir();
393     EXPECT_EQ(filesDir, "/data/storage/el2/base/files");
394 
395     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
396 }
397 
398 /**
399  * @tc.name: GetDistributedFilesDir_0100
400  * @tc.desc: Get distributed directory basic test.
401  * @tc.type: FUNC
402  * @tc.require: issueI61P7Y
403  */
404 HWTEST_F(ContextImplTest, GetDistributedFilesDir_0100, TestSize.Level1)
405 {
406     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
407     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
408     EXPECT_NE(contextImpl, nullptr);
409 
410     // not create by system app
411     contextImpl->SwitchArea(1);
412     auto distributedDir = contextImpl->GetDistributedFilesDir();
413     EXPECT_EQ(distributedDir, "/data/storage/el2/distributedfiles");
414 
415     //for areamode is el3, the distributedfiles dir is also el2's distributedfiles dir
416     contextImpl->SwitchArea(2);
417     distributedDir = contextImpl->GetDistributedFilesDir();
418     EXPECT_EQ(distributedDir, "/data/storage/el2/distributedfiles");
419 
420     //for areamode is el4, the distributedfiles dir is also el2's distributedfiles dir
421     contextImpl->SwitchArea(3);
422     distributedDir = contextImpl->GetDistributedFilesDir();
423     EXPECT_EQ(distributedDir, "/data/storage/el2/distributedfiles");
424 
425     //for areamode is el5, the distributedfiles dir is also el2's distributedfiles dir
426     contextImpl->SwitchArea(4);
427     distributedDir = contextImpl->GetDistributedFilesDir();
428     EXPECT_EQ(distributedDir, "/data/storage/el2/distributedfiles");
429 
430     // create by system app and bundleName is empty
431     contextImpl->SetFlags(CONTEXT_CREATE_BY_SYSTEM_APP);
432     distributedDir = contextImpl->GetDistributedFilesDir();
433     EXPECT_EQ(distributedDir, "/mnt/hmdfs/0/device_view/local/data/");
434 
435     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
436 }
437 
438 /**
439  * @tc.name: GetCloudFileDir_0100
440  * @tc.desc: Get cloud directory basic test.
441  * @tc.type: FUNC
442  * @tc.require: issueI61P7Y
443  */
444 HWTEST_F(ContextImplTest, GetCloudFileDir_0100, TestSize.Level1)
445 {
446     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
447     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
448     EXPECT_NE(contextImpl, nullptr);
449 
450     auto cloudDir = contextImpl->GetCloudFileDir();
451     EXPECT_EQ(cloudDir, "/data/storage/el2/cloud");
452 
453     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
454 }
455 
456 /**
457  * @tc.name: GetBaseDir_0100
458  * @tc.desc: Get base directory basic test.
459  * @tc.type: FUNC
460  * @tc.require: issueI61P7Y
461  */
462 HWTEST_F(ContextImplTest, GetBaseDir_0100, TestSize.Level1)
463 {
464     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
465     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
466     EXPECT_NE(contextImpl, nullptr);
467 
468     // not create by system app and parent context is nullptr
469     auto baseDir = contextImpl->GetBaseDir();
470     EXPECT_EQ(baseDir, "/data/storage/el2/base");
471 
472     // create by system app and parent context is not nullptr
473     contextImpl->SetFlags(CONTEXT_CREATE_BY_SYSTEM_APP);
474     auto parentContext = std::make_shared<AbilityRuntime::ContextImpl>();
475     EXPECT_NE(parentContext, nullptr);
476     auto applicationInfo = std::make_shared<AppExecFwk::ApplicationInfo>();
477     EXPECT_NE(applicationInfo, nullptr);
478     applicationInfo->bundleName = "com.test.base";
479     parentContext->SetApplicationInfo(applicationInfo);
480     contextImpl->SetParentContext(parentContext);
481     baseDir = contextImpl->GetBaseDir();
482     EXPECT_EQ(baseDir, "/data/app/el2/0/base/com.test.base/haps/");
483 
484     // create by system app and hap module info of parent context is not nullptr
485     AppExecFwk::HapModuleInfo hapModuleInfo;
486     hapModuleInfo.moduleName = "test_moduleName";
487     contextImpl->InitHapModuleInfo(hapModuleInfo);
488     baseDir = contextImpl->GetBaseDir();
489     EXPECT_EQ(baseDir, "/data/app/el2/0/base/com.test.base/haps/test_moduleName");
490 
491     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
492 }
493 
494 /**
495  * @tc.name: SwitchArea_0100
496  * @tc.desc: Switch area basic test.
497  * @tc.type: FUNC
498  * @tc.require: issueI61P7Y
499  */
500 HWTEST_F(ContextImplTest, SwitchArea_0100, TestSize.Level1)
501 {
502     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
503     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
504     EXPECT_NE(contextImpl, nullptr);
505 
506     // invalid mode
507     contextImpl->SwitchArea(-1);
508     contextImpl->SwitchArea(5);
509 
510     // valid mode
511     contextImpl->SwitchArea(0);
512     contextImpl->SwitchArea(1);
513 
514     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
515 }
516 
517 /**
518  * @tc.name: GetAreaArea_0100
519  * @tc.desc: Get area basic test.
520  * @tc.type: FUNC
521  * @tc.require: issueI61P7Y
522  */
523 HWTEST_F(ContextImplTest, GetAreaArea_0100, TestSize.Level1)
524 {
525     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
526     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
527     EXPECT_NE(contextImpl, nullptr);
528 
529     contextImpl->SwitchArea(0);
530     auto mode = contextImpl->GetArea();
531     EXPECT_EQ(mode, 0);
532 
533     contextImpl->SwitchArea(1);
534     mode = contextImpl->GetArea();
535     EXPECT_EQ(mode, 1);
536 
537     contextImpl->SwitchArea(2);
538     mode = contextImpl->GetArea();
539     EXPECT_EQ(mode, 2);
540 
541     contextImpl->SwitchArea(3);
542     mode = contextImpl->GetArea();
543     EXPECT_EQ(mode, 3);
544 
545     contextImpl->SwitchArea(4);
546     mode = contextImpl->GetArea();
547     EXPECT_EQ(mode, 4);
548 
549     // invalid area_
550     contextImpl->currArea_ = "invalid";
551     mode = contextImpl->GetArea();
552     EXPECT_EQ(mode, 1); // default is AbilityRuntime::ContextImpl::EL_DEFAULT
553 
554     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
555 }
556 
557 /**
558  * @tc.name: GetCurrentAccountId_0100
559  * @tc.desc: Get current account id test.
560  * @tc.type: FUNC
561  * @tc.require: issueI61P7Y
562  */
563 HWTEST_F(ContextImplTest, GetCurrentAccountId_0100, TestSize.Level1)
564 {
565     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
566     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
567     EXPECT_NE(contextImpl, nullptr);
568 
569     auto accountId = contextImpl->GetCurrentAccountId();
570     EXPECT_EQ(accountId, 0); // default account id
571     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
572 }
573 
574 /**
575  * @tc.name: GetCurrentActiveAccountId_0100
576  * @tc.desc: Get current active account id test.
577  * @tc.type: FUNC
578  * @tc.require: issueI61P7Y
579  */
580 HWTEST_F(ContextImplTest, GetCurrentActiveAccountId_0100, TestSize.Level1)
581 {
582     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
583     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
584     EXPECT_NE(contextImpl, nullptr);
585 
586     auto accountId = contextImpl->GetCurrentActiveAccountId();
587     EXPECT_EQ(accountId, 100); // default active account id is 100
588     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
589 }
590 
591 /**
592  * @tc.number: AppExecFwk_ContextImpl_SetApplicationInfo_001
593  * @tc.name: SetApplicationInfo
594  * @tc.desc: Test whether SetApplicationInfo is called normally.
595  * @tc.type: FUNC
596  * @tc.require: SR000GH1HL
597  */
598 HWTEST_F(ContextImplTest, AppExecFwk_ContextImpl_SetApplicationInfo_001, Function | MediumTest | Level1)
599 {
600     GTEST_LOG_(INFO) << "AppExecFwk_ContextImpl_SetApplicationInfo_001 start";
601     contextImpl_->SetApplicationInfo(nullptr);
602     EXPECT_EQ(contextImpl_->GetApplicationInfo(), nullptr);
603     std::shared_ptr<AppExecFwk::ApplicationInfo> applicationInfo = std::make_shared<AppExecFwk::ApplicationInfo>();
604     contextImpl_->SetApplicationInfo(applicationInfo);
605     EXPECT_NE(contextImpl_->GetApplicationInfo(), nullptr);
606     GTEST_LOG_(INFO) << "AppExecFwk_ContextImpl_SetApplicationInfo_001 end";
607 }
608 
609 /**
610  * @tc.number: AppExecFwk_ContextImpl_GetApplicationInfo_001
611  * @tc.name: GetApplicationInfo
612  * @tc.desc: Test whether GetApplicationInfo is called normally.
613  * @tc.type: FUNC
614  * @tc.require: SR000GH1HL
615  */
616 HWTEST_F(ContextImplTest, AppExecFwk_ContextImpl_GetApplicationInfo_001, Function | MediumTest | Level1)
617 {
618     GTEST_LOG_(INFO) << "AppExecFwk_ContextImpl_GetApplicationInfo_001 start";
619     EXPECT_TRUE(contextImpl_->GetApplicationInfo() == nullptr);
620     GTEST_LOG_(INFO) << "AppExecFwk_ContextImpl_GetApplicationInfo_001 end";
621 }
622 
623 /**
624  * @tc.number: AppExecFwk_ContextImpl_GetApplicationContext_001
625  * @tc.name: GetApplicationContext
626  * @tc.desc: Test whether GetApplicationContext is called normally.
627  * @tc.type: FUNC
628  * @tc.require: SR000GH1HL
629  */
630 HWTEST_F(ContextImplTest, AppExecFwk_ContextImpl_GetApplicationContext_001, Function | MediumTest | Level1)
631 {
632     GTEST_LOG_(INFO) << "AppExecFwk_ContextImpl_GetApplicationContext_001 start";
633     EXPECT_TRUE(contextImpl_->GetApplicationContext() == nullptr);
634 
635     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
636     EXPECT_NE(contextImpl, nullptr);
637 
638     auto parentContext = std::make_shared<AbilityRuntime::ContextImpl>();
639     EXPECT_NE(parentContext, nullptr);
640     contextImpl->SetParentContext(parentContext);
641     EXPECT_EQ(contextImpl->GetApplicationInfo(), nullptr);
642 
643     GTEST_LOG_(INFO) << "AppExecFwk_ContextImpl_GetApplicationContext_001 end";
644 }
645 
646 /**
647  * @tc.number: AppExecFwk_ContextImpl_SetParentContext_001
648  * @tc.name: SetParentContext
649  * @tc.desc: Test whether SetParentContext is called normally.
650  * @tc.type: FUNC
651  * @tc.require: SR000GH1HL
652  */
653 HWTEST_F(ContextImplTest, AppExecFwk_ContextImpl_SetParentContext_001, Function | MediumTest | Level1)
654 {
655     GTEST_LOG_(INFO) << "AppExecFwk_ContextImpl_SetParentContext_001 start";
656     std::shared_ptr<AbilityRuntime::ContextImpl> contextImpl_ = std::make_shared<AbilityRuntime::ContextImpl>();
657     contextImpl_->SetParentContext(contextImpl_);
658     EXPECT_TRUE(contextImpl_->GetApplicationContext() == nullptr);
659     GTEST_LOG_(INFO) << "AppExecFwk_ContextImpl_SetParentContext_001 end";
660 }
661 
662 /**
663  * @tc.number: AppExecFwk_ContextImpl_GetHapModuleInfo_001
664  * @tc.name: GetHapModuleInfo
665  * @tc.desc: Test whether GetHapModuleInfo is called normally.
666  * @tc.type: FUNC
667  * @tc.require: SR000GH1HL
668  */
669 HWTEST_F(ContextImplTest, AppExecFwk_ContextImpl_GetHapModuleInfo_001, Function | MediumTest | Level1)
670 {
671     GTEST_LOG_(INFO) << "AppExecFwk_ContextImpl_GetHapModuleInfo_001 start";
672     EXPECT_EQ(contextImpl_->GetHapModuleInfo(), nullptr);
673     GTEST_LOG_(INFO) << "AppExecFwk_ContextImpl_GetHapModuleInfo_001 end";
674 }
675 
676 /**
677  * @tc.number: CreateModuleContext_001
678  * @tc.name: CreateModuleContext
679  * @tc.desc: Test whether CreateModuleContext is called normally.
680  * @tc.type: FUNC
681  * @tc.require: SR000H6I25
682  */
683 HWTEST_F(ContextImplTest, CreateModuleContext_001, Function | MediumTest | Level1)
684 {
685     GTEST_LOG_(INFO) << "AppExecFwk_ContextImpl_CreateModuleContext_001 start";
686     EXPECT_EQ(contextImpl_->CreateModuleContext("module_name"), nullptr);
687     GTEST_LOG_(INFO) << "AppExecFwk_ContextImpl_CreateModuleContext_001 end";
688 }
689 
690 /**
691  * @tc.number: AppExecFwk_AppContext_RegisterAbilityLifecycleCallback_001
692  * @tc.name: RegisterAbilityLifecycleCallback
693  * @tc.desc: Test whether RegisterAbilityLifecycleCallback is called normally.
694  * @tc.type: FUNC
695  * @tc.require: issueI5HQEM
696  */
697 HWTEST_F(ContextImplTest, AppExecFwk_AppContext_RegisterAbilityLifecycleCallback_001, Function | MediumTest | Level1)
698 {
699     GTEST_LOG_(INFO) << "AppExecFwk_AppContext_RegisterAbilityLifecycleCallback_001 start";
700     std::shared_ptr<AbilityRuntime::ApplicationContext> applicationContext =
701         AbilityRuntime::ApplicationContext::GetInstance();
702     applicationContext->RegisterAbilityLifecycleCallback(nullptr);
703     EXPECT_NE(applicationContext, nullptr);
704     GTEST_LOG_(INFO) << "AppExecFwk_AppContext_RegisterAbilityLifecycleCallback_001 end";
705 }
706 
707 /**
708  * @tc.number: AppExecFwk_AppContext_UnregisterAbilityLifecycleCallback_001
709  * @tc.name: UnregisterAbilityLifecycleCallback
710  * @tc.desc: Test whether UnregisterAbilityLifecycleCallback is called normally.
711  * @tc.type: FUNC
712  * @tc.require: issueI5HQEM
713  */
714 HWTEST_F(ContextImplTest, AppExecFwk_AppContext_UnregisterAbilityLifecycleCallback_001, Function | MediumTest | Level1)
715 {
716     GTEST_LOG_(INFO) << "AppExecFwk_AppContext_UnregisterAbilityLifecycleCallback_001 start";
717     std::shared_ptr<AbilityRuntime::ApplicationContext> applicationContext =
718         AbilityRuntime::ApplicationContext::GetInstance();
719     applicationContext->UnregisterAbilityLifecycleCallback(nullptr);
720     EXPECT_NE(applicationContext, nullptr);
721     GTEST_LOG_(INFO) << "AppExecFwk_AppContext_UnregisterAbilityLifecycleCallback_001 end";
722 }
723 
724 /**
725  * @tc.number: AppExecFwk_AppContext_InitResourceManager_001
726  * @tc.name: InitResourceManager
727  * @tc.desc: Test whether InitResourceManager is called normally.
728  * @tc.type: FUNC
729  * @tc.require: issueI5826I
730  */
731 HWTEST_F(ContextImplTest, AppExecFwk_AppContext_InitResourceManager_001, Function | MediumTest | Level1)
732 {
733     GTEST_LOG_(INFO) << "AppExecFwk_AppContext_InitResourceManager_001 start";
734     std::shared_ptr<AbilityRuntime::ContextImpl> contextImpl_ = std::make_shared<AbilityRuntime::ContextImpl>();
735     std::shared_ptr<AbilityRuntime::ContextImpl> appContext = std::make_shared<AbilityRuntime::ContextImpl>();
736 
737     auto config = std::make_shared<AppExecFwk::Configuration>();
738     EXPECT_NE(config, nullptr);
739     contextImpl_->SetConfiguration(config);
740 
741     AppExecFwk::BundleInfo bundleInfo;
742     bundleInfo.name = "com.test.module";
743     bundleInfo.isKeepAlive = true;
744     bundleInfo.applicationInfo.process = "com.test.module";
745     bundleInfo.applicationInfo.multiProjects = true;
746     contextImpl_->InitResourceManager(bundleInfo, appContext, true, "");
747     EXPECT_TRUE(appContext->GetResourceManager() != nullptr);
748 
749     bundleInfo.applicationInfo.multiProjects = false;
750     contextImpl_->InitResourceManager(bundleInfo, appContext, true, "");
751     EXPECT_TRUE(appContext->GetResourceManager() != nullptr);
752 
753     bundleInfo.applicationInfo.multiProjects = true;
754     contextImpl_->InitResourceManager(bundleInfo, appContext, true, "com.test.module");
755     EXPECT_TRUE(appContext->GetResourceManager() != nullptr);
756 
757     bundleInfo.applicationInfo.multiProjects = false;
758     contextImpl_->InitResourceManager(bundleInfo, appContext, true, "com.test.module");
759     EXPECT_TRUE(appContext->GetResourceManager() != nullptr);
760     GTEST_LOG_(INFO) << "AppExecFwk_AppContext_InitResourceManager_001 end";
761 }
762 
763 /**
764  * @tc.number: AppExecFwk_AppContext_InitResourceManager_002
765  * @tc.name: InitResourceManager
766  * @tc.desc: Test whether InitResourceManager is called normally.
767  * @tc.type: FUNC
768  * @tc.require: issueI5826I
769  */
770 HWTEST_F(ContextImplTest, AppExecFwk_AppContext_InitResourceManager_002, Function | MediumTest | Level1)
771 {
772     GTEST_LOG_(INFO) << "AppExecFwk_AppContext_InitResourceManager_002 start";
773     std::shared_ptr<AbilityRuntime::ContextImpl> contextImpl_ = std::make_shared<AbilityRuntime::ContextImpl>();
774     std::shared_ptr<AbilityRuntime::ContextImpl> appContext = std::make_shared<AbilityRuntime::ContextImpl>();
775 
776     auto config = std::make_shared<AppExecFwk::Configuration>();
777     EXPECT_NE(config, nullptr);
778     contextImpl_->SetConfiguration(config);
779 
780     AppExecFwk::BundleInfo bundleInfo;
781     bundleInfo.name = "com.ohos.contactsdataability";
782     bundleInfo.isKeepAlive = true;
783     bundleInfo.applicationInfo.process = "com.ohos.contactsdataability";
784     bundleInfo.applicationInfo.multiProjects = true;
785     HapModuleInfo info;
786     info.name = "com.ohos.contactsdataability";
787     info.moduleName = "entry";
788     info.description = "dataability_description";
789     info.iconPath = "$media:icon";
790     info.deviceTypes = { "smartVision" };
791     info.bundleName = "com.ohos.contactsdataability";
792     bundleInfo.hapModuleInfos.push_back(info);
793     contextImpl_->InitResourceManager(bundleInfo, appContext, true, "entry");
794     EXPECT_TRUE(appContext->GetResourceManager() != nullptr);
795 
796     info.resourcePath = "/data/app/el1/budle/public/com.ohos.contactsdataability"\
797         "/com.ohos.contactsdataability/assets/entry/resources.index";
798     bundleInfo.hapModuleInfos.clear();
799     bundleInfo.hapModuleInfos.push_back(info);
800     contextImpl_->InitResourceManager(bundleInfo, appContext, true, "entry");
801     EXPECT_TRUE(appContext->GetResourceManager() != nullptr);
802 
803     info.hapPath = "/system/app/com.ohos.contactsdataability/Contacts_DataAbility.hap";
804     bundleInfo.hapModuleInfos.clear();
805     bundleInfo.hapModuleInfos.push_back(info);
806     contextImpl_->InitResourceManager(bundleInfo, appContext, true, "entry");
807     EXPECT_TRUE(appContext->GetResourceManager() != nullptr);
808 
809     info.resourcePath = "";
810     bundleInfo.hapModuleInfos.clear();
811     bundleInfo.hapModuleInfos.push_back(info);
812     contextImpl_->InitResourceManager(bundleInfo, appContext, true, "entry");
813     EXPECT_TRUE(appContext->GetResourceManager() != nullptr);
814     GTEST_LOG_(INFO) << "AppExecFwk_AppContext_InitResourceManager_002 end";
815 }
816 
817 /**
818  * @tc.number: AppExecFwk_AppContext_InitResourceManager_003
819  * @tc.name: InitResourceManager
820  * @tc.desc: Test whether InitResourceManager is called normally.
821  * @tc.type: FUNC
822  * @tc.require: issueI5826I
823  */
824 HWTEST_F(ContextImplTest, AppExecFwk_AppContext_InitResourceManager_003, Function | MediumTest | Level1)
825 {
826     GTEST_LOG_(INFO) << "AppExecFwk_AppContext_InitResourceManager_003 start";
827     std::shared_ptr<AbilityRuntime::ContextImpl> contextImpl_ = std::make_shared<AbilityRuntime::ContextImpl>();
828     std::shared_ptr<AbilityRuntime::ContextImpl> appContext = std::make_shared<AbilityRuntime::ContextImpl>();
829 
830     auto config = std::make_shared<AppExecFwk::Configuration>();
831     EXPECT_NE(config, nullptr);
832     contextImpl_->SetConfiguration(config);
833 
834     AppExecFwk::BundleInfo bundleInfo;
835     bundleInfo.name = "com.ohos.contactsdataability";
836     bundleInfo.isKeepAlive = true;
837     bundleInfo.applicationInfo.process = "com.ohos.contactsdataability";
838     bundleInfo.applicationInfo.multiProjects = true;
839     HapModuleInfo info;
840     info.name = "com.ohos.contactsdataability";
841     info.moduleName = "entry";
842     info.description = "dataability_description";
843     info.iconPath = "$media:icon";
844     info.deviceTypes = { "smartVision" };
845     info.bundleName = "com.ohos.contactsdataability";
846     info.resourcePath = "/data/app/el1/budle/public/com.ohos.contactsdataability"\
847         "/com.ohos.contactsdataability/assets/entry/resources.index";
848     info.hapPath = "/system/app/com.ohos.contactsdataability/Contacts_DataAbility.hap";
849     bundleInfo.hapModuleInfos.push_back(info);
850     contextImpl_->InitResourceManager(bundleInfo, appContext, true, "entry");
851     EXPECT_TRUE(appContext->GetResourceManager() != nullptr);
852 
853     contextImpl_->InitResourceManager(bundleInfo, appContext, true, "");
854     EXPECT_TRUE(appContext->GetResourceManager() != nullptr);
855 
856     info.moduleName = "entry1";
857     bundleInfo.hapModuleInfos.clear();
858     bundleInfo.hapModuleInfos.push_back(info);
859     contextImpl_->InitResourceManager(bundleInfo, appContext, true, "entry");
860     EXPECT_TRUE(appContext->GetResourceManager() != nullptr);
861 
862     contextImpl_->InitResourceManager(bundleInfo, appContext, true, "");
863     EXPECT_TRUE(appContext->GetResourceManager() != nullptr);
864 
865     GTEST_LOG_(INFO) << "AppExecFwk_AppContext_InitResourceManager_003 end";
866 }
867 
868 /**
869  * @tc.number: AppExecFwk_AppContext_InitResourceManager_004
870  * @tc.name: InitResourceManager
871  * @tc.desc: Test whether InitResourceManager is called normally.
872  * @tc.type: FUNC
873  * @tc.require: issueI5826I
874  */
875 HWTEST_F(ContextImplTest, AppExecFwk_AppContext_InitResourceManager_004, Function | MediumTest | Level1)
876 {
877     GTEST_LOG_(INFO) << "AppExecFwk_AppContext_InitResourceManager_004 start";
878     std::shared_ptr<AbilityRuntime::ContextImpl> contextImpl_ = std::make_shared<AbilityRuntime::ContextImpl>();
879     std::shared_ptr<AbilityRuntime::ContextImpl> appContext = std::make_shared<AbilityRuntime::ContextImpl>();
880 
881     auto config = std::make_shared<AppExecFwk::Configuration>();
882     EXPECT_NE(config, nullptr);
883     contextImpl_->SetConfiguration(config);
884 
885     AppExecFwk::BundleInfo bundleInfo;
886     bundleInfo.name = "com.ohos.contactsdataability";
887     bundleInfo.isKeepAlive = true;
888     bundleInfo.applicationInfo.process = "com.ohos.contactsdataability";
889     bundleInfo.applicationInfo.multiProjects = true;
890     HapModuleInfo info;
891     info.name = "com.ohos.contactsdataability";
892     info.moduleName = "entry";
893     info.description = "dataability_description";
894     info.iconPath = "$media:icon";
895     info.deviceTypes = { "smartVision" };
896     info.bundleName = "com.ohos.contactsdataability";
897     info.resourcePath = "/data/app/el1/budle/public/com.ohos.contactsdataability"\
898         "/com.ohos.contactsdataability/assets/entry/resources.index";
899     info.hapPath = "/system/app/com.ohos.contactsdataability/Contacts_DataAbility.hap";
900     bundleInfo.hapModuleInfos.push_back(info);
901     contextImpl_->InitResourceManager(bundleInfo, appContext, true, "entry");
902     EXPECT_TRUE(appContext->GetResourceManager() != nullptr);
903 
904     contextImpl_->InitResourceManager(bundleInfo, appContext, false, "entry");
905     EXPECT_TRUE(appContext->GetResourceManager() != nullptr);
906 
907     info.resourcePath = "resources.index";
908     bundleInfo.hapModuleInfos.clear();
909     bundleInfo.hapModuleInfos.push_back(info);
910     contextImpl_->InitResourceManager(bundleInfo, appContext, true, "entry");
911     EXPECT_TRUE(appContext->GetResourceManager() != nullptr);
912 
913     GTEST_LOG_(INFO) << "AppExecFwk_AppContext_InitResourceManager_004 end";
914 }
915 
916 /**
917  * @tc.name: AppExecFwk_AppContext_InitResourceManager_005
918  * @tc.desc: abnornal branch test for InitResourceManager.
919  * @tc.type: FUNC
920  * @tc.require: issueI61P7Y
921  */
922 HWTEST_F(ContextImplTest, AppExecFwk_AppContext_InitResourceManager_005, TestSize.Level1)
923 {
924     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
925     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
926     EXPECT_NE(contextImpl, nullptr);
927 
928     auto config = std::make_shared<AppExecFwk::Configuration>();
929     EXPECT_NE(config, nullptr);
930     contextImpl_->SetConfiguration(config);
931 
932     // branch when appContext is nullptr
933     AppExecFwk::BundleInfo bundleInfo;
934     contextImpl->InitResourceManager(bundleInfo, nullptr, true, "");
935 
936     // parent context is not nullptr
937     auto parentContext = std::make_shared<AbilityRuntime::ContextImpl>();
938     EXPECT_NE(parentContext, nullptr);
939     contextImpl->SetParentContext(parentContext);
940     EXPECT_EQ(contextImpl->GetResourceManager(), nullptr);
941 
942     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
943 }
944 
945 /**
946  * @tc.name: GetBundleCodePath_0100
947  * @tc.desc: Get bundle code path test.
948  * @tc.type: FUNC
949  * @tc.require: issueI61P7Y
950  */
951 HWTEST_F(ContextImplTest, GetBundleCodePath_0100, TestSize.Level1)
952 {
953     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
954     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
955     EXPECT_NE(contextImpl, nullptr);
956 
957     auto codePath = contextImpl->GetBundleCodePath();
958     EXPECT_EQ(codePath, "");
959 
960     // construt application info
961     auto applicationInfo = std::make_shared<AppExecFwk::ApplicationInfo>();
962     EXPECT_NE(applicationInfo, nullptr);
963     applicationInfo->codePath = "/data/app/el1";
964     contextImpl->SetApplicationInfo(applicationInfo);
965     EXPECT_EQ(contextImpl->GetBundleCodePath(), "/data/app/el1");
966 
967     // parent context is not nullptr
968     auto parentContext = std::make_shared<AbilityRuntime::ContextImpl>();
969     EXPECT_NE(parentContext, nullptr);
970     contextImpl->SetParentContext(parentContext);
971     EXPECT_EQ(contextImpl->GetBundleCodePath(), "");
972 
973     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
974 }
975 
976 /**
977  * @tc.name: InitHapModuleInfo_0100
978  * @tc.desc: Init hap module info test.
979  * @tc.type: FUNC
980  * @tc.require: issueI61P7Y
981  */
982 HWTEST_F(ContextImplTest, InitHapModuleInfo_0100, TestSize.Level1)
983 {
984     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
985     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
986     EXPECT_NE(contextImpl, nullptr);
987 
988     auto config = std::make_shared<AppExecFwk::Configuration>();
989     EXPECT_NE(config, nullptr);
990     contextImpl->SetConfiguration(config);
991 
992     AppExecFwk::HapModuleInfo hapModuleInfo;
993     contextImpl->InitHapModuleInfo(hapModuleInfo);
994     EXPECT_NE(contextImpl->GetHapModuleInfo(), nullptr);
995 
996     // branch when hap module info has been assigned
997     auto abilityInfo = std::make_shared<AppExecFwk::AbilityInfo>();
998     contextImpl->InitHapModuleInfo(abilityInfo);
999     EXPECT_NE(contextImpl->GetHapModuleInfo(), nullptr);
1000 
1001     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
1002 }
1003 
1004 /**
1005  * @tc.name: InitHapModuleInfo_0200
1006  * @tc.desc: Init hap module info test.
1007  * @tc.type: FUNC
1008  * @tc.require: issueI61P7Y
1009  */
1010 HWTEST_F(ContextImplTest, InitHapModuleInfo_0200, TestSize.Level1)
1011 {
1012     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
1013     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
1014     EXPECT_NE(contextImpl, nullptr);
1015 
1016     auto abilityInfo = std::make_shared<AppExecFwk::AbilityInfo>();
1017     contextImpl->InitHapModuleInfo(nullptr);
1018     contextImpl->InitHapModuleInfo(abilityInfo);
1019     EXPECT_NE(contextImpl->GetHapModuleInfo(), nullptr);
1020     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
1021 }
1022 
1023 /**
1024  * @tc.name: SetToken_0100
1025  * @tc.desc: set token and get token test.
1026  * @tc.type: FUNC
1027  * @tc.require: issueI61P7Y
1028  */
1029 HWTEST_F(ContextImplTest, SetToken_0100, TestSize.Level1)
1030 {
1031     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
1032     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
1033     EXPECT_NE(contextImpl, nullptr);
1034 
1035     contextImpl->SetToken(nullptr);
1036     sptr<IRemoteObject> token = new (std::nothrow) MockAbilityToken();
1037     contextImpl->SetToken(token);
1038     auto after = contextImpl->GetToken();
1039     EXPECT_EQ(token, after);
1040 
1041     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
1042 }
1043 
1044 /**
1045  * @tc.name: GetDeviceType_0100
1046  * @tc.desc: Get device type test.
1047  * @tc.type: FUNC
1048  * @tc.require: issueI61P7Y
1049  */
1050 HWTEST_F(ContextImplTest, GetDeviceType_0100, TestSize.Level1)
1051 {
1052     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
1053     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
1054     EXPECT_NE(contextImpl, nullptr);
1055 
1056     // branch when config is nullptr
1057     auto deviceType = contextImpl->GetDeviceType();
1058     EXPECT_EQ(deviceType, Global::Resource::DeviceType::DEVICE_PHONE);
1059 
1060     // get device type again
1061     deviceType = contextImpl->GetDeviceType();
1062     EXPECT_EQ(deviceType, Global::Resource::DeviceType::DEVICE_PHONE);
1063 
1064     // construct configuration
1065     auto config = std::make_shared<AppExecFwk::Configuration>();
1066     EXPECT_NE(config, nullptr);
1067     config->AddItem(AAFwk::GlobalConfigurationKey::DEVICE_TYPE, "phone");
1068     contextImpl->SetConfiguration(config);
1069     deviceType = contextImpl->GetDeviceType();
1070     EXPECT_EQ(deviceType, Global::Resource::DeviceType::DEVICE_PHONE);
1071 
1072     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
1073 }
1074 
1075 /**
1076  * @tc.number: GetCacheDir_0100
1077  * @tc.name: GetCacheDir_0100
1078  * @tc.desc: Get cache dir test.
1079  */
1080 HWTEST_F(ContextImplTest, GetCacheDir_0100, TestSize.Level1)
1081 {
1082     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
1083     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
1084     EXPECT_NE(contextImpl, nullptr);
1085 
1086     auto cacheDir = contextImpl->GetCacheDir();
1087     EXPECT_EQ(cacheDir, "/data/storage/el2/base/cache");
1088 
1089     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
1090 }
1091 
1092 /**
1093  * @tc.number: GetConfiguration_0100
1094  * @tc.name: GetConfiguration_0100
1095  * @tc.desc: Get configuration test.
1096  */
1097 HWTEST_F(ContextImplTest, GetConfiguration_0100, TestSize.Level1)
1098 {
1099     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
1100     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
1101     EXPECT_NE(contextImpl, nullptr);
1102     auto configRet = contextImpl->GetConfiguration();
1103     EXPECT_EQ(configRet, nullptr);
1104 
1105      // construct configuration
1106     auto config = std::make_shared<AppExecFwk::Configuration>();
1107     EXPECT_NE(config, nullptr);
1108     config->AddItem(AAFwk::GlobalConfigurationKey::DEVICE_TYPE, "phone");
1109     contextImpl->SetConfiguration(config);
1110 
1111     configRet = contextImpl->GetConfiguration();
1112     EXPECT_NE(configRet, nullptr);
1113 
1114     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
1115 }
1116 
1117 /**
1118  * @tc.number: IsCreateBySystemApp_0100
1119  * @tc.name: IsCreateBySystemApp_0100
1120  * @tc.desc: Is create by system app test.
1121  */
1122 HWTEST_F(ContextImplTest, IsCreateBySystemApp_0100, TestSize.Level1)
1123 {
1124     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
1125     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
1126     EXPECT_NE(contextImpl, nullptr);
1127     auto isSystemApp = contextImpl->IsCreateBySystemApp();
1128     EXPECT_EQ(isSystemApp, false);
1129 
1130     contextImpl->flags_ = CONTEXT_CREATE_BY_SYSTEM_APP;
1131     isSystemApp = contextImpl->IsCreateBySystemApp();
1132     EXPECT_EQ(isSystemApp, true);
1133     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
1134 }
1135 
1136 /**
1137  * @tc.number: SetResourceManager_0100
1138  * @tc.name: SetResourceManager_0100
1139  * @tc.desc: Set Resource Manager test.
1140  */
1141 HWTEST_F(ContextImplTest, SetResourceManager_0100, TestSize.Level1)
1142 {
1143     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
1144     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
1145     EXPECT_NE(contextImpl, nullptr);
1146     EXPECT_EQ(contextImpl->GetResourceManager(), nullptr);
1147 
1148     std::shared_ptr<Global::Resource::ResourceManager> resourceManager(Global::Resource::CreateResourceManager());
1149     EXPECT_NE(resourceManager, nullptr);
1150 
1151     contextImpl->SetResourceManager(resourceManager);
1152     EXPECT_NE(contextImpl->GetResourceManager(), nullptr);
1153 
1154     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
1155 }
1156 
1157 /**
1158  * @tc.number: GetResourceManager_0100
1159  * @tc.name: GetResourceManager_0100
1160  * @tc.desc: Get Resource Manager test.
1161  */
1162 HWTEST_F(ContextImplTest, GetResourceManager_0100, TestSize.Level1)
1163 {
1164     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
1165     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
1166     EXPECT_NE(contextImpl, nullptr);
1167     EXPECT_EQ(contextImpl->GetResourceManager(), nullptr);
1168 
1169     auto parentContext = std::make_shared<AbilityRuntime::ContextImpl>();
1170     EXPECT_NE(parentContext, nullptr);
1171     contextImpl->SetParentContext(parentContext);
1172     std::shared_ptr<Global::Resource::ResourceManager> resourceManager(Global::Resource::CreateResourceManager());
1173     EXPECT_NE(resourceManager, nullptr);
1174 
1175     parentContext->SetResourceManager(resourceManager);
1176     EXPECT_NE(contextImpl->GetResourceManager(), nullptr);
1177 
1178     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
1179 }
1180 
1181 /**
1182  * @tc.number: GetBundleManager_0100
1183  * @tc.name: GetBundleManager_0100
1184  * @tc.desc: Get Bundle Manager test.
1185  */
1186 HWTEST_F(ContextImplTest, GetBundleManager_0100, TestSize.Level1)
1187 {
1188     TAG_LOGI(AAFwkTag::TEST, "%{public}s start.", __func__);
1189     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
1190     EXPECT_NE(contextImpl, nullptr);
1191     contextImpl->GetBundleManager();
1192     EXPECT_NE(contextImpl->bundleMgr_, nullptr);
1193     TAG_LOGI(AAFwkTag::TEST, "%{public}s end.", __func__);
1194 }
1195 
1196 /**
1197  * @tc.number: ChangeToLocalPath_0100
1198  * @tc.name: ChangeToLocalPath_0100
1199  * @tc.desc: Change the inner path to local path.
1200  * @tc.require: issueI6SAQC
1201  */
1202 HWTEST_F(ContextImplTest, ChangeToLocalPath_0100, TestSize.Level1)
1203 {
1204     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
1205     EXPECT_NE(contextImpl, nullptr);
1206     std::string bundleName = "com.ohos.demo";
1207     std::string localPath = "/data/app/el1/bundle/public/com.ohos.demo/";
1208     contextImpl->ChangeToLocalPath(bundleName, localPath, localPath);
1209     EXPECT_TRUE(localPath == "/data/storage/el1/bundle/");
1210 }
1211 
1212 /**
1213  * @tc.number: ChangeToLocalPath_0200
1214  * @tc.name: ChangeToLocalPath_0200
1215  * @tc.desc: Change the outter path to local path.
1216  * @tc.require: issueI6SAQC
1217  */
1218 HWTEST_F(ContextImplTest, ChangeToLocalPath_0200, TestSize.Level1)
1219 {
1220     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
1221     EXPECT_NE(contextImpl, nullptr);
1222     std::string bundleName = "com.ohos.demo";
1223     std::string outBundleName = "com.example.demo";
1224     std::string localPath = "/data/app/el1/bundle/public/com.example.demo/";
1225     contextImpl->ChangeToLocalPath(bundleName, localPath, localPath);
1226     EXPECT_TRUE(localPath == "/data/bundles/com.example.demo/");
1227 }
1228 
1229 /**
1230  * @tc.name: GetAddOverlayPaths_0100
1231  * @tc.desc: Get overlay paths that need add.
1232  * @tc.type: FUNC
1233  * @tc.require: issueI6SAQC
1234  */
1235 HWTEST_F(ContextImplTest, GetAddOverlayPath_0100, TestSize.Level1)
1236 {
1237     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
1238     EXPECT_NE(contextImpl, nullptr);
1239     std::vector<OverlayModuleInfo> overlayModuleInfos;
1240     OverlayModuleInfo overlayModuleInfo;
1241     overlayModuleInfo.bundleName = "com.ohos.demo";
1242     overlayModuleInfo.moduleName = "entry";
1243     overlayModuleInfo.hapPath = "test";
1244     overlayModuleInfo.state = OverlayState::OVERLAY_ENABLE;
1245     overlayModuleInfos.emplace_back(overlayModuleInfo);
1246     contextImpl->overlayModuleInfos_ = overlayModuleInfos;
1247 
1248     std::vector<std::string> result = contextImpl->GetAddOverlayPaths(overlayModuleInfos);
1249     EXPECT_TRUE(result.size() == 1);
1250     EXPECT_TRUE(result[0] == "test");
1251 }
1252 
1253 /**
1254  * @tc.name: GetRemoveOverlayPaths_0100
1255  * @tc.desc: Get overlay paths that need remove.
1256  * @tc.type: FUNC
1257  * @tc.require: issueI6SAQC
1258  */
1259 HWTEST_F(ContextImplTest, GetRemoveOverlayPaths_0100, TestSize.Level1)
1260 {
1261     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
1262     EXPECT_NE(contextImpl, nullptr);
1263     std::vector<OverlayModuleInfo> overlayModuleInfos;
1264     OverlayModuleInfo overlayModuleInfo;
1265     overlayModuleInfo.bundleName = "com.ohos.demo";
1266     overlayModuleInfo.moduleName = "entry";
1267     overlayModuleInfo.hapPath = "test";
1268     overlayModuleInfo.state = OverlayState::OVERLAY_ENABLE;
1269     overlayModuleInfos.emplace_back(overlayModuleInfo);
1270     contextImpl->overlayModuleInfos_ = overlayModuleInfos;
1271     overlayModuleInfos[0].state = OverlayState::OVERLAY_DISABLED;
1272 
1273     std::vector<std::string> result = contextImpl->GetRemoveOverlayPaths(overlayModuleInfos);
1274     EXPECT_TRUE(result.size() == 1);
1275     EXPECT_TRUE(result[0] == "test");
1276 }
1277 
1278 HWTEST_F(ContextImplTest, OnOverlayChanged_0100, TestSize.Level1)
1279 {
1280     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
1281     EXPECT_NE(contextImpl, nullptr);
1282     std::shared_ptr<Global::Resource::ResourceManager> resourceManager(Global::Resource::CreateResourceManager());
1283     EXPECT_TRUE(resourceManager != nullptr);
1284     std::string bundleName = "com.ohos.demo";
1285     std::string moduleName = "entry";
1286     std::string loadPath = "test";
1287     std::vector<OverlayModuleInfo> overlayModuleInfos;
1288     OverlayModuleInfo overlayModuleInfo;
1289     overlayModuleInfo.bundleName = "com.ohos.demo";
1290     overlayModuleInfo.moduleName = "entry";
1291     overlayModuleInfo.hapPath = "test";
1292     overlayModuleInfo.state = OverlayState::OVERLAY_ENABLE;
1293     overlayModuleInfos.emplace_back(overlayModuleInfo);
1294     overlayModuleInfos[0].state = OverlayState::OVERLAY_DISABLED;
1295     OHOS::EventFwk::CommonEventData data;
1296     AAFwk::Want want;
1297     want.SetElementName("com.ohos.demo", "MainAbility", "entry");
1298     want.SetAction("usual.event.OVERLAY_STATE_CHANGED");
1299     data.SetWant(want);
1300 
1301     contextImpl->OnOverlayChanged(data, resourceManager, bundleName, moduleName, loadPath);
1302 }
1303 
1304 HWTEST_F(ContextImplTest, GetGroupDir_0100, TestSize.Level1)
1305 {
1306     auto contextImpl = std::make_shared<AbilityRuntime::ContextImpl>();
1307     EXPECT_NE(contextImpl, nullptr);
1308     contextImpl->currArea_ = "el1";
1309     auto path = contextImpl->GetGroupDir("1");
1310     EXPECT_EQ(path, "");
1311     contextImpl->currArea_ = "el2";
1312     path = contextImpl->GetGroupDir("1");
1313     string systemPreferencesDir;
1314     auto res = contextImpl->GetSystemPreferencesDir("", true, systemPreferencesDir);
1315     EXPECT_EQ(res, 0);
1316     res = contextImpl->GetSystemPreferencesDir("", false, systemPreferencesDir);
1317     EXPECT_EQ(res, 0);
1318     string systemDatabaseDir;
1319     res = contextImpl->GetSystemDatabaseDir("", true, systemDatabaseDir);
1320     EXPECT_EQ(res, 0);
1321     res = contextImpl->GetSystemDatabaseDir("", false, systemDatabaseDir);
1322     EXPECT_EQ(res, 0);
1323 }
1324 }  // namespace AppExecFwk
1325 }
1326