1 /*
2  * Copyright (c) 2023-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 "dlp_permission_service_test.h"
17 #include <openssl/rand.h>
18 #include <string>
19 #include "accesstoken_kit.h"
20 #include "account_adapt.h"
21 #include "app_uninstall_observer.h"
22 #include "cert_parcel.h"
23 #define private public
24 #include "dlp_sandbox_change_callback_manager.h"
25 #include "open_dlp_file_callback_manager.h"
26 #undef private
27 #include "dlp_permission.h"
28 #include "dlp_permission_async_stub.h"
29 #include "dlp_permission_kit.h"
30 #include "dlp_permission_log.h"
31 #include "dlp_permission_serializer.h"
32 #include "dlp_sandbox_change_callback_proxy.h"
33 #include "dlp_sandbox_change_callback_stub.h"
34 #include "dlp_sandbox_change_callback_death_recipient.h"
35 #include "file_operator.h"
36 #include "ipc_skeleton.h"
37 #include "open_dlp_file_callback_proxy.h"
38 #include "open_dlp_file_callback_stub.h"
39 #include "open_dlp_file_callback_death_recipient.h"
40 #include "permission_policy.h"
41 #include "retention_file_manager.h"
42 #include "sandbox_json_manager.h"
43 #include "visited_dlp_file_info.h"
44 #define private public
45 #include "visit_record_file_manager.h"
46 #include "visit_record_json_manager.h"
47 #undef private
48 
49 using namespace testing::ext;
50 using namespace OHOS;
51 using namespace OHOS::Security::DlpPermission;
52 using namespace OHOS::Security::AccessToken;
53 using namespace std::chrono;
54 
55 namespace {
56 static constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {
57     LOG_CORE, SECURITY_DOMAIN_DLP_PERMISSION, "DlpPermissionServiceTest"};
58 const std::string TEST_URI = "/data/service/el1/public/dlp_permission_service1/retention_sandbox_info_test.json";
59 static const int32_t DEFAULT_USERID = 100;
60 static const std::string DLP_MANAGER_APP = "com.ohos.dlpmanager";
61 static const std::string PERMISSION_APP = "com.ohos.permissionmanager";
62 const uint32_t ACCOUNT_LENGTH = 20;
63 const uint32_t USER_NUM = 1;
64 const int AUTH_PERM = 1;
65 const int64_t DELTA_EXPIRY_TIME = 200;
66 const uint64_t EXPIRY_TEN_MINUTE = 60 * 10;
67 const uint32_t AESKEY_LEN = 32;
68 const uint32_t HMACKEY_LEN = 32;
69 const std::string ENC_ACCOUNT_TYPE = "accountType";
70 const std::string ENC_DATA_LEN = "encDataLen";
71 const std::string ENC_DATA = "encData";
72 const std::string EXTRA_INFO_LEN = "extraInfoLen";
73 const std::string EXTRA_INFO = "extraInfo";
74 const std::string ENC_POLICY = "encPolicy";
75 static int32_t g_userId = 100;
76 static const uint8_t ARRAY_CHAR_SIZE = 62;
77 static const char CHAR_ARRAY[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
78 
79 static const std::string POLICY_CIPHER = "8B6696A5DD160005C9DCAF43025CB240958D1E53D8E54D70DBED8C191411FA60C9B5D491B"
80     "AE3F34F124DBA805736FCBBC175D881818A93A0E07C844E9DF9503641BF2A98EC49BE0BB2"
81     "E75397187D6A3DC9DEED05A341BFBB761C39C906A9E1344E2CB25432B9C190E1948334A3E"
82     "CDB49C4340A7A8977685E4FDB6EB9E329AB5EEB1EEEBAEF158B0442F98C342714553E50477"
83     "040A52AD79068E6BC68A2F0E2E500DA721927EFF985BDDAF7BCF78FA3BEF2730B25EC05458"
84     "0FDB5BB4EBE7294737E8BF53C6F69C93D00FF41581F80DEA67BB5EBD253BC43729CB8B560B"
85     "893154240AC355CDF8381C84A093B39E5CD6CFF5746FD068F8AA1DEDF2C3C2A12AE2A5CDE9"
86     "075C8AE86654AE4C696C7BE8EB4AB67E25008DE09A5218EFA13B59BAFDFB11FFBB6AD637B9"
87     "B02F598FE511910A9C9F614AF0EA8312F62DAA6C2DA9DCAF973321C45139669E2482C2CB09"
88     "4E60361ED2BA908A4C07443251DFD70762E2180FA5E92DA1CE6D9AAF70761382FC1591BF57"
89     "554693AC55F7121757AA3A4827C9016E1FF5A84FB367047EA7BB28B8E19521BA72AE0BB7C3"
90     "192F5B6D6887034C85A08659850DABD211CD18D5295DD60EEB98FB27C3161134D984665658"
91     "3E29E7C166EB1475647889B62448145D146A8A7A777B346AB7476A10209ED8543965EF3ED3"
92     "C3F96C1CBEDA994243E3064975C23F32F4412F42753668E2CC447E88D6D73534B9F8DD4221"
93     "1074D2D819CA235343D012283F30368DE7C3FBC3A90128EF8CFA86C80C5D7167A3CA60B1F5"
94     "93DDAD90BFF1987C9243ACD4463B11B61A87B9953A0CAE8FD93ACC1E0B0140410451E5CD3A"
95     "E6BB61CF5B1004F46782D924D79CE5615084102A19604BF99D38BFA8B837210022B6AB21E4"
96     "33B5D4E23E278C8CB5EC79DAFEF2A39E3175A0FC6921C37345CAF8D0976677924775A620C5"
97     "E63418C6339525433182D8D127816B36B348B781E02DA65ACCBEAE950CFF8579586B18B77A"
98     "9960ADF484881811D6044E3CC68577599194439E43263E4095CD5399679B548CDFD7430CFB"
99     "F67A1AE23B4136931E10032E4CEACC278584B45337CF7C3E4FEA6D0F1424E3CBC490E4C1DF"
100     "FC2927AA3BC5F57471EAA7D12C65064015A25A11D98E25AFCDB1A1DD876A03EADA9CDD015C"
101     "1265A7FDFA9A766BA832F4B9A2B55B73A361D2A7BD68572EB2ABE1B1DC93904CB5ACD09807"
102     "6FE5089AD8DB2F38DF7D0A76C2C87E36C6F6A5E8190EA76F1F8F0B2493F1FDF38B220BEBC5"
103     "554B3038FE83FD7D10C35034CB3D9409AC9F8F762149A4B19CD0B18B87F4251722EFEFB601"
104     "6DDFACBB8E6F9BAFD48FCFE5370B5661EC4218A65246337E1E24B14CE14EB82CE3B553B560"
105     "8A9A94B1E2E7BAC7CC0B315228E870DF25DFBB8F77A916B8B08692A92D9CB5540DCF4AA4CF"
106     "9B196026908";
107 
GetCurrentTimeSec(void)108 uint64_t GetCurrentTimeSec(void)
109 {
110     return static_cast<uint64_t>(duration_cast<seconds>(system_clock::now().time_since_epoch()).count());
111 }
112 
NewUserSample(AuthUserInfo & user)113 void NewUserSample(AuthUserInfo& user)
114 {
115     user.authAccount = "allowAccountA";
116     user.authPerm = FULL_CONTROL;
117     user.permExpiryTime = GetCurrentTimeSec() + EXPIRY_TEN_MINUTE;
118     user.authAccountType = OHOS::Security::DlpPermission::DlpAccountType::CLOUD_ACCOUNT;
119 }
120 
GetRandNum()121 static uint8_t GetRandNum()
122 {
123     uint8_t rand;
124     RAND_bytes(reinterpret_cast<unsigned char *>(&rand), sizeof(rand));
125     return rand;
126 }
127 
GenerateRandArray(uint32_t len)128 uint8_t* GenerateRandArray(uint32_t len)
129 {
130     if (len < 1) {
131         DLP_LOG_ERROR(LABEL, "len error");
132         return nullptr;
133     }
134     uint8_t* str = new (std::nothrow) uint8_t[len];
135     if (str == nullptr) {
136         DLP_LOG_ERROR(LABEL, "New memory fail");
137         return nullptr;
138     }
139     for (uint32_t i = 0; i < len; i++) {
140         str[i] = GetRandNum() % 255; // uint8_t range 0 ~ 255
141     }
142     return str;
143 }
144 
GenerateRandStr(uint32_t len,std::string & res)145 static void GenerateRandStr(uint32_t len, std::string& res)
146 {
147     for (uint32_t i = 0; i < len; i++) {
148         uint32_t index = GetRandNum() % ARRAY_CHAR_SIZE;
149         DLP_LOG_INFO(LABEL, "%{public}u", index);
150         res.push_back(CHAR_ARRAY[index]);
151     }
152     DLP_LOG_INFO(LABEL, "%{public}s", res.c_str());
153 }
154 
155 struct GeneratePolicyParam {
156     uint32_t ownerAccountLen;
157     uint32_t aeskeyLen;
158     uint32_t ivLen;
159     uint32_t userNum;
160     uint32_t authAccountLen;
161     uint32_t authPerm;
162     int64_t deltaTime;
163     uint32_t hmacKeyLen;
164 };
165 
GeneratePolicy(PermissionPolicy & encPolicy,GeneratePolicyParam param)166 void GeneratePolicy(PermissionPolicy& encPolicy, GeneratePolicyParam param)
167 {
168     uint64_t curTime = static_cast<uint64_t>(
169         std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now().time_since_epoch()).count());
170     GenerateRandStr(param.ownerAccountLen, encPolicy.ownerAccount_);
171     encPolicy.ownerAccountId_ = encPolicy.ownerAccount_;
172     encPolicy.ownerAccountType_ = OHOS::Security::DlpPermission::DlpAccountType::DOMAIN_ACCOUNT;
173     uint8_t* key = GenerateRandArray(param.aeskeyLen);
174     encPolicy.SetAeskey(key, param.aeskeyLen);
175     if (key != nullptr) {
176         delete[] key;
177         key = nullptr;
178     }
179     uint8_t* iv = GenerateRandArray(param.ivLen);
180     encPolicy.SetIv(iv, param.ivLen);
181     if (iv != nullptr) {
182         delete[] iv;
183         iv = nullptr;
184     }
185     uint8_t* hmacKey = GenerateRandArray(param.hmacKeyLen);
186     encPolicy.SetHmacKey(hmacKey, param.hmacKeyLen);
187     if (hmacKey != nullptr) {
188         delete[] hmacKey;
189         hmacKey = nullptr;
190     }
191 
192     for (uint32_t user = 0; user < param.userNum; ++user) {
193         std::string accountName;
194         GenerateRandStr(param.authAccountLen, accountName);
195         AuthUserInfo perminfo = {.authAccount = strdup(const_cast<char *>(accountName.c_str())),
196             .authPerm = static_cast<DLPFileAccess>(param.authPerm),
197             .permExpiryTime = curTime + param.deltaTime,
198             .authAccountType = OHOS::Security::DlpPermission::DlpAccountType::DOMAIN_ACCOUNT
199         };
200         encPolicy.authUsers_.emplace_back(perminfo);
201     }
202 }
203 }
204 
205 namespace OHOS {
206 namespace AccountSA {
GetOsAccountLocalIdFromUid(const int uid,int & id)207 ErrCode OsAccountManager::GetOsAccountLocalIdFromUid(const int uid, int &id)
208 {
209     id = DEFAULT_USERID;
210     return DLP_OK;
211 }
212 }
213 }
214 
SetUpTestCase()215 void DlpPermissionServiceTest::SetUpTestCase()
216 {}
217 
TearDownTestCase()218 void DlpPermissionServiceTest::TearDownTestCase()
219 {}
220 
SetUp()221 void DlpPermissionServiceTest::SetUp()
222 {
223     DLP_LOG_INFO(LABEL, "setup");
224     if (dlpPermissionService_ != nullptr) {
225         return;
226     }
227     dlpPermissionService_ = std::make_shared<DlpPermissionService>(SA_ID_DLP_PERMISSION_SERVICE, true);
228     ASSERT_NE(nullptr, dlpPermissionService_);
229     dlpPermissionService_->appStateObserver_ = new (std::nothrow) AppStateObserver();
230     ASSERT_TRUE(dlpPermissionService_->appStateObserver_ != nullptr);
231     GetUserIdByForegroundAccount(&g_userId);
232 }
233 
TearDown()234 void DlpPermissionServiceTest::TearDown()
235 {
236     if (dlpPermissionService_ != nullptr) {
237         dlpPermissionService_->appStateObserver_ = nullptr;
238     }
239     dlpPermissionService_ = nullptr;
240 }
241 
242 /**
243  * @tc.name: DumpTest001
244  * @tc.desc: dlp permission service dump test
245  * @tc.type: FUNC
246  * @tc.require:AR000HGIH9
247  */
248 HWTEST_F(DlpPermissionServiceTest, DumpTest001, TestSize.Level1)
249 {
250     DLP_LOG_INFO(LABEL, "DumpTest001");
251     int fd = -1;
252     std::vector<std::u16string> args;
253 
254     // fd is 0
255     EXPECT_EQ(ERR_INVALID_VALUE, dlpPermissionService_->Dump(fd, args));
256 
257     fd = 1;  // 1: std output
258 
259     // hidumper
260     EXPECT_EQ(ERR_OK, dlpPermissionService_->Dump(fd, args));
261 
262     // hidumper -h
263     args.emplace_back(Str8ToStr16("-h"));
264     EXPECT_EQ(ERR_OK, dlpPermissionService_->Dump(fd, args));
265 
266     args.clear();
267     // hidumper -d
268     args.emplace_back(Str8ToStr16("-d"));
269     EXPECT_EQ(ERR_OK, dlpPermissionService_->Dump(fd, args));
270 
271     args.clear();
272     // hidumper with not exist param
273     args.emplace_back(Str8ToStr16("-n"));
274     EXPECT_EQ(ERR_OK, dlpPermissionService_->Dump(fd, args));
275 
276     args.clear();
277 }
278 
279 class DlpSandboxChangeCallbackTest : public DlpSandboxChangeCallbackStub {
280 public:
281     DlpSandboxChangeCallbackTest() = default;
282     virtual ~DlpSandboxChangeCallbackTest() = default;
283 
284     void DlpSandboxStateChangeCallback(DlpSandboxCallbackInfo& result) override;
285 };
286 
DlpSandboxStateChangeCallback(DlpSandboxCallbackInfo & result)287 void DlpSandboxChangeCallbackTest::DlpSandboxStateChangeCallback(DlpSandboxCallbackInfo& result) {}
288 
289 /**
290  * @tc.name:DlpSandboxChangeCallbackDeathRecipient001
291  * @tc.desc: DlpSandboxChangeCallbackDeathRecipient test
292  * @tc.type: FUNC
293  * @tc.require:DTS2023040302317
294  */
295 HWTEST_F(DlpPermissionServiceTest, DlpSandboxChangeCallbackDeathRecipient001, TestSize.Level1)
296 {
297     auto recipient = std::make_shared<DlpSandboxChangeCallbackDeathRecipient>();
298     ASSERT_NE(nullptr, recipient);
299 
300     recipient->OnRemoteDied(nullptr); // remote is nullptr
301 
302     // backup
303     sptr<IRemoteObject> callback;
304     wptr<IRemoteObject> remote = new (std::nothrow) DlpSandboxChangeCallbackTest();
305     callback = remote.promote();
306     dlpPermissionService_->RegisterDlpSandboxChangeCallback(callback);
307     ASSERT_EQ(static_cast<uint32_t>(1), DlpSandboxChangeCallbackManager::GetInstance().callbackInfoMap_.size());
308     recipient->OnRemoteDied(remote); // remote is not nullptr
309     ASSERT_EQ(static_cast<uint32_t>(0), DlpSandboxChangeCallbackManager::GetInstance().callbackInfoMap_.size());
310     bool result;
311     int32_t res = dlpPermissionService_->UnRegisterDlpSandboxChangeCallback(result);
312     ASSERT_EQ(DLP_CALLBACK_PARAM_INVALID, res);
313     recipient->OnRemoteDied(remote);
314 }
315 
316 class TestOpenDlpFileCallback : public OpenDlpFileCallbackStub {
317 public:
TestOpenDlpFileCallback()318     TestOpenDlpFileCallback() {}
~TestOpenDlpFileCallback()319     ~TestOpenDlpFileCallback() {}
320 
OnOpenDlpFile(OpenDlpFileCallbackInfo & result)321     void OnOpenDlpFile(OpenDlpFileCallbackInfo& result) override
322     {
323         called_ = true;
324     }
325     bool called_ = false;
326 };
327 
328 /**
329  * @tc.name: OpenDlpFileCallbackDeathRecipient001
330  * @tc.desc: OpenDlpFileCallbackDeathRecipient test
331  * @tc.type: FUNC
332  * @tc.require:
333  */
334 HWTEST_F(DlpPermissionServiceTest, OpenDlpFileCallbackDeathRecipient001, TestSize.Level1)
335 {
336     auto recipient = std::make_shared<OpenDlpFileCallbackDeathRecipient>();
337     ASSERT_NE(nullptr, recipient);
338 
339     recipient->OnRemoteDied(nullptr); // remote is nullptr
340 
341     // backup
342     OpenDlpFileCallbackManager::GetInstance().openDlpFileCallbackMap_.clear();
343     wptr<IRemoteObject> remote = new (std::nothrow) TestOpenDlpFileCallback();
344     sptr<IRemoteObject> callback = remote.promote();
345     int32_t res = OpenDlpFileCallbackManager::GetInstance().AddCallback(
346         getpid(), DEFAULT_USERID, DLP_MANAGER_APP, callback);
347     EXPECT_EQ(DLP_OK, res);
348     EXPECT_EQ(static_cast<uint32_t>(1), OpenDlpFileCallbackManager::GetInstance().openDlpFileCallbackMap_.size());
349     recipient->OnRemoteDied(remote); // remote is not nullptr
350     EXPECT_EQ(static_cast<uint32_t>(0), OpenDlpFileCallbackManager::GetInstance().openDlpFileCallbackMap_.size());
351     res = dlpPermissionService_->UnRegisterOpenDlpFileCallback(callback);
352     EXPECT_EQ(DLP_CALLBACK_PARAM_INVALID, res);
353     recipient->OnRemoteDied(remote);
354 }
355 
356 /**
357  * @tc.name:FileOperator001
358  * @tc.desc: FileOperator test
359  * @tc.type: FUNC
360  * @tc.require:SR000I38N7
361  */
362 HWTEST_F(DlpPermissionServiceTest, FileOperator001, TestSize.Level1)
363 {
364     std::shared_ptr<FileOperator> fileOperator_ = std::make_shared<FileOperator>();
365     bool result = fileOperator_->IsExistFile("");
366     ASSERT_TRUE(!result);
367     std::string content = "test";
368     result = fileOperator_->IsExistDir("");
369     ASSERT_TRUE(!result);
370     int32_t res = fileOperator_->InputFileByPathAndContent(TEST_URI, content);
371     ASSERT_EQ(DLP_RETENTION_COMMON_FILE_OPEN_FAILED, res);
372     res = fileOperator_->GetFileContentByPath(TEST_URI, content);
373     ASSERT_EQ(DLP_RETENTION_FILE_FIND_FILE_ERROR, res);
374 };
375 
376 /**
377  * @tc.name:SandboxJsonManager001
378  * @tc.desc: SandboxJsonManager test
379  * @tc.type: FUNC
380  * @tc.require:SR000I38N7
381  */
382 HWTEST_F(DlpPermissionServiceTest, SandboxJsonManager001, TestSize.Level1)
383 {
384     std::shared_ptr<SandboxJsonManager> sandboxJsonManager_ = std::make_shared<SandboxJsonManager>();
385     RetentionInfo retentionInfo = {
386         .appIndex = 1,
387         .tokenId = 123456,
388         .bundleName = "test.bundlName",
389         .dlpFileAccess = DLPFileAccess::CONTENT_EDIT,
390         .userId = 100
391     };
392     sandboxJsonManager_->AddSandboxInfo(retentionInfo);
393     int32_t res = sandboxJsonManager_->AddSandboxInfo(retentionInfo);
394     ASSERT_EQ(DLP_INSERT_FILE_ERROR, res);
395     std::set<std::string> docUriSet;
396     docUriSet.emplace("testUri");
397     RetentionInfo info;
398     info.bundleName = "";
399     info.tokenId = 0;
400     res = sandboxJsonManager_->UpdateRetentionState(docUriSet, info, false);
401     ASSERT_EQ(DLP_RETENTION_UPDATE_ERROR, res);
402 }
403 
404 /**
405  * @tc.name:CallbackManager001
406  * @tc.desc: DlpSandboxChangeCallbackManager test
407  * @tc.type: FUNC
408  * @tc.require:DTS2023040302317
409  */
410 HWTEST_F(DlpPermissionServiceTest, CallbackManager001, TestSize.Level1)
411 {
412     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, DlpSandboxChangeCallbackManager::GetInstance().AddCallback(0, nullptr));
413     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, DlpSandboxChangeCallbackManager::GetInstance().RemoveCallback(nullptr));
414     bool result;
415     ASSERT_EQ(
416         DLP_SERVICE_ERROR_VALUE_INVALID, DlpSandboxChangeCallbackManager::GetInstance().RemoveCallback(0, result));
417     sptr<IRemoteObject> callback;
418     wptr<IRemoteObject> remote = new (std::nothrow) DlpSandboxChangeCallbackTest();
419     callback = remote.promote();
420     dlpPermissionService_->RegisterDlpSandboxChangeCallback(callback);
421     for (int i = 10000; i < 11024; i++) {
422         DlpSandboxChangeCallbackManager::GetInstance().AddCallback(i, callback);
423     }
424     ASSERT_EQ(
425         DLP_SERVICE_ERROR_VALUE_INVALID, DlpSandboxChangeCallbackManager::GetInstance().AddCallback(11024, callback));
426     DlpSandboxInfo dlpSandboxInfo;
427     dlpSandboxInfo.pid = 1;
428     DlpSandboxChangeCallbackManager::GetInstance().ExecuteCallbackAsync(dlpSandboxInfo);
429     dlpSandboxInfo.pid = 10010;
430     DlpSandboxChangeCallbackManager::GetInstance().ExecuteCallbackAsync(dlpSandboxInfo);
431 }
432 
433 /**
434  * @tc.name:SandboxJsonManager002
435  * @tc.desc: SandboxJsonManager test
436  * @tc.type: FUNC
437  * @tc.require:DTS2023040302317
438  */
439 HWTEST_F(DlpPermissionServiceTest, SandboxJsonManager002, TestSize.Level1)
440 {
441     std::shared_ptr<SandboxJsonManager> sandboxJsonManager_ = std::make_shared<SandboxJsonManager>();
442     sandboxJsonManager_->FromJson(NULL);
443     RetentionInfo retentionInfo = {
444         .appIndex = 1,
445         .tokenId = 827878,
446         .bundleName = "testbundle",
447         .dlpFileAccess = DLPFileAccess::CONTENT_EDIT,
448         .userId = g_userId
449     };
450     sandboxJsonManager_->AddSandboxInfo(retentionInfo);
451     ASSERT_TRUE(!sandboxJsonManager_->HasRetentionSandboxInfo("testbundle1"));
452     int32_t uid = getuid();
453     setuid(20010031);
454     ASSERT_TRUE(sandboxJsonManager_->HasRetentionSandboxInfo("testbundle"));
455     retentionInfo.bundleName = "testbundle1";
456     retentionInfo.tokenId = 827818;
457     retentionInfo.userId = 10000;
458     sandboxJsonManager_->AddSandboxInfo(retentionInfo);
459     ASSERT_TRUE(!sandboxJsonManager_->HasRetentionSandboxInfo("testbundle1"));
460 
461     ASSERT_EQ(DLP_RETENTION_SERVICE_ERROR, sandboxJsonManager_->DelSandboxInfo(8888));
462 
463     RetentionInfo info;
464     info.tokenId = 827878;
465     std::set<std::string> docUriSet;
466     ASSERT_TRUE(!sandboxJsonManager_->ClearDocUriSet(info, docUriSet));
467     docUriSet.insert("testUri");
468     sandboxJsonManager_->UpdateRetentionState(docUriSet, info, true);
469     ASSERT_EQ(DLP_RETENTION_SERVICE_ERROR, sandboxJsonManager_->DelSandboxInfo(827878));
470     sandboxJsonManager_->UpdateRetentionState(docUriSet, info, false);
471     ASSERT_EQ(DLP_OK, sandboxJsonManager_->DelSandboxInfo(827878));
472     setuid(uid);
473 }
474 
475 /**
476  * @tc.name:SandboxJsonManager003
477  * @tc.desc: SandboxJsonManager test
478  * @tc.type: FUNC
479  * @tc.require:DTS2023040302317
480  */
481 HWTEST_F(DlpPermissionServiceTest, SandboxJsonManager003, TestSize.Level1)
482 {
483     std::shared_ptr<SandboxJsonManager> sandboxJsonManager_ = std::make_shared<SandboxJsonManager>();
484     RetentionInfo retentionInfo = {
485         .appIndex = 1,
486         .tokenId = 827818,
487         .bundleName = "testbundle1",
488         .dlpFileAccess = DLPFileAccess::CONTENT_EDIT,
489         .userId = 10000
490     };
491     sandboxJsonManager_->AddSandboxInfo(retentionInfo);
492     int32_t uid = getuid();
493     ASSERT_EQ(DLP_RETENTION_GET_DATA_FROM_BASE_CONSTRAINTS_FILE_EMPTY,
494         sandboxJsonManager_->RemoveRetentionState("testbundle", -1));
495     ASSERT_EQ(DLP_RETENTION_GET_DATA_FROM_BASE_CONSTRAINTS_FILE_EMPTY,
496         sandboxJsonManager_->RemoveRetentionState("testbundle1", -1));
497     retentionInfo.bundleName = "testbundle";
498     retentionInfo.tokenId = 827878;
499     retentionInfo.userId = g_userId;
500     sandboxJsonManager_->AddSandboxInfo(retentionInfo);
501     ASSERT_EQ(DLP_RETENTION_GET_DATA_FROM_BASE_CONSTRAINTS_FILE_EMPTY,
502         sandboxJsonManager_->RemoveRetentionState("testbundle1", -1));
503     ASSERT_EQ(DLP_OK, sandboxJsonManager_->RemoveRetentionState("testbundle", -1));
504     sandboxJsonManager_->AddSandboxInfo(retentionInfo);
505     ASSERT_EQ(DLP_RETENTION_GET_DATA_FROM_BASE_CONSTRAINTS_FILE_EMPTY,
506         sandboxJsonManager_->RemoveRetentionState("testbundle", 2));
507     ASSERT_EQ(DLP_OK, sandboxJsonManager_->RemoveRetentionState("testbundle", 1));
508     setuid(uid);
509 }
510 
511 /**
512  * @tc.name:SandboxJsonManager004
513  * @tc.desc: GetBundleNameSetByUserId test
514  * @tc.type: FUNC
515  * @tc.require:DTS2023040302317
516  */
517 HWTEST_F(DlpPermissionServiceTest, SandboxJsonManager004, TestSize.Level1)
518 {
519     std::shared_ptr<SandboxJsonManager> sandboxJsonManager_ = std::make_shared<SandboxJsonManager>();
520     std::set<std::string> keySet;
521     int res = sandboxJsonManager_->GetBundleNameSetByUserId(100, keySet);
522     ASSERT_EQ(DLP_OK, res);
523     SandboxInfo sandboxInfo;
524     int32_t ret = dlpPermissionService_->InstallDlpSandbox(
525         DLP_MANAGER_APP, DLPFileAccess::CONTENT_EDIT, DEFAULT_USERID, sandboxInfo, "testUri1111");
526     ASSERT_EQ(DLP_OK, ret);
527     res = RetentionFileManager::GetInstance().GetBundleNameSetByUserId(100, keySet);
528     ASSERT_EQ(DLP_OK, res);
529     res = RetentionFileManager::GetInstance().RemoveRetentionInfoByUserId(100, keySet);
530     ASSERT_EQ(DLP_OK, res);
531     res = RetentionFileManager::GetInstance().RemoveRetentionInfoByUserId(100, keySet);
532     ASSERT_EQ(DLP_OK, res);
533 }
534 
535 /**
536  * @tc.name:RetentionFileManager001
537  * @tc.desc: RetentionFileManager test
538  * @tc.type: FUNC
539  * @tc.require:DTS2023040302317
540  */
541 HWTEST_F(DlpPermissionServiceTest, RetentionFileManager001, TestSize.Level1)
542 {
543     std::shared_ptr<SandboxJsonManager> sandboxJsonManager_ = std::make_shared<SandboxJsonManager>();
544     RetentionInfo retentionInfo = {
545         .appIndex = 1,
546         .tokenId = 827878,
547         .bundleName = "testbundle",
548         .dlpFileAccess = DLPFileAccess::CONTENT_EDIT,
549         .userId = 100
550     };
551     sandboxJsonManager_->AddSandboxInfo(retentionInfo);
552     int32_t uid = getuid();
553     setuid(10031);
554     ASSERT_TRUE(!RetentionFileManager::GetInstance().HasRetentionSandboxInfo("testbundle1"));
555     setuid(20010031);
556     RetentionFileManager::GetInstance().hasInit = false;
557     ASSERT_EQ(DLP_OK, RetentionFileManager::GetInstance().AddSandboxInfo(retentionInfo));
558     RetentionFileManager::GetInstance().hasInit = false;
559     ASSERT_EQ(DLP_RETENTION_SERVICE_ERROR, RetentionFileManager::GetInstance().DelSandboxInfo(8888));
560     RetentionFileManager::GetInstance().hasInit = false;
561     ASSERT_TRUE(RetentionFileManager::GetInstance().CanUninstall(8888));
562     RetentionFileManager::GetInstance().hasInit = false;
563     ASSERT_EQ(DLP_RETENTION_GET_DATA_FROM_BASE_CONSTRAINTS_FILE_EMPTY,
564         RetentionFileManager::GetInstance().RemoveRetentionState("testbundle1", -1));
565     RetentionFileManager::GetInstance().hasInit = false;
566     ASSERT_EQ(DLP_OK, RetentionFileManager::GetInstance().ClearUnreservedSandbox());
567     RetentionFileManager::GetInstance().hasInit = false;
568     std::vector<RetentionSandBoxInfo> vec;
569     ASSERT_EQ(DLP_OK, RetentionFileManager::GetInstance().GetRetentionSandboxList("testbundle1", vec, false));
570 
571     setuid(uid);
572 }
573 
574 /**
575  * @tc.name:InstallDlpSandbox001
576  * @tc.desc:InstallDlpSandbox test
577  * @tc.type: FUNC
578  * @tc.require:DTS2023040302317
579  */
580 HWTEST_F(DlpPermissionServiceTest, InstallDlpSandbox001, TestSize.Level1)
581 {
582     DLP_LOG_DEBUG(LABEL, "InstallDlpSandbox001");
583     SandboxInfo sandboxInfo;
584     int32_t ret = dlpPermissionService_->InstallDlpSandbox(
585         DLP_MANAGER_APP, DLPFileAccess::CONTENT_EDIT, DEFAULT_USERID, sandboxInfo, "testUri");
586     ASSERT_EQ(DLP_OK, ret);
587     int32_t editAppIndex = sandboxInfo.appIndex;
588     std::set<std::string> docUriSet;
589     docUriSet.insert("testUri");
590     RetentionInfo info;
591     info.appIndex = editAppIndex;
592     info.tokenId = sandboxInfo.tokenId;
593     info.bundleName = DLP_MANAGER_APP;
594     info.userId = DEFAULT_USERID;
595     RetentionFileManager::GetInstance().UpdateSandboxInfo(docUriSet, info, true);
596     ret = dlpPermissionService_->InstallDlpSandbox(
597         DLP_MANAGER_APP, DLPFileAccess::CONTENT_EDIT, DEFAULT_USERID, sandboxInfo, "testUri");
598     ASSERT_EQ(DLP_OK, ret);
599     ASSERT_EQ(sandboxInfo.appIndex, editAppIndex);
600     ret = dlpPermissionService_->InstallDlpSandbox(
601         DLP_MANAGER_APP, DLPFileAccess::READ_ONLY, DEFAULT_USERID, sandboxInfo, "testUri");
602     ASSERT_EQ(DLP_OK, ret);
603     editAppIndex = sandboxInfo.appIndex;
604     dlpPermissionService_->InstallDlpSandbox(
605         DLP_MANAGER_APP, DLPFileAccess::READ_ONLY, DEFAULT_USERID, sandboxInfo, "testUri1");
606     ASSERT_EQ(DLP_OK, ret);
607     ASSERT_EQ(sandboxInfo.appIndex, editAppIndex);
608     editAppIndex = sandboxInfo.appIndex;
609     info.appIndex = editAppIndex;
610     info.tokenId = sandboxInfo.tokenId;
611     RetentionFileManager::GetInstance().UpdateSandboxInfo(docUriSet, info, true);
612     ret = dlpPermissionService_->InstallDlpSandbox(
613         DLP_MANAGER_APP, DLPFileAccess::READ_ONLY, DEFAULT_USERID, sandboxInfo, "testUri");
614     ASSERT_EQ(DLP_OK, ret);
615     ASSERT_EQ(sandboxInfo.appIndex, editAppIndex);
616 }
617 
618 /**
619  * @tc.name:UninstallDlpSandbox001
620  * @tc.desc:UninstallDlpSandbox test
621  * @tc.type: FUNC
622  * @tc.require:DTS2023040302317
623  */
624 HWTEST_F(DlpPermissionServiceTest, UninstallDlpSandbox001, TestSize.Level1)
625 {
626     SandboxInfo sandboxInfo;
627     uint32_t dlpFileAccess = 5;
628     int32_t ret = dlpPermissionService_->InstallDlpSandbox(
629         "", static_cast<DLPFileAccess>(dlpFileAccess), 100, sandboxInfo, "testUri");
630     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, ret);
631     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, dlpPermissionService_->InstallDlpSandbox("testbundle",
632         static_cast<DLPFileAccess>(dlpFileAccess), 100, sandboxInfo, "testUri"));
633     dlpFileAccess = 0;
634     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, dlpPermissionService_->InstallDlpSandbox("testbundle",
635         static_cast<DLPFileAccess>(dlpFileAccess), 100, sandboxInfo, "testUri"));
636     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, dlpPermissionService_->UninstallDlpSandbox("", -1, -1));
637     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, dlpPermissionService_->UninstallDlpSandbox("testbundle", -1, -1));
638     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, dlpPermissionService_->UninstallDlpSandbox("testbundle", 1, -1));
639 }
640 
641 /**
642  * @tc.name:AppUninstallObserver001
643  * @tc.desc:AppUninstallObserver test
644  * @tc.type: FUNC
645  * @tc.require:DTS2023040302317
646  */
647 HWTEST_F(DlpPermissionServiceTest, AppUninstallObserver001, TestSize.Level1)
648 {
649     EventFwk::CommonEventSubscribeInfo subscribeInfo;
650     std::shared_ptr<AppUninstallObserver> observer_ = std::make_shared<AppUninstallObserver>(subscribeInfo);
651     EventFwk::CommonEventData data;
652     OHOS::AAFwk::Want want;
653     want.SetBundle("testbundle1");
654     want.SetAction(EventFwk::CommonEventSupport::COMMON_EVENT_PACKAGE_REMOVED);
655     data.SetWant(want);
656     observer_->OnReceiveEvent(data);
657     std::shared_ptr<SandboxJsonManager> sandboxJsonManager_ = std::make_shared<SandboxJsonManager>();
658     RetentionInfo retentionInfo = {
659         .appIndex = 1,
660         .tokenId = 827818,
661         .bundleName = "testbundle",
662         .dlpFileAccess = DLPFileAccess::CONTENT_EDIT,
663         .userId = 100
664     };
665     sandboxJsonManager_->AddSandboxInfo(retentionInfo);
666     want.SetAction(EventFwk::CommonEventSupport::COMMON_EVENT_PACKAGE_FULLY_REMOVED);
667     want.SetBundle("testbundle");
668     data.SetWant(want);
669     observer_->OnReceiveEvent(data);
670     want.SetAction(EventFwk::CommonEventSupport::COMMON_EVENT_PACKAGE_DATA_CLEARED);
671     data.SetWant(want);
672     observer_->OnReceiveEvent(data);
673 }
674 
675 class DlpTestRemoteObj : public IRemoteBroker {
676 public:
677     DECLARE_INTERFACE_DESCRIPTOR(u"ohos.dlp.test");
678     DlpTestRemoteObj() = default;
679     virtual ~DlpTestRemoteObj() noexcept = default;
680 };
681 
682 /**
683  * @tc.name:SandboxJsonManager001
684  * @tc.desc: SandboxJsonManager test
685  * @tc.type: FUNC
686  * @tc.require:SR000I38N7
687  */
688 HWTEST_F(DlpPermissionServiceTest, DlpPermissionStub001, TestSize.Level1)
689 {
690     sptr<DlpPermissionStub> stub = new (std::nothrow) DlpPermissionService(0, 0);
691     ASSERT_TRUE(!(stub == nullptr));
692 
693     sptr<DlpPolicyParcel> policyParcel = new (std::nothrow) DlpPolicyParcel();
694     ASSERT_TRUE(!(policyParcel == nullptr));
695 
696     sptr<DlpTestRemoteObj> callback = new (std::nothrow)IRemoteStub<DlpTestRemoteObj>();
697     EXPECT_TRUE(callback != nullptr);
698 
699     int32_t res;
700     MessageParcel data;
701     MessageParcel reply;
702     res = stub->GenerateDlpCertificateInner(data, reply);
703     EXPECT_EQ(false, !res);
704 
705     res = data.WriteParcelable(policyParcel);
706     EXPECT_EQ(false, !res);
707 
708     res = data.WriteRemoteObject(callback->AsObject());
709     EXPECT_EQ(false, !res);
710 
711     res = stub->GenerateDlpCertificateInner(data, reply);
712     EXPECT_EQ(false, !res);
713 
714     sptr<IDlpPermissionCallback> callback2 = nullptr;
715     res = stub->GenerateDlpCertificate(policyParcel, callback2);
716     EXPECT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, res);
717 
718     sptr<IDlpPermissionCallback> callback3 = iface_cast<IDlpPermissionCallback>(callback->AsObject());
719     res = stub->GenerateDlpCertificate(policyParcel, callback3);
720     EXPECT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, res);
721 }
722 
723 /**
724  * @tc.name: VisitRecordJsonManager001
725  * @tc.desc: VisitRecordJsonManager test
726  * @tc.type: FUNC
727  * @tc.require:SR000I38MU
728  */
729 HWTEST_F(DlpPermissionServiceTest, VisitRecordJsonManager001, TestSize.Level1)
730 {
731     std::shared_ptr<VisitRecordJsonManager> visitRecordJsonManager_ = std::make_shared<VisitRecordJsonManager>();
732     std::vector<VisitedDLPFileInfo> infoVec;
733     int32_t res = visitRecordJsonManager_->GetVisitRecordList(DLP_MANAGER_APP, 100, infoVec);
734     ASSERT_EQ(DLP_FILE_NO_NEED_UPDATE, res);
735     res = visitRecordJsonManager_->AddVisitRecord(DLP_MANAGER_APP, 100, "testuri");
736     ASSERT_EQ(DLP_OK, res);
737     res = visitRecordJsonManager_->AddVisitRecord(DLP_MANAGER_APP, 100, "testuri");
738     ASSERT_EQ(DLP_OK, res);
739     res = visitRecordJsonManager_->AddVisitRecord(DLP_MANAGER_APP, 100, "testur");
740     ASSERT_EQ(DLP_OK, res);
741     res = visitRecordJsonManager_->AddVisitRecord(DLP_MANAGER_APP, 1001, "testuri", 0, 1001);
742     ASSERT_EQ(DLP_OK, res);
743     res = visitRecordJsonManager_->AddVisitRecord(PERMISSION_APP, 100, "testuri");
744     ASSERT_EQ(DLP_OK, res);
745     res = visitRecordJsonManager_->GetVisitRecordList(DLP_MANAGER_APP, 100, infoVec);
746     ASSERT_EQ(DLP_OK, res);
747     res = visitRecordJsonManager_->GetVisitRecordList(PERMISSION_APP, 1001, infoVec);
748     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, res);
749     for (int32_t i = 1; i <= 1024; i++) {
750         res = visitRecordJsonManager_->AddVisitRecord(PERMISSION_APP, 100 + i, "testuri", 0, 100 + i);
751     }
752     ASSERT_EQ(DLP_JSON_UPDATE_ERROR, res);
753 }
754 
755 /**
756  * @tc.name: VisitRecordJsonManager002
757  * @tc.desc: VisitRecordJsonManager test
758  * @tc.type: FUNC
759  * @tc.require:SR000I38MU
760  */
761 HWTEST_F(DlpPermissionServiceTest, VisitRecordJsonManager002, TestSize.Level1)
762 {
763     std::shared_ptr<VisitRecordJsonManager> visitRecordJsonManager_ = std::make_shared<VisitRecordJsonManager>();
764     std::string jsonStr = "{\"test\":[]}";
765     Json callbackInfoJson = Json::parse(jsonStr, nullptr, false);
766     visitRecordJsonManager_->FromJson(callbackInfoJson);
767     ASSERT_TRUE(visitRecordJsonManager_->infoList_.size() == 0);
768     jsonStr = "{\"recordList\":[{\"bundleName\":\"\",\"docUri\":\"file://media/file/12\",\"userId\":100}]}";
769     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
770     visitRecordJsonManager_->FromJson(callbackInfoJson);
771     ASSERT_TRUE(visitRecordJsonManager_->infoList_.size() == 0);
772     jsonStr = "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri\":\"\",\"userId\":100}]}";
773     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
774     visitRecordJsonManager_->FromJson(callbackInfoJson);
775     ASSERT_TRUE(visitRecordJsonManager_->infoList_.size() == 0);
776     jsonStr =
777         "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri\":\"file://media/file/12\",\"userId\":-1}]}";
778     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
779     visitRecordJsonManager_->FromJson(callbackInfoJson);
780     ASSERT_TRUE(visitRecordJsonManager_->infoList_.size() == 0);
781     jsonStr = "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri\":\"file://media/file/"
782         "12\",\"userId\":100}]}";
783     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
784     visitRecordJsonManager_->FromJson(callbackInfoJson);
785     ASSERT_TRUE(visitRecordJsonManager_->infoList_.size() == 0);
786     jsonStr = "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri\":\"file://media/file/"
787         "12\",\"userId\":100,\"timestamp\":-1}]}";
788     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
789     visitRecordJsonManager_->FromJson(callbackInfoJson);
790     ASSERT_TRUE(visitRecordJsonManager_->infoList_.size() == 0);
791     jsonStr = "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri\":\"file://media/file/"
792         "12\",\"userId\":100,\"timestamp\":1686844687}]}";
793     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
794     visitRecordJsonManager_->FromJson(callbackInfoJson);
795     ASSERT_TRUE(visitRecordJsonManager_->infoList_.size() == 0);
796     jsonStr = "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri\":\"file://media/file/"
797         "12\",\"userId\":100,\"timestamp\":1686844687,\"originalTokenId\":100}]}";
798     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
799     visitRecordJsonManager_->FromJson(callbackInfoJson);
800     ASSERT_TRUE(visitRecordJsonManager_->infoList_.size() == 1);
801 }
802 
803 /**
804  * @tc.name: VisitRecordJsonManager003
805  * @tc.desc: VisitRecordJsonManager test
806  * @tc.type: FUNC
807  * @tc.require:SR000I38MU
808  */
809 HWTEST_F(DlpPermissionServiceTest, VisitRecordJsonManager003, TestSize.Level1)
810 {
811     std::shared_ptr<VisitRecordJsonManager> visitRecordJsonManager_ = std::make_shared<VisitRecordJsonManager>();
812     visitRecordJsonManager_->FromJson(NULL);
813     std::string jsonStr = "{\"recordList\":[{\"bundleName1\":\"\"}]}";
814     Json callbackInfoJson = Json::parse(jsonStr, nullptr, false);
815     visitRecordJsonManager_->FromJson(callbackInfoJson);
816     ASSERT_TRUE(visitRecordJsonManager_->infoList_.size() == 0);
817     jsonStr = "{\"recordList\":[{\"bundleName\":1}]}";
818     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
819     visitRecordJsonManager_->FromJson(callbackInfoJson);
820     jsonStr = "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri1\":\"\",\"userId\":100}]}";
821     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
822     visitRecordJsonManager_->FromJson(callbackInfoJson);
823     jsonStr = "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri\":1,\"userId\":100}]}";
824     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
825     visitRecordJsonManager_->FromJson(callbackInfoJson);
826     jsonStr = "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri\":\"\",\"userId1\":100}]}";
827     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
828     visitRecordJsonManager_->FromJson(callbackInfoJson);
829     jsonStr = "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri\":\"\",\"userId\":\"100\"}]}";
830     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
831     visitRecordJsonManager_->FromJson(callbackInfoJson);
832     jsonStr = "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri\":\"file://media/file/"
833         "12\",\"userId\":100,\"timestamp1\":1686844687}]}";
834     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
835     visitRecordJsonManager_->FromJson(callbackInfoJson);
836     jsonStr = "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri\":\"file://media/file/"
837         "12\",\"userId\":100,\"timestamp\":\"1686844687\"}]}";
838     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
839     visitRecordJsonManager_->FromJson(callbackInfoJson);
840     visitRecordJsonManager_->infoList_.clear();
841     ASSERT_EQ("", visitRecordJsonManager_->ToString());
842 }
843 /**
844  * @tc.name: VisitRecordFileManager001
845  * @tc.desc: VisitRecordFileManager test
846  * @tc.type: FUNC
847  * @tc.require:SR000I38MU
848  */
849 HWTEST_F(DlpPermissionServiceTest, VisitRecordFileManager001, TestSize.Level1)
850 {
851     std::shared_ptr<VisitRecordFileManager> visitRecordFileManager = std::make_shared<VisitRecordFileManager>();
852     std::vector<VisitedDLPFileInfo> infoVec;
853     int32_t res = visitRecordFileManager->GetVisitRecordList(DLP_MANAGER_APP, 100, infoVec);
854     ASSERT_EQ(DLP_OK, res);
855     visitRecordFileManager->hasInit_ = true;
856     ASSERT_EQ(true, visitRecordFileManager->Init());
857     visitRecordFileManager->hasInit_ = false;
858     ASSERT_EQ(true, visitRecordFileManager->Init());
859     ASSERT_EQ(DLP_OK, visitRecordFileManager->UpdateFile(DLP_FILE_NO_NEED_UPDATE));
860     ASSERT_EQ(DLP_JSON_UPDATE_ERROR, visitRecordFileManager->UpdateFile(DLP_JSON_UPDATE_ERROR));
861     visitRecordFileManager->hasInit_ = false;
862     ASSERT_EQ(DLP_OK, visitRecordFileManager->AddVisitRecord(DLP_MANAGER_APP, 100, "testuri"));
863     visitRecordFileManager->hasInit_ = false;
864     res = visitRecordFileManager->GetVisitRecordList(DLP_MANAGER_APP, 100, infoVec);
865     ASSERT_EQ(DLP_OK, res);
866 }
867 
868 /**
869  * @tc.name: GetLocalAccountName001
870  * @tc.desc: GetLocalAccountName test
871  * @tc.type: FUNC
872  * @tc.require:SR000I38MU
873  */
874 HWTEST_F(DlpPermissionServiceTest, GetLocalAccountName001, TestSize.Level1)
875 {
876     char* account = nullptr;
877     ASSERT_EQ(0, GetLocalAccountName(&account, g_userId));
878     ASSERT_EQ(-1, GetLocalAccountName(nullptr, g_userId));
879 }
880 
881 /**
882  * @tc.name: OnStart001
883  * @tc.desc: OnStart test
884  * @tc.type: FUNC
885  * @tc.require:
886  */
887 HWTEST_F(DlpPermissionServiceTest, OnStart001, TestSize.Level1)
888 {
889     auto state = dlpPermissionService_->state_;
890     dlpPermissionService_->state_ = ServiceRunningState::STATE_RUNNING;
891     dlpPermissionService_->OnStart();
892     dlpPermissionService_->state_ = state;
893     dlpPermissionService_->OnStop();
894     ASSERT_EQ(true, dlpPermissionService_->RegisterAppStateObserver());
895 }
896 
897 /**
898  * @tc.name: ParseDlpCertificate001
899  * @tc.desc: ParseDlpCertificate test
900  * @tc.type: FUNC
901  * @tc.require:
902  */
903 HWTEST_F(DlpPermissionServiceTest, ParseDlpCertificate001, TestSize.Level1)
904 {
905     sptr<CertParcel> certParcel = new (std::nothrow) CertParcel();
906     sptr<IDlpPermissionCallback> callback = nullptr;
907     int32_t ret = dlpPermissionService_->ParseDlpCertificate(certParcel, callback, "", true);
908     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, ret);
909 
910     std::shared_ptr<GenerateDlpCertificateCallback> callback1 =
911         std::make_shared<ClientGenerateDlpCertificateCallback>();
912     callback = new (std::nothrow) DlpPermissionAsyncStub(callback1);
913     ret = dlpPermissionService_->ParseDlpCertificate(certParcel, callback, "", true);
914     ASSERT_EQ(DLP_CREDENTIAL_ERROR_APPID_NOT_AUTHORIZED, ret);
915 }
916 
917 /**
918  * @tc.name: InsertDlpSandboxInfo001
919  * @tc.desc: InsertDlpSandboxInfo test
920  * @tc.type: FUNC
921  * @tc.require:
922  */
923 HWTEST_F(DlpPermissionServiceTest, InsertDlpSandboxInfo001, TestSize.Level1)
924 {
925     auto appStateObserver = dlpPermissionService_->appStateObserver_;
926     DlpSandboxInfo sandboxInfo;
927     dlpPermissionService_->InsertDlpSandboxInfo(sandboxInfo, false);
928     std::string bundleName;
929     int32_t appIndex = 111;
930     int32_t userId = 111;
931     ASSERT_TRUE(0 == dlpPermissionService_->DeleteDlpSandboxInfo(bundleName, appIndex, userId));
932     dlpPermissionService_->appStateObserver_ = appStateObserver;
933 
934     dlpPermissionService_->InsertDlpSandboxInfo(sandboxInfo, true);
935 }
936 
937 /**
938  * @tc.name: InsertDlpSandboxInfo002
939  * @tc.desc: InsertDlpSandboxInfo test
940  * @tc.type: FUNC
941  * @tc.require:
942  */
943 HWTEST_F(DlpPermissionServiceTest, InsertDlpSandboxInfo002, TestSize.Level1)
944 {
945     std::string bundleName;
946     int32_t appIndex = 111;
947     int32_t userId = 111;
948     ASSERT_TRUE(0 == dlpPermissionService_->DeleteDlpSandboxInfo(bundleName, appIndex, userId));
949 }
950 
951 /**
952  * @tc.name: GenerateDlpCertificate001
953  * @tc.desc: GenerateDlpCertificate test
954  * @tc.type: FUNC
955  * @tc.require:
956  */
957 HWTEST_F(DlpPermissionServiceTest, GenerateDlpCertificate001, TestSize.Level1)
958 {
959     DLP_LOG_DEBUG(LABEL, "GenerateDlpCertificate001");
960     sptr<DlpPolicyParcel> policyParcel = new (std::nothrow) DlpPolicyParcel();
961     std::shared_ptr<GenerateDlpCertificateCallback> callback1 =
962         std::make_shared<ClientGenerateDlpCertificateCallback>();
963     sptr<IDlpPermissionCallback> callback = new (std::nothrow) DlpPermissionAsyncStub(callback1);
964 
965     int32_t res = dlpPermissionService_->GenerateDlpCertificate(policyParcel, callback);
966     DLP_LOG_DEBUG(LABEL, "GenerateDlpCertificate001 1");
967     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, res);
968     PermissionPolicy policy;
969     policy.ownerAccount_ = "testAccount";
970     policy.ownerAccountId_ = "testAccountId";
971     policy.ownerAccountType_ = OHOS::Security::DlpPermission::DlpAccountType::CLOUD_ACCOUNT;
972 
973     AuthUserInfo user;
974     NewUserSample(user);
975     policy.authUsers_.emplace_back(user);
976     policyParcel->policyParams_ = policy;
977     res = dlpPermissionService_->GenerateDlpCertificate(policyParcel, callback);
978     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, res);
979 }
980 
981 /**
982  * @tc.name: GenerateDlpCertificate002
983  * @tc.desc: GenerateDlpCertificate test
984  * @tc.type: FUNC
985  * @tc.require:
986  */
987 HWTEST_F(DlpPermissionServiceTest, GenerateDlpCertificate002, TestSize.Level1)
988 {
989     DLP_LOG_DEBUG(LABEL, "GenerateDlpCertificate002");
990     sptr<DlpPolicyParcel> policyParcel = new (std::nothrow) DlpPolicyParcel();
991     std::shared_ptr<GenerateDlpCertificateCallback> callback1 =
992         std::make_shared<ClientGenerateDlpCertificateCallback>();
993     sptr<IDlpPermissionCallback> callback = new (std::nothrow) DlpPermissionAsyncStub(callback1);
994 
995     PermissionPolicy policy;
996     GeneratePolicyParam param = {ACCOUNT_LENGTH, AESKEY_LEN, AESKEY_LEN, USER_NUM, ACCOUNT_LENGTH, AUTH_PERM,
997         DELTA_EXPIRY_TIME, HMACKEY_LEN};
998     GeneratePolicy(policy, param);
999     policyParcel->policyParams_.CopyPermissionPolicy(policy);
1000     int32_t res = dlpPermissionService_->GenerateDlpCertificate(policyParcel, callback);
1001     ASSERT_EQ(DLP_OK, res);
1002 }
1003 
1004 /**
1005  * @tc.name: SerializeEncPolicyData001
1006  * @tc.desc: SerializeEncPolicyData test
1007  * @tc.type: FUNC
1008  * @tc.require:
1009  */
1010 HWTEST_F(DlpPermissionServiceTest, SerializeEncPolicyData001, TestSize.Level1)
1011 {
1012     DLP_LOG_DEBUG(LABEL, "SerializeEncPolicyData001");
1013     uint8_t* encPolicy = const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(POLICY_CIPHER.c_str()));
1014     const char* exInfo = "DlpRestorePolicyTest_NormalInput_ExtraInfo";
1015     EncAndDecOptions encAndDecOptions = {
1016         .opt = ALLOW_RECEIVER_DECRYPT_WITHOUT_USE_CLOUD,
1017         .extraInfo = const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(exInfo)),
1018         .extraInfoLen = strlen(exInfo)
1019     };
1020     DLP_EncPolicyData encPolicyData = {
1021         .dataLen = 0
1022     };
1023     unordered_json encDataJson;
1024     int32_t res = DlpPermissionSerializer::GetInstance().SerializeEncPolicyData(encPolicyData, encDataJson);
1025     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, res);
1026     encPolicyData.dataLen = DLP_MAX_CERT_SIZE + 1;
1027     res = DlpPermissionSerializer::GetInstance().SerializeEncPolicyData(encPolicyData, encDataJson);
1028     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, res);
1029     encPolicyData.dataLen = POLICY_CIPHER.size();
1030     DLP_LOG_DEBUG(LABEL, "SerializeEncPolicyData001 encData.options.extraInfoLen %{public}d",
1031         encAndDecOptions.extraInfoLen);
1032     encPolicyData.options = encAndDecOptions;
1033     res = DlpPermissionSerializer::GetInstance().SerializeEncPolicyData(encPolicyData, encDataJson);
1034     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, res);
1035     encPolicyData.data = encPolicy;
1036     res = DlpPermissionSerializer::GetInstance().SerializeEncPolicyData(encPolicyData, encDataJson);
1037     ASSERT_EQ(DLP_OK, res);
1038     unordered_json decDataJson = encDataJson;
1039     encAndDecOptions.extraInfoLen = 0;
1040     encPolicyData.options = encAndDecOptions;
1041     DLP_EncPolicyData decPolicyData;
1042     res = DlpPermissionSerializer::GetInstance().DeserializeEncPolicyData(decDataJson, decPolicyData, false);
1043     ASSERT_EQ(DLP_OK, res);
1044     AccountType tempType;
1045     encDataJson.at(ENC_ACCOUNT_TYPE).get_to(tempType);
1046     decDataJson[ENC_ACCOUNT_TYPE] = "test";
1047     res = DlpPermissionSerializer::GetInstance().DeserializeEncPolicyData(decDataJson, decPolicyData, false);
1048     ASSERT_EQ(DLP_OK, res);
1049     decDataJson.erase(ENC_ACCOUNT_TYPE);
1050     res = DlpPermissionSerializer::GetInstance().DeserializeEncPolicyData(decDataJson, decPolicyData, false);
1051     ASSERT_EQ(DLP_OK, res);
1052     decDataJson[ENC_ACCOUNT_TYPE] = tempType;
1053     res = DlpPermissionSerializer::GetInstance().DeserializeEncPolicyData(decDataJson, decPolicyData, false);
1054     ASSERT_EQ(DLP_OK, res);
1055 }
1056 
1057 /**
1058  * @tc.name: UninstallDlpSandboxApp001
1059  * @tc.desc: UninstallDlpSandboxApp test
1060  * @tc.type: FUNC
1061  * @tc.require:
1062  */
1063 HWTEST_F(DlpPermissionServiceTest, UninstallDlpSandboxApp001, TestSize.Level1)
1064 {
1065     DLP_LOG_DEBUG(LABEL, "UninstallDlpSandboxApp001");
1066 
1067     std::string bundleName;
1068     int32_t appIndex = 0;
1069     int32_t userId = 0;
1070     int32_t ret = dlpPermissionService_->UninstallDlpSandboxApp(bundleName, appIndex, userId);
1071     ASSERT_EQ(DLP_SERVICE_ERROR_UNINSTALL_SANDBOX_FAIL, ret);
1072 }
1073 
1074 /**
1075  * @tc.name: GetSandboxExternalAuthorization001
1076  * @tc.desc: GetSandboxExternalAuthorization test
1077  * @tc.type: FUNC
1078  * @tc.require:
1079  */
1080 HWTEST_F(DlpPermissionServiceTest, GetSandboxExternalAuthorization001, TestSize.Level1)
1081 {
1082     DLP_LOG_DEBUG(LABEL, "GetSandboxExternalAuthorization001");
1083 
1084     int sandboxUid = -1;
1085     AAFwk::Want want;
1086     SandBoxExternalAuthorType authType;
1087     int32_t ret = dlpPermissionService_->GetSandboxExternalAuthorization(sandboxUid, want, authType);
1088     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, ret);
1089     sandboxUid = 0;
1090     ret = dlpPermissionService_->GetSandboxExternalAuthorization(sandboxUid, want, authType);
1091     ASSERT_EQ(DLP_OK, ret);
1092 }
1093 
1094 /**
1095  * @tc.name: GetConfigFileValue001
1096  * @tc.desc: GetConfigFileValue test
1097  * @tc.type: FUNC
1098  * @tc.require:
1099  */
1100 HWTEST_F(DlpPermissionServiceTest, GetConfigFileValue001, TestSize.Level1)
1101 {
1102     DLP_LOG_DEBUG(LABEL, "GetConfigFileValue001");
1103 
1104     std::string cfgFile;
1105     std::vector<std::string> typeList;
1106     (void)dlpPermissionService_->GetConfigFileValue(cfgFile, typeList);
1107 }
1108 
1109 /**
1110  * @tc.name: RemoveRetentionInfo001
1111  * @tc.desc: RemoveRetentionInfo test
1112  * @tc.type: FUNC
1113  * @tc.require:
1114  */
1115 HWTEST_F(DlpPermissionServiceTest, RemoveRetentionInfo001, TestSize.Level1)
1116 {
1117     DLP_LOG_DEBUG(LABEL, "RemoveRetentionInfo001");
1118 
1119     std::vector<RetentionSandBoxInfo> retentionSandBoxInfoVec;
1120     RetentionInfo info;
1121     bool ret = dlpPermissionService_->RemoveRetentionInfo(retentionSandBoxInfoVec, info);
1122     ASSERT_EQ(true, ret);
1123 }
1124 
1125 /**
1126  * @tc.name: DeserializeEncPolicyDataByFirstVersion001
1127  * @tc.desc: DeserializeEncPolicyDataByFirstVersion test
1128  * @tc.type: FUNC
1129  * @tc.require:
1130  */
1131 HWTEST_F(DlpPermissionServiceTest, DeserializeEncPolicyDataByFirstVersion001, TestSize.Level1)
1132 {
1133     DLP_LOG_INFO(LABEL, "DeserializeEncPolicyDataByFirstVersion001");
1134     unordered_json encDataJson = {
1135         { ENC_DATA_LEN, 11 }
1136     };
1137     unordered_json encDataJson2;
1138     DLP_EncPolicyData encData;
1139     std::string ownerAccountId;
1140     int res = DlpPermissionSerializer::GetInstance().DeserializeEncPolicyDataByFirstVersion(encDataJson, encDataJson2,
1141         encData, ownerAccountId);
1142     ASSERT_EQ(res, DLP_SERVICE_ERROR_VALUE_INVALID);
1143     encDataJson[ENC_DATA] = "1";
1144     res = DlpPermissionSerializer::GetInstance().DeserializeEncPolicyDataByFirstVersion(encDataJson, encDataJson2,
1145         encData, ownerAccountId);
1146     ASSERT_EQ(res, DLP_SERVICE_ERROR_VALUE_INVALID);
1147     encDataJson[EXTRA_INFO] = "1";
1148     res = DlpPermissionSerializer::GetInstance().DeserializeEncPolicyDataByFirstVersion(encDataJson, encDataJson2,
1149         encData, ownerAccountId);
1150     ASSERT_EQ(res, DLP_OK);
1151     encDataJson2[ENC_POLICY] = "1";
1152     res = DlpPermissionSerializer::GetInstance().DeserializeEncPolicyDataByFirstVersion(encDataJson, encDataJson2,
1153         encData, ownerAccountId);
1154     ASSERT_EQ(res, DLP_SERVICE_ERROR_VALUE_INVALID);
1155     encDataJson2[ENC_ACCOUNT_TYPE] = 2;
1156     res = DlpPermissionSerializer::GetInstance().DeserializeEncPolicyDataByFirstVersion(encDataJson, encDataJson2,
1157         encData, ownerAccountId);
1158     ASSERT_EQ(res, DLP_SERVICE_ERROR_VALUE_INVALID);
1159     encDataJson2[EXTRA_INFO] = "1";
1160     res = DlpPermissionSerializer::GetInstance().DeserializeEncPolicyDataByFirstVersion(encDataJson, encDataJson2,
1161         encData, ownerAccountId);
1162     ASSERT_EQ(res, DLP_OK);
1163 }
1164 
1165 /**
1166  * @tc.name: SandboxConfigOperate001
1167  * @tc.desc: SandboxConfigOperate test
1168  * @tc.type: FUNC
1169  * @tc.require:
1170  */
1171 HWTEST_F(DlpPermissionServiceTest, SandboxConfigOperate001, TestSize.Level1)
1172 {
1173     DLP_LOG_DEBUG(LABEL, "SandboxConfigOperate001");
1174     std::string config;
1175     int32_t ret = dlpPermissionService_->SandboxConfigOperate(config, SandboxConfigOperationEnum::ADD);
1176     ASSERT_NE(DLP_OK, ret);
1177 }
1178 
1179 /**
1180  * @tc.name: SetReadFlag001
1181  * @tc.desc: SetReadFlag test
1182  * @tc.type: FUNC
1183  * @tc.require:
1184  */
1185 HWTEST_F(DlpPermissionServiceTest, SetReadFlag001, TestSize.Level1)
1186 {
1187     DLP_LOG_DEBUG(LABEL, "SetReadFlag001");
1188     uint32_t uid = 0;
1189     int32_t ret = dlpPermissionService_->SetReadFlag(uid);
1190     ASSERT_EQ(DLP_OK, ret);
1191 }
1192 
1193 /**
1194  * @tc.name: SetRetentionState001
1195  * @tc.desc: SetRetentionState test success
1196  * @tc.type: FUNC
1197  * @tc.require:issue:IAIFTY
1198  */
1199 HWTEST_F(DlpPermissionServiceTest, SetRetentionState001, TestSize.Level1)
1200 {
1201     DLP_LOG_DEBUG(LABEL, "SetRetentionState001");
1202 
1203     std::vector<std::string> docUriVec;
1204     docUriVec.push_back("hh");
1205     int32_t uid = IPCSkeleton::GetCallingUid();
1206     int32_t userId;
1207     GetUserIdFromUid(uid, &userId);
1208     DlpSandboxInfo appInfo;
1209     appInfo = {
1210         .uid = uid,
1211         .userId = userId,
1212         .appIndex = 0,
1213         .bundleName = "testbundle1",
1214         .hasRead = false
1215     };
1216     dlpPermissionService_->appStateObserver_->AddSandboxInfo(appInfo);
1217     int32_t ret = dlpPermissionService_->SetRetentionState(docUriVec);
1218     ASSERT_EQ(ret, DLP_OK);
1219 
1220     std::vector<RetentionSandBoxInfo> retentionSandBoxInfoVec;
1221     RetentionSandBoxInfo retentionSandBoxInfo;
1222     retentionSandBoxInfo.appIndex_ = appInfo.appIndex;
1223     retentionSandBoxInfoVec.push_back(retentionSandBoxInfo);
1224     RetentionSandBoxInfo retentionSandBoxInfo1;
1225     retentionSandBoxInfo1.appIndex_ = appInfo.appIndex + 1;
1226     retentionSandBoxInfoVec.push_back(retentionSandBoxInfo1);
1227 
1228     RetentionInfo info;
1229     info.bundleName = appInfo.bundleName;
1230     bool res = dlpPermissionService_->RemoveRetentionInfo(retentionSandBoxInfoVec, info);
1231     ASSERT_TRUE(res);
1232 }
1233