• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 constexpr int32_t SA_ID_DLP_PERMISSION_SERVICE = 3521;
61 static const std::string DLP_MANAGER_APP = "com.ohos.dlpmanager";
62 static const std::string PERMISSION_APP = "com.ohos.permissionmanager";
63 const uint32_t ACCOUNT_LENGTH = 20;
64 const uint32_t USER_NUM = 1;
65 const int AUTH_PERM = 1;
66 const int64_t DELTA_EXPIRY_TIME = 200;
67 const uint64_t EXPIRY_TEN_MINUTE = 60 * 10;
68 const uint32_t AESKEY_LEN = 32;
69 const uint32_t HMACKEY_LEN = 32;
70 const std::string ENC_ACCOUNT_TYPE = "accountType";
71 const std::string ENC_DATA_LEN = "encDataLen";
72 const std::string ENC_DATA = "encData";
73 const std::string EXTRA_INFO_LEN = "extraInfoLen";
74 const std::string EXTRA_INFO = "extraInfo";
75 const std::string ENC_POLICY = "encPolicy";
76 static int32_t g_userId = 100;
77 static const uint8_t ARRAY_CHAR_SIZE = 62;
78 static const char CHAR_ARRAY[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
79 
80 static const std::string POLICY_CIPHER = "8B6696A5DD160005C9DCAF43025CB240958D1E53D8E54D70DBED8C191411FA60C9B5D491B"
81     "AE3F34F124DBA805736FCBBC175D881818A93A0E07C844E9DF9503641BF2A98EC49BE0BB2"
82     "E75397187D6A3DC9DEED05A341BFBB761C39C906A9E1344E2CB25432B9C190E1948334A3E"
83     "CDB49C4340A7A8977685E4FDB6EB9E329AB5EEB1EEEBAEF158B0442F98C342714553E50477"
84     "040A52AD79068E6BC68A2F0E2E500DA721927EFF985BDDAF7BCF78FA3BEF2730B25EC05458"
85     "0FDB5BB4EBE7294737E8BF53C6F69C93D00FF41581F80DEA67BB5EBD253BC43729CB8B560B"
86     "893154240AC355CDF8381C84A093B39E5CD6CFF5746FD068F8AA1DEDF2C3C2A12AE2A5CDE9"
87     "075C8AE86654AE4C696C7BE8EB4AB67E25008DE09A5218EFA13B59BAFDFB11FFBB6AD637B9"
88     "B02F598FE511910A9C9F614AF0EA8312F62DAA6C2DA9DCAF973321C45139669E2482C2CB09"
89     "4E60361ED2BA908A4C07443251DFD70762E2180FA5E92DA1CE6D9AAF70761382FC1591BF57"
90     "554693AC55F7121757AA3A4827C9016E1FF5A84FB367047EA7BB28B8E19521BA72AE0BB7C3"
91     "192F5B6D6887034C85A08659850DABD211CD18D5295DD60EEB98FB27C3161134D984665658"
92     "3E29E7C166EB1475647889B62448145D146A8A7A777B346AB7476A10209ED8543965EF3ED3"
93     "C3F96C1CBEDA994243E3064975C23F32F4412F42753668E2CC447E88D6D73534B9F8DD4221"
94     "1074D2D819CA235343D012283F30368DE7C3FBC3A90128EF8CFA86C80C5D7167A3CA60B1F5"
95     "93DDAD90BFF1987C9243ACD4463B11B61A87B9953A0CAE8FD93ACC1E0B0140410451E5CD3A"
96     "E6BB61CF5B1004F46782D924D79CE5615084102A19604BF99D38BFA8B837210022B6AB21E4"
97     "33B5D4E23E278C8CB5EC79DAFEF2A39E3175A0FC6921C37345CAF8D0976677924775A620C5"
98     "E63418C6339525433182D8D127816B36B348B781E02DA65ACCBEAE950CFF8579586B18B77A"
99     "9960ADF484881811D6044E3CC68577599194439E43263E4095CD5399679B548CDFD7430CFB"
100     "F67A1AE23B4136931E10032E4CEACC278584B45337CF7C3E4FEA6D0F1424E3CBC490E4C1DF"
101     "FC2927AA3BC5F57471EAA7D12C65064015A25A11D98E25AFCDB1A1DD876A03EADA9CDD015C"
102     "1265A7FDFA9A766BA832F4B9A2B55B73A361D2A7BD68572EB2ABE1B1DC93904CB5ACD09807"
103     "6FE5089AD8DB2F38DF7D0A76C2C87E36C6F6A5E8190EA76F1F8F0B2493F1FDF38B220BEBC5"
104     "554B3038FE83FD7D10C35034CB3D9409AC9F8F762149A4B19CD0B18B87F4251722EFEFB601"
105     "6DDFACBB8E6F9BAFD48FCFE5370B5661EC4218A65246337E1E24B14CE14EB82CE3B553B560"
106     "8A9A94B1E2E7BAC7CC0B315228E870DF25DFBB8F77A916B8B08692A92D9CB5540DCF4AA4CF"
107     "9B196026908";
108 
GetCurrentTimeSec(void)109 uint64_t GetCurrentTimeSec(void)
110 {
111     return static_cast<uint64_t>(duration_cast<seconds>(system_clock::now().time_since_epoch()).count());
112 }
113 
NewUserSample(AuthUserInfo & user)114 void NewUserSample(AuthUserInfo& user)
115 {
116     user.authAccount = "allowAccountA";
117     user.authPerm = DLPFileAccess::FULL_CONTROL;
118     user.permExpiryTime = GetCurrentTimeSec() + EXPIRY_TEN_MINUTE;
119     user.authAccountType = OHOS::Security::DlpPermission::DlpAccountType::CLOUD_ACCOUNT;
120 }
121 
GetRandNum()122 static uint8_t GetRandNum()
123 {
124     uint8_t rand;
125     RAND_bytes(reinterpret_cast<unsigned char *>(&rand), sizeof(rand));
126     return rand;
127 }
128 
GenerateRandArray(uint32_t len)129 uint8_t* GenerateRandArray(uint32_t len)
130 {
131     if (len < 1) {
132         DLP_LOG_ERROR(LABEL, "len error");
133         return nullptr;
134     }
135     uint8_t* str = new (std::nothrow) uint8_t[len];
136     if (str == nullptr) {
137         DLP_LOG_ERROR(LABEL, "New memory fail");
138         return nullptr;
139     }
140     for (uint32_t i = 0; i < len; i++) {
141         str[i] = GetRandNum() % 255; // uint8_t range 0 ~ 255
142     }
143     return str;
144 }
145 
GenerateRandStr(uint32_t len,std::string & res)146 static void GenerateRandStr(uint32_t len, std::string& res)
147 {
148     for (uint32_t i = 0; i < len; i++) {
149         uint32_t index = GetRandNum() % ARRAY_CHAR_SIZE;
150         DLP_LOG_INFO(LABEL, "%{public}u", index);
151         res.push_back(CHAR_ARRAY[index]);
152     }
153     DLP_LOG_INFO(LABEL, "%{public}s", res.c_str());
154 }
155 
156 struct GeneratePolicyParam {
157     uint32_t ownerAccountLen;
158     uint32_t aeskeyLen;
159     uint32_t ivLen;
160     uint32_t userNum;
161     uint32_t authAccountLen;
162     uint32_t authPerm;
163     int64_t deltaTime;
164     uint32_t hmacKeyLen;
165 };
166 
GeneratePolicy(PermissionPolicy & encPolicy,GeneratePolicyParam param,DlpAccountType accountType)167 void GeneratePolicy(PermissionPolicy& encPolicy, GeneratePolicyParam param, DlpAccountType accountType)
168 {
169     uint64_t curTime = static_cast<uint64_t>(
170         std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now().time_since_epoch()).count());
171     GenerateRandStr(param.ownerAccountLen, encPolicy.ownerAccount_);
172     encPolicy.ownerAccountId_ = encPolicy.ownerAccount_;
173     encPolicy.ownerAccountType_ = accountType;
174     uint8_t* key = GenerateRandArray(param.aeskeyLen);
175     encPolicy.SetAeskey(key, param.aeskeyLen);
176     if (key != nullptr) {
177         delete[] key;
178         key = nullptr;
179     }
180     uint8_t* iv = GenerateRandArray(param.ivLen);
181     encPolicy.SetIv(iv, param.ivLen);
182     if (iv != nullptr) {
183         delete[] iv;
184         iv = nullptr;
185     }
186     uint8_t* hmacKey = GenerateRandArray(param.hmacKeyLen);
187     encPolicy.SetHmacKey(hmacKey, param.hmacKeyLen);
188     if (hmacKey != nullptr) {
189         delete[] hmacKey;
190         hmacKey = nullptr;
191     }
192 
193     for (uint32_t user = 0; user < param.userNum; ++user) {
194         std::string accountName;
195         GenerateRandStr(param.authAccountLen, accountName);
196         AuthUserInfo perminfo = {.authAccount = accountName,
197             .authPerm = static_cast<DLPFileAccess>(param.authPerm),
198             .permExpiryTime = curTime + param.deltaTime,
199             .authAccountType = OHOS::Security::DlpPermission::DlpAccountType::DOMAIN_ACCOUNT
200         };
201         encPolicy.authUsers_.emplace_back(perminfo);
202     }
203 }
204 }
205 
206 namespace OHOS {
207 namespace AccountSA {
GetOsAccountLocalIdFromUid(const int uid,int & id)208 ErrCode OsAccountManager::GetOsAccountLocalIdFromUid(const int uid, int &id)
209 {
210     id = DEFAULT_USERID;
211     return DLP_OK;
212 }
213 }
214 }
215 
SetUpTestCase()216 void DlpPermissionServiceTest::SetUpTestCase()
217 {}
218 
TearDownTestCase()219 void DlpPermissionServiceTest::TearDownTestCase()
220 {}
221 
SetUp()222 void DlpPermissionServiceTest::SetUp()
223 {
224     DLP_LOG_INFO(LABEL, "setup");
225     if (dlpPermissionService_ != nullptr) {
226         return;
227     }
228     dlpPermissionService_ = std::make_shared<DlpPermissionService>(SA_ID_DLP_PERMISSION_SERVICE, true);
229     ASSERT_NE(nullptr, dlpPermissionService_);
230     dlpPermissionService_->appStateObserver_ = new (std::nothrow) AppStateObserver();
231     ASSERT_TRUE(dlpPermissionService_->appStateObserver_ != nullptr);
232     GetUserIdByForegroundAccount(&g_userId);
233 }
234 
TearDown()235 void DlpPermissionServiceTest::TearDown()
236 {
237     if (dlpPermissionService_ != nullptr) {
238         dlpPermissionService_->appStateObserver_ = nullptr;
239     }
240     dlpPermissionService_ = nullptr;
241 }
242 
243 /**
244  * @tc.name: DumpTest001
245  * @tc.desc: dlp permission service dump test
246  * @tc.type: FUNC
247  * @tc.require:AR000HGIH9
248  */
249 HWTEST_F(DlpPermissionServiceTest, DumpTest001, TestSize.Level1)
250 {
251     DLP_LOG_INFO(LABEL, "DumpTest001");
252     int fd = -1;
253     std::vector<std::u16string> args;
254 
255     // fd is 0
256     EXPECT_EQ(ERR_INVALID_VALUE, dlpPermissionService_->Dump(fd, args));
257 
258     fd = 1;  // 1: std output
259 
260     // hidumper
261     EXPECT_EQ(ERR_OK, dlpPermissionService_->Dump(fd, args));
262 
263     // hidumper -h
264     args.emplace_back(Str8ToStr16("-h"));
265     EXPECT_EQ(ERR_OK, dlpPermissionService_->Dump(fd, args));
266 
267     args.clear();
268     // hidumper -d
269     args.emplace_back(Str8ToStr16("-d"));
270     EXPECT_EQ(ERR_OK, dlpPermissionService_->Dump(fd, args));
271 
272     args.clear();
273     // hidumper with not exist param
274     args.emplace_back(Str8ToStr16("-n"));
275     EXPECT_EQ(ERR_OK, dlpPermissionService_->Dump(fd, args));
276 
277     args.clear();
278 }
279 
280 class DlpSandboxChangeCallbackTest : public DlpSandboxChangeCallbackStub {
281 public:
282     DlpSandboxChangeCallbackTest() = default;
283     virtual ~DlpSandboxChangeCallbackTest() = default;
284 
285     void DlpSandboxStateChangeCallback(DlpSandboxCallbackInfo& result) override;
286 };
287 
DlpSandboxStateChangeCallback(DlpSandboxCallbackInfo & result)288 void DlpSandboxChangeCallbackTest::DlpSandboxStateChangeCallback(DlpSandboxCallbackInfo& result) {}
289 
290 /**
291  * @tc.name:DlpSandboxChangeCallbackDeathRecipient001
292  * @tc.desc: DlpSandboxChangeCallbackDeathRecipient test
293  * @tc.type: FUNC
294  * @tc.require:DTS2023040302317
295  */
296 HWTEST_F(DlpPermissionServiceTest, DlpSandboxChangeCallbackDeathRecipient001, TestSize.Level1)
297 {
298     auto recipient = std::make_shared<DlpSandboxChangeCallbackDeathRecipient>();
299     ASSERT_NE(nullptr, recipient);
300 
301     recipient->OnRemoteDied(nullptr); // remote is nullptr
302 
303     // backup
304     sptr<IRemoteObject> callback;
305     wptr<IRemoteObject> remote = new (std::nothrow) DlpSandboxChangeCallbackTest();
306     callback = remote.promote();
307     dlpPermissionService_->RegisterDlpSandboxChangeCallback(callback);
308     ASSERT_EQ(static_cast<uint32_t>(1), DlpSandboxChangeCallbackManager::GetInstance().callbackInfoMap_.size());
309     recipient->OnRemoteDied(remote); // remote is not nullptr
310     ASSERT_EQ(static_cast<uint32_t>(0), DlpSandboxChangeCallbackManager::GetInstance().callbackInfoMap_.size());
311     bool result;
312     int32_t res = dlpPermissionService_->UnRegisterDlpSandboxChangeCallback(result);
313     ASSERT_EQ(DLP_CALLBACK_PARAM_INVALID, res);
314     recipient->OnRemoteDied(remote);
315     DlpPermissionServiceTest::permType = -1;
316     dlpPermissionService_->RegisterDlpSandboxChangeCallback(callback);
317     res = dlpPermissionService_->UnRegisterDlpSandboxChangeCallback(result);
318     ASSERT_EQ(DLP_SERVICE_ERROR_PERMISSION_DENY, res);
319     DlpPermissionServiceTest::permType = 0;
320 }
321 
322 class TestOpenDlpFileCallback : public OpenDlpFileCallbackStub {
323 public:
TestOpenDlpFileCallback()324     TestOpenDlpFileCallback() {}
~TestOpenDlpFileCallback()325     ~TestOpenDlpFileCallback() {}
326 
OnOpenDlpFile(OpenDlpFileCallbackInfo & result)327     void OnOpenDlpFile(OpenDlpFileCallbackInfo& result) override
328     {
329         called_ = true;
330     }
331     bool called_ = false;
332 };
333 
334 /**
335  * @tc.name: OpenDlpFileCallbackDeathRecipient001
336  * @tc.desc: OpenDlpFileCallbackDeathRecipient test
337  * @tc.type: FUNC
338  * @tc.require:
339  */
340 HWTEST_F(DlpPermissionServiceTest, OpenDlpFileCallbackDeathRecipient001, TestSize.Level1)
341 {
342     auto recipient = std::make_shared<OpenDlpFileCallbackDeathRecipient>();
343     ASSERT_NE(nullptr, recipient);
344 
345     recipient->OnRemoteDied(nullptr); // remote is nullptr
346 
347     // backup
348     OpenDlpFileCallbackManager::GetInstance().openDlpFileCallbackMap_.clear();
349     wptr<IRemoteObject> remote = new (std::nothrow) TestOpenDlpFileCallback();
350     sptr<IRemoteObject> callback = remote.promote();
351     int32_t res = OpenDlpFileCallbackManager::GetInstance().AddCallback(
352         getpid(), DEFAULT_USERID, DLP_MANAGER_APP, callback);
353     EXPECT_EQ(DLP_OK, res);
354     EXPECT_EQ(static_cast<uint32_t>(1), OpenDlpFileCallbackManager::GetInstance().openDlpFileCallbackMap_.size());
355     recipient->OnRemoteDied(remote); // remote is not nullptr
356     EXPECT_EQ(static_cast<uint32_t>(0), OpenDlpFileCallbackManager::GetInstance().openDlpFileCallbackMap_.size());
357     DlpPermissionServiceTest::isSandbox = false;
358     res = dlpPermissionService_->UnRegisterOpenDlpFileCallback(callback);
359     DlpPermissionServiceTest::isSandbox = true;
360     EXPECT_EQ(DLP_CALLBACK_PARAM_INVALID, res);
361     recipient->OnRemoteDied(remote);
362 
363     res = dlpPermissionService_->UnRegisterOpenDlpFileCallback(callback);
364     ASSERT_EQ(DLP_SERVICE_ERROR_API_NOT_FOR_SANDBOX_ERROR, res);
365 
366     DlpPermissionServiceTest::isCheckSandbox = false;
367     res = dlpPermissionService_->UnRegisterOpenDlpFileCallback(callback);
368     DlpPermissionServiceTest::isCheckSandbox = true;
369     ASSERT_EQ(res, DLP_SERVICE_ERROR_VALUE_INVALID);
370 }
371 
372 /**
373  * @tc.name:FileOperator001
374  * @tc.desc: FileOperator test
375  * @tc.type: FUNC
376  * @tc.require:SR000I38N7
377  */
378 HWTEST_F(DlpPermissionServiceTest, FileOperator001, TestSize.Level1)
379 {
380     std::shared_ptr<FileOperator> fileOperator_ = std::make_shared<FileOperator>();
381     bool result = fileOperator_->IsExistFile("");
382     ASSERT_TRUE(!result);
383     std::string content = "test";
384     result = fileOperator_->IsExistDir("");
385     ASSERT_TRUE(!result);
386     int32_t res = fileOperator_->InputFileByPathAndContent(TEST_URI, content);
387     ASSERT_EQ(DLP_RETENTION_COMMON_FILE_OPEN_FAILED, res);
388     res = fileOperator_->GetFileContentByPath(TEST_URI, content);
389     ASSERT_EQ(DLP_RETENTION_FILE_FIND_FILE_ERROR, res);
390 };
391 
392 /**
393  * @tc.name:SandboxJsonManager001
394  * @tc.desc: SandboxJsonManager test
395  * @tc.type: FUNC
396  * @tc.require:SR000I38N7
397  */
398 HWTEST_F(DlpPermissionServiceTest, SandboxJsonManager001, TestSize.Level1)
399 {
400     std::shared_ptr<SandboxJsonManager> sandboxJsonManager_ = std::make_shared<SandboxJsonManager>();
401     RetentionInfo retentionInfo = {
402         .appIndex = 1,
403         .tokenId = 123456,
404         .bundleName = "test.bundlName",
405         .dlpFileAccess = DLPFileAccess::CONTENT_EDIT,
406         .userId = 100
407     };
408     sandboxJsonManager_->AddSandboxInfo(retentionInfo);
409     int32_t res = sandboxJsonManager_->AddSandboxInfo(retentionInfo);
410     ASSERT_EQ(DLP_INSERT_FILE_ERROR, res);
411     std::set<std::string> docUriSet;
412     docUriSet.emplace("testUri");
413     RetentionInfo info;
414     info.bundleName = "";
415     info.tokenId = 0;
416     res = sandboxJsonManager_->UpdateRetentionState(docUriSet, info, false);
417     ASSERT_EQ(DLP_RETENTION_UPDATE_ERROR, res);
418 }
419 
420 /**
421  * @tc.name:CallbackManager001
422  * @tc.desc: DlpSandboxChangeCallbackManager test
423  * @tc.type: FUNC
424  * @tc.require:DTS2023040302317
425  */
426 HWTEST_F(DlpPermissionServiceTest, CallbackManager001, TestSize.Level1)
427 {
428     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, DlpSandboxChangeCallbackManager::GetInstance().AddCallback(0, nullptr));
429     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, DlpSandboxChangeCallbackManager::GetInstance().RemoveCallback(nullptr));
430     bool result;
431     ASSERT_EQ(
432         DLP_SERVICE_ERROR_VALUE_INVALID, DlpSandboxChangeCallbackManager::GetInstance().RemoveCallback(0, result));
433     sptr<IRemoteObject> callback;
434     wptr<IRemoteObject> remote = new (std::nothrow) DlpSandboxChangeCallbackTest();
435     callback = remote.promote();
436     dlpPermissionService_->RegisterDlpSandboxChangeCallback(callback);
437     for (int i = 10000; i < 11024; i++) {
438         DlpSandboxChangeCallbackManager::GetInstance().AddCallback(i, callback);
439     }
440     ASSERT_EQ(
441         DLP_SERVICE_ERROR_VALUE_INVALID, DlpSandboxChangeCallbackManager::GetInstance().AddCallback(11024, callback));
442     DlpSandboxInfo dlpSandboxInfo;
443     dlpSandboxInfo.pid = 1;
444     DlpSandboxChangeCallbackManager::GetInstance().ExecuteCallbackAsync(dlpSandboxInfo);
445     dlpSandboxInfo.pid = 10010;
446     DlpSandboxChangeCallbackManager::GetInstance().ExecuteCallbackAsync(dlpSandboxInfo);
447 }
448 
449 /**
450  * @tc.name:SandboxJsonManager002
451  * @tc.desc: SandboxJsonManager test
452  * @tc.type: FUNC
453  * @tc.require:DTS2023040302317
454  */
455 HWTEST_F(DlpPermissionServiceTest, SandboxJsonManager002, TestSize.Level1)
456 {
457     std::shared_ptr<SandboxJsonManager> sandboxJsonManager_ = std::make_shared<SandboxJsonManager>();
458     sandboxJsonManager_->FromJson(NULL);
459     RetentionInfo retentionInfo = {
460         .appIndex = 1,
461         .tokenId = 827878,
462         .bundleName = "testbundle",
463         .dlpFileAccess = DLPFileAccess::CONTENT_EDIT,
464         .userId = g_userId
465     };
466     sandboxJsonManager_->AddSandboxInfo(retentionInfo);
467     ASSERT_TRUE(!sandboxJsonManager_->HasRetentionSandboxInfo("testbundle1"));
468     int32_t uid = getuid();
469     setuid(20010031);
470     ASSERT_TRUE(sandboxJsonManager_->HasRetentionSandboxInfo("testbundle"));
471     retentionInfo.bundleName = "testbundle1";
472     retentionInfo.tokenId = 827818;
473     retentionInfo.userId = 10000;
474     sandboxJsonManager_->AddSandboxInfo(retentionInfo);
475     ASSERT_TRUE(!sandboxJsonManager_->HasRetentionSandboxInfo("testbundle1"));
476 
477     ASSERT_EQ(DLP_RETENTION_SERVICE_ERROR, sandboxJsonManager_->DelSandboxInfo(8888));
478 
479     RetentionInfo info;
480     info.tokenId = 827878;
481     std::set<std::string> docUriSet;
482     ASSERT_TRUE(!sandboxJsonManager_->ClearDocUriSet(info, docUriSet));
483     docUriSet.insert("testUri");
484     sandboxJsonManager_->UpdateRetentionState(docUriSet, info, true);
485     ASSERT_EQ(DLP_RETENTION_SERVICE_ERROR, sandboxJsonManager_->DelSandboxInfo(827878));
486     sandboxJsonManager_->UpdateRetentionState(docUriSet, info, false);
487     ASSERT_EQ(DLP_OK, sandboxJsonManager_->DelSandboxInfo(827878));
488     setuid(uid);
489 }
490 
491 /**
492  * @tc.name:SandboxJsonManager003
493  * @tc.desc: SandboxJsonManager test
494  * @tc.type: FUNC
495  * @tc.require:DTS2023040302317
496  */
497 HWTEST_F(DlpPermissionServiceTest, SandboxJsonManager003, TestSize.Level1)
498 {
499     std::shared_ptr<SandboxJsonManager> sandboxJsonManager_ = std::make_shared<SandboxJsonManager>();
500     RetentionInfo retentionInfo = {
501         .appIndex = 1,
502         .tokenId = 827818,
503         .bundleName = "testbundle1",
504         .dlpFileAccess = DLPFileAccess::CONTENT_EDIT,
505         .userId = 10000
506     };
507     sandboxJsonManager_->AddSandboxInfo(retentionInfo);
508     int32_t uid = getuid();
509     ASSERT_EQ(DLP_RETENTION_GET_DATA_FROM_BASE_CONSTRAINTS_FILE_EMPTY,
510         sandboxJsonManager_->RemoveRetentionState("testbundle", -1));
511     ASSERT_EQ(DLP_RETENTION_GET_DATA_FROM_BASE_CONSTRAINTS_FILE_EMPTY,
512         sandboxJsonManager_->RemoveRetentionState("testbundle1", -1));
513     retentionInfo.bundleName = "testbundle";
514     retentionInfo.tokenId = 827878;
515     retentionInfo.userId = g_userId;
516     sandboxJsonManager_->AddSandboxInfo(retentionInfo);
517     ASSERT_EQ(DLP_RETENTION_GET_DATA_FROM_BASE_CONSTRAINTS_FILE_EMPTY,
518         sandboxJsonManager_->RemoveRetentionState("testbundle1", -1));
519     ASSERT_EQ(DLP_OK, sandboxJsonManager_->RemoveRetentionState("testbundle", -1));
520     sandboxJsonManager_->AddSandboxInfo(retentionInfo);
521     ASSERT_EQ(DLP_RETENTION_GET_DATA_FROM_BASE_CONSTRAINTS_FILE_EMPTY,
522         sandboxJsonManager_->RemoveRetentionState("testbundle", 2));
523     ASSERT_EQ(DLP_OK, sandboxJsonManager_->RemoveRetentionState("testbundle", 1));
524     setuid(uid);
525 }
526 
527 /**
528  * @tc.name:SandboxJsonManager004
529  * @tc.desc: GetBundleNameSetByUserId test
530  * @tc.type: FUNC
531  * @tc.require:DTS2023040302317
532  */
533 HWTEST_F(DlpPermissionServiceTest, SandboxJsonManager004, TestSize.Level1)
534 {
535     std::shared_ptr<SandboxJsonManager> sandboxJsonManager_ = std::make_shared<SandboxJsonManager>();
536     std::set<std::string> keySet;
537     int res = sandboxJsonManager_->GetBundleNameSetByUserId(100, keySet);
538     ASSERT_EQ(DLP_OK, res);
539     SandboxInfo sandboxInfo;
540     res = dlpPermissionService_->InstallDlpSandbox(
541         DLP_MANAGER_APP, DLPFileAccess::CONTENT_EDIT, DEFAULT_USERID, sandboxInfo, "testUri1111");
542     ASSERT_NE(DLP_SERVICE_ERROR_VALUE_INVALID, res);
543     res = RetentionFileManager::GetInstance().GetBundleNameSetByUserId(100, keySet);
544     ASSERT_NE(DLP_SERVICE_ERROR_VALUE_INVALID, res);
545     res = RetentionFileManager::GetInstance().RemoveRetentionInfoByUserId(100, keySet);
546     ASSERT_NE(DLP_SERVICE_ERROR_VALUE_INVALID, res);
547     res = RetentionFileManager::GetInstance().RemoveRetentionInfoByUserId(100, keySet);
548     ASSERT_NE(DLP_SERVICE_ERROR_VALUE_INVALID, res);
549 }
550 
551 /**
552  * @tc.name:RetentionFileManager001
553  * @tc.desc: RetentionFileManager test
554  * @tc.type: FUNC
555  * @tc.require:DTS2023040302317
556  */
557 HWTEST_F(DlpPermissionServiceTest, RetentionFileManager001, TestSize.Level1)
558 {
559     std::shared_ptr<SandboxJsonManager> sandboxJsonManager_ = std::make_shared<SandboxJsonManager>();
560     RetentionInfo retentionInfo = {
561         .appIndex = 1,
562         .tokenId = 827878,
563         .bundleName = "testbundle",
564         .dlpFileAccess = DLPFileAccess::CONTENT_EDIT,
565         .userId = 100
566     };
567     sandboxJsonManager_->AddSandboxInfo(retentionInfo);
568     int32_t uid = getuid();
569     setuid(10031);
570     ASSERT_TRUE(!RetentionFileManager::GetInstance().HasRetentionSandboxInfo("testbundle1"));
571     setuid(20010031);
572     RetentionFileManager::GetInstance().hasInit_ = false;
573     ASSERT_EQ(DLP_OK, RetentionFileManager::GetInstance().AddSandboxInfo(retentionInfo));
574     RetentionFileManager::GetInstance().hasInit_ = false;
575     ASSERT_EQ(DLP_RETENTION_SERVICE_ERROR, RetentionFileManager::GetInstance().DelSandboxInfo(8888));
576     RetentionFileManager::GetInstance().hasInit_ = false;
577     ASSERT_TRUE(RetentionFileManager::GetInstance().CanUninstall(8888));
578     RetentionFileManager::GetInstance().hasInit_ = false;
579     ASSERT_EQ(DLP_RETENTION_GET_DATA_FROM_BASE_CONSTRAINTS_FILE_EMPTY,
580         RetentionFileManager::GetInstance().RemoveRetentionState("testbundle1", -1));
581     RetentionFileManager::GetInstance().hasInit_ = false;
582     ASSERT_EQ(DLP_OK, RetentionFileManager::GetInstance().ClearUnreservedSandbox());
583     RetentionFileManager::GetInstance().hasInit_ = false;
584     std::vector<RetentionSandBoxInfo> vec;
585     ASSERT_EQ(DLP_OK, RetentionFileManager::GetInstance().GetRetentionSandboxList("testbundle1", vec, false));
586 
587     setuid(uid);
588 }
589 
590 /**
591  * @tc.name:InstallDlpSandbox001
592  * @tc.desc:InstallDlpSandbox test
593  * @tc.type: FUNC
594  * @tc.require:DTS2023040302317
595  */
596 HWTEST_F(DlpPermissionServiceTest, InstallDlpSandbox001, TestSize.Level1)
597 {
598     DLP_LOG_DEBUG(LABEL, "InstallDlpSandbox001");
599     SandboxInfo sandboxInfo;
600     int32_t ret = dlpPermissionService_->InstallDlpSandbox(
601         DLP_MANAGER_APP, DLPFileAccess::CONTENT_EDIT, DEFAULT_USERID, sandboxInfo, "testUri");
602     ASSERT_NE(DLP_SERVICE_ERROR_VALUE_INVALID, ret);
603     int32_t editAppIndex = sandboxInfo.appIndex;
604     std::set<std::string> docUriSet;
605     docUriSet.insert("testUri");
606     RetentionInfo info;
607     info.appIndex = editAppIndex;
608     info.tokenId = sandboxInfo.tokenId;
609     info.bundleName = DLP_MANAGER_APP;
610     info.userId = DEFAULT_USERID;
611     RetentionFileManager::GetInstance().UpdateSandboxInfo(docUriSet, info, true);
612     ret = dlpPermissionService_->InstallDlpSandbox(
613         DLP_MANAGER_APP, DLPFileAccess::CONTENT_EDIT, DEFAULT_USERID, sandboxInfo, "testUri");
614     ASSERT_NE(DLP_SERVICE_ERROR_VALUE_INVALID, ret);
615     ret = dlpPermissionService_->InstallDlpSandbox(
616         DLP_MANAGER_APP, DLPFileAccess::READ_ONLY, DEFAULT_USERID, sandboxInfo, "testUri");
617     ASSERT_NE(DLP_SERVICE_ERROR_VALUE_INVALID, ret);
618     editAppIndex = sandboxInfo.appIndex;
619     dlpPermissionService_->InstallDlpSandbox(
620         DLP_MANAGER_APP, DLPFileAccess::READ_ONLY, DEFAULT_USERID, sandboxInfo, "testUri1");
621     ASSERT_NE(DLP_SERVICE_ERROR_VALUE_INVALID, ret);
622     editAppIndex = sandboxInfo.appIndex;
623     info.appIndex = editAppIndex;
624     info.tokenId = sandboxInfo.tokenId;
625     RetentionFileManager::GetInstance().UpdateSandboxInfo(docUriSet, info, true);
626     ret = dlpPermissionService_->InstallDlpSandbox(
627         DLP_MANAGER_APP, DLPFileAccess::READ_ONLY, DEFAULT_USERID, sandboxInfo, "testUri");
628     ASSERT_NE(DLP_SERVICE_ERROR_VALUE_INVALID, ret);
629 }
630 
631 /**
632  * @tc.name:InstallDlpSandbox002
633  * @tc.desc:InstallDlpSandbox test
634  * @tc.type: FUNC
635  * @tc.require:
636  */
637 HWTEST_F(DlpPermissionServiceTest, InstallDlpSandbox002, TestSize.Level1)
638 {
639     DLP_LOG_DEBUG(LABEL, "InstallDlpSandbox002");
640     SandboxInfo sandboxInfo;
641     DlpPermissionServiceTest::permType = -1;
642     int32_t ret = dlpPermissionService_->InstallDlpSandbox(
643         DLP_MANAGER_APP, DLPFileAccess::CONTENT_EDIT, DEFAULT_USERID, sandboxInfo, "testUri");
644     DlpPermissionServiceTest::permType = 0;
645     ASSERT_EQ(DLP_SERVICE_ERROR_PERMISSION_DENY, ret);
646 }
647 
648 /**
649  * @tc.name:UninstallDlpSandbox001
650  * @tc.desc:UninstallDlpSandbox test
651  * @tc.type: FUNC
652  * @tc.require:DTS2023040302317
653  */
654 HWTEST_F(DlpPermissionServiceTest, UninstallDlpSandbox001, TestSize.Level1)
655 {
656     SandboxInfo sandboxInfo;
657     uint32_t dlpFileAccess = 5;
658     int32_t ret = dlpPermissionService_->InstallDlpSandbox(
659         "", static_cast<DLPFileAccess>(dlpFileAccess), 100, sandboxInfo, "testUri");
660     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, ret);
661     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, dlpPermissionService_->InstallDlpSandbox("testbundle",
662         static_cast<DLPFileAccess>(dlpFileAccess), 100, sandboxInfo, "testUri"));
663     dlpFileAccess = 0;
664     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, dlpPermissionService_->InstallDlpSandbox("testbundle",
665         static_cast<DLPFileAccess>(dlpFileAccess), 100, sandboxInfo, "testUri"));
666     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, dlpPermissionService_->UninstallDlpSandbox("", -1, -1));
667     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, dlpPermissionService_->UninstallDlpSandbox("testbundle", -1, -1));
668     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, dlpPermissionService_->UninstallDlpSandbox("testbundle", 1, -1));
669 }
670 
671 /**
672  * @tc.name:UninstallDlpSandbox002
673  * @tc.desc:UninstallDlpSandbox test
674  * @tc.type: FUNC
675  * @tc.require:
676  */
677 HWTEST_F(DlpPermissionServiceTest, UninstallDlpSandbox002, TestSize.Level1)
678 {
679     DlpPermissionServiceTest::permType = -1;
680     int32_t ret = dlpPermissionService_->UninstallDlpSandbox("", -1, -1);
681     DlpPermissionServiceTest::permType = 0;
682     ASSERT_EQ(DLP_SERVICE_ERROR_PERMISSION_DENY, ret);
683 }
684 
685 /**
686  * @tc.name:AppUninstallObserver001
687  * @tc.desc:AppUninstallObserver test
688  * @tc.type: FUNC
689  * @tc.require:DTS2023040302317
690  */
691 HWTEST_F(DlpPermissionServiceTest, AppUninstallObserver001, TestSize.Level1)
692 {
693     EventFwk::CommonEventSubscribeInfo subscribeInfo;
694     std::shared_ptr<AppUninstallObserver> observer_ = std::make_shared<AppUninstallObserver>(subscribeInfo);
695     EventFwk::CommonEventData data;
696     OHOS::AAFwk::Want want;
697     want.SetBundle("testbundle1");
698     want.SetAction(EventFwk::CommonEventSupport::COMMON_EVENT_PACKAGE_REMOVED);
699     data.SetWant(want);
700     observer_->OnReceiveEvent(data);
701     std::shared_ptr<SandboxJsonManager> sandboxJsonManager_ = std::make_shared<SandboxJsonManager>();
702     RetentionInfo retentionInfo = {
703         .appIndex = 1,
704         .tokenId = 827818,
705         .bundleName = "testbundle",
706         .dlpFileAccess = DLPFileAccess::CONTENT_EDIT,
707         .userId = 100
708     };
709     int32_t ret = sandboxJsonManager_->AddSandboxInfo(retentionInfo);
710     ASSERT_EQ(DLP_OK, ret);
711     want.SetAction(EventFwk::CommonEventSupport::COMMON_EVENT_PACKAGE_FULLY_REMOVED);
712     want.SetBundle("testbundle");
713     data.SetWant(want);
714     observer_->OnReceiveEvent(data);
715     want.SetAction(EventFwk::CommonEventSupport::COMMON_EVENT_PACKAGE_DATA_CLEARED);
716     data.SetWant(want);
717     observer_->OnReceiveEvent(data);
718 }
719 
720 class DlpTestRemoteObj : public IRemoteBroker {
721 public:
722     DECLARE_INTERFACE_DESCRIPTOR(u"ohos.dlp.test");
723     DlpTestRemoteObj() = default;
724     virtual ~DlpTestRemoteObj() noexcept = default;
725 };
726 
727 /**
728  * @tc.name:SandboxJsonManager001
729  * @tc.desc: SandboxJsonManager test
730  * @tc.type: FUNC
731  * @tc.require:SR000I38N7
732  */
733 HWTEST_F(DlpPermissionServiceTest, DlpPermissionStub001, TestSize.Level1)
734 {
735     sptr<DlpPermissionServiceStub> stub = new (std::nothrow) DlpPermissionService(0, 0);
736     ASSERT_TRUE(!(stub == nullptr));
737 
738     sptr<DlpPolicyParcel> policyParcel = new (std::nothrow) DlpPolicyParcel();
739     ASSERT_TRUE(!(policyParcel == nullptr));
740 
741     sptr<DlpTestRemoteObj> callback = new (std::nothrow)IRemoteStub<DlpTestRemoteObj>();
742     EXPECT_TRUE(callback != nullptr);
743 
744     int32_t res;
745     MessageParcel data;
746     MessageParcel reply;
747     MessageOption option;
748     res = stub->OnRemoteRequest(static_cast<uint32_t>(IDlpPermissionServiceIpcCode::COMMAND_GENERATE_DLP_CERTIFICATE),
749         data, reply, option);
750     EXPECT_EQ(false, !res);
751 
752     res = data.WriteParcelable(policyParcel);
753     EXPECT_EQ(false, res);
754 
755     res = data.WriteRemoteObject(callback->AsObject());
756     EXPECT_EQ(false, !res);
757 
758     res = stub->OnRemoteRequest(static_cast<uint32_t>(IDlpPermissionServiceIpcCode::COMMAND_GENERATE_DLP_CERTIFICATE),
759         data, reply, option);
760     EXPECT_EQ(false, !res);
761 
762     sptr<IDlpPermissionCallback> callback2 = nullptr;
763     res = stub->GenerateDlpCertificate(policyParcel, callback2);
764     EXPECT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, res);
765 
766     sptr<IDlpPermissionCallback> callback3 = iface_cast<IDlpPermissionCallback>(callback->AsObject());
767     res = stub->GenerateDlpCertificate(policyParcel, callback3);
768     EXPECT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, res);
769 }
770 
771 /**
772  * @tc.name: VisitRecordJsonManager001
773  * @tc.desc: VisitRecordJsonManager test
774  * @tc.type: FUNC
775  * @tc.require:SR000I38MU
776  */
777 HWTEST_F(DlpPermissionServiceTest, VisitRecordJsonManager001, TestSize.Level1)
778 {
779     std::shared_ptr<VisitRecordJsonManager> visitRecordJsonManager_ = std::make_shared<VisitRecordJsonManager>();
780     std::vector<VisitedDLPFileInfo> infoVec;
781     int32_t res = visitRecordJsonManager_->GetVisitRecordList(DLP_MANAGER_APP, 100, infoVec);
782     ASSERT_EQ(DLP_FILE_NO_NEED_UPDATE, res);
783     res = visitRecordJsonManager_->AddVisitRecord(DLP_MANAGER_APP, 100, "testuri");
784     if (res != DLP_OK) {
785         ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, res);
786     } else {
787         ASSERT_EQ(DLP_OK, res);
788     }
789 
790     res = visitRecordJsonManager_->AddVisitRecord(DLP_MANAGER_APP, 100, "testuri");
791     if (res != DLP_OK) {
792         ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, res);
793     } else {
794         ASSERT_EQ(DLP_OK, res);
795     }
796     res = visitRecordJsonManager_->AddVisitRecord(DLP_MANAGER_APP, 100, "testur");
797     if (res != DLP_OK) {
798         ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, res);
799     } else {
800         ASSERT_EQ(DLP_OK, res);
801     }
802     res = visitRecordJsonManager_->AddVisitRecord(DLP_MANAGER_APP, 1001, "testuri", 0, 1001);
803     if (res != DLP_OK) {
804         ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, res);
805     } else {
806         ASSERT_EQ(DLP_OK, res);
807     }
808     res = visitRecordJsonManager_->AddVisitRecord(PERMISSION_APP, 100, "testuri");
809     if (res != DLP_OK) {
810         ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, res);
811     } else {
812         ASSERT_EQ(DLP_OK, res);
813     }
814     res = visitRecordJsonManager_->GetVisitRecordList(PERMISSION_APP, 1001, infoVec);
815     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, res);
816     for (int32_t i = 1; i <= 1024; i++) {
817         res = visitRecordJsonManager_->AddVisitRecord(PERMISSION_APP, 100 + i, "testuri", 0, 100 + i);
818     }
819     if (res != DLP_JSON_UPDATE_ERROR) {
820         ASSERT_NE(DLP_SERVICE_ERROR_VALUE_INVALID, res);
821     } else {
822         ASSERT_EQ(DLP_JSON_UPDATE_ERROR, res);
823     }
824 }
825 
826 /**
827  * @tc.name: VisitRecordJsonManager002
828  * @tc.desc: VisitRecordJsonManager test
829  * @tc.type: FUNC
830  * @tc.require:SR000I38MU
831  */
832 HWTEST_F(DlpPermissionServiceTest, VisitRecordJsonManager002, TestSize.Level1)
833 {
834     std::shared_ptr<VisitRecordJsonManager> visitRecordJsonManager_ = std::make_shared<VisitRecordJsonManager>();
835     std::string jsonStr = "{\"test\":[]}";
836     Json callbackInfoJson = Json::parse(jsonStr, nullptr, false);
837     visitRecordJsonManager_->FromJson(callbackInfoJson);
838     ASSERT_TRUE(visitRecordJsonManager_->infoList_.size() == 0);
839     jsonStr = "{\"recordList\":[{\"bundleName\":\"\",\"docUri\":\"file://media/file/12\",\"userId\":100}]}";
840     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
841     visitRecordJsonManager_->FromJson(callbackInfoJson);
842     ASSERT_TRUE(visitRecordJsonManager_->infoList_.size() == 0);
843     jsonStr = "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri\":\"\",\"userId\":100}]}";
844     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
845     visitRecordJsonManager_->FromJson(callbackInfoJson);
846     ASSERT_TRUE(visitRecordJsonManager_->infoList_.size() == 0);
847     jsonStr =
848         "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri\":\"file://media/file/12\",\"userId\":-1}]}";
849     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
850     visitRecordJsonManager_->FromJson(callbackInfoJson);
851     ASSERT_TRUE(visitRecordJsonManager_->infoList_.size() == 0);
852     jsonStr = "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri\":\"file://media/file/"
853         "12\",\"userId\":100}]}";
854     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
855     visitRecordJsonManager_->FromJson(callbackInfoJson);
856     ASSERT_TRUE(visitRecordJsonManager_->infoList_.size() == 0);
857     jsonStr = "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri\":\"file://media/file/"
858         "12\",\"userId\":100,\"timestamp\":-1}]}";
859     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
860     visitRecordJsonManager_->FromJson(callbackInfoJson);
861     ASSERT_TRUE(visitRecordJsonManager_->infoList_.size() == 0);
862     jsonStr = "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri\":\"file://media/file/"
863         "12\",\"userId\":100,\"timestamp\":1686844687}]}";
864     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
865     visitRecordJsonManager_->FromJson(callbackInfoJson);
866     ASSERT_TRUE(visitRecordJsonManager_->infoList_.size() == 0);
867     jsonStr = "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri\":\"file://media/file/"
868         "12\",\"userId\":100,\"timestamp\":1686844687,\"originalTokenId\":100}]}";
869     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
870     visitRecordJsonManager_->FromJson(callbackInfoJson);
871     ASSERT_TRUE(visitRecordJsonManager_->infoList_.size() == 1);
872 }
873 
874 /**
875  * @tc.name: VisitRecordJsonManager003
876  * @tc.desc: VisitRecordJsonManager test
877  * @tc.type: FUNC
878  * @tc.require:SR000I38MU
879  */
880 HWTEST_F(DlpPermissionServiceTest, VisitRecordJsonManager003, TestSize.Level1)
881 {
882     std::shared_ptr<VisitRecordJsonManager> visitRecordJsonManager_ = std::make_shared<VisitRecordJsonManager>();
883     visitRecordJsonManager_->FromJson(NULL);
884     std::string jsonStr = "{\"recordList\":[{\"bundleName1\":\"\"}]}";
885     Json callbackInfoJson = Json::parse(jsonStr, nullptr, false);
886     visitRecordJsonManager_->FromJson(callbackInfoJson);
887     ASSERT_TRUE(visitRecordJsonManager_->infoList_.size() == 0);
888     jsonStr = "{\"recordList\":[{\"bundleName\":1}]}";
889     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
890     visitRecordJsonManager_->FromJson(callbackInfoJson);
891     jsonStr = "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri1\":\"\",\"userId\":100}]}";
892     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
893     visitRecordJsonManager_->FromJson(callbackInfoJson);
894     jsonStr = "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri\":1,\"userId\":100}]}";
895     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
896     visitRecordJsonManager_->FromJson(callbackInfoJson);
897     jsonStr = "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri\":\"\",\"userId1\":100}]}";
898     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
899     visitRecordJsonManager_->FromJson(callbackInfoJson);
900     jsonStr = "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri\":\"\",\"userId\":\"100\"}]}";
901     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
902     visitRecordJsonManager_->FromJson(callbackInfoJson);
903     jsonStr = "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri\":\"file://media/file/"
904         "12\",\"userId\":100,\"timestamp1\":1686844687}]}";
905     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
906     visitRecordJsonManager_->FromJson(callbackInfoJson);
907     jsonStr = "{\"recordList\":[{\"bundleName\":\"com.example.ohnotes\",\"docUri\":\"file://media/file/"
908         "12\",\"userId\":100,\"timestamp\":\"1686844687\"}]}";
909     callbackInfoJson = Json::parse(jsonStr, nullptr, false);
910     visitRecordJsonManager_->FromJson(callbackInfoJson);
911     visitRecordJsonManager_->infoList_.clear();
912     ASSERT_EQ("", visitRecordJsonManager_->ToString());
913 }
914 /**
915  * @tc.name: VisitRecordFileManager001
916  * @tc.desc: VisitRecordFileManager test
917  * @tc.type: FUNC
918  * @tc.require:SR000I38MU
919  */
920 HWTEST_F(DlpPermissionServiceTest, VisitRecordFileManager001, TestSize.Level1)
921 {
922     std::shared_ptr<VisitRecordFileManager> visitRecordFileManager = std::make_shared<VisitRecordFileManager>();
923     std::vector<VisitedDLPFileInfo> infoVec;
924     int32_t res = visitRecordFileManager->GetVisitRecordList(DLP_MANAGER_APP, 100, infoVec);
925     ASSERT_EQ(DLP_OK, res);
926     visitRecordFileManager->hasInit_ = true;
927     ASSERT_EQ(true, visitRecordFileManager->Init());
928     visitRecordFileManager->hasInit_ = false;
929     ASSERT_EQ(true, visitRecordFileManager->Init());
930     ASSERT_EQ(DLP_OK, visitRecordFileManager->UpdateFile(DLP_FILE_NO_NEED_UPDATE));
931     ASSERT_EQ(DLP_JSON_UPDATE_ERROR, visitRecordFileManager->UpdateFile(DLP_JSON_UPDATE_ERROR));
932     visitRecordFileManager->hasInit_ = false;
933     res = visitRecordFileManager->AddVisitRecord(DLP_MANAGER_APP, 100, "testuri");
934     if (res != DLP_OK) {
935         ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, res);
936     } else {
937         ASSERT_EQ(DLP_OK, res);
938     }
939     visitRecordFileManager->hasInit_ = false;
940     res = visitRecordFileManager->GetVisitRecordList(DLP_MANAGER_APP, 100, infoVec);
941     ASSERT_EQ(DLP_OK, res);
942 }
943 
944 /**
945  * @tc.name: GetLocalAccountName001
946  * @tc.desc: GetLocalAccountName test
947  * @tc.type: FUNC
948  * @tc.require:SR000I38MU
949  */
950 HWTEST_F(DlpPermissionServiceTest, GetLocalAccountName001, TestSize.Level1)
951 {
952     ASSERT_EQ(-1, GetLocalAccountName(nullptr, g_userId));
953 }
954 
955 /**
956  * @tc.name: OnStart001
957  * @tc.desc: OnStart test
958  * @tc.type: FUNC
959  * @tc.require:
960  */
961 HWTEST_F(DlpPermissionServiceTest, OnStart001, TestSize.Level1)
962 {
963     auto state = dlpPermissionService_->state_;
964     dlpPermissionService_->state_ = ServiceRunningState::STATE_RUNNING;
965     dlpPermissionService_->OnStart();
966     dlpPermissionService_->state_ = state;
967     dlpPermissionService_->OnStop();
968     ASSERT_EQ(true, dlpPermissionService_->RegisterAppStateObserver());
969 }
970 
971 /**
972  * @tc.name: ParseDlpCertificate001
973  * @tc.desc: ParseDlpCertificate test
974  * @tc.type: FUNC
975  * @tc.require:
976  */
977 HWTEST_F(DlpPermissionServiceTest, ParseDlpCertificate001, TestSize.Level1)
978 {
979     sptr<CertParcel> certParcel = new (std::nothrow) CertParcel();
980     sptr<IDlpPermissionCallback> callback = nullptr;
981     int32_t ret = dlpPermissionService_->ParseDlpCertificate(certParcel, callback, "", true);
982     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, ret);
983 
984     std::shared_ptr<GenerateDlpCertificateCallback> callback1 =
985         std::make_shared<ClientGenerateDlpCertificateCallback>();
986     callback = new (std::nothrow) DlpPermissionAsyncStub(callback1);
987     ret = dlpPermissionService_->ParseDlpCertificate(certParcel, callback, "", true);
988     ASSERT_EQ(DLP_CREDENTIAL_ERROR_APPID_NOT_AUTHORIZED, ret);
989 }
990 
991 /**
992  * @tc.name: ParseDlpCertificate002
993  * @tc.desc: ParseDlpCertificate test
994  * @tc.type: FUNC
995  * @tc.require:
996  */
997 HWTEST_F(DlpPermissionServiceTest, ParseDlpCertificate002, TestSize.Level1)
998 {
999     sptr<CertParcel> certParcel = new (std::nothrow) CertParcel();
1000     sptr<IDlpPermissionCallback> callback = nullptr;
1001     DlpPermissionServiceTest::permType = 1;
1002     int32_t ret = dlpPermissionService_->ParseDlpCertificate(certParcel, callback, "", true);
1003     DlpPermissionServiceTest::permType = 0;
1004     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, ret);
1005 
1006     DlpPermissionServiceTest::permType = 2;
1007     ret = dlpPermissionService_->ParseDlpCertificate(certParcel, callback, "", true);
1008     DlpPermissionServiceTest::permType = 0;
1009     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, ret);
1010 
1011     DlpPermissionServiceTest::permType = -1;
1012     ret = dlpPermissionService_->ParseDlpCertificate(certParcel, callback, "", true);
1013     DlpPermissionServiceTest::permType = 0;
1014     ASSERT_EQ(DLP_SERVICE_ERROR_PERMISSION_DENY, ret);
1015 }
1016 
1017 /**
1018  * @tc.name: InsertDlpSandboxInfo001
1019  * @tc.desc: InsertDlpSandboxInfo test
1020  * @tc.type: FUNC
1021  * @tc.require:
1022  */
1023 HWTEST_F(DlpPermissionServiceTest, InsertDlpSandboxInfo001, TestSize.Level1)
1024 {
1025     auto appStateObserver = dlpPermissionService_->appStateObserver_;
1026     DlpSandboxInfo sandboxInfo;
1027     dlpPermissionService_->InsertDlpSandboxInfo(sandboxInfo, false);
1028     std::string bundleName;
1029     int32_t appIndex = 111;
1030     int32_t userId = 111;
1031     ASSERT_TRUE(0 == dlpPermissionService_->DeleteDlpSandboxInfo(bundleName, appIndex, userId));
1032     dlpPermissionService_->appStateObserver_ = appStateObserver;
1033 
1034     dlpPermissionService_->InsertDlpSandboxInfo(sandboxInfo, true);
1035 }
1036 
1037 /**
1038  * @tc.name: InsertDlpSandboxInfo002
1039  * @tc.desc: InsertDlpSandboxInfo test
1040  * @tc.type: FUNC
1041  * @tc.require:
1042  */
1043 HWTEST_F(DlpPermissionServiceTest, InsertDlpSandboxInfo002, TestSize.Level1)
1044 {
1045     std::string bundleName;
1046     int32_t appIndex = 111;
1047     int32_t userId = 111;
1048     ASSERT_TRUE(0 == dlpPermissionService_->DeleteDlpSandboxInfo(bundleName, appIndex, userId));
1049 }
1050 
1051 /**
1052  * @tc.name: GenerateDlpCertificate001
1053  * @tc.desc: GenerateDlpCertificate test
1054  * @tc.type: FUNC
1055  * @tc.require:
1056  */
1057 HWTEST_F(DlpPermissionServiceTest, GenerateDlpCertificate001, TestSize.Level1)
1058 {
1059     DLP_LOG_DEBUG(LABEL, "GenerateDlpCertificate001");
1060     sptr<DlpPolicyParcel> policyParcel = new (std::nothrow) DlpPolicyParcel();
1061     std::shared_ptr<GenerateDlpCertificateCallback> callback1 =
1062         std::make_shared<ClientGenerateDlpCertificateCallback>();
1063     sptr<IDlpPermissionCallback> callback = new (std::nothrow) DlpPermissionAsyncStub(callback1);
1064 
1065     int32_t res = dlpPermissionService_->GenerateDlpCertificate(policyParcel, callback);
1066     DLP_LOG_DEBUG(LABEL, "GenerateDlpCertificate001 1");
1067     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, res);
1068     PermissionPolicy policy;
1069     policy.ownerAccount_ = "testAccount";
1070     policy.ownerAccountId_ = "testAccountId";
1071     policy.ownerAccountType_ = OHOS::Security::DlpPermission::DlpAccountType::CLOUD_ACCOUNT;
1072 
1073     AuthUserInfo user;
1074     NewUserSample(user);
1075     policy.authUsers_.emplace_back(user);
1076     policyParcel->policyParams_ = policy;
1077     res = dlpPermissionService_->GenerateDlpCertificate(policyParcel, callback);
1078     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, res);
1079 }
1080 
1081 /**
1082  * @tc.name: GenerateDlpCertificate002
1083  * @tc.desc: GenerateDlpCertificate test
1084  * @tc.type: FUNC
1085  * @tc.require:
1086  */
1087 HWTEST_F(DlpPermissionServiceTest, GenerateDlpCertificate002, TestSize.Level1)
1088 {
1089     DLP_LOG_DEBUG(LABEL, "GenerateDlpCertificate002");
1090     sptr<DlpPolicyParcel> policyParcel = new (std::nothrow) DlpPolicyParcel();
1091     std::shared_ptr<GenerateDlpCertificateCallback> callback1 =
1092         std::make_shared<ClientGenerateDlpCertificateCallback>();
1093     sptr<IDlpPermissionCallback> callback = new (std::nothrow) DlpPermissionAsyncStub(callback1);
1094 
1095     PermissionPolicy policy;
1096     GeneratePolicyParam param = {ACCOUNT_LENGTH, AESKEY_LEN, AESKEY_LEN, USER_NUM, ACCOUNT_LENGTH, AUTH_PERM,
1097         DELTA_EXPIRY_TIME, HMACKEY_LEN};
1098     GeneratePolicy(policy, param, OHOS::Security::DlpPermission::DlpAccountType::DOMAIN_ACCOUNT);
1099     policyParcel->policyParams_.CopyPermissionPolicy(policy);
1100     int32_t res = dlpPermissionService_->GenerateDlpCertificate(policyParcel, callback);
1101     ASSERT_EQ(DLP_PARSE_ERROR_ACCOUNT_INVALID, res);
1102 }
1103 
1104 /**
1105  * @tc.name: GenerateDlpCertificate003
1106  * @tc.desc: GenerateDlpCertificate test
1107  * @tc.type: FUNC
1108  * @tc.require:
1109  */
1110 HWTEST_F(DlpPermissionServiceTest, GenerateDlpCertificate003, TestSize.Level1)
1111 {
1112     DLP_LOG_DEBUG(LABEL, "GenerateDlpCertificate003");
1113     sptr<DlpPolicyParcel> policyParcel = new (std::nothrow) DlpPolicyParcel();
1114     std::shared_ptr<GenerateDlpCertificateCallback> callback1 =
1115         std::make_shared<ClientGenerateDlpCertificateCallback>();
1116     sptr<IDlpPermissionCallback> callback = new (std::nothrow) DlpPermissionAsyncStub(callback1);
1117 
1118     PermissionPolicy policy;
1119     GeneratePolicyParam param = {ACCOUNT_LENGTH, AESKEY_LEN, AESKEY_LEN, USER_NUM, ACCOUNT_LENGTH, AUTH_PERM,
1120         DELTA_EXPIRY_TIME, HMACKEY_LEN};
1121     GeneratePolicy(policy, param, OHOS::Security::DlpPermission::DlpAccountType::CLOUD_ACCOUNT);
1122     policyParcel->policyParams_.CopyPermissionPolicy(policy);
1123     int32_t res = dlpPermissionService_->GenerateDlpCertificate(policyParcel, callback);
1124     ASSERT_EQ(DLP_OK, res);
1125 }
1126 
1127 /**
1128  * @tc.name: GenerateDlpCertificate004
1129  * @tc.desc: GenerateDlpCertificate test
1130  * @tc.type: FUNC
1131  * @tc.require:
1132  */
1133 HWTEST_F(DlpPermissionServiceTest, GenerateDlpCertificate004, TestSize.Level1)
1134 {
1135     DLP_LOG_DEBUG(LABEL, "GenerateDlpCertificate004");
1136     sptr<DlpPolicyParcel> policyParcel = new (std::nothrow) DlpPolicyParcel();
1137     std::shared_ptr<GenerateDlpCertificateCallback> callback1 =
1138         std::make_shared<ClientGenerateDlpCertificateCallback>();
1139     sptr<IDlpPermissionCallback> callback = new (std::nothrow) DlpPermissionAsyncStub(callback1);
1140 
1141     PermissionPolicy policy;
1142     GeneratePolicyParam param = {ACCOUNT_LENGTH, AESKEY_LEN, AESKEY_LEN, USER_NUM, ACCOUNT_LENGTH, AUTH_PERM,
1143         DELTA_EXPIRY_TIME, HMACKEY_LEN};
1144     GeneratePolicy(policy, param, OHOS::Security::DlpPermission::DlpAccountType::CLOUD_ACCOUNT);
1145     policyParcel->policyParams_.CopyPermissionPolicy(policy);
1146     DlpPermissionServiceTest::permType = 1;
1147     int32_t res = dlpPermissionService_->GenerateDlpCertificate(policyParcel, callback);
1148     DlpPermissionServiceTest::permType = 0;
1149     ASSERT_EQ(DLP_OK, res);
1150 
1151     DlpPermissionServiceTest::permType = 2;
1152     res = dlpPermissionService_->GenerateDlpCertificate(policyParcel, callback);
1153     DlpPermissionServiceTest::permType = 0;
1154     ASSERT_EQ(DLP_OK, res);
1155 
1156     DlpPermissionServiceTest::permType = -1;
1157     res = dlpPermissionService_->GenerateDlpCertificate(policyParcel, callback);
1158     DlpPermissionServiceTest::permType = 0;
1159     ASSERT_EQ(DLP_SERVICE_ERROR_PERMISSION_DENY, res);
1160 }
1161 
1162 /**
1163  * @tc.name: SerializeEncPolicyData001
1164  * @tc.desc: SerializeEncPolicyData test
1165  * @tc.type: FUNC
1166  * @tc.require:
1167  */
1168 HWTEST_F(DlpPermissionServiceTest, SerializeEncPolicyData001, TestSize.Level1)
1169 {
1170     DLP_LOG_DEBUG(LABEL, "SerializeEncPolicyData001");
1171     uint8_t* encPolicy = const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(POLICY_CIPHER.c_str()));
1172     const char* exInfo = "DlpRestorePolicyTest_NormalInput_ExtraInfo";
1173     EncAndDecOptions encAndDecOptions = {
1174         .opt = ALLOW_RECEIVER_DECRYPT_WITHOUT_USE_CLOUD,
1175         .extraInfo = const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(exInfo)),
1176         .extraInfoLen = strlen(exInfo)
1177     };
1178     DLP_EncPolicyData encPolicyData = {
1179         .dataLen = 0
1180     };
1181     unordered_json encDataJson;
1182     int32_t res = DlpPermissionSerializer::GetInstance().SerializeEncPolicyData(encPolicyData, encDataJson);
1183     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, res);
1184     encPolicyData.dataLen = DLP_MAX_CERT_SIZE + 1;
1185     res = DlpPermissionSerializer::GetInstance().SerializeEncPolicyData(encPolicyData, encDataJson);
1186     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, res);
1187     encPolicyData.dataLen = POLICY_CIPHER.size();
1188     DLP_LOG_DEBUG(LABEL, "SerializeEncPolicyData001 encData.options.extraInfoLen %{public}d",
1189         encAndDecOptions.extraInfoLen);
1190     encPolicyData.options = encAndDecOptions;
1191     res = DlpPermissionSerializer::GetInstance().SerializeEncPolicyData(encPolicyData, encDataJson);
1192     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, res);
1193     encPolicyData.data = encPolicy;
1194     res = DlpPermissionSerializer::GetInstance().SerializeEncPolicyData(encPolicyData, encDataJson);
1195     ASSERT_EQ(DLP_OK, res);
1196     unordered_json decDataJson = encDataJson;
1197     encAndDecOptions.extraInfoLen = 0;
1198     encPolicyData.options = encAndDecOptions;
1199     DLP_EncPolicyData decPolicyData;
1200     res = DlpPermissionSerializer::GetInstance().DeserializeEncPolicyData(decDataJson, decPolicyData, false);
1201     ASSERT_EQ(DLP_OK, res);
1202     AccountType tempType;
1203     ASSERT_NE(encDataJson.find(ENC_ACCOUNT_TYPE), encDataJson.end());
1204     ASSERT_EQ(encDataJson.at(ENC_ACCOUNT_TYPE).is_number(), true);
1205     encDataJson.at(ENC_ACCOUNT_TYPE).get_to(tempType);
1206     decDataJson[ENC_ACCOUNT_TYPE] = "test";
1207     res = DlpPermissionSerializer::GetInstance().DeserializeEncPolicyData(decDataJson, decPolicyData, false);
1208     ASSERT_EQ(DLP_OK, res);
1209     decDataJson.erase(ENC_ACCOUNT_TYPE);
1210     res = DlpPermissionSerializer::GetInstance().DeserializeEncPolicyData(decDataJson, decPolicyData, false);
1211     ASSERT_EQ(DLP_OK, res);
1212     decDataJson[ENC_ACCOUNT_TYPE] = tempType;
1213     res = DlpPermissionSerializer::GetInstance().DeserializeEncPolicyData(decDataJson, decPolicyData, false);
1214     ASSERT_EQ(DLP_OK, res);
1215 }
1216 
1217 /**
1218  * @tc.name: UninstallDlpSandboxApp001
1219  * @tc.desc: UninstallDlpSandboxApp test
1220  * @tc.type: FUNC
1221  * @tc.require:
1222  */
1223 HWTEST_F(DlpPermissionServiceTest, UninstallDlpSandboxApp001, TestSize.Level1)
1224 {
1225     DLP_LOG_DEBUG(LABEL, "UninstallDlpSandboxApp001");
1226 
1227     std::string bundleName;
1228     int32_t appIndex = 0;
1229     int32_t userId = 0;
1230     int32_t ret = dlpPermissionService_->UninstallDlpSandboxApp(bundleName, appIndex, userId);
1231     ASSERT_EQ(DLP_SERVICE_ERROR_UNINSTALL_SANDBOX_FAIL, ret);
1232 }
1233 
1234 /**
1235  * @tc.name: GetSandboxExternalAuthorization001
1236  * @tc.desc: GetSandboxExternalAuthorization test
1237  * @tc.type: FUNC
1238  * @tc.require:
1239  */
1240 HWTEST_F(DlpPermissionServiceTest, GetSandboxExternalAuthorization001, TestSize.Level1)
1241 {
1242     DLP_LOG_DEBUG(LABEL, "GetSandboxExternalAuthorization001");
1243 
1244     int sandboxUid = -1;
1245     AAFwk::Want want;
1246     SandBoxExternalAuthorType authType;
1247     int32_t ret = dlpPermissionService_->GetSandboxExternalAuthorization(sandboxUid, want, authType);
1248     ASSERT_EQ(DLP_SERVICE_ERROR_VALUE_INVALID, ret);
1249     sandboxUid = 0;
1250     ret = dlpPermissionService_->GetSandboxExternalAuthorization(sandboxUid, want, authType);
1251     ASSERT_EQ(DLP_OK, ret);
1252 }
1253 
1254 /**
1255  * @tc.name: GetSandboxExternalAuthorization002
1256  * @tc.desc: GetSandboxExternalAuthorization test
1257  * @tc.type: FUNC
1258  * @tc.require:
1259  */
1260 HWTEST_F(DlpPermissionServiceTest, GetSandboxExternalAuthorization002, TestSize.Level1)
1261 {
1262     DLP_LOG_DEBUG(LABEL, "GetSandboxExternalAuthorization002");
1263 
1264     int sandboxUid = -1;
1265     AAFwk::Want want;
1266     SandBoxExternalAuthorType authType;
1267     DlpPermissionServiceTest::permType = -1;
1268     int32_t ret = dlpPermissionService_->GetSandboxExternalAuthorization(sandboxUid, want, authType);
1269     DlpPermissionServiceTest::permType = 0;
1270     EXPECT_NE(DLP_SERVICE_ERROR_MEMORY_OPERATE_FAIL, ret);
1271 }
1272 
1273 /**
1274  * @tc.name: GetConfigFileValue001
1275  * @tc.desc: GetConfigFileValue test
1276  * @tc.type: FUNC
1277  * @tc.require:
1278  */
1279 HWTEST_F(DlpPermissionServiceTest, GetConfigFileValue001, TestSize.Level1)
1280 {
1281     DLP_LOG_DEBUG(LABEL, "GetConfigFileValue001");
1282 
1283     std::string cfgFile;
1284     std::vector<std::string> typeList;
1285     (void)dlpPermissionService_->GetConfigFileValue(cfgFile, typeList);
1286     EXPECT_EQ(typeList.size(), 0);
1287 }
1288 
1289 /**
1290  * @tc.name: RemoveRetentionInfo001
1291  * @tc.desc: RemoveRetentionInfo test
1292  * @tc.type: FUNC
1293  * @tc.require:
1294  */
1295 HWTEST_F(DlpPermissionServiceTest, RemoveRetentionInfo001, TestSize.Level1)
1296 {
1297     DLP_LOG_DEBUG(LABEL, "RemoveRetentionInfo001");
1298 
1299     std::vector<RetentionSandBoxInfo> retentionSandBoxInfoVec;
1300     RetentionInfo info;
1301     bool ret = dlpPermissionService_->RemoveRetentionInfo(retentionSandBoxInfoVec, info);
1302     ASSERT_EQ(true, ret);
1303 }
1304 
1305 /**
1306  * @tc.name: DeserializeEncPolicyDataByFirstVersion001
1307  * @tc.desc: DeserializeEncPolicyDataByFirstVersion test
1308  * @tc.type: FUNC
1309  * @tc.require:
1310  */
1311 HWTEST_F(DlpPermissionServiceTest, DeserializeEncPolicyDataByFirstVersion001, TestSize.Level1)
1312 {
1313     DLP_LOG_INFO(LABEL, "DeserializeEncPolicyDataByFirstVersion001");
1314     unordered_json encDataJson = {
1315         { ENC_DATA_LEN, 11 }
1316     };
1317     unordered_json encDataJson2;
1318     DLP_EncPolicyData encData;
1319     std::string ownerAccountId;
1320     int res = DlpPermissionSerializer::GetInstance().DeserializeEncPolicyDataByFirstVersion(encDataJson, encDataJson2,
1321         encData, ownerAccountId);
1322     ASSERT_EQ(res, DLP_SERVICE_ERROR_VALUE_INVALID);
1323     encDataJson[ENC_DATA] = "1";
1324     res = DlpPermissionSerializer::GetInstance().DeserializeEncPolicyDataByFirstVersion(encDataJson, encDataJson2,
1325         encData, ownerAccountId);
1326     ASSERT_EQ(res, DLP_SERVICE_ERROR_VALUE_INVALID);
1327     encDataJson[EXTRA_INFO] = "1";
1328     res = DlpPermissionSerializer::GetInstance().DeserializeEncPolicyDataByFirstVersion(encDataJson, encDataJson2,
1329         encData, ownerAccountId);
1330     ASSERT_EQ(res, DLP_OK);
1331     encDataJson2[ENC_POLICY] = "1";
1332     res = DlpPermissionSerializer::GetInstance().DeserializeEncPolicyDataByFirstVersion(encDataJson, encDataJson2,
1333         encData, ownerAccountId);
1334     ASSERT_EQ(res, DLP_SERVICE_ERROR_VALUE_INVALID);
1335     encDataJson2[ENC_ACCOUNT_TYPE] = 2;
1336     res = DlpPermissionSerializer::GetInstance().DeserializeEncPolicyDataByFirstVersion(encDataJson, encDataJson2,
1337         encData, ownerAccountId);
1338     ASSERT_EQ(res, DLP_SERVICE_ERROR_VALUE_INVALID);
1339     encDataJson2[EXTRA_INFO] = "1";
1340     res = DlpPermissionSerializer::GetInstance().DeserializeEncPolicyDataByFirstVersion(encDataJson, encDataJson2,
1341         encData, ownerAccountId);
1342     ASSERT_EQ(res, DLP_OK);
1343 }
1344 
1345 /**
1346  * @tc.name: SandboxConfigOperate001
1347  * @tc.desc: SandboxConfigOperate test
1348  * @tc.type: FUNC
1349  * @tc.require:
1350  */
1351 HWTEST_F(DlpPermissionServiceTest, SandboxConfigOperate001, TestSize.Level1)
1352 {
1353     DLP_LOG_DEBUG(LABEL, "SandboxConfigOperate001");
1354     std::string config;
1355     int32_t ret = dlpPermissionService_->SandboxConfigOperate(config, SandboxConfigOperationEnum::ADD);
1356     ASSERT_NE(DLP_OK, ret);
1357 }
1358 
1359 /**
1360  * @tc.name: SetReadFlag001
1361  * @tc.desc: SetReadFlag test
1362  * @tc.type: FUNC
1363  * @tc.require:
1364  */
1365 HWTEST_F(DlpPermissionServiceTest, SetReadFlag001, TestSize.Level1)
1366 {
1367     DLP_LOG_DEBUG(LABEL, "SetReadFlag001");
1368     uint32_t uid = 0;
1369     int32_t ret = dlpPermissionService_->SetReadFlag(uid);
1370     ASSERT_EQ(DLP_OK, ret);
1371 }
1372 
1373 /**
1374  * @tc.name: QueryDlpFileAccess001
1375  * @tc.desc: QueryDlpFileAccess test
1376  * @tc.type: FUNC
1377  * @tc.require:
1378  */
1379 HWTEST_F(DlpPermissionServiceTest, QueryDlpFileAccess001, TestSize.Level1)
1380 {
1381     DLPPermissionInfoParcel permInfoParcel;
1382     DlpPermissionServiceTest::isSandbox = false;
1383     int32_t res = dlpPermissionService_->QueryDlpFileAccess(permInfoParcel);
1384     DlpPermissionServiceTest::isSandbox = true;
1385     ASSERT_EQ(DLP_SERVICE_ERROR_API_ONLY_FOR_SANDBOX_ERROR, res);
1386 
1387     DlpPermissionServiceTest::isCheckSandbox = false;
1388     res = dlpPermissionService_->QueryDlpFileAccess(permInfoParcel);
1389     DlpPermissionServiceTest::isCheckSandbox = true;
1390     ASSERT_EQ(res, DLP_SERVICE_ERROR_VALUE_INVALID);
1391 }
1392 
1393 /**
1394  * @tc.name: RegisterOpenDlpFileCallback001
1395  * @tc.desc: RegisterOpenDlpFileCallback test
1396  * @tc.type: FUNC
1397  * @tc.require:
1398  */
1399 HWTEST_F(DlpPermissionServiceTest, RegisterOpenDlpFileCallback001, TestSize.Level1)
1400 {
1401     DlpPermissionServiceTest::isSandbox = true;
1402     int32_t res = dlpPermissionService_->RegisterOpenDlpFileCallback(nullptr);
1403     ASSERT_EQ(DLP_SERVICE_ERROR_API_NOT_FOR_SANDBOX_ERROR, res);
1404 
1405     DlpPermissionServiceTest::isCheckSandbox = false;
1406     res = dlpPermissionService_->RegisterOpenDlpFileCallback(nullptr);
1407     DlpPermissionServiceTest::isCheckSandbox = true;
1408     ASSERT_EQ(res, DLP_SERVICE_ERROR_VALUE_INVALID);
1409 }
1410 
1411 
1412 /**
1413  * @tc.name: SetRetentionState001
1414  * @tc.desc: SetRetentionState test success
1415  * @tc.type: FUNC
1416  * @tc.require:issue:IAIFTY
1417  */
1418 HWTEST_F(DlpPermissionServiceTest, SetRetentionState001, TestSize.Level1)
1419 {
1420     DLP_LOG_DEBUG(LABEL, "SetRetentionState001");
1421 
1422     std::vector<std::string> docUriVec;
1423     docUriVec.push_back("hh");
1424     int32_t uid = IPCSkeleton::GetCallingUid();
1425     int32_t userId;
1426     GetUserIdFromUid(uid, &userId);
1427     DlpSandboxInfo appInfo;
1428     appInfo = {
1429         .uid = uid,
1430         .userId = userId,
1431         .appIndex = 0,
1432         .bundleName = "testbundle1",
1433         .hasRead = false
1434     };
1435     dlpPermissionService_->appStateObserver_->AddSandboxInfo(appInfo);
1436     int32_t ret = dlpPermissionService_->SetRetentionState(docUriVec);
1437     ASSERT_EQ(ret, DLP_OK);
1438 
1439     std::vector<RetentionSandBoxInfo> retentionSandBoxInfoVec;
1440     RetentionSandBoxInfo retentionSandBoxInfo;
1441     retentionSandBoxInfo.appIndex_ = appInfo.appIndex;
1442     retentionSandBoxInfoVec.push_back(retentionSandBoxInfo);
1443     RetentionSandBoxInfo retentionSandBoxInfo1;
1444     retentionSandBoxInfo1.appIndex_ = appInfo.appIndex + 1;
1445     retentionSandBoxInfoVec.push_back(retentionSandBoxInfo1);
1446 
1447     RetentionInfo info;
1448     info.bundleName = appInfo.bundleName;
1449     bool res = dlpPermissionService_->RemoveRetentionInfo(retentionSandBoxInfoVec, info);
1450     ASSERT_TRUE(res);
1451 }
1452 
1453 /**
1454  * @tc.name: SetRetentionState002
1455  * @tc.desc: SetRetentionState test
1456  * @tc.type: FUNC
1457  * @tc.require:
1458  */
1459 HWTEST_F(DlpPermissionServiceTest, SetRetentionState002, TestSize.Level1)
1460 {
1461     std::vector<std::string> docUriVec;
1462     docUriVec.push_back("hh");
1463     DlpPermissionServiceTest::isSandbox = false;
1464     int32_t ret = dlpPermissionService_->SetRetentionState(docUriVec);
1465     DlpPermissionServiceTest::isSandbox = true;
1466     ASSERT_EQ(ret, DLP_SERVICE_ERROR_API_ONLY_FOR_SANDBOX_ERROR);
1467 
1468     DlpPermissionServiceTest::isCheckSandbox = false;
1469     ret = dlpPermissionService_->SetRetentionState(docUriVec);
1470     DlpPermissionServiceTest::isCheckSandbox = true;
1471     ASSERT_EQ(ret, DLP_SERVICE_ERROR_VALUE_INVALID);
1472 
1473     docUriVec.clear();
1474     ret = dlpPermissionService_->SetRetentionState(docUriVec);
1475     ASSERT_EQ(ret, DLP_SERVICE_ERROR_VALUE_INVALID);
1476 }
1477 
1478 /**
1479  * @tc.name: GetRetentionSandboxList001
1480  * @tc.desc: GetRetentionSandboxList test
1481  * @tc.type: FUNC
1482  * @tc.require:
1483  */
1484 HWTEST_F(DlpPermissionServiceTest, GetRetentionSandboxList001, TestSize.Level1)
1485 {
1486     std::vector<RetentionSandBoxInfo> vec;
1487     DlpPermissionServiceTest::isSandbox = true;
1488     int32_t ret = dlpPermissionService_->GetRetentionSandboxList("testbundle1", vec);
1489     ASSERT_EQ(ret, DLP_SERVICE_ERROR_API_NOT_FOR_SANDBOX_ERROR);
1490 
1491     DlpPermissionServiceTest::isCheckSandbox = false;
1492     ret = dlpPermissionService_->GetRetentionSandboxList("testbundle1", vec);
1493     DlpPermissionServiceTest::isCheckSandbox = true;
1494     ASSERT_EQ(ret, DLP_SERVICE_ERROR_VALUE_INVALID);
1495 }
1496 
1497 /**
1498  * @tc.name: GetDLPFileVisitRecord001
1499  * @tc.desc: GetDLPFileVisitRecord test
1500  * @tc.type: FUNC
1501  * @tc.require:
1502  */
1503 HWTEST_F(DlpPermissionServiceTest, GetDLPFileVisitRecord001, TestSize.Level1)
1504 {
1505     std::vector<VisitedDLPFileInfo> infoVec;
1506 
1507     DlpPermissionServiceTest::isSandbox = true;
1508     int32_t ret = dlpPermissionService_->GetDLPFileVisitRecord(infoVec);
1509     ASSERT_EQ(ret, DLP_SERVICE_ERROR_API_NOT_FOR_SANDBOX_ERROR);
1510 
1511     DlpPermissionServiceTest::isCheckSandbox = false;
1512     ret = dlpPermissionService_->GetDLPFileVisitRecord(infoVec);
1513     DlpPermissionServiceTest::isCheckSandbox = true;
1514     ASSERT_EQ(ret, DLP_SERVICE_ERROR_VALUE_INVALID);
1515 }
1516 
1517 /**
1518  * @tc.name: CleanSandboxAppConfig001
1519  * @tc.desc: CleanSandboxAppConfig test
1520  * @tc.type: FUNC
1521  * @tc.require:
1522  */
1523 HWTEST_F(DlpPermissionServiceTest, CleanSandboxAppConfig001, TestSize.Level1)
1524 {
1525     DlpPermissionServiceTest::isSandbox = true;
1526     int32_t ret = dlpPermissionService_->CleanSandboxAppConfig();
1527     ASSERT_EQ(ret, DLP_SERVICE_ERROR_API_NOT_FOR_SANDBOX_ERROR);
1528 
1529     DlpPermissionServiceTest::isCheckSandbox = false;
1530     ret = dlpPermissionService_->CleanSandboxAppConfig();
1531     DlpPermissionServiceTest::isCheckSandbox = true;
1532     ASSERT_EQ(ret, DLP_SERVICE_ERROR_VALUE_INVALID);
1533 }
1534 
1535 /**
1536  * @tc.name: SetDlpFeature001
1537  * @tc.desc: SetDlpFeature test
1538  * @tc.type: FUNC
1539  * @tc.require:
1540  */
1541 HWTEST_F(DlpPermissionServiceTest, SetDlpFeature001, TestSize.Level1)
1542 {
1543     uint32_t dlpFeatureInfo = 0;
1544     bool statusSetInfo;
1545     int32_t ret = dlpPermissionService_->SetDlpFeature(dlpFeatureInfo, statusSetInfo);
1546     ASSERT_TRUE(ret != DLP_CALLBACK_SA_WORK_ABNORMAL);
1547 }