• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021-2022 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 #include "datashare_helper.h"
16 #include "fetch_result.h"
17 #include "get_self_permissions.h"
18 #include "iservice_registry.h"
19 #include "medialibrary_errno.h"
20 #include "mediascanner_unit_test.h"
21 #include "media_file_utils.h"
22 #include "media_library_manager.h"
23 #include "media_log.h"
24 #include "media_scanner_manager.h"
25 #include "system_ability_definition.h"
26 
27 using namespace std;
28 using namespace testing::ext;
29 
30 namespace OHOS {
31 namespace Media {
32 namespace {
33     string g_prefixPath = "/storage/media/local/files";
34     const mode_t CHOWN_RW_UG = 0660;
35 }
36 constexpr int STORAGE_MANAGER_MANAGER_ID = 5003;
37 std::shared_ptr<DataShare::DataShareHelper> g_mediaDataShareHelper;
38 
CreateDataShareHelper(int32_t systemAbilityId)39 std::shared_ptr<DataShare::DataShareHelper> CreateDataShareHelper(int32_t systemAbilityId)
40 {
41     MEDIA_INFO_LOG("CreateDataShareHelper::CreateFileExtHelper ");
42     auto saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
43     if (saManager == nullptr) {
44         MEDIA_INFO_LOG("CreateDataShareHelper::CreateFileExtHelper Get system ability mgr failed.");
45         return nullptr;
46     }
47     auto remoteObj = saManager->GetSystemAbility(systemAbilityId);
48     while (remoteObj == nullptr) {
49         MEDIA_INFO_LOG("CreateDataShareHelper::CreateFileExtHelper GetSystemAbility Service Failed.");
50         return nullptr;
51     }
52     return DataShare::DataShareHelper::Creator(remoteObj, MEDIALIBRARY_DATA_URI);
53 }
CreateFile(const string & filePath)54 bool CreateFile(const string &filePath)
55 {
56     bool errCode = false;
57 
58     if (filePath.empty()) {
59         return errCode;
60     }
61 
62     ofstream file(filePath);
63     if (!file) {
64         MEDIA_ERR_LOG("Output file path could not be created");
65         return errCode;
66     }
67 
68     if (chmod(filePath.c_str(), CHOWN_RW_UG) == 0) {
69         errCode = true;
70     }
71 
72     file.close();
73 
74     return errCode;
75 }
76 
SetUpTestCase(void)77 void MediaScannerUnitTest::SetUpTestCase(void)
78 {
79     vector<string> perms;
80     perms.push_back("ohos.permission.READ_MEDIA");
81     perms.push_back("ohos.permission.WRITE_MEDIA");
82     perms.push_back("ohos.permission.FILE_ACCESS_MANAGER");
83     uint64_t tokenId = 0;
84     PermissionUtilsUnitTest::SetAccessTokenPermission("MediaDataShareUnitTest", perms, tokenId);
85     ASSERT_TRUE(tokenId != 0);
86 
87     MEDIA_INFO_LOG("SetUpTestCase invoked");
88     g_mediaDataShareHelper = CreateDataShareHelper(STORAGE_MANAGER_MANAGER_ID);
89     ASSERT_TRUE(g_mediaDataShareHelper != nullptr);
90 
91     Uri deleteAssetUri(MEDIALIBRARY_DATA_URI);
92     DataShare::DataSharePredicates predicates;
93     string selections = MEDIA_DATA_DB_ID + " <> 0 ";
94     predicates.SetWhereClause(selections);
95     int retVal = g_mediaDataShareHelper->Delete(deleteAssetUri, predicates);
96     MEDIA_INFO_LOG("SetUpTestCase Delete retVal: %{public}d", retVal);
97     EXPECT_EQ((retVal >= 0), true);
98 }
99 
TearDownTestCase(void)100 void MediaScannerUnitTest::TearDownTestCase(void) {}
ConvertPath(string path)101 string ConvertPath(string path)
102 {
103     string tmp = "/storage/media/100/";
104     path = tmp + path.substr(strlen("/storage/media/"));
105     return path;
106 }
SetUp(void)107 void MediaScannerUnitTest::SetUp(void) {}
TearDown(void)108 void MediaScannerUnitTest::TearDown(void) {}
109 
110 /*
111  * Feature: MediaScanner
112  * Function: Scan a directory with media files
113  * SubFunction: NA
114  * FunctionPoints: NA
115  * EnvConditions: NA
116  * CaseDescription:
117  */
118 HWTEST_F(MediaScannerUnitTest,  mediascanner_ScanDir_test_001, TestSize.Level0)
119 {
120     Uri scanUri(MEDIALIBRARY_DATA_URI + "/" + MEDIA_BOARDCASTOPRN);
121     DataShareValuesBucket valuesBucket;
122     valuesBucket.Put(MEDIA_DATA_DB_FILE_PATH, ROOT_MEDIA_DIR);
123     auto ret = g_mediaDataShareHelper->Insert(scanUri, valuesBucket);
124     EXPECT_EQ(ret, E_SUCCESS);
125 }
126 
127 /*
128  * Feature : MediaScannerUnitTest
129  * Function : Scan a jpg image file
130  * SubFunction : NA
131  * FunctionPoints : NA
132  * EnvContions : NA
133  * CaseDescription : NA
134  */
135 HWTEST_F(MediaScannerUnitTest, mediascanner_ScanImage_Test_001, TestSize.Level0)
136 {
137     bool createRes = CreateFile("/storage/media/100/local/files/Pictures/gtest_Image1.jpg");
138     EXPECT_EQ(createRes, true);
139 
140     Uri scanUri(MEDIALIBRARY_DATA_URI + "/" + MEDIA_BOARDCASTOPRN);
141     DataShareValuesBucket valuesBucket;
142     valuesBucket.Put(MEDIA_DATA_DB_FILE_PATH, ROOT_MEDIA_DIR);
143     auto ret = g_mediaDataShareHelper->Insert(scanUri, valuesBucket);
144     EXPECT_EQ(ret, E_SUCCESS);
145 }
146 
147 /*
148  * Feature : MediaScannerUnitTest
149  * Function : Scan a png image file
150  * SubFunction : NA
151  * FunctionPoints : NA
152  * EnvContions : NA
153  * CaseDescription : NA
154  */
155 HWTEST_F(MediaScannerUnitTest, mediascanner_ScanImage_Test_002, TestSize.Level0)
156 {
157     bool createRes = CreateFile("/storage/media/100/local/files/Pictures/gtest_Image2.png");
158     EXPECT_EQ(createRes, true);
159 
160     Uri scanUri(MEDIALIBRARY_DATA_URI + "/" + MEDIA_BOARDCASTOPRN);
161     DataShareValuesBucket valuesBucket;
162     valuesBucket.Put(MEDIA_DATA_DB_FILE_PATH, ROOT_MEDIA_DIR);
163     auto ret = g_mediaDataShareHelper->Insert(scanUri, valuesBucket);
164     EXPECT_EQ(ret, E_SUCCESS);
165 }
166 
167 /*
168  * Feature : MediaScannerUnitTest
169  * Function : Scan an audio file
170  * SubFunction : NA
171  * FunctionPoints : NA
172  * EnvContions : NA
173  * CaseDescription : NA
174  */
175 HWTEST_F(MediaScannerUnitTest, mediascanner_ScanImage_Test_003, TestSize.Level0)
176 {
177     bool createRes = CreateFile("/storage/media/100/local/files/Pictures/gtest_Image3.jpeg");
178     EXPECT_EQ(createRes, true);
179 
180     Uri scanUri(MEDIALIBRARY_DATA_URI + "/" + MEDIA_BOARDCASTOPRN);
181     DataShareValuesBucket valuesBucket;
182     valuesBucket.Put(MEDIA_DATA_DB_FILE_PATH, ROOT_MEDIA_DIR);
183     auto ret = g_mediaDataShareHelper->Insert(scanUri, valuesBucket);
184     EXPECT_EQ(ret, E_SUCCESS);
185 }
186 
187 /*
188  * Feature : MediaScannerUnitTest
189  * Function : Scan a normal text file
190  * SubFunction : NA
191  * FunctionPoints : NA
192  * EnvContions : NA
193  * CaseDescription : NA
194  */
195 HWTEST_F(MediaScannerUnitTest, mediascanner_ScanTextFile_Test_001, TestSize.Level0)
196 {
197     bool createRes = CreateFile("/storage/media/100/local/files/Documents/gtest_Text1.txt");
198     EXPECT_EQ(createRes, true);
199 
200     Uri scanUri(MEDIALIBRARY_DATA_URI + "/" + MEDIA_BOARDCASTOPRN);
201     DataShareValuesBucket valuesBucket;
202     valuesBucket.Put(MEDIA_DATA_DB_FILE_PATH, ROOT_MEDIA_DIR);
203     auto ret = g_mediaDataShareHelper->Insert(scanUri, valuesBucket);
204     EXPECT_EQ(ret, E_SUCCESS);
205 }
206 
207 /*
208  * Feature : MediaScannerUnitTest
209  * Function : Scan a hidden file
210  * SubFunction : NA
211  * FunctionPoints : NA
212  * EnvContions : NA
213  * CaseDescription : NA
214  */
215 HWTEST_F(MediaScannerUnitTest, mediascanner_ScanHiddenFile_Test_001, TestSize.Level0)
216 {
217     bool createRes = CreateFile("/storage/media/100/local/files/Download/.HiddenFile");
218     EXPECT_EQ(createRes, true);
219 
220     Uri scanUri(MEDIALIBRARY_DATA_URI + "/" + MEDIA_BOARDCASTOPRN);
221     DataShareValuesBucket valuesBucket;
222     valuesBucket.Put(MEDIA_DATA_DB_FILE_PATH, ROOT_MEDIA_DIR);
223     auto ret = g_mediaDataShareHelper->Insert(scanUri, valuesBucket);
224     EXPECT_EQ(ret, E_SUCCESS);
225 }
226 
227 /*
228  * Feature: MediaScanner
229  * Function: Scan a directory with image, video, audio and other type of files
230  * SubFunction: NA
231  * FunctionPoints: NA
232  * EnvConditions: NA
233  * CaseDescription:
234  */
235 HWTEST_F(MediaScannerUnitTest,  mediascanner_ScanDir_test_002, TestSize.Level0)
236 {
237     Uri scanUri(MEDIALIBRARY_DATA_URI + "/" + MEDIA_BOARDCASTOPRN);
238     DataShareValuesBucket valuesBucket;
239     valuesBucket.Put(MEDIA_DATA_DB_FILE_PATH, ROOT_MEDIA_DIR);
240     auto ret = g_mediaDataShareHelper->Insert(scanUri, valuesBucket);
241     EXPECT_EQ(ret, E_SUCCESS);
242 }
243 
244 /*
245  * Feature: MediaScanner
246  * Function: Scan a directory with path provided as relative, must convert to canonical form
247  * SubFunction: NA
248  * FunctionPoints: NA
249  * EnvConditions: NA
250  * CaseDescription:
251  */
252 HWTEST_F(MediaScannerUnitTest,  mediascanner_ScanDir_CononicalPathtest_001, TestSize.Level0)
253 {
254     Uri scanUri(MEDIALIBRARY_DATA_URI + "/" + MEDIA_BOARDCASTOPRN);
255     DataShareValuesBucket valuesBucket;
256     valuesBucket.Put(MEDIA_DATA_DB_FILE_PATH, ROOT_MEDIA_DIR);
257     auto ret = g_mediaDataShareHelper->Insert(scanUri, valuesBucket);
258     EXPECT_EQ(ret, E_SUCCESS);
259 }
260 
261 /*
262  * Feature: MediaScanner
263  * Function: Scan an image file with path provided as relative, must convert to canonical form
264  * SubFunction: NA
265  * FunctionPoints: NA
266  * EnvConditions: NA
267  * CaseDescription:
268  */
269 HWTEST_F(MediaScannerUnitTest,  mediascanner_ScanFile_CononicalPathtest_001, TestSize.Level0)
270 {
271     Uri scanUri(MEDIALIBRARY_DATA_URI + "/" + MEDIA_BOARDCASTOPRN);
272     DataShareValuesBucket valuesBucket;
273     valuesBucket.Put(MEDIA_DATA_DB_FILE_PATH, ROOT_MEDIA_DIR);
274     auto ret = g_mediaDataShareHelper->Insert(scanUri, valuesBucket);
275     EXPECT_EQ(ret, E_SUCCESS);
276 }
277 
278 /*
279  * Feature: MediaScanner
280  * Function: Scan a text file with path provided as relative, must convert to canonical form
281  * SubFunction: NA
282  * FunctionPoints: NA
283  * EnvConditions: NA
284  * CaseDescription:
285  */
286 HWTEST_F(MediaScannerUnitTest,  mediascanner_ScanFile_CononicalPathtest_002, TestSize.Level0)
287 {
288     MEDIA_DEBUG_LOG("mediascanner_ScanFile_CononicalPathtest_002 start");
289     Uri scanUri(MEDIALIBRARY_DATA_URI + "/" + MEDIA_BOARDCASTOPRN);
290     DataShareValuesBucket valuesBucket;
291     valuesBucket.Put(MEDIA_DATA_DB_FILE_PATH, ROOT_MEDIA_DIR);
292     auto ret = g_mediaDataShareHelper->Insert(scanUri, valuesBucket);
293     EXPECT_EQ(ret, E_SUCCESS);
294     MEDIA_DEBUG_LOG("mediascanner_ScanFile_CononicalPathtest_002 end");
295 }
296 } // namespace Media
297 } // namespace OHOS
298