• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "dlp_file_kits_test.h"
17 #include <cstdio>
18 #include <fcntl.h>
19 #include <fstream>
20 #include <iostream>
21 #include <sys/stat.h>
22 #include <sys/types.h>
23 #include <vector>
24 #include "ability_info.h"
25 #include "accesstoken_kit.h"
26 #include "base_obj.h"
27 #include "dlp_file.h"
28 #include "dlp_file_kits.h"
29 #include "dlp_file_manager.h"
30 #include "dlp_permission.h"
31 #include "dlp_permission_log.h"
32 #include "dlp_utils.h"
33 #include "int_wrapper.h"
34 #include "permission_policy.h"
35 #include "string_wrapper.h"
36 #include "want_params_wrapper.h"
37 
38 using namespace testing::ext;
39 using namespace OHOS::Security::DlpPermission;
40 using namespace OHOS::Security::AccessToken;
41 using namespace std;
42 
43 using Want = OHOS::AAFwk::Want;
44 using WantParams = OHOS::AAFwk::WantParams;
45 using WantParamWrapper = OHOS::AAFwk::WantParamWrapper;
46 using String = OHOS::AAFwk::String;
47 using Integer = OHOS::AAFwk::Integer;
48 namespace OHOS {
49 namespace AppFileService {
50 namespace ModuleFileUri {
51 namespace {
52 static const std::string DLP_FILE_NAME = "/data/test/fuse_test.txt.dlp";
53 }
GetRealPath()54 std::string FileUri::GetRealPath()
55 {
56     static int32_t gCount = 1;
57     if (gCount == 1) {
58         gCount++;
59         return DLP_FILE_NAME;
60     }
61     return "";
62 }
63 }
64 }
65 }
66 namespace {
67 static constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {LOG_CORE, SECURITY_DOMAIN_DLP_PERMISSION, "DlpFileKitsTest"};
68 
69 static int g_dlpFileFd = -1;
70 static const std::string PLAIN_FILE_NAME = "/data/test/fuse_test.txt";
71 static const std::string DLP_FILE_NAME = "/data/test/fuse_test.txt.dlp";
72 static const std::string DLP_FILE_NAME_2 = "/data/test/fuse_test2.txt.dlp";
73 static const std::string DLP_FILE_URI = "file://data/test/fuse_test.txt.dlp";
74 static const std::string DLP_FILE_URI_2 = "file://data/test/fuse_test2.txt.dlp";
75 static const std::string PLAIN_FILE_URI = "file://data/test/fuse_test.txt";
76 static const std::string DLP_FILE_ERR_SUFFIX_URI = "file://data/test/fuse_test..txt";
77 static const std::string DLP_FILE_ERR_SUFFIX_URI_2 = "file://data/test/fuse_test.aaa.txt";
78 static const std::string DLP_TEST_DIR = "/data/test/dlpTest/";
79 static const int DLP_FILE_PERMISSION = 0777;
80 
CreateDlpFileFd()81 void CreateDlpFileFd()
82 {
83     int plainFileFd = open(PLAIN_FILE_NAME.c_str(), O_CREAT | O_RDWR | O_TRUNC, DLP_FILE_PERMISSION);
84     if (plainFileFd < 0) {
85         cout << "create dlpFile fd failed" << endl;
86         return;
87     }
88     int fileFd = open(DLP_FILE_NAME_2.c_str(), O_CREAT | O_RDWR | O_TRUNC, DLP_FILE_PERMISSION);
89     if (fileFd < 0) {
90         close(plainFileFd);
91         cout << "create dlpFile fd failed" << endl;
92         return;
93     }
94     g_dlpFileFd = open(DLP_FILE_NAME.c_str(), O_CREAT | O_RDWR | O_TRUNC, DLP_FILE_PERMISSION);
95     if (g_dlpFileFd < 0) {
96         close(plainFileFd);
97         close(fileFd);
98         cout << "create dlpFile fd failed" << endl;
99         return;
100     }
101 
102     struct DlpProperty prop;
103     prop.ownerAccount = "ohosAnonymousName";
104     prop.ownerAccountId = "ohosAnonymousName";
105     prop.ownerAccountType = CLOUD_ACCOUNT;
106     prop.contactAccount = "test@test.com";
107 
108     std::shared_ptr<DlpFile> filePtr;
109     int ret = DlpFileManager::GetInstance().GenerateDlpFile(plainFileFd,
110         g_dlpFileFd, prop, filePtr, DLP_TEST_DIR);
111     close(plainFileFd);
112     close(fileFd);
113     if (ret != DLP_OK) {
114         cout << "create dlpFile object failed" << endl;
115         return;
116     }
117     DlpFileManager::GetInstance().CloseDlpFile(filePtr);
118 }
119 }
120 
SetUpTestCase()121 void DlpFileKitsTest::SetUpTestCase()
122 {
123     struct stat fstat;
124     if (stat(DLP_TEST_DIR.c_str(), &fstat) != 0) {
125         if (errno == ENOENT) {
126             int32_t ret = mkdir(DLP_TEST_DIR.c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
127             if (ret < 0) {
128                 DLP_LOG_ERROR(LABEL, "mkdir mount point failed errno %{public}d", errno);
129                 return;
130             }
131         } else {
132             DLP_LOG_ERROR(LABEL, "get mount point failed errno %{public}d", errno);
133             return;
134         }
135     }
136     CreateDlpFileFd();
137 }
138 
TearDownTestCase()139 void DlpFileKitsTest::TearDownTestCase()
140 {
141     if (g_dlpFileFd != -1) {
142         close(g_dlpFileFd);
143         g_dlpFileFd = -1;
144     }
145     rmdir(DLP_TEST_DIR.c_str());
146 }
147 
SetUp()148 void DlpFileKitsTest::SetUp() {}
149 
TearDown()150 void DlpFileKitsTest::TearDown() {}
151 
152 /**
153  * @tc.name: GetSandboxFlag001
154  * @tc.desc: Get Sandbox flag, want valid
155  * @tc.type: FUNC
156  * @tc.require:AR000H7BOC
157  */
158 HWTEST_F(DlpFileKitsTest, GetSandboxFlag001, TestSize.Level1)
159 {
160     DLP_LOG_INFO(LABEL, "GetSandboxFlag001");
161     OHOS::AAFwk::Want want;
162 
163     want.SetAction(TAG_ACTION_VIEW);
164     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
165     want.SetAction(TAG_ACTION_EDIT);
166     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
167 }
168 
169 /**
170  * @tc.name: GetSandboxFlag002
171  * @tc.desc: Get Sandbox flag, action inValid
172  * @tc.type: FUNC
173  * @tc.require:AR000H7BOC
174  */
175 HWTEST_F(DlpFileKitsTest, GetSandboxFlag002, TestSize.Level1)
176 {
177     DLP_LOG_INFO(LABEL, "GetSandboxFlag002");
178     OHOS::AAFwk::Want want;
179     want.SetAction("ohos.want.action.home");
180 
181     WantParams TopParam;
182     WantParams fileNameParam;
183     fileNameParam.SetParam(TAG_FILE_NAME_VALUE, String::Box("test.txt.dlp"));
184     TopParam.SetParam(TAG_FILE_NAME, WantParamWrapper::Box(fileNameParam));
185 
186     WantParams fileFdParam;
187     fileFdParam.SetParam(TAG_KEY_FD_TYPE, String::Box(VALUE_KEY_FD_TYPE));
188     fileFdParam.SetParam(TAG_KEY_FD_VALUE, Integer::Box(g_dlpFileFd));
189     TopParam.SetParam(TAG_KEY_FD, WantParamWrapper::Box(fileFdParam));
190     want.SetParams(TopParam);
191 
192     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
193     ASSERT_FALSE((want.GetType() == "text/plain"));
194 }
195 
196 /**
197  * @tc.name: GetSandboxFlag003
198  * @tc.desc: Get Sandbox flag, no fileName param
199  * @tc.type: FUNC
200  * @tc.require:AR000H7BOC
201  */
202 HWTEST_F(DlpFileKitsTest, GetSandboxFlag003, TestSize.Level1)
203 {
204     DLP_LOG_INFO(LABEL, "GetSandboxFlag003");
205     OHOS::AAFwk::Want want;
206     want.SetAction(TAG_ACTION_VIEW);
207 
208     WantParams TopParam;
209     WantParams fileFdParam;
210     fileFdParam.SetParam(TAG_KEY_FD_TYPE, String::Box(VALUE_KEY_FD_TYPE));
211     fileFdParam.SetParam(TAG_KEY_FD_VALUE, Integer::Box(g_dlpFileFd));
212     TopParam.SetParam(TAG_KEY_FD, WantParamWrapper::Box(fileFdParam));
213     want.SetParams(TopParam);
214 
215     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
216     ASSERT_FALSE((want.GetType() == "text/plain"));
217 }
218 
219 /**
220  * @tc.name: GetSandboxFlag004
221  * @tc.desc: Get Sandbox flag, file name is not dlp
222  * @tc.type: FUNC
223  * @tc.require:AR000H7BOC
224  */
225 HWTEST_F(DlpFileKitsTest, GetSandboxFlag004, TestSize.Level1)
226 {
227     DLP_LOG_INFO(LABEL, "GetSandboxFlag004");
228     OHOS::AAFwk::Want want;
229     want.SetAction(TAG_ACTION_VIEW);
230     want.SetUri(DLP_FILE_URI);
231 
232     ASSERT_TRUE(DlpFileKits::GetSandboxFlag(want));
233 }
234 
235 /**
236  * @tc.name: GetSandboxFlag005
237  * @tc.desc: Get Sandbox flag, file name is .dlp
238  * @tc.type: FUNC
239  * @tc.require:AR000H7BOC
240  */
241 HWTEST_F(DlpFileKitsTest, GetSandboxFlag005, TestSize.Level1)
242 {
243     DLP_LOG_INFO(LABEL, "GetSandboxFlag005");
244     OHOS::AAFwk::Want want;
245     want.SetAction(TAG_ACTION_VIEW);
246 
247     WantParams TopParam;
248     WantParams fileNameParam;
249     fileNameParam.SetParam(TAG_FILE_NAME_VALUE, String::Box(".dlp"));
250     TopParam.SetParam(TAG_FILE_NAME, WantParamWrapper::Box(fileNameParam));
251 
252     WantParams fileFdParam;
253     fileFdParam.SetParam(TAG_KEY_FD_TYPE, String::Box(VALUE_KEY_FD_TYPE));
254     fileFdParam.SetParam(TAG_KEY_FD_VALUE, Integer::Box(g_dlpFileFd));
255     TopParam.SetParam(TAG_KEY_FD, WantParamWrapper::Box(fileFdParam));
256     want.SetParams(TopParam);
257 
258     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
259     ASSERT_FALSE((want.GetType() == "text/plain"));
260 }
261 
262 /**
263  * @tc.name: GetSandboxFlag006
264  * @tc.desc: Get Sandbox flag, file name is less than ".dlp"
265  * @tc.type: FUNC
266  * @tc.require:AR000H7BOC
267  */
268 HWTEST_F(DlpFileKitsTest, GetSandboxFlag006, TestSize.Level1)
269 {
270     DLP_LOG_INFO(LABEL, "GetSandboxFlag006");
271     OHOS::AAFwk::Want want;
272     want.SetAction(TAG_ACTION_VIEW);
273 
274     WantParams TopParam;
275     WantParams fileNameParam;
276     fileNameParam.SetParam(TAG_FILE_NAME_VALUE, String::Box("lp"));
277     TopParam.SetParam(TAG_FILE_NAME, WantParamWrapper::Box(fileNameParam));
278 
279     WantParams fileFdParam;
280     fileFdParam.SetParam(TAG_KEY_FD_TYPE, String::Box(VALUE_KEY_FD_TYPE));
281     fileFdParam.SetParam(TAG_KEY_FD_VALUE, Integer::Box(g_dlpFileFd));
282     TopParam.SetParam(TAG_KEY_FD, WantParamWrapper::Box(fileFdParam));
283     want.SetParams(TopParam);
284 
285     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
286     ASSERT_FALSE((want.GetType() == "text/plain"));
287 }
288 
289 /**
290  * @tc.name: GetSandboxFlag008
291  * @tc.desc: Get Sandbox flag, no keyFd
292  * @tc.type: FUNC
293  * @tc.require:AR000H7BOC
294  */
295 HWTEST_F(DlpFileKitsTest, GetSandboxFlag008, TestSize.Level1)
296 {
297     DLP_LOG_INFO(LABEL, "GetSandboxFlag008");
298     OHOS::AAFwk::Want want;
299     want.SetAction(TAG_ACTION_VIEW);
300 
301     WantParams TopParam;
302     WantParams fileNameParam;
303     fileNameParam.SetParam(TAG_FILE_NAME_VALUE, String::Box("test.txt.dlp"));
304     TopParam.SetParam(TAG_FILE_NAME, WantParamWrapper::Box(fileNameParam));
305     want.SetParams(TopParam);
306 
307     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
308     ASSERT_FALSE((want.GetType() == "text/plain"));
309 }
310 
311 /**
312  * @tc.name: GetSandboxFlag009
313  * @tc.desc: Get Sandbox flag, keyFd type is not FD
314  * @tc.type: FUNC
315  * @tc.require:AR000H7BOC
316  */
317 HWTEST_F(DlpFileKitsTest, GetSandboxFlag009, TestSize.Level1)
318 {
319     DLP_LOG_INFO(LABEL, "GetSandboxFlag009");
320     OHOS::AAFwk::Want want;
321     want.SetAction(TAG_ACTION_VIEW);
322 
323     WantParams TopParam;
324     WantParams fileNameParam;
325     fileNameParam.SetParam(TAG_FILE_NAME_VALUE, String::Box("test.txt.dlp"));
326     TopParam.SetParam(TAG_FILE_NAME, WantParamWrapper::Box(fileNameParam));
327 
328     WantParams fileFdParam;
329     fileFdParam.SetParam(TAG_KEY_FD_TYPE, String::Box("FD1"));
330     fileFdParam.SetParam(TAG_KEY_FD_VALUE, Integer::Box(g_dlpFileFd));
331     TopParam.SetParam(TAG_KEY_FD, WantParamWrapper::Box(fileFdParam));
332     want.SetParams(TopParam);
333 
334     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
335     ASSERT_FALSE((want.GetType() == "text/plain"));
336 }
337 
338 /**
339  * @tc.name: GetSandboxFlag010
340  * @tc.desc: Get Sandbox flag, fileFd has no value key
341  * @tc.type: FUNC
342  * @tc.require:AR000H7BOC
343  */
344 HWTEST_F(DlpFileKitsTest, GetSandboxFlag010, TestSize.Level1)
345 {
346     DLP_LOG_INFO(LABEL, "GetSandboxFlag009");
347     OHOS::AAFwk::Want want;
348     want.SetAction(TAG_ACTION_VIEW);
349 
350     WantParams TopParam;
351     WantParams fileNameParam;
352     fileNameParam.SetParam(TAG_FILE_NAME_VALUE, String::Box("test.txt.dlp"));
353     TopParam.SetParam(TAG_FILE_NAME, WantParamWrapper::Box(fileNameParam));
354 
355     WantParams fileFdParam;
356     fileFdParam.SetParam(TAG_KEY_FD_TYPE, String::Box(VALUE_KEY_FD_TYPE));
357     TopParam.SetParam(TAG_KEY_FD, WantParamWrapper::Box(fileFdParam));
358     want.SetParams(TopParam);
359 
360     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
361     ASSERT_FALSE((want.GetType() == "text/plain"));
362 }
363 
364 /**
365  * @tc.name: GetSandboxFlag011
366  * @tc.desc: Get Sandbox flag, fileFd fd = -1
367  * @tc.type: FUNC
368  * @tc.require:AR000H7BOC
369  */
370 HWTEST_F(DlpFileKitsTest, GetSandboxFlag011, TestSize.Level1)
371 {
372     DLP_LOG_INFO(LABEL, "GetSandboxFlag011");
373     OHOS::AAFwk::Want want;
374     want.SetAction(TAG_ACTION_VIEW);
375 
376     WantParams TopParam;
377     WantParams fileNameParam;
378     fileNameParam.SetParam(TAG_FILE_NAME_VALUE, String::Box("test.txt.dlp"));
379     TopParam.SetParam(TAG_FILE_NAME, WantParamWrapper::Box(fileNameParam));
380 
381     WantParams fileFdParam;
382     fileFdParam.SetParam(TAG_KEY_FD_TYPE, String::Box(VALUE_KEY_FD_TYPE));
383     fileFdParam.SetParam(TAG_KEY_FD_VALUE, Integer::Box(-1));
384     TopParam.SetParam(TAG_KEY_FD, WantParamWrapper::Box(fileFdParam));
385     want.SetParams(TopParam);
386 
387     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
388     ASSERT_FALSE((want.GetType() == "text/plain"));
389 }
390 
391 /**
392  * @tc.name: GetSandboxFlag012
393  * @tc.desc: Get Sandbox flag, fileFd fd is real, but is not dlpfile fd
394  * @tc.type: FUNC
395  * @tc.require:AR000H7BOC
396  */
397 HWTEST_F(DlpFileKitsTest, GetSandboxFlag012, TestSize.Level1)
398 {
399     DLP_LOG_INFO(LABEL, "GetSandboxFlag012");
400     int plainFileFd = open("/data/fuse_test.txt", O_CREAT | O_RDWR | O_TRUNC, 0777);
401     ASSERT_GE(plainFileFd, 0);
402 
403     OHOS::AAFwk::Want want;
404     want.SetAction(TAG_ACTION_VIEW);
405 
406     WantParams TopParam;
407     WantParams fileNameParam;
408     fileNameParam.SetParam(TAG_FILE_NAME_VALUE, String::Box("test.txt.dlp"));
409     TopParam.SetParam(TAG_FILE_NAME, WantParamWrapper::Box(fileNameParam));
410 
411     WantParams fileFdParam;
412     fileFdParam.SetParam(TAG_KEY_FD_TYPE, String::Box(VALUE_KEY_FD_TYPE));
413     fileFdParam.SetParam(TAG_KEY_FD_VALUE, Integer::Box(plainFileFd));
414     TopParam.SetParam(TAG_KEY_FD, WantParamWrapper::Box(fileFdParam));
415     want.SetParams(TopParam);
416 
417     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
418     ASSERT_FALSE((want.GetType() == "text/plain"));
419 }
420 
421 /**
422  * @tc.name: GetSandboxFlag013
423  * @tc.desc: Get Sandbox flag, want valid
424  * @tc.type: FUNC
425  * @tc.require:AR000H7BOC
426  */
427 HWTEST_F(DlpFileKitsTest, GetSandboxFlag013, TestSize.Level1)
428 {
429     DLP_LOG_INFO(LABEL, "GetSandboxFlag004");
430     OHOS::AAFwk::Want want;
431     want.SetAction(TAG_ACTION_VIEW);
432     want.SetUri(PLAIN_FILE_URI);
433     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
434     want.SetUri(DLP_FILE_URI_2);
435     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
436 }
437 
438 /**
439  * @tc.name: IsDlpFile001
440  * @tc.desc: test param whether dlpFd is valid.
441  * @tc.type: FUNC
442  * @tc.require:issue:IAIFTY
443  */
444 HWTEST_F(DlpFileKitsTest, IsDlpFile001, TestSize.Level1)
445 {
446     DLP_LOG_INFO(LABEL, "IsDlpFile001");
447 
448     int32_t dlpFd = -1;
449     ASSERT_FALSE(DlpFileKits::IsDlpFile(dlpFd));
450 
451     dlpFd = 1;
452     ASSERT_FALSE(DlpFileKits::IsDlpFile(dlpFd));
453 
454     dlpFd = open("/data/fuse_test.txt", O_CREAT | O_RDWR | O_TRUNC, 0777);
455     ASSERT_GE(dlpFd, 0);
456     ASSERT_FALSE(DlpFileKits::IsDlpFile(dlpFd));
457     ASSERT_EQ(close(dlpFd), 0);
458 }
459 
460 /**
461  * @tc.name: ConvertAbilityInfoWithSupportDlp
462  * @tc.desc: test ConvertAbilityInfoWithSupportDlp param.
463  * @tc.type: FUNC
464  * @tc.require:issue:IAIFTY
465  */
466 HWTEST_F(DlpFileKitsTest, ConvertAbilityInfoWithSupportDlp001, TestSize.Level1)
467 {
468     DLP_LOG_INFO(LABEL, "ConvertAbilityInfoWithSupportDlp001");
469 
470     OHOS::AAFwk::Want want;
471     std::vector<OHOS::AppExecFwk::AbilityInfo> abilityInfos;
472     DlpFileKits::ConvertAbilityInfoWithSupportDlp(want, abilityInfos);
473 
474     std::vector<std::string> authPolicy;
475     std::string fileType = DlpUtils::GetFileTypeBySuffix("txt");
476     DlpUtils::GetAuthPolicyWithType(DLP_AUTH_POLICY, fileType, authPolicy);
477     OHOS::AppExecFwk::AbilityInfo abilityInfo;
478     for (const string& bundleName : authPolicy) {
479         abilityInfo.bundleName = bundleName;
480         abilityInfos.push_back(abilityInfo);
481     }
482 
483     want.SetUri(PLAIN_FILE_URI);
484     DlpFileKits::ConvertAbilityInfoWithSupportDlp(want, abilityInfos);
485 
486     want.SetUri(DLP_FILE_ERR_SUFFIX_URI);
487     DlpFileKits::ConvertAbilityInfoWithSupportDlp(want, abilityInfos);
488 
489     want.SetUri(DLP_FILE_ERR_SUFFIX_URI_2);
490     DlpFileKits::ConvertAbilityInfoWithSupportDlp(want, abilityInfos);
491 
492     want.SetUri(DLP_FILE_URI);
493     DlpFileKits::ConvertAbilityInfoWithSupportDlp(want, abilityInfos);
494 }