• 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 static const int FIVE = 5;
81 
CreateDlpFileFd()82 void CreateDlpFileFd()
83 {
84     int plainFileFd = open(PLAIN_FILE_NAME.c_str(), O_CREAT | O_RDWR | O_TRUNC, DLP_FILE_PERMISSION);
85     if (plainFileFd < 0) {
86         cout << "create dlpFile fd failed" << endl;
87         return;
88     }
89     int fileFd = open(DLP_FILE_NAME_2.c_str(), O_CREAT | O_RDWR | O_TRUNC, DLP_FILE_PERMISSION);
90     if (fileFd < 0) {
91         close(plainFileFd);
92         cout << "create dlpFile fd failed" << endl;
93         return;
94     }
95     g_dlpFileFd = open(DLP_FILE_NAME.c_str(), O_CREAT | O_RDWR | O_TRUNC, DLP_FILE_PERMISSION);
96     if (g_dlpFileFd < 0) {
97         close(plainFileFd);
98         close(fileFd);
99         cout << "create dlpFile fd failed" << endl;
100         return;
101     }
102 
103     struct DlpProperty prop;
104     prop.ownerAccount = "ohosAnonymousName";
105     prop.ownerAccountId = "ohosAnonymousName";
106     prop.ownerAccountType = CLOUD_ACCOUNT;
107     prop.contactAccount = "test@test.com";
108 
109     std::shared_ptr<DlpFile> filePtr;
110     int ret = DlpFileManager::GetInstance().GenerateDlpFile(plainFileFd,
111         g_dlpFileFd, prop, filePtr, DLP_TEST_DIR);
112     close(plainFileFd);
113     close(fileFd);
114     if (ret != DLP_OK) {
115         cout << "create dlpFile object failed" << endl;
116         return;
117     }
118     DlpFileManager::GetInstance().CloseDlpFile(filePtr);
119 }
120 }
121 
SetUpTestCase()122 void DlpFileKitsTest::SetUpTestCase()
123 {
124     struct stat fstat;
125     if (stat(DLP_TEST_DIR.c_str(), &fstat) != 0) {
126         if (errno == ENOENT) {
127             int32_t ret = mkdir(DLP_TEST_DIR.c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
128             if (ret < 0) {
129                 DLP_LOG_ERROR(LABEL, "mkdir mount point failed errno %{public}d", errno);
130                 return;
131             }
132         } else {
133             DLP_LOG_ERROR(LABEL, "get mount point failed errno %{public}d", errno);
134             return;
135         }
136     }
137     CreateDlpFileFd();
138 }
139 
TearDownTestCase()140 void DlpFileKitsTest::TearDownTestCase()
141 {
142     if (g_dlpFileFd != -1) {
143         close(g_dlpFileFd);
144         g_dlpFileFd = -1;
145     }
146     rmdir(DLP_TEST_DIR.c_str());
147 }
148 
SetUp()149 void DlpFileKitsTest::SetUp() {}
150 
TearDown()151 void DlpFileKitsTest::TearDown() {}
152 
153 /**
154  * @tc.name: GetSandboxFlag001
155  * @tc.desc: Get Sandbox flag, want valid
156  * @tc.type: FUNC
157  * @tc.require:AR000H7BOC
158  */
159 HWTEST_F(DlpFileKitsTest, GetSandboxFlag001, TestSize.Level0)
160 {
161     DLP_LOG_INFO(LABEL, "GetSandboxFlag001");
162     OHOS::AAFwk::Want want;
163 
164     want.SetAction(TAG_ACTION_VIEW);
165     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
166     want.SetAction(TAG_ACTION_EDIT);
167     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
168 }
169 
170 /**
171  * @tc.name: GetSandboxFlag002
172  * @tc.desc: Get Sandbox flag, action inValid
173  * @tc.type: FUNC
174  * @tc.require:AR000H7BOC
175  */
176 HWTEST_F(DlpFileKitsTest, GetSandboxFlag002, TestSize.Level0)
177 {
178     DLP_LOG_INFO(LABEL, "GetSandboxFlag002");
179     OHOS::AAFwk::Want want;
180     want.SetAction("ohos.want.action.home");
181 
182     WantParams TopParam;
183     WantParams fileNameParam;
184     fileNameParam.SetParam(TAG_FILE_NAME_VALUE, String::Box("test.txt.dlp"));
185     TopParam.SetParam(TAG_FILE_NAME, WantParamWrapper::Box(fileNameParam));
186 
187     WantParams fileFdParam;
188     fileFdParam.SetParam(TAG_KEY_FD_TYPE, String::Box(VALUE_KEY_FD_TYPE));
189     fileFdParam.SetParam(TAG_KEY_FD_VALUE, Integer::Box(g_dlpFileFd));
190     TopParam.SetParam(TAG_KEY_FD, WantParamWrapper::Box(fileFdParam));
191     want.SetParams(TopParam);
192 
193     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
194     ASSERT_FALSE((want.GetType() == "text/plain"));
195 }
196 
197 /**
198  * @tc.name: GetSandboxFlag003
199  * @tc.desc: Get Sandbox flag, no fileName param
200  * @tc.type: FUNC
201  * @tc.require:AR000H7BOC
202  */
203 HWTEST_F(DlpFileKitsTest, GetSandboxFlag003, TestSize.Level0)
204 {
205     DLP_LOG_INFO(LABEL, "GetSandboxFlag003");
206     OHOS::AAFwk::Want want;
207     want.SetAction(TAG_ACTION_VIEW);
208 
209     WantParams TopParam;
210     WantParams fileFdParam;
211     fileFdParam.SetParam(TAG_KEY_FD_TYPE, String::Box(VALUE_KEY_FD_TYPE));
212     fileFdParam.SetParam(TAG_KEY_FD_VALUE, Integer::Box(g_dlpFileFd));
213     TopParam.SetParam(TAG_KEY_FD, WantParamWrapper::Box(fileFdParam));
214     want.SetParams(TopParam);
215 
216     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
217     ASSERT_FALSE((want.GetType() == "text/plain"));
218 }
219 
220 /**
221  * @tc.name: GetSandboxFlag004
222  * @tc.desc: Get Sandbox flag, file name is not dlp
223  * @tc.type: FUNC
224  * @tc.require:AR000H7BOC
225  */
226 HWTEST_F(DlpFileKitsTest, GetSandboxFlag004, TestSize.Level0)
227 {
228     DLP_LOG_INFO(LABEL, "GetSandboxFlag004");
229     OHOS::AAFwk::Want want;
230     want.SetAction(TAG_ACTION_VIEW);
231     want.SetUri(DLP_FILE_URI);
232 
233     ASSERT_TRUE(DlpFileKits::GetSandboxFlag(want));
234 }
235 
236 /**
237  * @tc.name: GetSandboxFlag005
238  * @tc.desc: Get Sandbox flag, file name is .dlp
239  * @tc.type: FUNC
240  * @tc.require:AR000H7BOC
241  */
242 HWTEST_F(DlpFileKitsTest, GetSandboxFlag005, TestSize.Level0)
243 {
244     DLP_LOG_INFO(LABEL, "GetSandboxFlag005");
245     OHOS::AAFwk::Want want;
246     want.SetAction(TAG_ACTION_VIEW);
247 
248     WantParams TopParam;
249     WantParams fileNameParam;
250     fileNameParam.SetParam(TAG_FILE_NAME_VALUE, String::Box(".dlp"));
251     TopParam.SetParam(TAG_FILE_NAME, WantParamWrapper::Box(fileNameParam));
252 
253     WantParams fileFdParam;
254     fileFdParam.SetParam(TAG_KEY_FD_TYPE, String::Box(VALUE_KEY_FD_TYPE));
255     fileFdParam.SetParam(TAG_KEY_FD_VALUE, Integer::Box(g_dlpFileFd));
256     TopParam.SetParam(TAG_KEY_FD, WantParamWrapper::Box(fileFdParam));
257     want.SetParams(TopParam);
258 
259     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
260     ASSERT_FALSE((want.GetType() == "text/plain"));
261 }
262 
263 /**
264  * @tc.name: GetSandboxFlag006
265  * @tc.desc: Get Sandbox flag, file name is less than ".dlp"
266  * @tc.type: FUNC
267  * @tc.require:AR000H7BOC
268  */
269 HWTEST_F(DlpFileKitsTest, GetSandboxFlag006, TestSize.Level0)
270 {
271     DLP_LOG_INFO(LABEL, "GetSandboxFlag006");
272     OHOS::AAFwk::Want want;
273     want.SetAction(TAG_ACTION_VIEW);
274 
275     WantParams TopParam;
276     WantParams fileNameParam;
277     fileNameParam.SetParam(TAG_FILE_NAME_VALUE, String::Box("lp"));
278     TopParam.SetParam(TAG_FILE_NAME, WantParamWrapper::Box(fileNameParam));
279 
280     WantParams fileFdParam;
281     fileFdParam.SetParam(TAG_KEY_FD_TYPE, String::Box(VALUE_KEY_FD_TYPE));
282     fileFdParam.SetParam(TAG_KEY_FD_VALUE, Integer::Box(g_dlpFileFd));
283     TopParam.SetParam(TAG_KEY_FD, WantParamWrapper::Box(fileFdParam));
284     want.SetParams(TopParam);
285 
286     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
287     ASSERT_FALSE((want.GetType() == "text/plain"));
288 }
289 
290 /**
291  * @tc.name: GetSandboxFlag008
292  * @tc.desc: Get Sandbox flag, no keyFd
293  * @tc.type: FUNC
294  * @tc.require:AR000H7BOC
295  */
296 HWTEST_F(DlpFileKitsTest, GetSandboxFlag008, TestSize.Level0)
297 {
298     DLP_LOG_INFO(LABEL, "GetSandboxFlag008");
299     OHOS::AAFwk::Want want;
300     want.SetAction(TAG_ACTION_VIEW);
301 
302     WantParams TopParam;
303     WantParams fileNameParam;
304     fileNameParam.SetParam(TAG_FILE_NAME_VALUE, String::Box("test.txt.dlp"));
305     TopParam.SetParam(TAG_FILE_NAME, WantParamWrapper::Box(fileNameParam));
306     want.SetParams(TopParam);
307 
308     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
309     ASSERT_FALSE((want.GetType() == "text/plain"));
310 }
311 
312 /**
313  * @tc.name: GetSandboxFlag009
314  * @tc.desc: Get Sandbox flag, keyFd type is not FD
315  * @tc.type: FUNC
316  * @tc.require:AR000H7BOC
317  */
318 HWTEST_F(DlpFileKitsTest, GetSandboxFlag009, TestSize.Level0)
319 {
320     DLP_LOG_INFO(LABEL, "GetSandboxFlag009");
321     OHOS::AAFwk::Want want;
322     want.SetAction(TAG_ACTION_VIEW);
323 
324     WantParams TopParam;
325     WantParams fileNameParam;
326     fileNameParam.SetParam(TAG_FILE_NAME_VALUE, String::Box("test.txt.dlp"));
327     TopParam.SetParam(TAG_FILE_NAME, WantParamWrapper::Box(fileNameParam));
328 
329     WantParams fileFdParam;
330     fileFdParam.SetParam(TAG_KEY_FD_TYPE, String::Box("FD1"));
331     fileFdParam.SetParam(TAG_KEY_FD_VALUE, Integer::Box(g_dlpFileFd));
332     TopParam.SetParam(TAG_KEY_FD, WantParamWrapper::Box(fileFdParam));
333     want.SetParams(TopParam);
334 
335     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
336     ASSERT_FALSE((want.GetType() == "text/plain"));
337 }
338 
339 /**
340  * @tc.name: GetSandboxFlag010
341  * @tc.desc: Get Sandbox flag, fileFd has no value key
342  * @tc.type: FUNC
343  * @tc.require:AR000H7BOC
344  */
345 HWTEST_F(DlpFileKitsTest, GetSandboxFlag010, TestSize.Level0)
346 {
347     DLP_LOG_INFO(LABEL, "GetSandboxFlag009");
348     OHOS::AAFwk::Want want;
349     want.SetAction(TAG_ACTION_VIEW);
350 
351     WantParams TopParam;
352     WantParams fileNameParam;
353     fileNameParam.SetParam(TAG_FILE_NAME_VALUE, String::Box("test.txt.dlp"));
354     TopParam.SetParam(TAG_FILE_NAME, WantParamWrapper::Box(fileNameParam));
355 
356     WantParams fileFdParam;
357     fileFdParam.SetParam(TAG_KEY_FD_TYPE, String::Box(VALUE_KEY_FD_TYPE));
358     TopParam.SetParam(TAG_KEY_FD, WantParamWrapper::Box(fileFdParam));
359     want.SetParams(TopParam);
360 
361     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
362     ASSERT_FALSE((want.GetType() == "text/plain"));
363 }
364 
365 /**
366  * @tc.name: GetSandboxFlag011
367  * @tc.desc: Get Sandbox flag, fileFd fd = -1
368  * @tc.type: FUNC
369  * @tc.require:AR000H7BOC
370  */
371 HWTEST_F(DlpFileKitsTest, GetSandboxFlag011, TestSize.Level0)
372 {
373     DLP_LOG_INFO(LABEL, "GetSandboxFlag011");
374     OHOS::AAFwk::Want want;
375     want.SetAction(TAG_ACTION_VIEW);
376 
377     WantParams TopParam;
378     WantParams fileNameParam;
379     fileNameParam.SetParam(TAG_FILE_NAME_VALUE, String::Box("test.txt.dlp"));
380     TopParam.SetParam(TAG_FILE_NAME, WantParamWrapper::Box(fileNameParam));
381 
382     WantParams fileFdParam;
383     fileFdParam.SetParam(TAG_KEY_FD_TYPE, String::Box(VALUE_KEY_FD_TYPE));
384     fileFdParam.SetParam(TAG_KEY_FD_VALUE, Integer::Box(-1));
385     TopParam.SetParam(TAG_KEY_FD, WantParamWrapper::Box(fileFdParam));
386     want.SetParams(TopParam);
387 
388     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
389     ASSERT_FALSE((want.GetType() == "text/plain"));
390 }
391 
392 /**
393  * @tc.name: GetSandboxFlag012
394  * @tc.desc: Get Sandbox flag, fileFd fd is real, but is not dlpfile fd
395  * @tc.type: FUNC
396  * @tc.require:AR000H7BOC
397  */
398 HWTEST_F(DlpFileKitsTest, GetSandboxFlag012, TestSize.Level0)
399 {
400     DLP_LOG_INFO(LABEL, "GetSandboxFlag012");
401     int plainFileFd = open("/data/fuse_test.txt", O_CREAT | O_RDWR | O_TRUNC, 0777);
402     ASSERT_GE(plainFileFd, 0);
403 
404     OHOS::AAFwk::Want want;
405     want.SetAction(TAG_ACTION_VIEW);
406 
407     WantParams TopParam;
408     WantParams fileNameParam;
409     fileNameParam.SetParam(TAG_FILE_NAME_VALUE, String::Box("test.txt.dlp"));
410     TopParam.SetParam(TAG_FILE_NAME, WantParamWrapper::Box(fileNameParam));
411 
412     WantParams fileFdParam;
413     fileFdParam.SetParam(TAG_KEY_FD_TYPE, String::Box(VALUE_KEY_FD_TYPE));
414     fileFdParam.SetParam(TAG_KEY_FD_VALUE, Integer::Box(plainFileFd));
415     TopParam.SetParam(TAG_KEY_FD, WantParamWrapper::Box(fileFdParam));
416     want.SetParams(TopParam);
417 
418     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
419     ASSERT_FALSE((want.GetType() == "text/plain"));
420 }
421 
422 /**
423  * @tc.name: GetSandboxFlag013
424  * @tc.desc: Get Sandbox flag, want valid
425  * @tc.type: FUNC
426  * @tc.require:AR000H7BOC
427  */
428 HWTEST_F(DlpFileKitsTest, GetSandboxFlag013, TestSize.Level0)
429 {
430     DLP_LOG_INFO(LABEL, "GetSandboxFlag004");
431     OHOS::AAFwk::Want want;
432     want.SetAction(TAG_ACTION_VIEW);
433     want.SetUri(PLAIN_FILE_URI);
434     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
435     want.SetUri(DLP_FILE_URI_2);
436     ASSERT_FALSE(DlpFileKits::GetSandboxFlag(want));
437 }
438 
439 /**
440  * @tc.name: IsDlpFile001
441  * @tc.desc: test param whether dlpFd is valid.
442  * @tc.type: FUNC
443  * @tc.require:issue:IAIFTY
444  */
445 HWTEST_F(DlpFileKitsTest, IsDlpFile001, TestSize.Level0)
446 {
447     DLP_LOG_INFO(LABEL, "IsDlpFile001");
448 
449     int32_t dlpFd = -1;
450     ASSERT_FALSE(DlpFileKits::IsDlpFile(dlpFd));
451 
452     dlpFd = 1;
453     ASSERT_FALSE(DlpFileKits::IsDlpFile(dlpFd));
454 
455     dlpFd = open("/data/fuse_test.txt", O_CREAT | O_RDWR | O_TRUNC, 0777);
456     ASSERT_GE(dlpFd, 0);
457     ASSERT_FALSE(DlpFileKits::IsDlpFile(dlpFd));
458     ASSERT_EQ(close(dlpFd), 0);
459 }
460 
461 /**
462  * @tc.name: ConvertAbilityInfoWithSupportDlp
463  * @tc.desc: test ConvertAbilityInfoWithSupportDlp param.
464  * @tc.type: FUNC
465  * @tc.require:issue:IAIFTY
466  */
467 HWTEST_F(DlpFileKitsTest, ConvertAbilityInfoWithSupportDlp001, TestSize.Level0)
468 {
469     DLP_LOG_INFO(LABEL, "ConvertAbilityInfoWithSupportDlp001");
470 
471     OHOS::AAFwk::Want want;
472     std::vector<OHOS::AppExecFwk::AbilityInfo> abilityInfos;
473     DlpFileKits::ConvertAbilityInfoWithSupportDlp(want, abilityInfos);
474 
475     std::vector<std::string> authPolicy;
476     std::string fileType = DlpUtils::GetFileTypeBySuffix("txt", true);
477     fileType = DlpUtils::GetFileTypeBySuffix("txt", false);
478     DlpUtils::GetAuthPolicyWithType(DLP_AUTH_POLICY, fileType, authPolicy);
479     OHOS::AppExecFwk::AbilityInfo abilityInfo;
480     for (const string& bundleName : authPolicy) {
481         abilityInfo.bundleName = bundleName;
482         abilityInfos.push_back(abilityInfo);
483     }
484 
485     want.SetUri(PLAIN_FILE_URI);
486     DlpFileKits::ConvertAbilityInfoWithSupportDlp(want, abilityInfos);
487 
488     want.SetUri(DLP_FILE_ERR_SUFFIX_URI);
489     DlpFileKits::ConvertAbilityInfoWithSupportDlp(want, abilityInfos);
490 
491     want.SetUri(DLP_FILE_ERR_SUFFIX_URI_2);
492     DlpFileKits::ConvertAbilityInfoWithSupportDlp(want, abilityInfos);
493 
494     want.SetUri(DLP_FILE_URI);
495     DlpFileKits::ConvertAbilityInfoWithSupportDlp(want, abilityInfos);
496     if (abilityInfos.size() == 0) {
497         EXPECT_EQ(abilityInfos.size(), 0);
498     } else {
499         EXPECT_EQ(abilityInfos.size(), FIVE);
500     }
501 }