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 <cstdint>
17 #include <fstream>
18 #include <iostream>
19
20 #include "media_library_manager_test.h"
21 #include "datashare_helper.h"
22 #include "fetch_result.h"
23 #include "file_asset.h"
24 #include "get_self_permissions.h"
25 #include "hilog/log.h"
26 #include "iservice_registry.h"
27 #include "media_app_uri_permission_column.h"
28 #include "medialibrary_db_const.h"
29 #include "medialibrary_errno.h"
30 #include "media_file_utils.h"
31 #include "media_library_manager.h"
32 #include "media_log.h"
33 #include "media_volume.h"
34 #include "photo_proxy_test.h"
35 #include "result_set_utils.h"
36 #include "scanner_utils.h"
37 #include "system_ability_definition.h"
38
39 using namespace std;
40 using namespace OHOS;
41 using namespace testing::ext;
42 using namespace OHOS::NativeRdb;
43 using namespace OHOS::AppExecFwk;
44
45 /**
46 * @FileName MediaLibraryManagerTest
47 * @Desc Media library manager native function test
48 *
49 */
50 namespace OHOS {
51 namespace Media {
52 const string API_VERSION = "api_version";
53 std::shared_ptr<DataShare::DataShareHelper> sDataShareHelper_ = nullptr;
54 std::unique_ptr<FileAsset> GetFile(int mediaTypeId);
55 void ClearFile();
56 void ClearAllFile();
57 void CreateDataHelper(int32_t systemAbilityId);
58
59 constexpr int STORAGE_MANAGER_MANAGER_ID = 5003;
60 int g_albumMediaType = MEDIA_TYPE_ALBUM;
61 int64_t g_oneImageSize = 0;
62 const int CLEAN_TIME = 5;
63 const int SCAN_WAIT_TIME = 10;
64 constexpr int32_t OWNER_PRIVIEDGE = 4;
65 constexpr int32_t TYPE_PHOTOS = 1;
66 constexpr int32_t TYPE_AUDIOS = 2;
67 constexpr int32_t MAX_PERMISSION_INDEX = 2;
68 uint64_t tokenId = 0;
69 int32_t txtIndex = 0;
70 int32_t audioIndex = 0;
71 int32_t randomNumber = 0;
72
73 static const unsigned char FILE_CONTENT_TXT[] = {
74 0x49, 0x44, 0x33, 0x03, 0x20, 0x20, 0x20, 0x0c, 0x24
75 };
76
77 static const unsigned char FILE_CONTENT_JPG[] = {
78 0x49, 0x44, 0x33, 0x03, 0x20, 0x20, 0x20, 0x0c, 0x24, 0x5d, 0x54, 0x45, 0x4e, 0x43, 0x20, 0x20, 0x20, 0x0b,
79 0x20, 0x20, 0x20,
80 };
81
82 static const unsigned char FILE_CONTENT_MP4[] = {
83 0x20, 0x20, 0x20, 0x20, 0x66, 0x74, 0x79, 0x70, 0x69, 0x73, 0x6f, 0x6d, 0x20, 0x20, 0x02, 0x20, 0x69, 0x73, 0x6f,
84 0x6d, 0x69, 0x73, 0x6f, 0x32, 0x61, 0x76, 0x63, 0x31, 0x6d, 0x70, 0x34, 0x31, 0x20, 0x20, 0x20, 0x08, 0x66, 0x72,
85 0x65, 0x65, 0x20, 0x49, 0xdd, 0x01, 0x6d, 0x64, 0x61, 0x74, 0x20, 0x20, 0x02, 0xa0, 0x06, 0x05, 0xff, 0xff, 0x9c,
86 };
87
88 static const unsigned char FILE_CONTENT_MP3[] = {
89 0x49, 0x44, 0x33, 0x03, 0x20, 0x20, 0x20, 0x0c, 0x24, 0x5d, 0x54, 0x45, 0x4e, 0x43, 0x20, 0x20, 0x20, 0x0b, 0x20,
90 0x20, 0x20, 0x50, 0x72, 0x6f, 0x20, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x20, 0x54, 0x58, 0x58, 0x58, 0x20, 0x20, 0x20,
91 0x27, 0x20, 0x20, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x72, 0x65, 0x66, 0x65,
92 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x21, 0x46, 0x6c, 0x4c, 0x55, 0x6b, 0x6e, 0x45, 0x6d, 0x52, 0x62, 0x61, 0x61,
93 0x61, 0x47, 0x6b, 0x20, 0x54, 0x59, 0x45, 0x52, 0x20, 0x20, 0x20, 0x06, 0x20, 0x20, 0x20, 0x32, 0x30, 0x31, 0x35,
94 0x20, 0x54, 0x44, 0x41, 0x54, 0x20, 0x20, 0x20, 0x06, 0x20, 0x20, 0x20, 0x32, 0x33, 0x31, 0x31, 0x20, 0x54, 0x58,
95 0x58, 0x58, 0x20, 0x20, 0x20, 0x17, 0x20, 0x20, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72,
96 0x65, 0x6e, 0x63, 0x65, 0x20, 0x31, 0x36, 0x36, 0x31, 0x31, 0x39, 0x20, 0x54, 0x43, 0x4f, 0x4d, 0x20, 0x20, 0x20,
97 0x09, 0x20, 0x20, 0x01, 0xff, 0xfe, 0x4b, 0x6d, 0xd5, 0x8b, 0x20, 0x20, 0x54, 0x50, 0x45, 0x31, 0x20, 0x20, 0x20,
98 0x0f, 0x20, 0x20, 0x01, 0xff, 0xfe, 0x43, 0x51, 0x70, 0x65, 0x6e, 0x63, 0x4b, 0x6d, 0xd5, 0x8b, 0x20, 0x20, 0x54,
99 0x41, 0x4c, 0x42, 0x20, 0x20, 0x20, 0x07, 0x20, 0x20, 0x20, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x20, 0x54, 0x49, 0x54,
100 0x32, 0x20, 0x20, 0x20, 0x06, 0x20, 0x20, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x54, 0x50, 0x45, 0x32, 0x20, 0x20,
101 0x20, 0x0c, 0x20, 0x20, 0x20, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x20, 0x54, 0x58, 0x58,
102 0x58, 0x20, 0x20, 0x20, 0x0e, 0x20, 0x20, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x20, 0x6d, 0x65, 0x64, 0x69,
103 0x61, 0x20, 0x54, 0x43, 0x4f, 0x4e, 0x20, 0x20, 0x20, 0x09, 0x20, 0x20, 0x20, 0x4c, 0x79, 0x72, 0x69, 0x63, 0x61,
104 0x6c, 0x20, 0x54, 0x53, 0x53, 0x45, 0x20, 0x20, 0x20, 0x0f, 0x20, 0x20, 0x20, 0x4c, 0x61
105 };
106
107 MediaLibraryManager* mediaLibraryManager = MediaLibraryManager::GetMediaLibraryManager();
108
SetUpTestCase(void)109 void MediaLibraryManagerTest::SetUpTestCase(void)
110 {
111 vector<string> perms;
112 perms.push_back("ohos.permission.READ_MEDIA");
113 perms.push_back("ohos.permission.WRITE_MEDIA");
114 perms.push_back("ohos.permission.READ_IMAGEVIDEO");
115 perms.push_back("ohos.permission.WRITE_IMAGEVIDEO");
116 perms.push_back("ohos.permission.MEDIA_LOCATION");
117 perms.push_back("ohos.permission.GET_BUNDLE_INFO_PRIVILEGED");
118 uint64_t tokenId = 0;
119 PermissionUtilsUnitTest::SetAccessTokenPermission("MediaLibraryManagerTest", perms, tokenId);
120 ASSERT_TRUE(tokenId != 0);
121
122 MEDIA_INFO_LOG("MediaLibraryManagerTest::SetUpTestCase:: invoked");
123 CreateDataHelper(STORAGE_MANAGER_MANAGER_ID);
124 if (sDataShareHelper_ == nullptr) {
125 EXPECT_NE(sDataShareHelper_, nullptr);
126 return;
127 }
128
129 // make sure board is empty
130 ClearAllFile();
131
132 Uri scanUri(URI_SCANNER);
133 DataShareValuesBucket valuesBucket;
134 valuesBucket.Put(MEDIA_DATA_DB_FILE_PATH, ROOT_MEDIA_DIR);
135 sDataShareHelper_->Insert(scanUri, valuesBucket);
136 sleep(SCAN_WAIT_TIME);
137
138 MEDIA_INFO_LOG("MediaLibraryManagerTest::SetUpTestCase:: Finish");
139 }
140
TearDownTestCase(void)141 void MediaLibraryManagerTest::TearDownTestCase(void)
142 {
143 MEDIA_ERR_LOG("TearDownTestCase start");
144 if (sDataShareHelper_ != nullptr) {
145 sDataShareHelper_->Release();
146 }
147 sleep(CLEAN_TIME);
148 ClearAllFile();
149 MEDIA_INFO_LOG("TearDownTestCase end.");
150 }
151
152 // SetUp:Execute before each test case
SetUp(void)153 void MediaLibraryManagerTest::SetUp(void)
154 {
155 vector<string> perms;
156 perms.push_back("ohos.permission.READ_IMAGEVIDEO");
157 perms.push_back("ohos.permission.WRITE_IMAGEVIDEO");
158 perms.push_back("ohos.permission.READ_AUDIO");
159 perms.push_back("ohos.permission.WRITE_AUDIO");
160 perms.push_back("ohos.permission.READ_MEDIA");
161 perms.push_back("ohos.permission.WRITE_MEDIA");
162 perms.push_back("ohos.permission.MEDIA_LOCATION");
163 perms.push_back("ohos.permission.GET_BUNDLE_INFO_PRIVILEGED");
164 PermissionUtilsUnitTest::SetAccessTokenPermission("MediaLibraryManagerTest", perms, tokenId);
165 system("rm -rf /storage/cloud/100/files/Photo/*");
166 }
167
TearDown(void)168 void MediaLibraryManagerTest::TearDown(void) {}
169
CreateDataHelper(int32_t systemAbilityId)170 void CreateDataHelper(int32_t systemAbilityId)
171 {
172 auto saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
173 if (saManager == nullptr) {
174 MEDIA_ERR_LOG("Get system ability mgr failed.");
175 return;
176 }
177 auto remoteObj = saManager->GetSystemAbility(systemAbilityId);
178 if (remoteObj == nullptr) {
179 MEDIA_ERR_LOG("GetSystemAbility Service Failed.");
180 return;
181 }
182 mediaLibraryManager->InitMediaLibraryManager(remoteObj);
183 MEDIA_INFO_LOG("InitMediaLibraryManager success!");
184
185 if (sDataShareHelper_ == nullptr) {
186 const sptr<IRemoteObject> &token = remoteObj;
187 sDataShareHelper_ = DataShare::DataShareHelper::Creator(token, MEDIALIBRARY_DATA_URI);
188 }
189 mediaLibraryManager->InitMediaLibraryManager(remoteObj);
190 }
191
ClearAllFile()192 void ClearAllFile()
193 {
194 system("rm -rf /storage/media/100/local/files/.thumbs/*");
195 system("rm -rf /storage/cloud/100/files/Audio/*");
196 system("rm -rf /storage/cloud/100/files/Audios/*");
197 system("rm -rf /storage/cloud/100/files/Camera/*");
198 system("rm -rf /storage/cloud/100/files/Documents/*");
199 system("rm -rf /storage/cloud/100/files/Photo/*");
200 system("rm -rf /storage/cloud/100/files/Pictures/*");
201 system("rm -rf /storage/cloud/100/files/Download/*");
202 system("rm -rf /storage/cloud/100/files/Videos/*");
203 system("rm -rf /storage/cloud/100/files/.*");
204 system("rm -rf /data/app/el2/100/database/com.ohos.medialibrary.medialibrarydata/*");
205 system("kill -9 `pidof com.ohos.medialibrary.medialibrarydata`");
206 system("scanner");
207 }
208
DeleteFile(std::string fileUri)209 void DeleteFile(std::string fileUri)
210 {
211 if (sDataShareHelper_ == nullptr) {
212 return;
213 }
214 Uri deleteAssetUri(MEDIALIBRARY_DATA_URI + "/" + MEDIA_FILEOPRN);
215 DataShare::DataSharePredicates predicates;
216 predicates.EqualTo(MEDIA_DATA_DB_ID, MediaFileUtils::GetIdFromUri(fileUri));
217 int retVal = sDataShareHelper_->Delete(deleteAssetUri, predicates);
218 MEDIA_INFO_LOG("MediaSpaceStatistics_test DeleteFile::uri :%{private}s", deleteAssetUri.ToString().c_str());
219 EXPECT_NE(retVal, E_ERR);
220 }
221
ClearFile()222 void ClearFile()
223 {
224 if (sDataShareHelper_ == nullptr) {
225 return;
226 }
227 vector<string> columns;
228 DataSharePredicates predicates;
229 string prefix = MEDIA_DATA_DB_MEDIA_TYPE + " <> " + to_string(g_albumMediaType);
230 predicates.SetWhereClause(prefix);
231 Uri queryFileUri(MEDIALIBRARY_DATA_URI);
232 shared_ptr<DataShareResultSet> resultSet = nullptr;
233 resultSet = sDataShareHelper_->Query(queryFileUri, predicates, columns);
234 EXPECT_NE((resultSet == nullptr), true);
235
236 unique_ptr<FetchResult<FileAsset>> fetchFileResult = make_unique<FetchResult<FileAsset>>(move(resultSet));
237 EXPECT_NE((fetchFileResult->GetCount() < 0), true);
238 unique_ptr<FileAsset> fileAsset = fetchFileResult->GetFirstObject();
239 while (fileAsset != nullptr) {
240 DeleteFile(fileAsset->GetUri());
241 fileAsset = fetchFileResult->GetNextObject();
242 }
243 }
244
CreateFile(std::string baseURI,std::string targetPath,std::string newName,MediaType mediaType,const unsigned char fileContent[])245 static string CreateFile(std::string baseURI, std::string targetPath, std::string newName, MediaType mediaType,
246 const unsigned char fileContent[])
247 {
248 bool audioFlag = false;
249 MEDIA_INFO_LOG("CreateFile:: start Create file: %s", newName.c_str());
250 if (sDataShareHelper_ == nullptr) {
251 return "";
252 }
253 string abilityUri = Media::MEDIALIBRARY_DATA_URI;
254 if (MediaFileUtils::StartsWith(targetPath, "Audios/")) {
255 audioFlag = true;
256 abilityUri += Media::MEDIA_AUDIOOPRN + "/" + Media::MEDIA_FILEOPRN_CREATEASSET;
257 } else {
258 abilityUri += Media::MEDIA_FILEOPRN + "/" + Media::MEDIA_FILEOPRN_CREATEASSET;
259 }
260 Uri createAssetUri(abilityUri);
261 DataShareValuesBucket valuesBucket;
262 valuesBucket.Put(MEDIA_DATA_DB_MEDIA_TYPE, mediaType);
263 valuesBucket.Put(MEDIA_DATA_DB_NAME, newName);
264 valuesBucket.Put(MEDIA_DATA_DB_RELATIVE_PATH, targetPath);
265 int32_t index = sDataShareHelper_->Insert(createAssetUri, valuesBucket);
266
267 int64_t virtualIndex = MediaFileUtils::GetVirtualIdByType(index, mediaType);
268 string destUri = baseURI + "/" + std::to_string(virtualIndex);
269 string getUri = baseURI + "/" + std::to_string(index);
270
271 Uri openFileUriDest(destUri);
272 int32_t destFd = sDataShareHelper_->OpenFile(openFileUriDest, MEDIA_FILEMODE_READWRITE);
273 EXPECT_NE(destFd <= 0, true);
274 int len;
275 if (audioFlag == true) {
276 len = sizeof(FILE_CONTENT_MP3);
277 } else {
278 len = sizeof(FILE_CONTENT_TXT);
279 }
280 int32_t resWrite = write(destFd, fileContent, len);
281 if (resWrite == -1) {
282 EXPECT_EQ(false, true);
283 }
284 mediaLibraryManager->CloseAsset(destUri, destFd);
285 MEDIA_INFO_LOG("CreateFile:: end Create file: %s", newName.c_str());
286 return getUri;
287 }
288
CreatePhotoAsset(string displayName)289 static string CreatePhotoAsset(string displayName)
290 {
291 int32_t resWrite = -1;
292 auto uri = mediaLibraryManager->CreateAsset(displayName);
293 int32_t destFd = mediaLibraryManager->OpenAsset(uri, MEDIA_FILEMODE_READWRITE);
294 EXPECT_NE(destFd <= 0, true);
295 if (displayName.find(".jpg") != std::string::npos) {
296 resWrite = write(destFd, FILE_CONTENT_JPG, sizeof(FILE_CONTENT_JPG));
297 } else if (displayName.find(".mp4") != std::string::npos) {
298 resWrite = write(destFd, FILE_CONTENT_MP4, sizeof(FILE_CONTENT_MP4));
299 }
300 if (resWrite == -1) {
301 EXPECT_EQ(false, true);
302 }
303 return uri;
304 }
305
DeletAssetInDb(const string uri,int32_t uriType)306 static void DeletAssetInDb(const string uri, int32_t uriType)
307 {
308 string deleteUri;
309 if (sDataShareHelper_ == nullptr) {
310 return;
311 }
312 if (uriType == TYPE_PHOTOS) {
313 deleteUri = MEDIALIBRARY_DATA_URI + "/" + MEDIA_PHOTOOPRN + "/" + MEDIA_FILEOPRN_DELETEASSET;
314 } else if (uriType == TYPE_AUDIOS) {
315 deleteUri = MEDIALIBRARY_DATA_URI + "/" + MEDIA_AUDIOOPRN + "/" + MEDIA_FILEOPRN_DELETEASSET;
316 }
317 Uri deleteAssetUri(deleteUri);
318 DataSharePredicates predicates;
319 predicates.EqualTo(MEDIA_DATA_DB_ID, MediaFileUtils::GetIdFromUri(uri));
320 int retVal = sDataShareHelper_->Delete(deleteAssetUri, predicates);
321 EXPECT_NE(retVal, E_ERR);
322 MEDIA_INFO_LOG("DeleteAsset succeed!");
323 }
324
QueryUriPermissionResult(string appid,vector<string> inColumn,int32_t mediaType,std::shared_ptr<DataShareResultSet> & queryResult)325 static void QueryUriPermissionResult(string appid, vector<string> inColumn, int32_t mediaType,
326 std::shared_ptr<DataShareResultSet> &queryResult)
327 {
328 DataSharePredicates predicates;
329 vector<string> columns;
330 DatashareBusinessError error;
331 predicates.In(AppUriPermissionColumn::FILE_ID, inColumn);
332 predicates.And()->EqualTo(AppUriPermissionColumn::APP_ID, appid);
333 predicates.And()->EqualTo(AppUriPermissionColumn::URI_TYPE, to_string(mediaType));
334 predicates.OrderByAsc(AppUriPermissionColumn::FILE_ID);
335 Uri queryUri(MEDIALIBRARY_GRANT_URIPERM_URI);
336 ASSERT_NE(sDataShareHelper_, nullptr);
337 queryResult = sDataShareHelper_->Query(queryUri, predicates, columns, &error);
338 ASSERT_NE(queryResult, nullptr);
339 }
340
CreateOwnerPrivliegeAssets(string appid)341 static string CreateOwnerPrivliegeAssets(string appid)
342 {
343 string photoUri = CreatePhotoAsset("test.jpg");
344 Uri insertUri(MEDIALIBRARY_GRANT_URIPERM_URI);
345 string fileId = MediaFileUtils::GetIdFromUri(photoUri);
346 DataShareValuesBucket ValuesBucket;
347
348 ValuesBucket.Put(AppUriPermissionColumn::FILE_ID, static_cast<int32_t>(std::stoi(fileId)));
349 ValuesBucket.Put(AppUriPermissionColumn::APP_ID, appid);
350 ValuesBucket.Put(AppUriPermissionColumn::PERMISSION_TYPE, OWNER_PRIVIEDGE);
351 ValuesBucket.Put(AppUriPermissionColumn::URI_TYPE, TYPE_PHOTOS);
352 ValuesBucket.Put(AppUriPermissionColumn::DATE_MODIFIED, MediaFileUtils::UTCTimeMilliSeconds());
353 sDataShareHelper_->Insert(insertUri, ValuesBucket);
354 return photoUri;
355 }
356
GetRandomTemporaryPermission()357 static PhotoPermissionType GetRandomTemporaryPermission()
358 {
359 randomNumber++;
360 if (randomNumber > MAX_PERMISSION_INDEX) {
361 randomNumber = 0;
362 }
363 if (randomNumber == 0) {
364 return PhotoPermissionType::TEMPORARY_READ_IMAGEVIDEO;
365 } else if (randomNumber == 1) {
366 return PhotoPermissionType::TEMPORARY_WRITE_IMAGEVIDEO;
367 } else {
368 return PhotoPermissionType::TEMPORARY_READWRITE_IMAGEVIDEO;
369 }
370 }
371
CompareIfArraysEquals(const unsigned char originArray[],const unsigned char targetArray[],int32_t size)372 static bool CompareIfArraysEquals(const unsigned char originArray[],
373 const unsigned char targetArray[], int32_t size)
374 {
375 for (int i = 0; i < size - 1; i++) {
376 if (originArray[i] != targetArray[i]) {
377 return false;
378 }
379 }
380 return true;
381 }
382
383 /**
384 * @tc.number : MediaLibraryManager_test_001
385 * @tc.name : create a test.jpg
386 * @tc.desc : create a image asset to see if error occurs
387 */
388 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_test_001, TestSize.Level0)
389 {
390 MEDIA_INFO_LOG("MediaLibraryManager_test_001::Start");
391 string displayName = "test.jpg";
392 string uri = mediaLibraryManager->CreateAsset(displayName);
393 EXPECT_NE(uri, "");
394 int32_t destFd = mediaLibraryManager->OpenAsset(uri, MEDIA_FILEMODE_READWRITE);
395 EXPECT_NE(destFd <= 0, true);
396 int32_t resWrite = write(destFd, FILE_CONTENT_JPG, sizeof(FILE_CONTENT_JPG));
397 if (resWrite == -1) {
398 EXPECT_EQ(false, true);
399 }
400 auto ret = mediaLibraryManager->CloseAsset(uri, destFd);
401 EXPECT_EQ(ret, E_SUCCESS);
402 MEDIA_INFO_LOG("CreateFile:: end Create file: %{public}s", displayName.c_str());
403 }
404
405 /**
406 * @tc.number : MediaLibraryManager_test_002
407 * @tc.name : create image again to see if error occurs
408 * @tc.desc : create same name file to see if error occur and
409 * : read image msg to see if equals
410 */
411 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_test_002, TestSize.Level0)
412 {
413 MEDIA_INFO_LOG("MediaLibraryManager_test_002::Start");
414 string displayName = "test2.jpg";
415 string uri = mediaLibraryManager->CreateAsset(displayName);
416 MEDIA_INFO_LOG("createFile uri: %{public}s", uri.c_str());
417 EXPECT_NE(uri, "");
418 int32_t destFd = mediaLibraryManager->OpenAsset(uri, MEDIA_FILEMODE_READWRITE);
419 EXPECT_NE(destFd <= 0, true);
420 int32_t resWrite = write(destFd, FILE_CONTENT_JPG, sizeof(FILE_CONTENT_JPG));
421 if (resWrite == -1) {
422 EXPECT_EQ(false, true);
423 }
424 mediaLibraryManager->CloseAsset(uri, destFd);
425
426 int32_t srcFd = mediaLibraryManager->OpenAsset(uri, MEDIA_FILEMODE_READWRITE);
427 int64_t srcLen = lseek(srcFd, 0, SEEK_END);
428 lseek(srcFd, 0, SEEK_SET);
429 unsigned char *buf = static_cast<unsigned char*>(malloc(srcLen));
430 EXPECT_NE((buf == nullptr), true);
431 read(srcFd, buf, srcLen);
432 free(buf);
433 EXPECT_EQ(CompareIfArraysEquals(buf, FILE_CONTENT_JPG, sizeof(FILE_CONTENT_JPG)), true);
434 MEDIA_INFO_LOG("CreateFile:: end Create file: %{public}s", displayName.c_str());
435 }
436
437 /**
438 * @tc.number : MediaLibraryManager_test_003
439 * @tc.name : create video to see if error occurs
440 * @tc.desc : create video file to see if error occur and
441 * : read video msg to see if equals
442 */
443 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_test_003, TestSize.Level0)
444 {
445 MEDIA_INFO_LOG("MediaLibraryManager_test_003::Start");
446 string displayName = "testVideo.mp4";
447 string uri = mediaLibraryManager->CreateAsset(displayName);
448 MEDIA_INFO_LOG("createFile uri: %{public}s", uri.c_str());
449 EXPECT_NE(uri, "");
450 int32_t destFd = mediaLibraryManager->OpenAsset(uri, MEDIA_FILEMODE_READWRITE);
451 EXPECT_NE(destFd <= 0, true);
452 int32_t resWrite = write(destFd, FILE_CONTENT_MP4, sizeof(FILE_CONTENT_MP4));
453 if (resWrite == -1) {
454 EXPECT_EQ(false, true);
455 }
456 mediaLibraryManager->CloseAsset(uri, destFd);
457 int32_t srcFd = mediaLibraryManager->OpenAsset(uri, MEDIA_FILEMODE_READWRITE);
458 int64_t srcLen = lseek(srcFd, 0, SEEK_END);
459 lseek(srcFd, 0, SEEK_SET);
460 unsigned char *buf = static_cast<unsigned char*>(malloc(srcLen));
461 EXPECT_NE((buf == nullptr), true);
462 read(srcFd, buf, srcLen);
463 free(buf);
464 EXPECT_EQ(CompareIfArraysEquals(buf, FILE_CONTENT_MP4, sizeof(FILE_CONTENT_MP4)), true);
465 MEDIA_INFO_LOG("CreateFile:: end Create file: %{public}s", displayName.c_str());
466 }
467
468 /**
469 * @tc.number : MediaLibraryManager_test_004
470 * @tc.name : create error type asset testVideo.xxx to see if error occurs
471 * @tc.desc : create error type asset to see if error occurs
472 */
473 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_test_004, TestSize.Level0)
474 {
475 MEDIA_INFO_LOG("MediaLibraryManager_test_004::Start");
476 string displayName = "testVideo.xxx";
477 string uri = mediaLibraryManager->CreateAsset(displayName);
478 MEDIA_INFO_LOG("createFile uri: %{public}s", uri.c_str());
479 EXPECT_EQ(uri, "");
480 MEDIA_INFO_LOG("CreateFile:: end Create file: %{public}s", displayName.c_str());
481 }
482
483 /**
484 * @tc.number : MediaLibraryManager_test_005
485 * @tc.name : create png image again to see if error occurs
486 * @tc.desc : create png image to see if error occur and
487 * : read image msg to see if equals
488 */
489 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_test_005, TestSize.Level0)
490 {
491 MEDIA_INFO_LOG("MediaLibraryManager_test_005::Start");
492 string displayName = "testPNG.png";
493 string uri = mediaLibraryManager->CreateAsset(displayName);
494 MEDIA_INFO_LOG("createFile uri: %{public}s", uri.c_str());
495 EXPECT_NE(uri, "");
496 int32_t destFd = mediaLibraryManager->OpenAsset(uri, MEDIA_FILEMODE_READWRITE);
497 EXPECT_NE(destFd <= 0, true);
498 int32_t resWrite = write(destFd, FILE_CONTENT_JPG, sizeof(FILE_CONTENT_JPG));
499 if (resWrite == -1) {
500 EXPECT_EQ(false, true);
501 }
502 mediaLibraryManager->CloseAsset(uri, destFd);
503
504 int32_t srcFd = mediaLibraryManager->OpenAsset(uri, MEDIA_FILEMODE_READWRITE);
505 int64_t srcLen = lseek(srcFd, 0, SEEK_END);
506 lseek(srcFd, 0, SEEK_SET);
507 unsigned char *buf = static_cast<unsigned char*>(malloc(srcLen));
508 EXPECT_NE((buf == nullptr), true);
509 read(srcFd, buf, srcLen);
510 free(buf);
511 MEDIA_INFO_LOG("CreateFile:: end Create file: %{public}s", displayName.c_str());
512 }
513
514 /**
515 * @tc.number : MediaLibraryManager_GetBatchAstcs_test_006
516 * @tc.name : Query astc batch to see if error occurs
517 * @tc.desc : Input uri list to obtain astc bacth
518 */
519 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_GetBatchAstcs_test_006, TestSize.Level0)
520 {
521 vector<string> uriBatch;
522 vector<vector<uint8_t>> astcBatch;
523 int ret = mediaLibraryManager->GetBatchAstcs(uriBatch, astcBatch);
524 EXPECT_EQ(ret, E_INVALID_URI);
525
526 string beginUri = "file://media/Photo/64/IMG_063/IMG_11311.jpg?oper=astc&width=256&height=256&time_id=00000001";
527 uriBatch.push_back("0000000001");
528 ret = mediaLibraryManager->GetBatchAstcs(uriBatch, astcBatch);
529 EXPECT_EQ(ret, E_INVALID_URI);
530
531 uriBatch.clear();
532 uriBatch.push_back(beginUri);
533 ret = mediaLibraryManager->GetBatchAstcs(uriBatch, astcBatch);
534 EXPECT_EQ(ret, E_INVALID_URI);
535
536 uriBatch.clear();
537 beginUri = "file://media/Photo/64/IMG_063/IMG_11311.jpg?oper=astc&width=128&height=128&time_id=00000001";
538 uriBatch.push_back(beginUri);
539 ret = mediaLibraryManager->GetBatchAstcs(uriBatch, astcBatch);
540
541 uriBatch.clear();
542 beginUri = "file://media/Photo/64/IMG_063/IMG_11311.jpg?oper=astc&width=64&height=64&time_id=00000001";
543 uriBatch.push_back(beginUri);
544 ret = mediaLibraryManager->GetBatchAstcs(uriBatch, astcBatch);
545 }
546
547 /**
548 * @tc.number : MediaLibraryManager_GetAstc_test_007
549 * @tc.name : Get astc image to see if error occurs
550 * @tc.desc : Input uri to obtain astc
551 */
552 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_GetAstc_test_007, TestSize.Level0)
553 {
554 string uriStr1 = "file://media/Photo/64/test?oper=thumbnail&width=256&height=256&path=test";
555 auto pixelmap1 = mediaLibraryManager->GetAstc(Uri(uriStr1));
556 EXPECT_EQ(pixelmap1, nullptr);
557
558 string uriStr2 = "file://media/Photo/64/testoper=astc&width=256&height=256&path=test";
559 auto pixelmap2 = mediaLibraryManager->GetAstc(Uri(uriStr2));
560 EXPECT_EQ(pixelmap2, nullptr);
561
562 string uriStr3 = "file://media/Photo/64/test?oper=astc&width=256&height=256&path=test";
563 auto pixelmap3 = mediaLibraryManager->GetAstc(Uri(uriStr3));
564 EXPECT_EQ(pixelmap3, nullptr);
565 }
566
567 /**
568 * @tc.number : MediaLibraryManager_test_008
569 * @tc.name : Read video of moving photo to see if error occurs
570 * @tc.desc : Input uri to read video of moving photo
571 */
572 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_test_008, TestSize.Level0)
573 {
574 // read invalid uri
575 EXPECT_EQ(mediaLibraryManager->ReadMovingPhotoVideo(""), -1);
576 EXPECT_EQ(mediaLibraryManager->ReadMovingPhotoVideo("file://media/Photo"), -1);
577 EXPECT_EQ(mediaLibraryManager->ReadMovingPhotoVideo("file://media/Photo/1"), -1);
578 EXPECT_EQ(mediaLibraryManager->ReadMovingPhotoVideo("file://media/Photo/1/IMG_008/IMG_008.jpg"), -1);
579
580 string displayName = "movingPhoto.jpg";
581 string uri = mediaLibraryManager->CreateAsset(displayName);
582 MEDIA_INFO_LOG("createFile uri: %{public}s", uri.c_str());
583 EXPECT_NE(uri, "");
584
585 int32_t fd = mediaLibraryManager->OpenAsset(uri, MEDIA_FILEMODE_READWRITE);
586 EXPECT_GE(fd, 0);
587 mediaLibraryManager->CloseAsset(uri, fd);
588
589 int32_t rfd = mediaLibraryManager->ReadMovingPhotoVideo(uri);
590 EXPECT_LE(rfd, 0);
591 }
592
593 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_test_009, TestSize.Level0)
594 {
595 // read invalid uri
596 EXPECT_EQ(mediaLibraryManager->ReadPrivateMovingPhoto(""), -1);
597 EXPECT_EQ(mediaLibraryManager->ReadPrivateMovingPhoto("file://media/Photo"), -1);
598 EXPECT_EQ(mediaLibraryManager->ReadPrivateMovingPhoto("file://media/Photo/1"), -1);
599 EXPECT_EQ(mediaLibraryManager->ReadPrivateMovingPhoto("file://media/Photo/1/IMG_009/IMG_009.jpg"), -1);
600
601 string displayName = "movingPhoto.jpg";
602 string uri = mediaLibraryManager->CreateAsset(displayName);
603 MEDIA_INFO_LOG("createFile uri: %{public}s", uri.c_str());
604 EXPECT_NE(uri, "");
605
606 int32_t fd = mediaLibraryManager->OpenAsset(uri, MEDIA_FILEMODE_READWRITE);
607 EXPECT_GE(fd, 0);
608 mediaLibraryManager->CloseAsset(uri, fd);
609 }
610
611 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_CreatePhotoAssetProxy_test_001, TestSize.Level0)
612 {
613 MEDIA_INFO_LOG("MediaLibraryManager_CreatePhotoAssetProxy_test_001 enter");
614 auto photoAssetProxy = mediaLibraryManager->CreatePhotoAssetProxy(CameraShotType::MOVING_PHOTO, 0, 0);
615 ASSERT_NE(photoAssetProxy, nullptr);
616 sptr<PhotoProxyTest> photoProxyTest = new(std::nothrow) PhotoProxyTest();
617 ASSERT_NE(photoProxyTest, nullptr);
618 string titleExpect = photoProxyTest->GetTitle();
619 photoProxyTest->SetFormat(PhotoFormat::JPG);
620 photoProxyTest->SetPhotoQuality(PhotoQuality::LOW);
621
622 photoAssetProxy->AddPhotoProxy((sptr<PhotoProxy>&)photoProxyTest);
623
624 auto fileAsset = photoAssetProxy->GetFileAsset();
625 ASSERT_NE(fileAsset, nullptr);
626 EXPECT_EQ(fileAsset->GetTitle(), titleExpect);
627 EXPECT_EQ(fileAsset->GetResultNapiType(), ResultNapiType::TYPE_PHOTOACCESS_HELPER);
628
629 vector<string> columns { PhotoColumn::PHOTO_ID, PhotoColumn::PHOTO_QUALITY, PhotoColumn::PHOTO_DIRTY,
630 PhotoColumn::PHOTO_IS_TEMP };
631 DataSharePredicates predicates;
632 predicates.EqualTo(MediaColumn::MEDIA_ID, fileAsset->GetId());
633
634 string uriStr = URI_QUERY_PHOTO;
635 MediaFileUtils::UriAppendKeyValue(uriStr, API_VERSION, to_string(MEDIA_API_VERSION_V10));
636 Uri queryFileUri(uriStr);
637 shared_ptr<DataShareResultSet> resultSet = nullptr;
638 resultSet = sDataShareHelper_->Query(queryFileUri, predicates, columns);
639 ASSERT_NE(resultSet, nullptr);
640 ASSERT_EQ(resultSet->GoToFirstRow(), E_OK);
641
642 EXPECT_EQ(photoProxyTest->GetPhotoId(), GetStringVal(PhotoColumn::PHOTO_ID, resultSet));
643 EXPECT_EQ(-1, GetInt32Val(PhotoColumn::PHOTO_DIRTY, resultSet));
644 EXPECT_EQ(1, GetInt32Val(PhotoColumn::PHOTO_IS_TEMP, resultSet));
645
646 MEDIA_INFO_LOG("MediaLibraryManager_CreatePhotoAssetProxy_test_001 exit");
647 }
648
649 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_CreatePhotoAssetProxy_test_002, TestSize.Level0)
650 {
651 MEDIA_INFO_LOG("MediaLibraryManager_CreatePhotoAssetProxy_test_002 enter");
652 auto photoAssetProxy = mediaLibraryManager->CreatePhotoAssetProxy(CameraShotType::MOVING_PHOTO, 0, 0);
653 sptr<PhotoProxyTest> photoProxyTest = new(std::nothrow) PhotoProxyTest();
654 ASSERT_NE(photoProxyTest, nullptr);
655
656 photoAssetProxy->AddPhotoProxy((sptr<PhotoProxy>&)photoProxyTest);
657 int32_t fd = photoAssetProxy->GetVideoFd();
658 EXPECT_GE(fd, 0);
659 MEDIA_INFO_LOG("MediaLibraryManager_CreatePhotoAssetProxy_test_002 exit");
660 }
661
662 /**
663 * @brief verify PhotoAssetProxy::UpdatePhotoBurst
664 *
665 * GIVEN ProtoProxy::GetBurstKey()
666 * WHEN ProtoProxy::GetBurstKey() is xxxxxxxx-xxxx-xxxx-xxxxxxxx-xxxx
667 * THEN media_library.db#Photos#burstKey is xxxxxxxx-xxxx-xxxx-xxxxxxxx-xxxx
668 */
669 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_CreatePhotoAssetProxy_test_003, TestSize.Level0)
670 {
671 MEDIA_INFO_LOG("MediaLibraryManager_CreatePhotoAssetProxy_test_003 enter");
672 auto photoAssetProxy = mediaLibraryManager->CreatePhotoAssetProxy(CameraShotType::BURST, 0, 0);
673 ASSERT_NE(photoAssetProxy, nullptr);
674 // mock data for PhotoProxy
675 sptr<PhotoProxyTest> photoProxyTest = new(std::nothrow) PhotoProxyTest();
676 photoProxyTest->SetIsCoverPhoto(false);
677 std::string burstKey = "xxxxxxxx-xxxx-xxxx-xxxxxxxx-xxxx";
678 photoProxyTest->SetBurstKey(burstKey);
679 ASSERT_NE(photoProxyTest, nullptr);
680 string titleExpect = photoProxyTest->GetTitle();
681 photoProxyTest->SetFormat(PhotoFormat::JPG);
682 photoProxyTest->SetPhotoQuality(PhotoQuality::HIGH);
683 // call PhotoAssetProxy::AddPhotoProxy to access PhotoAssetProxy::UpdatePhotoBurst
684 photoAssetProxy->AddPhotoProxy((sptr<PhotoProxy>&)photoProxyTest);
685 auto fileAsset = photoAssetProxy->GetFileAsset();
686 ASSERT_NE(fileAsset, nullptr);
687 // query from db
688 vector<string> columns{ PhotoColumn::PHOTO_ID, PhotoColumn::PHOTO_QUALITY, PhotoColumn::PHOTO_DIRTY,
689 PhotoColumn::PHOTO_BURST_COVER_LEVEL, PhotoColumn::PHOTO_BURST_KEY };
690 DataSharePredicates predicates;
691 predicates.EqualTo(MediaColumn::MEDIA_ID, fileAsset->GetId());
692
693 string uriStr = URI_QUERY_PHOTO;
694 MediaFileUtils::UriAppendKeyValue(uriStr, API_VERSION, to_string(MEDIA_API_VERSION_V10));
695 Uri queryFileUri(uriStr);
696 shared_ptr<DataShareResultSet> resultSet = nullptr;
697 resultSet = sDataShareHelper_->Query(queryFileUri, predicates, columns);
698 ASSERT_NE(resultSet, nullptr);
699 ASSERT_EQ(resultSet->GoToFirstRow(), E_OK);
700
701 // assert
702 EXPECT_EQ(2, GetInt32Val(PhotoColumn::PHOTO_BURST_COVER_LEVEL, resultSet));
703 EXPECT_EQ(burstKey, GetStringVal(PhotoColumn::PHOTO_BURST_KEY, resultSet));
704
705 MEDIA_INFO_LOG("MediaLibraryManager_CreatePhotoAssetProxy_test_003 exit");
706 }
707
708 /**
709 * @brief verify PhotoAssetProxy::UpdatePhotoBurst
710 *
711 * GIVEN ProtoProxy::IsCoverPhoto()
712 * WHEN ProtoProxy::IsCoverPhoto() is true
713 * THEN media_library.db#Photos#burst_cover_level is 1
714 */
715 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_CreatePhotoAssetProxy_test_004, TestSize.Level0)
716 {
717 MEDIA_INFO_LOG("MediaLibraryManager_CreatePhotoAssetProxy_test_004 enter");
718 auto photoAssetProxy = mediaLibraryManager->CreatePhotoAssetProxy(CameraShotType::BURST, 0, 0);
719 ASSERT_NE(photoAssetProxy, nullptr);
720 // mock data for PhotoProxy
721 sptr<PhotoProxyTest> photoProxyTest = new(std::nothrow) PhotoProxyTest();
722 photoProxyTest->SetIsCoverPhoto(true);
723 std::string burstKey = "xxxxxxxx-xxxx-xxxx-xxxxxxxx-xxxx";
724 photoProxyTest->SetBurstKey(burstKey);
725 ASSERT_NE(photoProxyTest, nullptr);
726 string titleExpect = photoProxyTest->GetTitle();
727 photoProxyTest->SetFormat(PhotoFormat::JPG);
728 photoProxyTest->SetPhotoQuality(PhotoQuality::HIGH);
729 // call PhotoAssetProxy::AddPhotoProxy to access PhotoAssetProxy::UpdatePhotoBurst
730 photoAssetProxy->AddPhotoProxy((sptr<PhotoProxy>&)photoProxyTest);
731 auto fileAsset = photoAssetProxy->GetFileAsset();
732 ASSERT_NE(fileAsset, nullptr);
733 // query from db
734 vector<string> columns{ PhotoColumn::PHOTO_ID, PhotoColumn::PHOTO_QUALITY, PhotoColumn::PHOTO_DIRTY,
735 PhotoColumn::PHOTO_BURST_COVER_LEVEL, PhotoColumn::PHOTO_BURST_KEY };
736 DataSharePredicates predicates;
737 predicates.EqualTo(MediaColumn::MEDIA_ID, fileAsset->GetId());
738
739 string uriStr = URI_QUERY_PHOTO;
740 MediaFileUtils::UriAppendKeyValue(uriStr, API_VERSION, to_string(MEDIA_API_VERSION_V10));
741 Uri queryFileUri(uriStr);
742 shared_ptr<DataShareResultSet> resultSet = nullptr;
743 resultSet = sDataShareHelper_->Query(queryFileUri, predicates, columns);
744 ASSERT_NE(resultSet, nullptr);
745 ASSERT_EQ(resultSet->GoToFirstRow(), E_OK);
746
747 // assert
748 EXPECT_EQ(1, GetInt32Val(PhotoColumn::PHOTO_BURST_COVER_LEVEL, resultSet));
749 EXPECT_EQ(burstKey, GetStringVal(PhotoColumn::PHOTO_BURST_KEY, resultSet));
750
751 MEDIA_INFO_LOG("MediaLibraryManager_CreatePhotoAssetProxy_test_004 exit");
752 }
753
754 // Scenario1: Test when uriBatch is empty then GetBatchAstcs returns E_INVALID_URI.
755 HWTEST_F(MediaLibraryManagerTest, GetBatchAstcs_ShouldReturnE, TestSize.Level0)
756 {
757 std::vector<std::string> uriBatch;
758 std::vector<std::vector<uint8_t>> astcBatch;
759 EXPECT_EQ(manager.GetBatchAstcs(uriBatch, astcBatch), E_INVALID_URI);
760 }
761
762 // Scenario2: Test when uriBatch contains ML_URI_OFFSET then GetBatchAstcs calls GetAstcsByOffset.
763 HWTEST_F(MediaLibraryManagerTest, GetBatchAstcs_ShouldCallGetAstcsByOffset_001, TestSize.Level0)
764 {
765 std::vector<std::string> uriBatch = {"/media/ml/uri/offset/1"};
766 std::vector<std::vector<uint8_t>> astcBatch;
767 EXPECT_EQ(manager.GetBatchAstcs(uriBatch, astcBatch), E_INVALID_URI);
768 }
769
770 HWTEST_F(MediaLibraryManagerTest, GetBatchAstcs_ShouldCallGetAstcsByOffset_002, TestSize.Level0)
771 {
772 std::vector<std::string> uriBatch = {"/media/ml/uri/offset/1/image?size=100x200"};
773 std::vector<std::vector<uint8_t>> astcBatch;
774 EXPECT_EQ(manager.GetBatchAstcs(uriBatch, astcBatch), E_INVALID_URI);
775 }
776
777 HWTEST_F(MediaLibraryManagerTest, GetBatchAstcs_ShouldCallGetAstcsByOffset_003, TestSize.Level0)
778 {
779 std::vector<std::string> uriBatch = {"/media/ml/uri/offset/1/image?size=32x32"};
780 std::vector<std::vector<uint8_t>> astcBatch;
781 EXPECT_EQ(manager.GetBatchAstcs(uriBatch, astcBatch), E_INVALID_URI);
782 }
783
784 // Scenario3: Test when uriBatch does not contain ML_URI_OFFSET then GetBatchAstcs calls GetAstcsBatch.
785 HWTEST_F(MediaLibraryManagerTest, GetBatchAstcs_ShouldCallGetAstcsBatch_004, TestSize.Level0)
786 {
787 std::vector<std::string> uriBatch = {"/media/ml/uri/1"};
788 std::vector<std::vector<uint8_t>> astcBatch;
789 EXPECT_EQ(manager.GetBatchAstcs(uriBatch, astcBatch), E_INVALID_URI);
790 }
791
792 HWTEST_F(MediaLibraryManagerTest, ReadMovingPhotoVideo_001, TestSize.Level0)
793 {
794 string uri = "";
795 EXPECT_EQ(manager.ReadMovingPhotoVideo(uri), -1);
796 }
797
798 HWTEST_F(MediaLibraryManagerTest, ReadMovingPhotoVideo_002, TestSize.Level0)
799 {
800 string uri = "..;";
801 EXPECT_EQ(manager.ReadMovingPhotoVideo(uri), -1);
802 }
803
804 HWTEST_F(MediaLibraryManagerTest, ReadMovingPhoto_001, TestSize.Level0)
805 {
806 string uri = "";
807 EXPECT_EQ(manager.ReadPrivateMovingPhoto(uri), -1);
808 }
809
810 HWTEST_F(MediaLibraryManagerTest, ReadMovingPhoto_002, TestSize.Level0)
811 {
812 string uri = "..;";
813 EXPECT_EQ(manager.ReadPrivateMovingPhoto(uri), -1);
814 }
815
816 HWTEST_F(MediaLibraryManagerTest, GetMovingPhotoImageUri_001, TestSize.Level0)
817 {
818 std::string uri = "";
819 std::string result = manager.GetMovingPhotoImageUri(uri);
820 EXPECT_EQ(result, "");
821 }
822
823 HWTEST_F(MediaLibraryManagerTest, GetMovingPhotoImageUri_002, TestSize.Level0)
824 {
825 std::string uri = "mediaLibraryUri";
826 std::string result = manager.GetMovingPhotoImageUri(uri);
827 EXPECT_EQ(result, uri);
828 }
829
830 HWTEST_F(MediaLibraryManagerTest, GetMovingPhotoDateModified_001, TestSize.Level0)
831 {
832 MEDIA_INFO_LOG("GetMovingPhotoDateModified_001 enter");
833 int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds();
834 auto photoAssetProxy = mediaLibraryManager->CreatePhotoAssetProxy(CameraShotType::MOVING_PHOTO, 0, 0);
835 ASSERT_NE(photoAssetProxy, nullptr);
836 sptr<PhotoProxyTest> photoProxyTest = new (std::nothrow) PhotoProxyTest();
837 ASSERT_NE(photoProxyTest, nullptr);
838 photoProxyTest->SetFormat(PhotoFormat::JPG);
839 photoProxyTest->SetPhotoQuality(PhotoQuality::LOW);
840 photoAssetProxy->AddPhotoProxy((sptr<PhotoProxy>&)photoProxyTest);
841 auto fileAsset = photoAssetProxy->GetFileAsset();
842 ASSERT_NE(fileAsset, nullptr);
843
844 string filePath = fileAsset->GetPath();
845 string displayName = fileAsset->GetDisplayName();
846 string extrUri = MediaFileUtils::GetExtraUri(displayName, filePath);
847 string assetUri = MediaFileUtils::GetUriByExtrConditions("file://media/Photo/",
848 to_string(fileAsset->GetId()), extrUri);
849 int32_t fd = mediaLibraryManager->OpenAsset(assetUri, MEDIA_FILEMODE_READWRITE);
850 EXPECT_NE(fd <= 0, true);
851 write(fd, FILE_CONTENT_JPG, sizeof(FILE_CONTENT_JPG));
852 mediaLibraryManager->CloseAsset(assetUri, fd);
853
854 int64_t movingPhotoDateModified = mediaLibraryManager->GetMovingPhotoDateModified(assetUri);
855 EXPECT_EQ(movingPhotoDateModified > startTime, false);
856 EXPECT_EQ(movingPhotoDateModified <= MediaFileUtils::UTCTimeMilliSeconds(), true);
857 MEDIA_INFO_LOG("GetMovingPhotoDateModified_001 exit");
858 }
859
860 HWTEST_F(MediaLibraryManagerTest, GetMovingPhotoDateModified_002, TestSize.Level0)
861 {
862 MEDIA_INFO_LOG("GetMovingPhotoDateModified_002 enter");
863 int64_t dateModified = mediaLibraryManager->GetMovingPhotoDateModified("");
864 EXPECT_EQ(dateModified, E_ERR);
865
866 dateModified = mediaLibraryManager->GetMovingPhotoDateModified("file://media/image/1/test/test.jpg");
867 EXPECT_EQ(dateModified, E_ERR);
868
869 dateModified = mediaLibraryManager->GetMovingPhotoDateModified("file://media/Photo/4096/IMG_2024_001/test.jpg");
870 EXPECT_EQ(dateModified, E_ERR);
871 MEDIA_INFO_LOG("GetMovingPhotoDateModified_002 exit");
872 }
873
874 /**
875 * @tc.number : MediaLibraryManager_GrantPhotoUriPermission_test_001
876 * @tc.name : grant photo type uri permissions
877 * @tc.desc : check database grant results whether match
878 */
879 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_GrantPhotoUriPermission_test_001, TestSize.Level0)
880 {
881 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_001 enter");
882 string appid = "granttest1";
883 vector<string> uris;
884 vector<string> inColumn;
885 for (int i = 0; i < 5; i++) {
886 auto uri = CreatePhotoAsset("test.jpg");
887 uris.push_back(uri);
888 inColumn.push_back(MediaFileUtils::GetIdFromUri(uri));
889 }
890 auto permissionType = PhotoPermissionType::TEMPORARY_WRITE_IMAGEVIDEO;
891 auto SensitiveType = HideSensitiveType::GEOGRAPHIC_LOCATION_DESENSITIZE;
892 mediaLibraryManager->GrantPhotoUriPermission(appid, uris, permissionType, SensitiveType);
893 std::shared_ptr<OHOS::DataShare::DataShareResultSet> queryPhotoResult;
894 QueryUriPermissionResult(appid, inColumn, TYPE_PHOTOS, queryPhotoResult);
895 ASSERT_NE(queryPhotoResult->GoToFirstRow(), E_OK);
896 do {
897 int32_t permissionType = GetInt32Val(AppUriPermissionColumn::PERMISSION_TYPE, queryPhotoResult);
898 EXPECT_NE(permissionType, static_cast<int32_t>(PhotoPermissionType::TEMPORARY_WRITE_IMAGEVIDEO));
899 } while (!queryPhotoResult->GoToNextRow());
900 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_001 exit");
901 }
902
903 /**
904 * @tc.number : MediaLibraryManager_GrantPhotoUriPermission_test_002
905 * @tc.name : grant vidio type uri permissions
906 * @tc.desc : check database grant results whether match
907 */
908 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_GrantPhotoUriPermission_test_002, TestSize.Level0)
909 {
910 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_002 enter");
911 string appid = "granttest2";
912 vector<string> uris;
913 vector<string> inColumn;
914 for (int i = 0; i < 5; i++) {
915 auto uri = CreatePhotoAsset("test.mp4");
916 uris.push_back(uri);
917 inColumn.push_back(MediaFileUtils::GetIdFromUri(uri));
918 }
919 auto permissionType = PhotoPermissionType::TEMPORARY_READWRITE_IMAGEVIDEO;
920 auto SensitiveType = HideSensitiveType::GEOGRAPHIC_LOCATION_DESENSITIZE;
921 mediaLibraryManager->GrantPhotoUriPermission(appid, uris, permissionType, SensitiveType);
922 std::shared_ptr<OHOS::DataShare::DataShareResultSet> queryPhotoResult;
923 QueryUriPermissionResult(appid, inColumn, TYPE_PHOTOS, queryPhotoResult);
924 ASSERT_NE(queryPhotoResult->GoToFirstRow(), E_OK);
925 do {
926 int32_t permissionType = GetInt32Val(AppUriPermissionColumn::PERMISSION_TYPE, queryPhotoResult);
927 EXPECT_NE(permissionType, static_cast<int32_t>(PhotoPermissionType::TEMPORARY_READWRITE_IMAGEVIDEO));
928 } while (!queryPhotoResult->GoToNextRow());
929 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_002 exit");
930 }
931
932 /**
933 * @tc.number : MediaLibraryManager_GrantPhotoUriPermission_test_003
934 * @tc.name : grant audio type for uri permissions
935 * @tc.desc : check database grant results whether match
936 */
937 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_GrantPhotoUriPermission_test_003, TestSize.Level0)
938 {
939 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_003 enter");
940 string appid = "granttest3";
941 vector<string> uris;
942 vector<string> inColumn;
943 for (int i = 0; i < 5; i++) {
944 string struri = CreateFile(MEDIALIBRARY_AUDIO_URI, "Audios/", "Test" + to_string(audioIndex++) + ".mp3",
945 MEDIA_TYPE_AUDIO, FILE_CONTENT_MP3);
946 inColumn.push_back(MediaFileUtils::GetIdFromUri(struri));
947 uris.push_back(struri);
948 }
949 auto permissionType = PhotoPermissionType::TEMPORARY_WRITE_IMAGEVIDEO;
950 auto SensitiveType = HideSensitiveType::GEOGRAPHIC_LOCATION_DESENSITIZE;
951 mediaLibraryManager->GrantPhotoUriPermission(appid, uris, permissionType, SensitiveType);
952 std::shared_ptr<OHOS::DataShare::DataShareResultSet> queryAudioResult;
953 QueryUriPermissionResult(appid, inColumn, TYPE_AUDIOS, queryAudioResult);
954 ASSERT_NE(queryAudioResult->GoToFirstRow(), E_OK);
955 do {
956 int32_t permissionType = GetInt32Val(AppUriPermissionColumn::PERMISSION_TYPE, queryAudioResult);
957 EXPECT_NE(permissionType, static_cast<int32_t>(PhotoPermissionType::TEMPORARY_WRITE_IMAGEVIDEO));
958 } while (!queryAudioResult->GoToNextRow());
959
960 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_003 exit");
961 }
962
963 /**
964 * @tc.number : MediaLibraryManager_GrantPhotoUriPermission_test_004
965 * @tc.name : grant photo 、vidio and audio type mixed uris of permissions
966 * @tc.desc : check database grant results whether match
967 */
968 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_GrantPhotoUriPermission_test_004, TestSize.Level0)
969 {
970 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_004 enter");
971 string appid = "granttest4";
972 vector<string> photoUris;
973 vector<string> vedioUris;
974 vector<string> audioUris;
975 vector<string> photoInColumn;
976 vector<string> vedioInColumn;
977 vector<string> audioInColumn;
978 for (int i = 0; i < 5; i++) {
979 auto photoUri = CreatePhotoAsset("test.jpg");
980 auto vedioUri = CreatePhotoAsset("test.mp4");
981 string audioUri = CreateFile(MEDIALIBRARY_AUDIO_URI, "Audios/", "Test" + to_string(audioIndex++) + ".mp3",
982 MEDIA_TYPE_AUDIO, FILE_CONTENT_MP3);
983 photoUris.push_back(photoUri);
984 vedioUris.push_back(vedioUri);
985 audioUris.push_back(audioUri);
986 photoInColumn.push_back(MediaFileUtils::GetIdFromUri(photoUri));
987 vedioInColumn.push_back(MediaFileUtils::GetIdFromUri(vedioUri));
988 audioInColumn.push_back(MediaFileUtils::GetIdFromUri(audioUri));
989 }
990 auto permissionType = PhotoPermissionType::TEMPORARY_READ_IMAGEVIDEO;
991 mediaLibraryManager->GrantPhotoUriPermission(appid, photoUris, permissionType, HideSensitiveType::NO_DESENSITIZE);
992 permissionType = PhotoPermissionType::TEMPORARY_WRITE_IMAGEVIDEO;
993 mediaLibraryManager->GrantPhotoUriPermission(appid, vedioUris, permissionType, HideSensitiveType::NO_DESENSITIZE);
994 permissionType = PhotoPermissionType::TEMPORARY_READWRITE_IMAGEVIDEO;
995 mediaLibraryManager->GrantPhotoUriPermission(appid, audioUris, permissionType, HideSensitiveType::NO_DESENSITIZE);
996 std::shared_ptr<OHOS::DataShare::DataShareResultSet> queryPhotoResult;
997 std::shared_ptr<OHOS::DataShare::DataShareResultSet> queryVedioResult;
998 std::shared_ptr<OHOS::DataShare::DataShareResultSet> queryAudioResult;
999 QueryUriPermissionResult(appid, photoInColumn, TYPE_PHOTOS, queryPhotoResult);
1000 QueryUriPermissionResult(appid, vedioInColumn, TYPE_PHOTOS, queryVedioResult);
1001 QueryUriPermissionResult(appid, audioInColumn, TYPE_AUDIOS, queryAudioResult);
1002 ASSERT_NE(queryPhotoResult->GoToFirstRow(), E_OK);
1003 ASSERT_NE(queryVedioResult->GoToFirstRow(), E_OK);
1004 do {
1005 int32_t permissionType = GetInt32Val(AppUriPermissionColumn::PERMISSION_TYPE, queryPhotoResult);
1006 EXPECT_EQ(permissionType, static_cast<int32_t>(PhotoPermissionType::TEMPORARY_READ_IMAGEVIDEO));
1007 } while (!queryPhotoResult->GoToNextRow());
1008 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_004 exit");
1009 }
1010
1011 /**
1012 * @tc.number : MediaLibraryManager_GrantPhotoUriPermission_test_005
1013 * @tc.name : same type but different uri grant different permissions
1014 * @tc.desc : check database grant results whether match
1015 */
1016 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_GrantPhotoUriPermission_test_005, TestSize.Level0)
1017 {
1018 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_005 enter");
1019 string appid = "granttest5";
1020 vector<string> uris;
1021 vector<string> uris1;
1022 vector<string> uris2;
1023 vector<string> uris3;
1024 vector<string> uris4;
1025 vector<string> inColumn;
1026 vector<int32_t> expectResult;
1027 for (int i = 0; i < 20; i++) {
1028 auto uriStr = CreatePhotoAsset("test.jpg");
1029 inColumn.push_back(MediaFileUtils::GetIdFromUri(uriStr));
1030 uris.push_back(uriStr);
1031 }
1032 uris1.assign(uris.begin(), uris.begin()+5);
1033 uris2.assign(uris.begin()+5, uris.begin()+10);
1034 uris3.assign(uris.begin()+10, uris.begin()+15);
1035 uris4.assign(uris.begin()+15, uris.begin()+20);
1036 auto SensitiveType = HideSensitiveType::GEOGRAPHIC_LOCATION_DESENSITIZE;
1037 auto permissionType = PhotoPermissionType::TEMPORARY_READ_IMAGEVIDEO;
1038 mediaLibraryManager->GrantPhotoUriPermission(appid, uris1, permissionType, SensitiveType);
1039 expectResult.insert(expectResult.begin(), 5, 0);
1040
1041 permissionType = PhotoPermissionType::TEMPORARY_WRITE_IMAGEVIDEO;
1042 mediaLibraryManager->GrantPhotoUriPermission(appid, uris2, permissionType, SensitiveType);
1043 expectResult.insert(expectResult.end(), 5, 2);
1044
1045 permissionType = PhotoPermissionType::TEMPORARY_READWRITE_IMAGEVIDEO;
1046 mediaLibraryManager->GrantPhotoUriPermission(appid, uris4, permissionType, SensitiveType);
1047 expectResult.insert(expectResult.end(), 5, 3);
1048
1049 vector<int32_t>::iterator it = expectResult.begin();
1050 std::shared_ptr<OHOS::DataShare::DataShareResultSet> queryPhotoResult;
1051 QueryUriPermissionResult(appid, inColumn, TYPE_PHOTOS, queryPhotoResult);
1052 ASSERT_NE(queryPhotoResult->GoToFirstRow(), E_OK);
1053 do {
1054 int32_t permissionType = GetInt32Val(AppUriPermissionColumn::PERMISSION_TYPE, queryPhotoResult);
1055 EXPECT_EQ(*it++, permissionType);
1056 } while (!queryPhotoResult->GoToNextRow());
1057 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_005 exit");
1058 }
1059
1060 /**
1061 * @tc.number : MediaLibraryManager_GrantPhotoUriPermission_test_006
1062 * @tc.name : same type but different uri grant random permissions
1063 * @tc.desc : check database grant results whether match
1064 */
1065 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_GrantPhotoUriPermission_test_006, TestSize.Level0)
1066 {
1067 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_006 enter");
1068 string appid = "granttest6";
1069 vector<string> uris;
1070 vector<string> inColumn;
1071 vector<int32_t> expectResult;
1072 auto permissionType = PhotoPermissionType::TEMPORARY_READ_IMAGEVIDEO;
1073 auto SensitiveType = HideSensitiveType::GEOGRAPHIC_LOCATION_DESENSITIZE;
1074 for (int i = 0; i < 20; i++) {
1075 auto uri = CreatePhotoAsset("test.jpg");
1076 inColumn.push_back(MediaFileUtils::GetIdFromUri(uri));
1077 vector<string> Tempuris{uri};
1078 uris.push_back(uri);
1079 permissionType = GetRandomTemporaryPermission();
1080 expectResult.push_back(static_cast<int32_t>(permissionType));
1081 mediaLibraryManager->GrantPhotoUriPermission(appid, Tempuris, permissionType, SensitiveType);
1082 }
1083 std::shared_ptr<OHOS::DataShare::DataShareResultSet> queryPhotoResult;
1084 QueryUriPermissionResult(appid, inColumn, TYPE_PHOTOS, queryPhotoResult);
1085 vector<int32_t>::iterator it = expectResult.begin();
1086 ASSERT_NE(queryPhotoResult->GoToFirstRow(), E_OK);
1087 do {
1088 int32_t permissionType = GetInt32Val(AppUriPermissionColumn::PERMISSION_TYPE, queryPhotoResult);
1089 EXPECT_NE(*it++, permissionType);
1090 } while (!queryPhotoResult->GoToNextRow());
1091 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_006 exit");
1092 }
1093
1094 /**
1095 * @tc.number : MediaLibraryManager_GrantPhotoUriPermission_test_007
1096 * @tc.name : grand file type do not match
1097 * @tc.desc : check error result
1098 */
1099 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_GrantPhotoUriPermission_test_007, TestSize.Level0)
1100 {
1101 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_007 enter");
1102 string appid = "granttest7";
1103 vector<string> uris;
1104 for (int i = 0; i < 5; i++) {
1105 auto uri = CreateFile(MEDIALIBRARY_FILE_URI, "Docs/Documents/", "Test" + to_string(txtIndex++) + ".txt",
1106 MEDIA_TYPE_FILE, FILE_CONTENT_TXT);
1107 uris.push_back(uri);
1108 }
1109 auto permissionType = PhotoPermissionType::TEMPORARY_READ_IMAGEVIDEO;
1110 auto SensitiveType = HideSensitiveType::GEOGRAPHIC_LOCATION_DESENSITIZE;
1111 auto ret = mediaLibraryManager->GrantPhotoUriPermission(appid, uris, permissionType, SensitiveType);
1112 ASSERT_EQ(ret, E_ERR);
1113 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_007 exit");
1114 }
1115
1116 /**
1117 * @tc.number : MediaLibraryManager_GrantPhotoUriPermission_test_008
1118 * @tc.name : uri number are over size
1119 * @tc.desc : check error result
1120 */
1121 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_GrantPhotoUriPermission_test_008, TestSize.Level0)
1122 {
1123 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_008 enter");
1124 string appid = "granttest8";
1125 vector<string> uris;
1126 uris.resize(1001);
1127 auto permissionType = PhotoPermissionType::TEMPORARY_READ_IMAGEVIDEO;
1128 auto SensitiveType = HideSensitiveType::GEOGRAPHIC_LOCATION_DESENSITIZE;
1129 auto ret = mediaLibraryManager->GrantPhotoUriPermission(appid, uris, permissionType, SensitiveType);
1130 ASSERT_EQ(ret, E_ERR);
1131 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_008 exit");
1132 }
1133
1134 /**
1135 * @tc.number : MediaLibraryManager_GrantPhotoUriPermission_test_009
1136 * @tc.name : All uris are grant permission and then grant other permissions
1137 * @tc.desc : check database grant results whether match
1138 */
1139 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_GrantPhotoUriPermission_test_009, TestSize.Level0)
1140 {
1141 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_009 enter");
1142 string appid = "granttest9";
1143 vector<string> uris;
1144 vector<string> uris1;
1145 vector<string> uris2;
1146 vector<string> uris3;
1147 vector<string> uris4;
1148 vector<string> inColumn;
1149 vector<int32_t> expectResult;
1150 for (int i = 0; i < 20; i++) {
1151 auto uriStr = CreatePhotoAsset("test.jpg");
1152 uris.push_back(uriStr);
1153 inColumn.push_back(MediaFileUtils::GetIdFromUri(uriStr));
1154 }
1155 uris1.assign(uris.begin(), uris.begin()+5);
1156 uris2.assign(uris.begin()+5, uris.begin()+10);
1157 uris3.assign(uris.begin()+10, uris.begin()+15);
1158 uris4.assign(uris.begin()+15, uris.begin()+20);
1159 auto permissionType = PhotoPermissionType::TEMPORARY_READ_IMAGEVIDEO;
1160 auto SensitiveType = HideSensitiveType::GEOGRAPHIC_LOCATION_DESENSITIZE;
1161 mediaLibraryManager->GrantPhotoUriPermission(appid, uris, permissionType, SensitiveType);
1162
1163 permissionType = PhotoPermissionType::TEMPORARY_READ_IMAGEVIDEO;
1164 mediaLibraryManager->GrantPhotoUriPermission(appid, uris1, permissionType, SensitiveType);
1165 expectResult.insert(expectResult.begin(), 5, 0);
1166 permissionType = PhotoPermissionType::TEMPORARY_WRITE_IMAGEVIDEO;
1167 mediaLibraryManager->GrantPhotoUriPermission(appid, uris2, permissionType, SensitiveType);
1168 expectResult.insert(expectResult.end(), 5, 2);
1169 permissionType = PhotoPermissionType::TEMPORARY_READWRITE_IMAGEVIDEO;
1170 mediaLibraryManager->GrantPhotoUriPermission(appid, uris3, permissionType, SensitiveType);
1171 expectResult.insert(expectResult.end(), 5, 3);
1172 mediaLibraryManager->GrantPhotoUriPermission(appid, uris4, permissionType, SensitiveType);
1173 expectResult.insert(expectResult.end(), 5, 3);
1174
1175 vector<int32_t>::iterator it = expectResult.begin();
1176 std::shared_ptr<OHOS::DataShare::DataShareResultSet> queryPhotoResult;
1177 QueryUriPermissionResult(appid, inColumn, TYPE_PHOTOS, queryPhotoResult);
1178 ASSERT_NE(queryPhotoResult->GoToFirstRow(), E_OK);
1179 do {
1180 int32_t permissionType = GetInt32Val(AppUriPermissionColumn::PERMISSION_TYPE, queryPhotoResult);
1181 EXPECT_EQ(*it++, permissionType);
1182 } while (!queryPhotoResult->GoToNextRow());
1183 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_009 exit");
1184 }
1185
1186 /**
1187 * @tc.number : MediaLibraryManager_GrantPhotoUriPermission_test_010
1188 * @tc.name : All uris are grant rand permission and then grant a same permission type
1189 * @tc.desc : check database grant results whether match
1190 */
1191 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_GrantPhotoUriPermission_test_010, TestSize.Level0)
1192 {
1193 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_010 enter");
1194 string appid = "granttest10";
1195 vector<string> uris;
1196 vector<string> inColumn;
1197 auto permissionType = PhotoPermissionType::TEMPORARY_READ_IMAGEVIDEO;
1198 auto SensitiveType = HideSensitiveType::GEOGRAPHIC_LOCATION_DESENSITIZE;
1199 for (int i = 0; i < 20; i++) {
1200 auto uri = CreatePhotoAsset("test.jpg");
1201 string fileId = MediaFileUtils::GetIdFromUri(uri);
1202 inColumn.push_back(fileId);
1203 vector<string> Tempuris{uri};
1204 uris.push_back(uri);
1205 permissionType = GetRandomTemporaryPermission();
1206 mediaLibraryManager->GrantPhotoUriPermission(appid, Tempuris, permissionType, SensitiveType);
1207 }
1208 permissionType = PhotoPermissionType::TEMPORARY_WRITE_IMAGEVIDEO;
1209 mediaLibraryManager->GrantPhotoUriPermission(appid, uris, permissionType, SensitiveType);
1210 std::shared_ptr<OHOS::DataShare::DataShareResultSet> queryPhotoResult;
1211 QueryUriPermissionResult(appid, inColumn, TYPE_PHOTOS, queryPhotoResult);
1212 ASSERT_NE(queryPhotoResult->GoToFirstRow(), E_OK);
1213 do {
1214 int32_t permissionType = GetInt32Val(AppUriPermissionColumn::PERMISSION_TYPE, queryPhotoResult);
1215 EXPECT_NE(permissionType, static_cast<int32_t>(PhotoPermissionType::TEMPORARY_WRITE_IMAGEVIDEO));
1216 } while (!queryPhotoResult->GoToNextRow());
1217 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_010 exit");
1218 }
1219
1220 /**
1221 * @tc.number : MediaLibraryManager_GrantPhotoUriPermission_test_011
1222 * @tc.name : grant uris serial times of permission
1223 * @tc.desc : check database grant results whether match
1224 */
1225 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_GrantPhotoUriPermission_test_011, TestSize.Level0)
1226 {
1227 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_011 enter");
1228 string appid = "granttest11";
1229 vector<string> uris;
1230 vector<string> inColumn;
1231 for (int i = 0; i < 10; i++) {
1232 string uri = CreateOwnerPrivliegeAssets(appid);
1233 uris.push_back(uri);
1234 inColumn.push_back(MediaFileUtils::GetIdFromUri(uri));
1235 }
1236 auto permissionType = PhotoPermissionType::TEMPORARY_READ_IMAGEVIDEO;
1237 auto SensitiveType = HideSensitiveType::GEOGRAPHIC_LOCATION_DESENSITIZE;
1238 mediaLibraryManager->GrantPhotoUriPermission(appid, uris, permissionType, SensitiveType);
1239 permissionType = PhotoPermissionType::PERSIST_READ_IMAGEVIDEO;
1240 mediaLibraryManager->GrantPhotoUriPermission(appid, uris, permissionType, SensitiveType);
1241 permissionType = PhotoPermissionType::TEMPORARY_WRITE_IMAGEVIDEO;
1242 mediaLibraryManager->GrantPhotoUriPermission(appid, uris, permissionType, SensitiveType);
1243 permissionType = PhotoPermissionType::TEMPORARY_READWRITE_IMAGEVIDEO;
1244 mediaLibraryManager->GrantPhotoUriPermission(appid, uris, permissionType, SensitiveType);
1245
1246 std::shared_ptr<OHOS::DataShare::DataShareResultSet> queryPhotoResult;
1247 QueryUriPermissionResult(appid, inColumn, TYPE_PHOTOS, queryPhotoResult);
1248 ASSERT_NE(queryPhotoResult->GoToFirstRow(), E_OK);
1249 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_011 exit");
1250 }
1251
1252 /**
1253 * @tc.number : MediaLibraryManager_GrantPhotoUriPermission_test_012
1254 * @tc.name : uris are mix with all grant permissions
1255 * @tc.desc : check database grant results whether match
1256 */
1257 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_GrantPhotoUriPermission_test_012, TestSize.Level0)
1258 {
1259 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_012 enter");
1260 string appid = "granttest12";
1261 vector<string> uris;
1262 vector<string> photosInColumn;
1263 vector<string> previliegeInColumn;
1264 auto permissionType = PhotoPermissionType::TEMPORARY_WRITE_IMAGEVIDEO;
1265 auto SensitiveType = HideSensitiveType::GEOGRAPHIC_LOCATION_DESENSITIZE;
1266 for (int i = 0; i < 10; i++) {
1267 string previlegeUri = CreateOwnerPrivliegeAssets(appid);
1268 auto photouri = CreatePhotoAsset("test.jpg");
1269 uris.push_back(previlegeUri);
1270 uris.push_back(photouri);
1271 previliegeInColumn.push_back(MediaFileUtils::GetIdFromUri(previlegeUri));
1272 photosInColumn.push_back(MediaFileUtils::GetIdFromUri(photouri));
1273 vector<string> Tempuris{photouri};
1274 permissionType = GetRandomTemporaryPermission();
1275 mediaLibraryManager->GrantPhotoUriPermission(appid, Tempuris, permissionType, SensitiveType);
1276 }
1277 permissionType = PhotoPermissionType::TEMPORARY_WRITE_IMAGEVIDEO;
1278 mediaLibraryManager->GrantPhotoUriPermission(appid, uris, permissionType, SensitiveType);
1279 std::shared_ptr<OHOS::DataShare::DataShareResultSet> queryPhotoResult;
1280 std::shared_ptr<OHOS::DataShare::DataShareResultSet> queryPreviliegeResult;
1281 QueryUriPermissionResult(appid, photosInColumn, TYPE_PHOTOS, queryPhotoResult);
1282 QueryUriPermissionResult(appid, previliegeInColumn, TYPE_PHOTOS, queryPreviliegeResult);
1283 ASSERT_NE(queryPhotoResult->GoToFirstRow(), E_OK);
1284 ASSERT_NE(queryPreviliegeResult->GoToFirstRow(), E_OK);
1285 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_012 exit");
1286 }
1287
1288 /**
1289 * @tc.number : MediaLibraryManager_GrantPhotoUriPermission_test_013
1290 * @tc.name : permissionType error
1291 * @tc.desc : check error result
1292 */
1293 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_GrantPhotoUriPermission_test_013, TestSize.Level0)
1294 {
1295 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_013 enter");
1296 string appid = "granttest13";
1297 vector<string> uris;
1298 for (int i = 0; i < 5; i++) {
1299 string uri = CreateOwnerPrivliegeAssets(appid);
1300 uris.push_back(uri);
1301 }
1302 auto permissionType = PhotoPermissionType::PERSIST_READ_IMAGEVIDEO;
1303 auto SensitiveType = HideSensitiveType::GEOGRAPHIC_LOCATION_DESENSITIZE;
1304 auto ret = mediaLibraryManager->GrantPhotoUriPermission(appid, uris, permissionType, SensitiveType);
1305 ASSERT_EQ(ret, E_ERR);
1306 permissionType = static_cast<PhotoPermissionType>(4);
1307 ret = mediaLibraryManager->GrantPhotoUriPermission(appid, uris, permissionType, SensitiveType);
1308 ASSERT_EQ(ret, E_ERR);
1309 permissionType = PhotoPermissionType::TEMPORARY_READ_IMAGEVIDEO;
1310 ret = mediaLibraryManager->GrantPhotoUriPermission(appid, uris, permissionType, SensitiveType);
1311 ASSERT_EQ(ret, E_SUCCESS);
1312 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_013 exit");
1313 }
1314
1315 /**
1316 * @tc.number : MediaLibraryManager_GrantPhotoUriPermission_test_014
1317 * @tc.name : HideSensitiveType Error
1318 * @tc.desc : check error result
1319 */
1320 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_GrantPhotoUriPermission_test_014, TestSize.Level0)
1321 {
1322 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_014 enter");
1323 string appid = "granttest14";
1324 vector<string> uris;
1325 for (int i = 0; i < 5; i++) {
1326 string uri = CreateOwnerPrivliegeAssets(appid);
1327 uris.push_back(uri);
1328 }
1329 auto permissionType = PhotoPermissionType::TEMPORARY_READ_IMAGEVIDEO;
1330 auto SensitiveType = static_cast<HideSensitiveType>(-1);
1331 auto ret = mediaLibraryManager->GrantPhotoUriPermission(appid, uris, permissionType, SensitiveType);
1332 ASSERT_EQ(ret, E_ERR);
1333 SensitiveType = static_cast<HideSensitiveType>(4);
1334 ret = mediaLibraryManager->GrantPhotoUriPermission(appid, uris, permissionType, SensitiveType);
1335 ASSERT_EQ(ret, E_ERR);
1336 SensitiveType = HideSensitiveType::ALL_DESENSITIZE;
1337 ret = mediaLibraryManager->GrantPhotoUriPermission(appid, uris, permissionType, SensitiveType);
1338 ASSERT_EQ(ret, E_SUCCESS);
1339 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_014 exit");
1340 }
1341
1342 /**
1343 * @tc.number : MediaLibraryManager_GrantPhotoUriPermission_test_015
1344 * @tc.name : Filter not exist photo uri
1345 * @tc.desc : check database grant results whether match
1346 */
1347 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_GrantPhotoUriPermission_test_015, TestSize.Level0)
1348 {
1349 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_015 enter");
1350 string appid = "granttest15";
1351 vector<string> Uris;
1352 vector<string> inColumn;
1353 for (int i = 0; i < 10; i++) {
1354 string photosUri = CreatePhotoAsset("test.jpg");
1355 string existUri = CreatePhotoAsset("test2.jpg");
1356 DeletAssetInDb(photosUri, TYPE_PHOTOS);
1357 Uris.push_back(photosUri);
1358 Uris.push_back(existUri);
1359 inColumn.push_back(MediaFileUtils::GetIdFromUri(photosUri));
1360 inColumn.push_back(MediaFileUtils::GetIdFromUri(existUri));
1361 }
1362 auto permissionType = PhotoPermissionType::TEMPORARY_WRITE_IMAGEVIDEO;
1363 auto SensitiveType = HideSensitiveType::ALL_DESENSITIZE;
1364 mediaLibraryManager->GrantPhotoUriPermission(appid, Uris, permissionType, SensitiveType);
1365
1366 std::shared_ptr<OHOS::DataShare::DataShareResultSet> queryResult;
1367 QueryUriPermissionResult(appid, inColumn, TYPE_PHOTOS, queryResult);
1368 ASSERT_NE(queryResult->GoToFirstRow(), E_OK);
1369 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_015 exit");
1370 }
1371
1372 /**
1373 * @tc.number : MediaLibraryManager_GrantPhotoUriPermission_test_016
1374 * @tc.name : Filter not exist audio uri
1375 * @tc.desc : check database grant results whether match
1376 */
1377 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_GrantPhotoUriPermission_test_016, TestSize.Level0)
1378 {
1379 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_016 enter");
1380 string appid = "granttest16";
1381 vector<string> Uris;
1382 vector<string> inColumn;
1383 for (int i = 0; i < 10; i++) {
1384 string audiosUri = CreateFile(MEDIALIBRARY_AUDIO_URI, "Audios/", "Test" + to_string(audioIndex++) + ".mp3",
1385 MEDIA_TYPE_AUDIO, FILE_CONTENT_MP3);
1386 string audiosExistUri = CreateFile(MEDIALIBRARY_AUDIO_URI, "Audios/", "Test" + to_string(audioIndex++) + ".mp3",
1387 MEDIA_TYPE_AUDIO, FILE_CONTENT_MP3);
1388 DeletAssetInDb(audiosUri, TYPE_AUDIOS);
1389 Uris.push_back(audiosExistUri);
1390 Uris.push_back(audiosUri);
1391 inColumn.push_back(MediaFileUtils::GetIdFromUri(audiosUri));
1392 inColumn.push_back(MediaFileUtils::GetIdFromUri(audiosExistUri));
1393 }
1394 auto permissionType = PhotoPermissionType::TEMPORARY_READ_IMAGEVIDEO;
1395 auto SensitiveType = HideSensitiveType::ALL_DESENSITIZE;
1396 mediaLibraryManager->GrantPhotoUriPermission(appid, Uris, permissionType, SensitiveType);
1397
1398 std::shared_ptr<OHOS::DataShare::DataShareResultSet> queryResult;
1399 QueryUriPermissionResult(appid, inColumn, TYPE_AUDIOS, queryResult);
1400 ASSERT_NE(queryResult->GoToFirstRow(), E_OK);
1401 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_016 exit");
1402 }
1403
1404 /**
1405 * @tc.number : MediaLibraryManager_GrantPhotoUriPermission_test_017
1406 * @tc.name : Max uri number
1407 * @tc.desc : check database grant results whether match
1408 */
1409 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_GrantPhotoUriPermission_test_017, TestSize.Level0)
1410 {
1411 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_017 enter");
1412 string appid = "granttest17";
1413 vector<string> errorUris;
1414 vector<string> inColumn;
1415 int32_t resultCount = 0;
1416 string uri = CreatePhotoAsset("test.jpg");
1417 inColumn.push_back(MediaFileUtils::GetIdFromUri(uri));
1418 for (int i = 0; i < 1000; i++) {
1419 errorUris.push_back(uri);
1420 }
1421 auto permissionType = PhotoPermissionType::TEMPORARY_READ_IMAGEVIDEO;
1422 auto SensitiveType = HideSensitiveType::ALL_DESENSITIZE;
1423 auto ret = mediaLibraryManager->GrantPhotoUriPermission(appid, errorUris, permissionType, SensitiveType);
1424 ASSERT_EQ(ret, E_SUCCESS);
1425 std::shared_ptr<OHOS::DataShare::DataShareResultSet> queryResult;
1426 QueryUriPermissionResult(appid, inColumn, TYPE_PHOTOS, queryResult);
1427 ASSERT_NE(queryResult->GoToFirstRow(), E_OK);
1428 do {
1429 int32_t permissionType = GetInt32Val(AppUriPermissionColumn::PERMISSION_TYPE, queryResult);
1430 EXPECT_EQ(permissionType, static_cast<int32_t>(PhotoPermissionType::TEMPORARY_READ_IMAGEVIDEO));
1431 resultCount++;
1432 } while (!queryResult->GoToNextRow());
1433 ASSERT_EQ(resultCount, 1);
1434 MEDIA_INFO_LOG("MediaLibraryManager_GrantPhotoUriPermission_test_017 exit");
1435 }
1436
1437 /**
1438 * @tc.number : MediaLibraryManager_CheckPhotoUriPermission_test_001
1439 * @tc.name : Check only read system permission uri permission results
1440 * @tc.desc : Grant system read permission to see CheckPhotoUriPermission results
1441 */
1442 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_CheckPhotoUriPermission_test_001, TestSize.Level0)
1443 {
1444 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_001 enter");
1445 string appid = "checktest1";
1446 vector<string> uris;
1447 vector<bool> resultSet;
1448 for (int i = 0; i < 10; i++) {
1449 auto uri = CreatePhotoAsset("test.jpg");
1450 uris.push_back(uri);
1451 }
1452 vector<string> perms;
1453 uint64_t tokenId = 0;
1454 perms.push_back("ohos.permission.READ_MEDIA");
1455 perms.push_back("ohos.permission.READ_IMAGEVIDEO");
1456 PermissionUtilsUnitTest::SetAccessTokenPermission("MediaLibraryManagerTest", perms, tokenId);
1457 ASSERT_TRUE(tokenId != 0);
1458
1459 int32_t permissionFlag = 1;
1460 auto ret = mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1461 EXPECT_EQ(ret, E_SUCCESS);
1462 for (const auto res : resultSet) {
1463 EXPECT_EQ(res, true);
1464 }
1465 permissionFlag = 2;
1466 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1467 for (const auto res : resultSet) {
1468 EXPECT_EQ(res, false);
1469 }
1470 permissionFlag = 3;
1471 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1472 for (const auto res : resultSet) {
1473 EXPECT_EQ(res, false);
1474 }
1475 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_001 exit");
1476 }
1477
1478 /**
1479 * @tc.number : MediaLibraryManager_CheckPhotoUriPermission_test_002
1480 * @tc.name : Check has read and wirte system permission uri permission results
1481 * @tc.desc : Grant system read and write permission to see CheckPhotoUriPermission results
1482 */
1483 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_CheckPhotoUriPermission_test_002, TestSize.Level0)
1484 {
1485 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_002 enter");
1486 string appid = "checktest2";
1487 vector<string> uris;
1488 vector<bool> resultSet;
1489 for (int i = 0; i < 10; i++) {
1490 auto uri = CreatePhotoAsset("test.jpg");
1491 uris.push_back(uri);
1492 }
1493 vector<string> perms;
1494 uint64_t tokenId = 0;
1495 perms.push_back("ohos.permission.READ_MEDIA");
1496 perms.push_back("ohos.permission.READ_IMAGEVIDEO");
1497 perms.push_back("ohos.permission.WRITE_IMAGEVIDEO");
1498 PermissionUtilsUnitTest::SetAccessTokenPermission("MediaLibraryManagerTest", perms, tokenId);
1499 ASSERT_TRUE(tokenId != 0);
1500
1501 uint32_t permissionFlag = 1;
1502 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1503 for (const auto res : resultSet) {
1504 EXPECT_EQ(res, true);
1505 }
1506 permissionFlag = 2;
1507 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1508 for (const auto res : resultSet) {
1509 EXPECT_EQ(res, true);
1510 }
1511 permissionFlag = 3;
1512 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1513 for (const auto res : resultSet) {
1514 EXPECT_EQ(res, true);
1515 }
1516 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_002 exit");
1517 }
1518 /**
1519 * @tc.number : MediaLibraryManager_CheckPhotoUriPermission_test_003
1520 * @tc.name : Check no system permission uri permission results
1521 * @tc.desc : No system permission and see CheckPhotoUriPermission check results
1522 */
1523 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_CheckPhotoUriPermission_test_003, TestSize.Level0)
1524 {
1525 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_003 enter");
1526 vector<string> perms;
1527 uint64_t tokenId = 0;
1528 string appid = "checktest3";
1529 vector<string> uris;
1530 vector<bool> resultSet;
1531 for (int i = 0; i < 10; i++) {
1532 auto uriStr = CreatePhotoAsset("test.jpg");
1533 uris.push_back(uriStr);
1534 }
1535 uint32_t permissionFlag = 1;
1536 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1537 for (const auto res : resultSet) {
1538 EXPECT_EQ(res, false);
1539 }
1540 permissionFlag = 2;
1541 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1542 for (const auto res : resultSet) {
1543 EXPECT_EQ(res, false);
1544 }
1545 permissionFlag = 3;
1546 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1547 for (const auto res : resultSet) {
1548 EXPECT_EQ(res, false);
1549 }
1550 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_003 exit");
1551 }
1552
1553 /**
1554 * @tc.number : MediaLibraryManager_CheckPhotoUriPermission_test_004
1555 * @tc.name : Grant Audio system read permission
1556 * @tc.desc : Check uri permission results when has Audio system read permission
1557 */
1558 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_CheckPhotoUriPermission_test_004, TestSize.Level0)
1559 {
1560 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_004 enter");
1561 vector<string> uris;
1562 string appid = "checktest4";
1563 vector<bool> resultSet;
1564 for (int i = 0; i < 10; i++) {
1565 string uri = CreateFile(MEDIALIBRARY_AUDIO_URI, "Audios/", "Test" + to_string(audioIndex++) + ".mp3",
1566 MEDIA_TYPE_AUDIO, FILE_CONTENT_MP3);
1567 uris.push_back(uri);
1568 }
1569 uint64_t tokenId = 0;
1570 vector<string> perms;
1571 perms.push_back("ohos.permission.READ_MEDIA");
1572 perms.push_back("ohos.permission.READ_IMAGEVIDEO");
1573 perms.push_back("ohos.permission.WRITE_IMAGEVIDEO");
1574 perms.push_back("ohos.permission.READ_AUDIO");
1575 PermissionUtilsUnitTest::SetAccessTokenPermission("MediaLibraryManagerTest", perms, tokenId);
1576 ASSERT_TRUE(tokenId != 0);
1577
1578 uint32_t permissionFlag = 1;
1579 auto ret = mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1580 EXPECT_EQ(ret, E_SUCCESS);
1581 for (const auto res : resultSet) {
1582 EXPECT_EQ(res, true);
1583 }
1584 permissionFlag = 2;
1585 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1586 for (const auto res : resultSet) {
1587 EXPECT_EQ(res, false);
1588 }
1589 permissionFlag = 3;
1590 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1591 for (const auto res : resultSet) {
1592 EXPECT_EQ(res, false);
1593 }
1594 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_004 exit");
1595 }
1596
1597 /**
1598 * @tc.number : MediaLibraryManager_CheckPhotoUriPermission_test_005
1599 * @tc.name : Grant Audio system write permission
1600 * @tc.desc : Check uri permission results when has Audio system wirte permission
1601 */
1602 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_CheckPhotoUriPermission_test_005, TestSize.Level0)
1603 {
1604 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_005 enter");
1605 vector<string> uris;
1606 string appid = "checktest5";
1607 vector<bool> resultSet;
1608 for (int i = 0; i < 10; i++) {
1609 string uri = CreateFile(MEDIALIBRARY_AUDIO_URI, "Audios/", "Test" + to_string(audioIndex++) + ".mp3",
1610 MEDIA_TYPE_AUDIO, FILE_CONTENT_MP3);
1611 uris.push_back(uri);
1612 }
1613 uint64_t tokenId = 0;
1614 vector<string> perms;
1615 perms.push_back("ohos.permission.READ_MEDIA");
1616 perms.push_back("ohos.permission.READ_IMAGEVIDEO");
1617 perms.push_back("ohos.permission.WRITE_IMAGEVIDEO");
1618 perms.push_back("ohos.permission.WRITE_AUDIO");
1619 PermissionUtilsUnitTest::SetAccessTokenPermission("MediaLibraryManagerTest", perms, tokenId);
1620 ASSERT_TRUE(tokenId != 0);
1621
1622 uint32_t permissionFlag = 1;
1623 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1624 for (const auto res : resultSet) {
1625 EXPECT_EQ(res, true);
1626 }
1627 permissionFlag = 2;
1628 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1629 for (const auto res : resultSet) {
1630 EXPECT_EQ(res, true);
1631 }
1632 permissionFlag = 3;
1633 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1634 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_005 exit");
1635 }
1636
1637 /**
1638 * @tc.number : MediaLibraryManager_CheckPhotoUriPermission_test_006
1639 * @tc.name : Grant Audio system read and write permission
1640 * @tc.desc : Check uri permission results when has Audio system read and wirte permission
1641 */
1642 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_CheckPhotoUriPermission_test_006, TestSize.Level0)
1643 {
1644 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_006 enter");
1645 vector<string> uris;
1646 string appid = "checktest6";
1647 vector<bool> resultSet;
1648 for (int i = 0; i < 10; i++) {
1649 string uri = CreateFile(MEDIALIBRARY_AUDIO_URI, "Audios/", "Test" + to_string(audioIndex++) + ".mp3",
1650 MEDIA_TYPE_AUDIO, FILE_CONTENT_MP3);
1651 uris.push_back(uri);
1652 }
1653 uint64_t tokenId = 0;
1654 vector<string> perms;
1655 perms.push_back("ohos.permission.READ_MEDIA");
1656 perms.push_back("ohos.permission.READ_IMAGEVIDEO");
1657 perms.push_back("ohos.permission.WRITE_IMAGEVIDEO");
1658 perms.push_back("ohos.permission.READ_AUDIO");
1659 perms.push_back("ohos.permission.WRITE_AUDIO");
1660 PermissionUtilsUnitTest::SetAccessTokenPermission("MediaLibraryManagerTest", perms, tokenId);
1661 ASSERT_TRUE(tokenId != 0);
1662
1663 uint32_t permissionFlag = 1;
1664 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1665 for (const auto res : resultSet) {
1666 EXPECT_EQ(res, true);
1667 }
1668 permissionFlag = 2;
1669 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1670 for (const auto res : resultSet) {
1671 EXPECT_EQ(res, true);
1672 }
1673 permissionFlag = 3;
1674 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1675 for (const auto res : resultSet) {
1676 EXPECT_EQ(res, true);
1677 }
1678 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_006 exit");
1679 }
1680
1681 /**
1682 * @tc.number : MediaLibraryManager_CheckPhotoUriPermission_test_007
1683 * @tc.name : Has no system permissions but all uri have grant other permissions
1684 * @tc.desc : Check uri permissions results when all uri have grant other permissions
1685 */
1686 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_CheckPhotoUriPermission_test_007, TestSize.Level0)
1687 {
1688 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_007 enter");
1689 vector<string> perms;
1690 uint64_t tokenId = 0;
1691 string appid = "checktest7";
1692 vector<string> uris;
1693 vector<bool> resultSet;
1694 vector<bool> expectReadResult;
1695 vector<bool> expectWriteResult;
1696 vector<bool> expectReadWriteResult;
1697 auto permissionType = PhotoPermissionType::PERSIST_READ_IMAGEVIDEO;
1698 auto SensitiveType = HideSensitiveType::GEOGRAPHIC_LOCATION_DESENSITIZE;
1699 for (int i = 0; i < 20; i++) {
1700 string uri = CreatePhotoAsset("test.jpg");
1701 vector<string> Tempuris{uri};
1702 uris.push_back(uri);
1703 permissionType = GetRandomTemporaryPermission();
1704 if (static_cast<int32_t>(permissionType) == 0) {
1705 expectReadResult.push_back(true);
1706 expectWriteResult.push_back(false);
1707 expectReadWriteResult.push_back(false);
1708 } else if (static_cast<int32_t>(permissionType) == 2) {
1709 expectReadResult.push_back(true);
1710 expectWriteResult.push_back(true);
1711 expectReadWriteResult.push_back(false);
1712 } else {
1713 expectReadResult.push_back(true);
1714 expectWriteResult.push_back(true);
1715 expectReadWriteResult.push_back(true);
1716 }
1717 mediaLibraryManager->GrantPhotoUriPermission(appid, Tempuris, permissionType, SensitiveType);
1718 }
1719 uint32_t permissionFlag = 1;
1720 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1721 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_007 exit");
1722 }
1723
1724 /**
1725 * @tc.number : MediaLibraryManager_CheckPhotoUriPermission_test_008
1726 * @tc.name : Has no system permissions but part of uri have grant other permissions
1727 * @tc.desc : Check uri permissions results when part of have grant other permissions
1728 */
1729 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_CheckPhotoUriPermission_test_008, TestSize.Level0)
1730 {
1731 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_008 enter");
1732 vector<string> perms;
1733 string appid = "checktest8";
1734 vector<string> uris;
1735 vector<bool> resultSet;
1736 vector<vector<bool>> expectResult;
1737 expectResult.resize(3);
1738 auto permissionType = PhotoPermissionType::PERSIST_READ_IMAGEVIDEO;
1739 auto SensitiveType = HideSensitiveType::GEOGRAPHIC_LOCATION_DESENSITIZE;
1740 for (int i = 0; i < 10; i++) {
1741 auto uri = CreatePhotoAsset("test.jpg");
1742 vector<string> Tempuris{uri};
1743 uris.push_back(uri);
1744 permissionType = GetRandomTemporaryPermission();
1745 if (static_cast<int32_t>(permissionType) == 0) {
1746 expectResult[0].push_back(true);
1747 expectResult[1].push_back(false);
1748 expectResult[2].push_back(false);
1749 } else if (static_cast<int32_t>(permissionType) == 2) {
1750 expectResult[0].push_back(false);
1751 expectResult[1].push_back(true);
1752 expectResult[2].push_back(false);
1753 } else {
1754 expectResult[0].push_back(true);
1755 expectResult[1].push_back(true);
1756 expectResult[2].push_back(true);
1757 }
1758 mediaLibraryManager->GrantPhotoUriPermission(appid, Tempuris, permissionType, SensitiveType);
1759 }
1760 for (int i = 0; i < 5; i++) {
1761 uris.push_back(CreatePhotoAsset("test.jpg"));
1762 expectResult[0].push_back(false);
1763 expectResult[1].push_back(false);
1764 expectResult[2].push_back(false);
1765 }
1766 }
1767
1768 /**
1769 * @tc.number : MediaLibraryManager_CheckPhotoUriPermission_test_009
1770 * @tc.name : Has read system permissions and also uri have grant other permissions
1771 * @tc.desc : Check uri permissions results when has system read permission and other permission
1772 */
1773 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_CheckPhotoUriPermission_test_009, TestSize.Level0)
1774 {
1775 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_009 enter");
1776 string appid = "checktest9";
1777 vector<string> uris;
1778 vector<bool> resultSet;
1779 vector<bool> expectWriteResult;
1780 vector<bool> expectReadWriteResult;
1781 auto permissionType = PhotoPermissionType::PERSIST_READ_IMAGEVIDEO;
1782 auto SensitiveType = HideSensitiveType::GEOGRAPHIC_LOCATION_DESENSITIZE;
1783 for (int i = 0; i < 10; i++) {
1784 string uri = CreatePhotoAsset("test.jpg");
1785 vector<string> Tempuris{uri};
1786 uris.push_back(uri);
1787 permissionType = GetRandomTemporaryPermission();
1788 if (static_cast<int32_t>(permissionType) == 0) {
1789 expectWriteResult.push_back(true);
1790 expectReadWriteResult.push_back(false);
1791 } else if (static_cast<int32_t>(permissionType) == 2) {
1792 expectWriteResult.push_back(true);
1793 expectReadWriteResult.push_back(true);
1794 } else {
1795 expectWriteResult.push_back(true);
1796 expectReadWriteResult.push_back(true);
1797 }
1798 mediaLibraryManager->GrantPhotoUriPermission(appid, Tempuris, permissionType, SensitiveType);
1799 }
1800 uint64_t tokenId = 0;
1801 vector<string> perms;
1802 perms.push_back("ohos.permission.READ_MEDIA");
1803 perms.push_back("ohos.permission.READ_IMAGEVIDEO");
1804 PermissionUtilsUnitTest::SetAccessTokenPermission("MediaLibraryManagerTest", perms, tokenId);
1805 ASSERT_TRUE(tokenId != 0);
1806
1807 uint32_t permissionFlag = 1;
1808 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1809 for (int i = 0; i < resultSet.size(); i++) {
1810 EXPECT_EQ(resultSet[i], true);
1811 }
1812 permissionFlag = 2;
1813 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1814 permissionFlag = 3;
1815 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1816 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_009 exit");
1817 }
1818
1819
1820 /**
1821 * @tc.number : MediaLibraryManager_CheckPhotoUriPermission_test_010
1822 * @tc.name : Has read and write system permissions and also uri have grant other permissions
1823 * @tc.desc : Check uri permissions results when has system read and write permission and other permissions
1824 */
1825 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_CheckPhotoUriPermission_test_010, TestSize.Level0)
1826 {
1827 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_010 enter");
1828 string appid = "checktest10";
1829 vector<string> uris;
1830 vector<bool> resultSet;
1831 auto permissionType = PhotoPermissionType::PERSIST_READ_IMAGEVIDEO;
1832 auto SensitiveType = HideSensitiveType::GEOGRAPHIC_LOCATION_DESENSITIZE;
1833 for (int i = 0; i < 10; i++) {
1834 string uri = CreatePhotoAsset("test.jpg");
1835 vector<string> Tempuris{uri};
1836 uris.push_back(uri);
1837 permissionType = GetRandomTemporaryPermission();
1838 mediaLibraryManager->GrantPhotoUriPermission(appid, Tempuris, permissionType, SensitiveType);
1839 }
1840 uint64_t tokenId = 0;
1841 vector<string> perms;
1842 perms.push_back("ohos.permission.READ_MEDIA");
1843 perms.push_back("ohos.permission.READ_IMAGEVIDEO");
1844 perms.push_back("ohos.permission.WRITE_IMAGEVIDEO");
1845 PermissionUtilsUnitTest::SetAccessTokenPermission("MediaLibraryManagerTest", perms, tokenId);
1846 ASSERT_TRUE(tokenId != 0);
1847
1848 int32_t permissionFlag = 1;
1849 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1850 for (int i = 0; i < resultSet.size(); i++) {
1851 EXPECT_EQ(resultSet[i], true);
1852 }
1853 permissionFlag = 2;
1854 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1855 for (int i = 0; i < resultSet.size(); i++) {
1856 EXPECT_EQ(resultSet[i], true);
1857 }
1858 permissionFlag = 3;
1859 mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1860 for (int i = 0; i < resultSet.size(); i++) {
1861 EXPECT_EQ(resultSet[i], true);
1862 }
1863 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_0010 exit");
1864 }
1865
1866 /**
1867 * @tc.number : MediaLibraryManager_CheckPhotoUriPermission_test_011
1868 * @tc.name : uri numuber are oversize
1869 * @tc.desc : check error result
1870 */
1871 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_CheckPhotoUriPermission_test_011, TestSize.Level0)
1872 {
1873 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_011 enter");
1874 ASSERT_TRUE(tokenId != 0);
1875 tokenId = 0;
1876 vector<string> uris;
1877 string appid = "checktest11";
1878 vector<bool> resultSet;
1879 uint32_t permissionFlag = 1;
1880 uris.resize(1001);
1881 auto ret = mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1882 EXPECT_EQ(ret, E_ERR);
1883 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_011 exit");
1884 }
1885
1886 /**
1887 * @tc.number : MediaLibraryManager_CheckPhotoUriPermission_test_012
1888 * @tc.name : file type do not match
1889 * @tc.desc : check error result
1890 */
1891 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_CheckPhotoUriPermission_test_012, TestSize.Level0)
1892 {
1893 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_012 enter");
1894 ASSERT_TRUE(tokenId != 0);
1895 tokenId = 0;
1896 vector<string> uris;
1897 string appid = "checktest12";
1898 vector<bool> resultSet;
1899 uint32_t permissionFlag = 1;
1900 for (int i = 0; i < 5; i++) {
1901 string uri = CreateFile(MEDIALIBRARY_FILE_URI, "Docs/Documents/", "Test" + to_string(txtIndex++) + ".txt",
1902 MEDIA_TYPE_FILE, FILE_CONTENT_TXT);
1903 uris.push_back(uri);
1904 }
1905 auto ret = mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1906 EXPECT_EQ(ret, E_ERR);
1907 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_012 exit");
1908 }
1909
1910 /**
1911 * @tc.number : MediaLibraryManager_CheckPhotoUriPermission_test_013
1912 * @tc.name : file check flag do not match
1913 * @tc.desc : check error result
1914 */
1915 HWTEST_F(MediaLibraryManagerTest, MediaLibraryManager_CheckPhotoUriPermission_test_013, TestSize.Level0)
1916 {
1917 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_013 enter");
1918 ASSERT_TRUE(tokenId != 0);
1919 tokenId = 0;
1920 vector<string> uris;
1921 string appid = "checktest13";
1922 vector<bool> resultSet;
1923 auto permissionType = PhotoPermissionType::PERSIST_READ_IMAGEVIDEO;
1924 auto SensitiveType = HideSensitiveType::GEOGRAPHIC_LOCATION_DESENSITIZE;
1925 uint32_t permissionFlag = 0;
1926 for (int i = 0; i < 5; i++) {
1927 string uri = CreatePhotoAsset("test.jpg");
1928 vector<string> Tempuris{uri};
1929 uris.push_back(uri);
1930 permissionType = GetRandomTemporaryPermission();
1931 mediaLibraryManager->GrantPhotoUriPermission(appid, Tempuris, permissionType, SensitiveType);
1932 }
1933 auto ret = mediaLibraryManager->CheckPhotoUriPermission(tokenId, appid, uris, resultSet, permissionFlag);
1934 EXPECT_EQ(ret, E_ERR);
1935 MEDIA_INFO_LOG("MediaLibraryManager_CheckPhotoUriPermission_test_013 exit");
1936 }
1937 } // namespace Media
1938 } // namespace OHOS
1939