1 /*
2 * Copyright (c) 2021-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 <gtest/gtest.h>
17 #include <memory>
18
19 #include "ability_connect_manager.h"
20
21 #include "ability_config.h"
22 #include "ability_manager_errors.h"
23 #include "ability_scheduler.h"
24 #include "ability_util.h"
25 #include "bundlemgr/mock_bundle_manager.h"
26 #include "hilog_tag_wrapper.h"
27 #include "mock_ability_connect_callback.h"
28 #include "mock_sa_call.h"
29 #include "sa_mgr_client.h"
30 #include "system_ability_definition.h"
31 #include "ability_cache_manager.h"
32 #include "want.h"
33
34 using namespace testing::ext;
35 using namespace OHOS::AppExecFwk;
36
37 namespace OHOS {
38 namespace AAFwk {
39 class AbilityCacheManagerTest : public testing::Test {
40 public:
41
42 static void SetUpTestCase();
43 static void TearDownTestCase();
44 void SetUp() override;
45 void TearDown() override;
46 };
47
SetUpTestCase(void)48 void AbilityCacheManagerTest::SetUpTestCase(void)
49 {}
50
TearDownTestCase(void)51 void AbilityCacheManagerTest::TearDownTestCase(void)
52 {}
53
SetUp()54 void AbilityCacheManagerTest::SetUp()
55 {}
56
TearDown()57 void AbilityCacheManagerTest::TearDown()
58 {}
59
60 /**
61 * @tc.name: AbilityCacheManagerPutAndGetTest_001
62 * @tc.desc: Put a single ability record into cache and get it back with default ability name in want
63 * @tc.type: FUNC
64 * @tc.require:
65 */
66 HWTEST_F(AbilityCacheManagerTest, AbilityCacheManagerPutAndGetTest_001, TestSize.Level0)
67 {
68 OHOS::AAFwk::AbilityCacheManager::GetInstance().Init(10, 5);
69 OHOS::AppExecFwk::AbilityInfo abilityInfo;
70 abilityInfo.moduleName = "TestModuleName";
71 abilityInfo.bundleName = "TestBundleName";
72 OHOS::AppExecFwk::ApplicationInfo applicationInfo;
73 applicationInfo.accessTokenId = 1;
74 Want want;
75 ElementName element("", "", "ability", "");
76 want.SetElement(element);
77 auto abilityRecord_ = std::make_shared<AbilityRecord>(want, abilityInfo, applicationInfo);
78 abilityRecord_->Init();
79 std::shared_ptr<AbilityRecord> rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord_);
80 EXPECT_EQ(rec, nullptr);
81 int recId = abilityRecord_->GetRecordId();
82 AbilityRequest abilityRequest;
83 abilityRequest.abilityInfo = abilityInfo;
84 abilityRequest.appInfo = applicationInfo;
85 ElementName elementGet("", "", "AnotherAbility", "");
86 abilityRequest.want.SetElement(elementGet);
87 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Get(abilityRequest);
88 EXPECT_EQ(rec, nullptr); // incorrect ability name
89 abilityRequest.want.SetElement(element);
90 abilityRequest.abilityInfo.moduleName = "wrongModuleName";
91 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Get(abilityRequest);
92 EXPECT_EQ(rec, nullptr); // incorrect module name
93 abilityRequest.abilityInfo.moduleName = "TestModuleName";
94 abilityRequest.appInfo.accessTokenId = 0;
95 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Get(abilityRequest);
96 EXPECT_EQ(rec, nullptr); // incorrect access token Id
97 abilityRequest.appInfo.accessTokenId = 1;
98 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Get(abilityRequest);
99 EXPECT_EQ(rec->GetApplicationInfo().accessTokenId, applicationInfo.accessTokenId);
100 EXPECT_EQ(rec->GetAbilityInfo().moduleName, abilityInfo.moduleName);
101 EXPECT_EQ(rec->GetAbilityInfo().bundleName, abilityInfo.bundleName);
102 EXPECT_EQ(rec->GetWant().GetElement().GetAbilityName(), "ability");
103 EXPECT_EQ(rec->GetRecordId(), recId);
104 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Get(abilityRequest);
105 EXPECT_EQ(rec, nullptr);
106 }
107
108 /**
109 * @tc.name: AbilityCacheManagerRemoveTest_001
110 * @tc.desc: Put a single ability record into cache and remove with wrong accessTokenId
111 * @tc.type: FUNC
112 * @tc.require:
113 */
114 HWTEST_F(AbilityCacheManagerTest, AbilityCacheManagerRemoveTest_001, TestSize.Level0)
115 {
116 OHOS::AAFwk::AbilityCacheManager::GetInstance().Init(10, 5);
117 OHOS::AppExecFwk::AbilityInfo abilityInfo;
118 abilityInfo.moduleName = "TestModuleName";
119 abilityInfo.bundleName = "TestBundleName";
120 OHOS::AppExecFwk::ApplicationInfo applicationInfo;
121 applicationInfo.accessTokenId = 1;
122 Want want;
123 ElementName element("", "", "ability", "");
124 want.SetElement(element);
125 auto abilityRecord_ = std::make_shared<AbilityRecord>(want, abilityInfo, applicationInfo);
126 abilityRecord_->Init();
127 std::shared_ptr<AbilityRecord> rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord_);
128 int recId = abilityRecord_->GetRecordId();
129 EXPECT_EQ(rec, nullptr);
130 applicationInfo.accessTokenId = 0;
131 auto removeRec = std::make_shared<AbilityRecord>(want, abilityInfo, applicationInfo);
132 OHOS::AAFwk::AbilityCacheManager::GetInstance().Remove(removeRec);
133 applicationInfo.accessTokenId = 1;
134 AbilityRequest abilityRequest;
135 abilityRequest.abilityInfo = abilityInfo;
136 abilityRequest.appInfo = applicationInfo;
137 abilityRequest.want.SetElement(element);
138 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Get(abilityRequest);
139 EXPECT_EQ(rec->GetApplicationInfo().accessTokenId, applicationInfo.accessTokenId);
140 EXPECT_EQ(rec->GetAbilityInfo().moduleName, abilityInfo.moduleName);
141 EXPECT_EQ(rec->GetAbilityInfo().bundleName, abilityInfo.bundleName);
142 EXPECT_EQ(rec->GetWant().GetElement().GetAbilityName(), "ability");
143 EXPECT_EQ(rec->GetRecordId(), recId);
144 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Get(abilityRequest);
145 EXPECT_EQ(rec, nullptr);
146 }
147
148 /**
149 * @tc.name: AbilityCacheManagerRemoveTest_002
150 * @tc.desc: Put a single ability record into cache and remove with wrong access module name
151 * @tc.type: FUNC
152 * @tc.require:
153 */
154 HWTEST_F(AbilityCacheManagerTest, AbilityCacheManagerRemoveTest_002, TestSize.Level0)
155 {
156 OHOS::AAFwk::AbilityCacheManager::GetInstance().Init(10, 5);
157 OHOS::AppExecFwk::AbilityInfo abilityInfo;
158 abilityInfo.moduleName = "TestModuleName";
159 abilityInfo.bundleName = "TestBundleName";
160 OHOS::AppExecFwk::ApplicationInfo applicationInfo;
161 applicationInfo.accessTokenId = 1;
162 Want want;
163 ElementName element("", "", "ability", "");
164 want.SetElement(element);
165 auto abilityRecord_ = std::make_shared<AbilityRecord>(want, abilityInfo, applicationInfo);
166 abilityRecord_->Init();
167 std::shared_ptr<AbilityRecord> rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord_);
168 int recId = abilityRecord_->GetRecordId();
169 EXPECT_EQ(rec, nullptr);
170 abilityInfo.moduleName = "WrongModuleName";
171 auto removeRec = std::make_shared<AbilityRecord>(want, abilityInfo, applicationInfo);
172 OHOS::AAFwk::AbilityCacheManager::GetInstance().Remove(removeRec);
173 abilityInfo.moduleName = "TestModuleName";
174 AbilityRequest abilityRequest;
175 abilityRequest.abilityInfo = abilityInfo;
176 abilityRequest.appInfo = applicationInfo;
177 abilityRequest.want.SetElement(element);
178 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Get(abilityRequest);
179 EXPECT_EQ(rec->GetApplicationInfo().accessTokenId, applicationInfo.accessTokenId);
180 EXPECT_EQ(rec->GetAbilityInfo().moduleName, abilityInfo.moduleName);
181 EXPECT_EQ(rec->GetAbilityInfo().bundleName, abilityInfo.bundleName);
182 EXPECT_EQ(rec->GetWant().GetElement().GetAbilityName(), "ability");
183 EXPECT_EQ(rec->GetRecordId(), recId);
184 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Get(abilityRequest);
185 EXPECT_EQ(rec, nullptr);
186 }
187
188 /**
189 * @tc.name: AbilityCacheManagerRemoveTest_003
190 * @tc.desc: Put a single ability record into cache and remove with wrong ability name
191 * @tc.type: FUNC
192 * @tc.require:
193 */
194 HWTEST_F(AbilityCacheManagerTest, AbilityCacheManagerRemoveTest_003, TestSize.Level0)
195 {
196 OHOS::AAFwk::AbilityCacheManager::GetInstance().Init(10, 5);
197 OHOS::AppExecFwk::AbilityInfo abilityInfo;
198 abilityInfo.moduleName = "TestModuleName";
199 abilityInfo.bundleName = "TestBundleName";
200 OHOS::AppExecFwk::ApplicationInfo applicationInfo;
201 applicationInfo.accessTokenId = 1;
202 Want want;
203 ElementName element("", "", "ability", "");
204 want.SetElement(element);
205 auto abilityRecord_ = std::make_shared<AbilityRecord>(want, abilityInfo, applicationInfo);
206 abilityRecord_->Init();
207 std::shared_ptr<AbilityRecord> rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord_);
208 int recId = abilityRecord_->GetRecordId();
209 EXPECT_EQ(rec, nullptr);
210 ElementName wrongeElement("", "", "wrongAbility", "");
211 want.SetElement(wrongeElement);
212 auto removeRec = std::make_shared<AbilityRecord>(want, abilityInfo, applicationInfo);
213 OHOS::AAFwk::AbilityCacheManager::GetInstance().Remove(removeRec);
214 AbilityRequest abilityRequest;
215 abilityRequest.abilityInfo = abilityInfo;
216 abilityRequest.appInfo = applicationInfo;
217 abilityRequest.want.SetElement(element);
218 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Get(abilityRequest);
219 EXPECT_EQ(rec->GetApplicationInfo().accessTokenId, applicationInfo.accessTokenId);
220 EXPECT_EQ(rec->GetAbilityInfo().moduleName, abilityInfo.moduleName);
221 EXPECT_EQ(rec->GetAbilityInfo().bundleName, abilityInfo.bundleName);
222 EXPECT_EQ(rec->GetWant().GetElement().GetAbilityName(), "ability");
223 EXPECT_EQ(rec->GetRecordId(), recId);
224 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Get(abilityRequest);
225 EXPECT_EQ(rec, nullptr);
226 }
227
228 /**
229 * @tc.name: AbilityCacheManagerPutTest_001
230 * @tc.desc: Put multi ability records so that dev cache is full
231 * and eliminate the first ability record in dev cache and use
232 * @tc.type: FUNC
233 * @tc.require:
234 */
235 HWTEST_F(AbilityCacheManagerTest, AbilityCacheManagerPutTest_001, TestSize.Level0)
236 {
237 OHOS::AAFwk::AbilityCacheManager::GetInstance().Init(2, 1);
238 OHOS::AppExecFwk::AbilityInfo abilityInfo1;
239 abilityInfo1.moduleName = "TestModuleName1";
240 abilityInfo1.bundleName = "TestBundleName1";
241 OHOS::AppExecFwk::ApplicationInfo applicationInfo1;
242 applicationInfo1.accessTokenId = 1;
243 Want want;
244 auto abilityRecord1 = std::make_shared<AbilityRecord>(want, abilityInfo1, applicationInfo1);
245 abilityRecord1->Init();
246 std::shared_ptr<AbilityRecord> rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord1);
247 EXPECT_EQ(rec, nullptr);
248 int recId1 = abilityRecord1->GetRecordId();
249 OHOS::AppExecFwk::AbilityInfo abilityInfo2;
250 abilityInfo2.moduleName = "TestModuleName2";
251 abilityInfo2.bundleName = "TestBundleName2";
252 OHOS::AppExecFwk::ApplicationInfo applicationInfo2;
253 applicationInfo2.accessTokenId = 2;
254 auto abilityRecord2 = std::make_shared<AbilityRecord>(want, abilityInfo2, applicationInfo2);
255 abilityRecord2->Init();
256 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord2);
257 EXPECT_EQ(rec, nullptr);
258
259 OHOS::AppExecFwk::AbilityInfo abilityInfo3;
260 abilityInfo3.moduleName = "TestModuleName3";
261 abilityInfo3.bundleName = "TestBundleName3";
262 OHOS::AppExecFwk::ApplicationInfo applicationInfo3;
263 applicationInfo3.accessTokenId = 3;
264 auto abilityRecord3 = std::make_shared<AbilityRecord>(want, abilityInfo3, applicationInfo3);
265 abilityRecord3->Init();
266 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord3);
267
268 EXPECT_EQ(rec->GetApplicationInfo().accessTokenId, applicationInfo1.accessTokenId);
269 EXPECT_EQ(rec->GetAbilityInfo().moduleName, abilityInfo1.moduleName);
270 EXPECT_EQ(rec->GetAbilityInfo().bundleName, abilityInfo1.bundleName);
271 EXPECT_EQ(rec->GetRecordId(), recId1);
272 OHOS::AAFwk::AbilityCacheManager::GetInstance().Remove(abilityRecord2);
273 OHOS::AAFwk::AbilityCacheManager::GetInstance().Remove(abilityRecord3);
274 }
275
276 /**
277 * @tc.name: AbilityCacheManagerPutTest_002
278 * @tc.desc: Put multi ability records so that proc cache is full and eliminate the first ability record in proc cache
279 * @tc.type: FUNC
280 * @tc.require:
281 */
282 HWTEST_F(AbilityCacheManagerTest, AbilityCacheManagerPutTest_002, TestSize.Level0)
283 {
284 OHOS::AAFwk::AbilityCacheManager::GetInstance().Init(3, 1);
285 OHOS::AppExecFwk::AbilityInfo abilityInfo1;
286 abilityInfo1.moduleName = "TestModuleName1";
287 abilityInfo1.bundleName = "TestBundleName1";
288 OHOS::AppExecFwk::ApplicationInfo applicationInfo1;
289 applicationInfo1.accessTokenId = 1;
290 Want want;
291 auto abilityRecord1 = std::make_shared<AbilityRecord>(want, abilityInfo1, applicationInfo1);
292 abilityRecord1->Init();
293 std::shared_ptr<AbilityRecord> rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord1);
294 EXPECT_EQ(rec, nullptr);
295
296 OHOS::AppExecFwk::AbilityInfo abilityInfo2;
297 abilityInfo2.moduleName = "TestModuleName2";
298 abilityInfo2.bundleName = "TestBundleName2";
299 OHOS::AppExecFwk::ApplicationInfo applicationInfo2;
300 applicationInfo2.accessTokenId = 2;
301 auto abilityRecord2 = std::make_shared<AbilityRecord>(want, abilityInfo2, applicationInfo2);
302 abilityRecord2->Init();
303 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord2);
304 EXPECT_EQ(rec, nullptr);
305 int recId2 = abilityRecord2->GetRecordId();
306 OHOS::AppExecFwk::AbilityInfo abilityInfo3;
307 abilityInfo3.moduleName = "TestModuleName3";
308 abilityInfo3.bundleName = "TestBundleName3";
309 OHOS::AppExecFwk::ApplicationInfo applicationInfo3;
310 applicationInfo3.accessTokenId = 2;
311 auto abilityRecord3 = std::make_shared<AbilityRecord>(want, abilityInfo3, applicationInfo3);
312 abilityRecord3->Init();
313 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord3);
314
315 EXPECT_EQ(rec->GetApplicationInfo().accessTokenId, applicationInfo2.accessTokenId);
316 EXPECT_EQ(rec->GetAbilityInfo().moduleName, abilityInfo2.moduleName);
317 EXPECT_EQ(rec->GetAbilityInfo().bundleName, abilityInfo2.bundleName);
318 EXPECT_EQ(rec->GetRecordId(), recId2);
319 OHOS::AAFwk::AbilityCacheManager::GetInstance().Remove(abilityRecord1);
320 OHOS::AAFwk::AbilityCacheManager::GetInstance().Remove(abilityRecord3);
321 }
322
323 /**
324 * @tc.name: AbilityCacheManagerPutTest_003
325 * @tc.desc: Put multi ability records so that proc cache are full at the same time
326 * and eliminate the first ability record in proc cache
327 * @tc.type: FUNC
328 * @tc.require:
329 */
330 HWTEST_F(AbilityCacheManagerTest, AbilityCacheManagerPutTest_003, TestSize.Level0)
331 {
332 OHOS::AAFwk::AbilityCacheManager::GetInstance().Init(3, 1);
333 OHOS::AppExecFwk::AbilityInfo abilityInfo1;
334 abilityInfo1.moduleName = "TestModuleName1";
335 abilityInfo1.bundleName = "TestBundleName1";
336 OHOS::AppExecFwk::ApplicationInfo applicationInfo1;
337 applicationInfo1.accessTokenId = 1;
338 Want want;
339 auto abilityRecord1 = std::make_shared<AbilityRecord>(want, abilityInfo1, applicationInfo1);
340 abilityRecord1->Init();
341 std::shared_ptr<AbilityRecord> rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord1);
342 EXPECT_EQ(rec, nullptr);
343
344 OHOS::AppExecFwk::AbilityInfo abilityInfo2;
345 abilityInfo2.moduleName = "TestModuleName2";
346 abilityInfo2.bundleName = "TestBundleName2";
347 OHOS::AppExecFwk::ApplicationInfo applicationInfo2;
348 applicationInfo2.accessTokenId = 2;
349
350 auto abilityRecord2 = std::make_shared<AbilityRecord>(want, abilityInfo2, applicationInfo2);
351 abilityRecord2->Init();
352 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord2);
353 EXPECT_EQ(rec, nullptr);
354
355 OHOS::AppExecFwk::AbilityInfo abilityInfo3;
356 abilityInfo3.moduleName = "TestModuleName3";
357 abilityInfo3.bundleName = "TestBundleName3";
358 OHOS::AppExecFwk::ApplicationInfo applicationInfo3;
359 applicationInfo3.accessTokenId = 3;
360 auto abilityRecord3 = std::make_shared<AbilityRecord>(want, abilityInfo3, applicationInfo3);
361 abilityRecord3->Init();
362 int recId3 = abilityRecord3->GetRecordId();
363 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord3);
364 EXPECT_EQ(rec, nullptr);
365
366 OHOS::AppExecFwk::AbilityInfo abilityInfo4;
367 abilityInfo4.moduleName = "TestModuleName4";
368 abilityInfo4.bundleName = "TestBundleName4";
369 OHOS::AppExecFwk::ApplicationInfo applicationInfo4;
370 applicationInfo4.accessTokenId = 3;
371
372 auto abilityRecord4 = std::make_shared<AbilityRecord>(want, abilityInfo4, applicationInfo4);
373 abilityRecord4->Init();
374 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord4);
375 EXPECT_EQ(rec->GetApplicationInfo().accessTokenId, applicationInfo3.accessTokenId);
376 EXPECT_EQ(rec->GetAbilityInfo().moduleName, abilityInfo3.moduleName);
377 EXPECT_EQ(rec->GetAbilityInfo().bundleName, abilityInfo3.bundleName);
378 EXPECT_EQ(rec->GetRecordId(), recId3);
379
380 OHOS::AAFwk::AbilityCacheManager::GetInstance().Remove(abilityRecord1);
381 OHOS::AAFwk::AbilityCacheManager::GetInstance().Remove(abilityRecord2);
382 OHOS::AAFwk::AbilityCacheManager::GetInstance().Remove(abilityRecord4);
383 }
384
385 /**
386 * @tc.name: AbilityCacheManagerPutTest_004
387 * @tc.desc: Put multi ability records so that dev cache is full and eliminate the first ability record in dev cache
388 * @tc.type: FUNC
389 * @tc.require:
390 */
391 HWTEST_F(AbilityCacheManagerTest, AbilityCacheManagerPutTest_004, TestSize.Level0)
392 {
393 OHOS::AAFwk::AbilityCacheManager::GetInstance().Init(2, 1);
394 OHOS::AppExecFwk::AbilityInfo abilityInfo1;
395 abilityInfo1.moduleName = "TestModuleName1";
396 abilityInfo1.bundleName = "TestBundleName1";
397 OHOS::AppExecFwk::ApplicationInfo applicationInfo1;
398 applicationInfo1.accessTokenId = 1;
399 Want want;
400 auto abilityRecord1 = std::make_shared<AbilityRecord>(want, abilityInfo1, applicationInfo1);
401 abilityRecord1->Init();
402 std::shared_ptr<AbilityRecord> rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord1);
403 EXPECT_EQ(rec, nullptr);
404 int recId1 = abilityRecord1->GetRecordId();
405 OHOS::AppExecFwk::AbilityInfo abilityInfo2;
406 abilityInfo2.moduleName = "TestModuleName2";
407 abilityInfo2.bundleName = "TestBundleName2";
408 OHOS::AppExecFwk::ApplicationInfo applicationInfo2;
409 applicationInfo2.accessTokenId = 2;
410 auto abilityRecord2 = std::make_shared<AbilityRecord>(want, abilityInfo2, applicationInfo2);
411 abilityRecord2->Init();
412 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord2);
413 EXPECT_EQ(rec, nullptr);
414
415 OHOS::AppExecFwk::AbilityInfo abilityInfo3;
416 abilityInfo3.moduleName = "TestModuleName3";
417 abilityInfo3.bundleName = "TestBundleName3";
418 OHOS::AppExecFwk::ApplicationInfo applicationInfo3;
419 applicationInfo3.accessTokenId = 3;
420 auto abilityRecord3 = std::make_shared<AbilityRecord>(want, abilityInfo3, applicationInfo3);
421 abilityRecord3->Init();
422 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord3);
423
424 EXPECT_EQ(rec->GetApplicationInfo().accessTokenId, applicationInfo1.accessTokenId);
425 EXPECT_EQ(rec->GetAbilityInfo().moduleName, abilityInfo1.moduleName);
426 EXPECT_EQ(rec->GetAbilityInfo().bundleName, abilityInfo1.bundleName);
427 EXPECT_EQ(rec->GetRecordId(), recId1);
428
429 OHOS::AAFwk::AbilityCacheManager::GetInstance().Remove(abilityRecord2);
430 OHOS::AAFwk::AbilityCacheManager::GetInstance().Remove(abilityRecord3);
431 }
432
433 /**
434 * @tc.name: AbilityCacheManagerPutAndRemoveTest_001
435 * @tc.desc: Put a single ability record into cache and remove it then get a nullptr with request
436 * @tc.type: FUNC
437 * @tc.require:
438 */
439 HWTEST_F(AbilityCacheManagerTest, AbilityCacheManagerPutAndRemoveTest_001, TestSize.Level0)
440 {
441 OHOS::AAFwk::AbilityCacheManager::GetInstance().Init(10, 5);
442 OHOS::AppExecFwk::AbilityInfo abilityInfo;
443 abilityInfo.moduleName = "TestModuleName";
444 abilityInfo.bundleName = "TestBundleName";
445 OHOS::AppExecFwk::ApplicationInfo applicationInfo;
446 applicationInfo.accessTokenId = 0;
447 Want want;
448 auto abilityRecord_ = std::make_shared<AbilityRecord>(want, abilityInfo, applicationInfo);
449 abilityRecord_->Init();
450 std::shared_ptr<AbilityRecord> rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord_);
451 EXPECT_EQ(rec, nullptr);
452 OHOS::AAFwk::AbilityCacheManager::GetInstance().Remove(abilityRecord_);
453 AbilityRequest abilityRequest;
454 abilityRequest.abilityInfo = abilityInfo;
455 abilityRequest.appInfo = applicationInfo;
456 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Get(abilityRequest);
457 EXPECT_EQ(rec, nullptr);
458 OHOS::AppExecFwk::AbilityInfo abilityInfo1;
459 abilityInfo.moduleName = "TestModuleName1";
460 abilityInfo.bundleName = "TestBundleName1";
461 OHOS::AppExecFwk::ApplicationInfo applicationInfo1;
462 applicationInfo.accessTokenId = 1;
463 auto abilityRecord1 = std::make_shared<AbilityRecord>(want, abilityInfo, applicationInfo);
464 abilityRecord1->Init();
465 OHOS::AAFwk::AbilityCacheManager::GetInstance().Remove(abilityRecord1);
466 }
467
468 /**
469 * @tc.name: AbilityCacheManagerFindByToken_001
470 * @tc.desc: Put a single ability record into cache and find it, find will not remove cache
471 * @tc.type: FUNC
472 * @tc.require:
473 */
474 HWTEST_F(AbilityCacheManagerTest, AbilityCacheManagerFindByToken_001, TestSize.Level0)
475 {
476 OHOS::AAFwk::AbilityCacheManager::GetInstance().Init(10, 5);
477 OHOS::AppExecFwk::AbilityInfo abilityInfo;
478 abilityInfo.moduleName = "TestModuleName";
479 abilityInfo.bundleName = "TestBundleName";
480 OHOS::AppExecFwk::ApplicationInfo applicationInfo;
481 applicationInfo.accessTokenId = 0;
482 Want want;
483 auto abilityRecord_ = std::make_shared<AbilityRecord>(want, abilityInfo, applicationInfo);
484 abilityRecord_->Init();
485 int recId = abilityRecord_->GetRecordId();
486 std::shared_ptr<AbilityRecord> rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord_);
487 EXPECT_EQ(rec, nullptr);
488 auto recordFind = OHOS::AAFwk::AbilityCacheManager::GetInstance().FindRecordByToken(abilityRecord_->GetToken());
489 EXPECT_EQ(recordFind->GetApplicationInfo().accessTokenId, applicationInfo.accessTokenId);
490 EXPECT_EQ(recordFind->GetAbilityInfo().moduleName, abilityInfo.moduleName);
491 EXPECT_EQ(recordFind->GetAbilityInfo().bundleName, abilityInfo.bundleName);
492 EXPECT_EQ(recordFind->GetRecordId(), recId);
493 AbilityRequest abilityRequest;
494 abilityRequest.abilityInfo = abilityInfo;
495 abilityRequest.appInfo = applicationInfo;
496 auto recGet = OHOS::AAFwk::AbilityCacheManager::GetInstance().Get(abilityRequest);
497 EXPECT_EQ(recGet->GetApplicationInfo().accessTokenId, applicationInfo.accessTokenId);
498 EXPECT_EQ(recGet->GetAbilityInfo().moduleName, abilityInfo.moduleName);
499 EXPECT_EQ(recGet->GetAbilityInfo().bundleName, abilityInfo.bundleName);
500 EXPECT_EQ(recGet->GetRecordId(), recId);
501 }
502
503 /**
504 * @tc.name: AbilityCacheManagerGetAbilityList_001
505 * @tc.desc: Put a single ability record into cache and get ability list
506 * @tc.type: FUNC
507 * @tc.require:
508 */
509 HWTEST_F(AbilityCacheManagerTest, AbilityCacheManagerGetAbilityList_001, TestSize.Level0)
510 {
511 OHOS::AAFwk::AbilityCacheManager::GetInstance().Init(10, 5);
512 OHOS::AppExecFwk::AbilityInfo abilityInfo;
513 abilityInfo.moduleName = "TestModuleName";
514 abilityInfo.bundleName = "TestBundleName";
515 OHOS::AppExecFwk::ApplicationInfo applicationInfo;
516 applicationInfo.accessTokenId = 0;
517 Want want;
518 auto abilityRecord_ = std::make_shared<AbilityRecord>(want, abilityInfo, applicationInfo);
519 abilityRecord_->Init();
520 int recId = abilityRecord_->GetRecordId();
521 std::shared_ptr<AbilityRecord> rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord_);
522 EXPECT_EQ(rec, nullptr);
523 auto abilityList = OHOS::AAFwk::AbilityCacheManager::GetInstance().GetAbilityList();
524 EXPECT_EQ(abilityList.size(), 1);
525 auto recordFind = *(abilityList.begin());
526 EXPECT_EQ(recordFind->GetApplicationInfo().accessTokenId, applicationInfo.accessTokenId);
527 EXPECT_EQ(recordFind->GetAbilityInfo().moduleName, abilityInfo.moduleName);
528 EXPECT_EQ(recordFind->GetAbilityInfo().bundleName, abilityInfo.bundleName);
529 EXPECT_EQ(recordFind->GetRecordId(), recId);
530 OHOS::AAFwk::AbilityCacheManager::GetInstance().Remove(abilityRecord_);
531 }
532
533 /**
534 * @tc.name: AbilityCacheManagerFindBySessionId_001
535 * @tc.desc: Put a single ability record into cache and find it, find will not remove cache
536 * @tc.type: FUNC
537 * @tc.require:
538 */
539 HWTEST_F(AbilityCacheManagerTest, AbilityCacheManagerFindBySessionId_001, TestSize.Level0)
540 {
541 OHOS::AAFwk::AbilityCacheManager::GetInstance().Init(10, 5);
542 OHOS::AppExecFwk::AbilityInfo abilityInfo;
543 std::string sessionId = "TestSessionId";
544 abilityInfo.moduleName = "TestModuleName";
545 abilityInfo.bundleName = "TestBundleName";
546 OHOS::AppExecFwk::ApplicationInfo applicationInfo;
547 applicationInfo.accessTokenId = 0;
548 Want want;
549 want.SetParam(Want::PARAM_ASSERT_FAULT_SESSION_ID, sessionId);
550 auto abilityRecord_ = std::make_shared<AbilityRecord>(want, abilityInfo, applicationInfo);
551 abilityRecord_->Init();
552 int recId = abilityRecord_->GetRecordId();
553 std::shared_ptr<AbilityRecord> rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord_);
554 EXPECT_EQ(rec, nullptr);
555 auto recordFind = OHOS::AAFwk::AbilityCacheManager::GetInstance().FindRecordBySessionId(sessionId);
556 EXPECT_EQ(recordFind->GetApplicationInfo().accessTokenId, applicationInfo.accessTokenId);
557 EXPECT_EQ(recordFind->GetAbilityInfo().moduleName, abilityInfo.moduleName);
558 EXPECT_EQ(recordFind->GetAbilityInfo().bundleName, abilityInfo.bundleName);
559 EXPECT_EQ(recordFind->GetRecordId(), recId);
560 AbilityRequest abilityRequest;
561 abilityRequest.abilityInfo = abilityInfo;
562 abilityRequest.appInfo = applicationInfo;
563 auto recGet = OHOS::AAFwk::AbilityCacheManager::GetInstance().Get(abilityRequest);
564 EXPECT_EQ(recGet->GetApplicationInfo().accessTokenId, applicationInfo.accessTokenId);
565 EXPECT_EQ(recGet->GetAbilityInfo().moduleName, abilityInfo.moduleName);
566 EXPECT_EQ(recGet->GetAbilityInfo().bundleName, abilityInfo.bundleName);
567 EXPECT_EQ(recGet->GetRecordId(), recId);
568 }
569
570 /**
571 * @tc.name: AbilityCacheManagerFindByServiceKey_001
572 * @tc.desc: Put a single ability record into cache and find it, find will not remove cache
573 * @tc.type: FUNC
574 * @tc.require:
575 */
576 HWTEST_F(AbilityCacheManagerTest, AbilityCacheManagerFindByServiceKey_001, TestSize.Level0)
577 {
578 OHOS::AAFwk::AbilityCacheManager::GetInstance().Init(10, 5);
579 OHOS::AppExecFwk::AbilityInfo abilityInfo;
580 abilityInfo.moduleName = "TestModuleName";
581 abilityInfo.bundleName = "TestBundleName";
582 OHOS::AppExecFwk::ApplicationInfo applicationInfo;
583 applicationInfo.accessTokenId = 0;
584 Want want;
585 auto abilityRecord_ = std::make_shared<AbilityRecord>(want, abilityInfo, applicationInfo);
586 abilityRecord_->Init();
587 int recId = abilityRecord_->GetRecordId();
588 std::string serviceKey = abilityRecord_->GetURI();
589 std::shared_ptr<AbilityRecord> rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord_);
590 EXPECT_EQ(rec, nullptr);
591 auto recordFind = OHOS::AAFwk::AbilityCacheManager::GetInstance().FindRecordByServiceKey(serviceKey);
592 EXPECT_EQ(recordFind->GetApplicationInfo().accessTokenId, applicationInfo.accessTokenId);
593 EXPECT_EQ(recordFind->GetAbilityInfo().moduleName, abilityInfo.moduleName);
594 EXPECT_EQ(recordFind->GetAbilityInfo().bundleName, abilityInfo.bundleName);
595 EXPECT_EQ(recordFind->GetRecordId(), recId);
596 AbilityRequest abilityRequest;
597 abilityRequest.abilityInfo = abilityInfo;
598 abilityRequest.appInfo = applicationInfo;
599 auto recGet = OHOS::AAFwk::AbilityCacheManager::GetInstance().Get(abilityRequest);
600 EXPECT_EQ(recGet->GetApplicationInfo().accessTokenId, applicationInfo.accessTokenId);
601 EXPECT_EQ(recGet->GetAbilityInfo().moduleName, abilityInfo.moduleName);
602 EXPECT_EQ(recGet->GetAbilityInfo().bundleName, abilityInfo.bundleName);
603 EXPECT_EQ(recGet->GetRecordId(), recId);
604 }
605
606 /**
607 * @tc.name: AbilityCacheManagerSignRestartAppFlag_001
608 * @tc.desc: Put a single ability record into cache and sign restart app flag
609 * @tc.type: FUNC
610 * @tc.require:
611 */
612 HWTEST_F(AbilityCacheManagerTest, AbilityCacheManagerSignRestartAppFlag_001, TestSize.Level0)
613 {
614 OHOS::AAFwk::AbilityCacheManager::GetInstance().Init(10, 5);
615 OHOS::AppExecFwk::AbilityInfo abilityInfo;
616 abilityInfo.moduleName = "TestModuleName";
617 abilityInfo.bundleName = "TestBundleName";
618 OHOS::AppExecFwk::ApplicationInfo applicationInfo;
619 applicationInfo.accessTokenId = 0;
620 applicationInfo.bundleName = abilityInfo.bundleName;
621 Want want;
622 auto abilityRecord_ = std::make_shared<AbilityRecord>(want, abilityInfo, applicationInfo);
623 abilityRecord_->Init();
624 int recId = abilityRecord_->GetRecordId();
625 std::shared_ptr<AbilityRecord> rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord_);
626 EXPECT_EQ(rec, nullptr);
627 OHOS::AAFwk::AbilityCacheManager::GetInstance().SignRestartAppFlag(applicationInfo.uid);
628 AbilityRequest abilityRequest;
629 abilityRequest.abilityInfo = abilityInfo;
630 abilityRequest.appInfo = applicationInfo;
631 auto recordFind = OHOS::AAFwk::AbilityCacheManager::GetInstance().Get(abilityRequest);
632 EXPECT_EQ(recordFind->GetRestartAppFlag(), false);
633 }
634
635 /**
636 * @tc.name: AbilityCacheManagerDeleteInvalidRecord_001
637 * @tc.desc: Put a single ability record into cache and delete it by bundleName
638 * @tc.type: FUNC
639 * @tc.require:
640 */
641 HWTEST_F(AbilityCacheManagerTest, AbilityCacheManagerDeleteInvalidRecord_001, TestSize.Level0)
642 {
643 OHOS::AAFwk::AbilityCacheManager::GetInstance().Init(10, 5);
644 OHOS::AppExecFwk::AbilityInfo abilityInfo;
645 abilityInfo.moduleName = "TestModuleName";
646 abilityInfo.bundleName = "TestBundleName";
647 OHOS::AppExecFwk::ApplicationInfo applicationInfo;
648 applicationInfo.accessTokenId = 0;
649 Want want;
650 auto abilityRecord_ = std::make_shared<AbilityRecord>(want, abilityInfo, applicationInfo);
651 abilityRecord_->Init();
652 int recId = abilityRecord_->GetRecordId();
653 std::shared_ptr<AbilityRecord> rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Put(abilityRecord_);
654 EXPECT_EQ(rec, nullptr);
655 AbilityRequest abilityRequest;
656 abilityRequest.abilityInfo = abilityInfo;
657 abilityRequest.appInfo = applicationInfo;
658 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Get(abilityRequest);
659 EXPECT_EQ(rec->GetApplicationInfo().accessTokenId, applicationInfo.accessTokenId);
660 EXPECT_EQ(rec->GetAbilityInfo().moduleName, abilityInfo.moduleName);
661 EXPECT_EQ(rec->GetAbilityInfo().bundleName, abilityInfo.bundleName);
662 EXPECT_EQ(rec->GetRecordId(), recId);
663 OHOS::AAFwk::AbilityCacheManager::GetInstance().DeleteInvalidServiceRecord(abilityInfo.bundleName);
664 rec = OHOS::AAFwk::AbilityCacheManager::GetInstance().Get(abilityRequest);
665 EXPECT_EQ(rec, nullptr);
666 }
667 } // namespace AAFwk
668 } // namespace OHOS
669