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 #define MLOG_TAG "BackupTest"
17 
18 #include "medialibrary_backup_test.h"
19 
20 #include <sys/stat.h>
21 #include <sys/types.h>
22 #include <utime.h>
23 
24 #define private public
25 #define protected public
26 #include "backup_const_column.h"
27 #include "backup_const_map.h"
28 #include "backup_database_utils.h"
29 #include "backup_file_utils.h"
30 #include "external_source.h"
31 #include "gallery_source.h"
32 #include "media_log.h"
33 #include "upgrade_restore.h"
34 #include "media_file_utils.h"
35 #include "parameters.h"
36 #include "cloud_sync_manager.h"
37 #include "medialibrary_errno.h"
38 #include "medialibrary_rdb_utils.h"
39 #include "medialibrary_unistore_manager.h"
40 #include "medialibrary_unittest_utils.h"
41 #include "vision_db_sqls.h"
42 #undef private
43 #undef protected
44 #include "mimetype_utils.h"
45 
46 using namespace std;
47 using namespace OHOS;
48 using namespace testing::ext;
49 using namespace OHOS::NativeRdb;
50 
51 namespace OHOS {
52 namespace Media {
53 const std::string TEST_BACKUP_PATH = "/data/test/backup/db";
54 const std::string TEST_UPGRADE_FILE_DIR = "/data/test/backup/file";
55 const std::string GALLERY_APP_NAME = "gallery";
56 const std::string MEDIA_APP_NAME = "external";
57 const std::string MEDIA_LIBRARY_APP_NAME = "medialibrary";
58 const std::string TEST_PATH_PREFIX = "/TestPrefix";
59 const std::string TEST_RELATIVE_PATH = "/Pictures/Test/test.jpg";
60 const std::string TEST_CLOUD_PATH_PREFIX = "/storage/cloud/files/Photo/1/";
61 
62 const int EXPECTED_NUM = 34;
63 const int EXPECTED_OREINTATION = 270;
64 const int TEST_LOCAL_MEDIA_ID = 12345;
65 const int TEST_PREFIX_LEVEL = 4;
66 const int TEST_SIZE_MIN = 1080;
67 const int TEST_SIZE_MAX = 2560;
68 const int TEST_SIZE_INCR_UNIT = 100;
69 const int TEST_SIZE_MULT_UNIT = 2;
70 const int TEST_PORTRAIT_ALBUM_COUNT = 2;
71 const int TEST_PORTRAIT_TAG_COUNT = 3;
72 const int TEST_PORTRAIT_PHOTO_COUNT = 3;
73 const int TEST_PORTRAIT_FACE_COUNT = 4;
74 const float TEST_SCALE_MIN = 0.2;
75 const float TEST_SCALE_MAX = 0.8;
76 const float TEST_LANDMARK_BELOW = 0.1;
77 const float TEST_LANDMARK_BETWEEN = 0.5;
78 const float TEST_LANDMARK_ABOVE = 0.9;
79 const std::string EXPECTED_PACKAGE_NAME = "wechat";
80 const std::string EXPECTED_USER_COMMENT = "user_comment";
81 const int64_t EXPECTED_DATE_ADDED = 1495970415378;
82 const int64_t EXPECTED_DATE_TAKEN = 1495970415379;
83 const std::string EXPECTED_DETAIL_TIME = "2024:09:06 17:00:01";
84 const int64_t TEST_TRUE_MEDIAID = 1;
85 const int64_t TEST_FALSE_MEDIAID = -1;
86 const int64_t TEST_SIZE_2MB = 2 * 1024 * 1024;
87 const int64_t TEST_SIZE_2MB_BELOW = TEST_SIZE_2MB - 1;
88 const int64_t TEST_SIZE_2MB_ABOVE = TEST_SIZE_2MB + 1;
89 const vector<string> CLEAR_SQLS = {
90     "DELETE FROM " + PhotoColumn::PHOTOS_TABLE,
91     "DELETE FROM " + PhotoAlbumColumns::TABLE + " WHERE " + PhotoAlbumColumns::ALBUM_TYPE + " != " +
92         to_string(PhotoAlbumType::SYSTEM),
93     "DELETE FROM " + PhotoMap::TABLE,
94     "DELETE FROM " + ANALYSIS_ALBUM_TABLE + " WHERE " + PhotoAlbumColumns::ALBUM_SUBTYPE + " != " +
95         to_string(PhotoAlbumSubType::SHOOTING_MODE),
96     "DELETE FROM " + ANALYSIS_PHOTO_MAP_TABLE,
97     "DELETE FROM " + AudioColumn::AUDIOS_TABLE,
98     "DELETE FROM tab_analysis_image_face",
99     "DELETE FROM tab_analysis_face_tag",
100     "DELETE FROM tab_analysis_total",
101     CREATE_VISION_INSERT_TRIGGER_FOR_ONCREATE,
102 };
103 
104 const string PhotosOpenCall::CREATE_PHOTOS = string("CREATE TABLE IF NOT EXISTS Photos ") +
105     " (file_id INTEGER PRIMARY KEY AUTOINCREMENT, data TEXT, title TEXT, display_name TEXT, size BIGINT," +
106     " media_type INT, date_added BIGINT, date_taken BIGINT, duration INT, is_favorite INT default 0, " +
107     " date_trashed BIGINT DEFAULT 0, hidden INT DEFAULT 0, height INT, width INT, user_comment TEXT, " +
108     " orientation INT DEFAULT 0, package_name TEXT, burst_cover_level INT DEFAULT 1, burst_key TEXT, " +
109     " dirty INTEGER DEFAULT 0, subtype INT, detail_time TEXT);";
110 
111 const string PhotosOpenCall::CREATE_PHOTOS_ALBUM = "CREATE TABLE IF NOT EXISTS PhotoAlbum \
112     (album_id INTEGER PRIMARY KEY AUTOINCREMENT, album_type INT,   \
113     album_subtype INT, album_name TEXT COLLATE NOCASE, cover_uri TEXT, count \
114     INT DEFAULT 0, date_modified BIGINT DEFAULT 0, dirty INT DEFAULT  1  , cloud_id TEXT,  \
115     relative_path TEXT, contains_hidden INT DEFAULT 0, hidden_count INT DEFAULT 0,  \
116     hidden_cover TEXT DEFAULT '', album_order INT,  image_count INT DEFAULT 0,  \
117     video_count INT DEFAULT 0, bundle_name TEXT, local_language TEXT,  \
118     is_local INT)";
119 
120 const string PhotosOpenCall::CREATE_PHOTOS_MAP = "CREATE TABLE IF NOT EXISTS  PhotoMap \
121     (map_album INT, map_asset INT, dirty INT DEFAULT 1, PRIMARY KEY (map_album, map_asset))";
122 
OnCreate(RdbStore & store)123 int PhotosOpenCall::OnCreate(RdbStore &store)
124 {
125     int ret = 0;
126     ret += store.ExecuteSql(CREATE_PHOTOS);
127     ret += store.ExecuteSql(CREATE_PHOTOS_ALBUM);
128     ret += store.ExecuteSql(CREATE_PHOTOS_MAP);
129     return ret;
130 }
131 
OnUpgrade(RdbStore & store,int oldVersion,int newVersion)132 int PhotosOpenCall::OnUpgrade(RdbStore &store, int oldVersion, int newVersion)
133 {
134     return 0;
135 }
136 
137 std::shared_ptr<NativeRdb::RdbStore> photosStorePtr = nullptr;
138 std::unique_ptr<UpgradeRestore> restoreService = nullptr;
139 
InitPhotoAlbum()140 void InitPhotoAlbum()
141 {
142     photosStorePtr->ExecuteSql("INSERT INTO PhotoAlbum (album_type, album_subtype,album_name) \
143         VALUES (0, 1, 'test101');");
144     photosStorePtr->ExecuteSql("INSERT INTO PhotoAlbum (album_type, album_subtype,album_name) \
145         VALUES (1024, 2049, 'TmallPic');");
146     photosStorePtr->ExecuteSql("INSERT INTO PhotoAlbum (album_type, album_subtype,album_name) \
147         VALUES (1024, 2049, '美图贴贴');");
148     photosStorePtr->ExecuteSql("INSERT INTO PhotoAlbum (album_type, album_subtype,album_name) \
149         VALUES (1024, 2049, 'funnygallery');");
150     photosStorePtr->ExecuteSql("INSERT INTO PhotoAlbum (album_type, album_subtype,album_name) \
151         VALUES (1024, 2049, 'xiaohongshu');");
152     photosStorePtr->ExecuteSql("INSERT INTO PhotoAlbum (album_type, album_subtype,album_name) \
153         VALUES (1024, 2049, 'Douyin');");
154     photosStorePtr->ExecuteSql("INSERT INTO PhotoAlbum (album_type, album_subtype,album_name) \
155         VALUES (1024, 2049, 'save');");
156     photosStorePtr->ExecuteSql("INSERT INTO PhotoAlbum (album_type, album_subtype,album_name) \
157         VALUES (1024, 2049, 'Weibo');");
158     photosStorePtr->ExecuteSql("INSERT INTO PhotoAlbum (album_type, album_subtype,album_name) \
159         VALUES (1024, 2049, 'Camera');");
160     photosStorePtr->ExecuteSql("INSERT INTO PhotoAlbum (album_type, album_subtype,album_name) \
161         VALUES (1024, 2049, 'Screenshots');");
162     photosStorePtr->ExecuteSql("INSERT INTO PhotoAlbum (album_type, album_subtype,album_name) \
163         VALUES (1024, 2049, 'Screenrecorder');");
164     photosStorePtr->ExecuteSql("INSERT INTO PhotoAlbum (album_type, album_subtype,album_name) VALUES (1024, 2049,'" +
165         GetDUALBundleName() + " Share');");
166 }
167 
Init(GallerySource & gallerySource,ExternalSource & externalSource)168 void Init(GallerySource &gallerySource, ExternalSource &externalSource)
169 {
170     MEDIA_INFO_LOG("start init galleryDb");
171     const string galleryDbPath = TEST_BACKUP_PATH + "/" + GALLERY_APP_NAME + "/ce/databases/gallery.db";
172     gallerySource.Init(galleryDbPath);
173     MEDIA_INFO_LOG("end init galleryDb");
174     MEDIA_INFO_LOG("start init externalDb");
175     const string externalDbPath = TEST_BACKUP_PATH + "/" + MEDIA_APP_NAME + "/ce/databases/external.db";
176     externalSource.Init(externalDbPath);
177     MEDIA_INFO_LOG("end init externalDb");
178     const string dbPath = TEST_BACKUP_PATH + "/" + MEDIA_LIBRARY_APP_NAME + "/ce/databases/media_library.db";
179     NativeRdb::RdbStoreConfig config(dbPath);
180     PhotosOpenCall helper;
181     int errCode = 0;
182     shared_ptr<NativeRdb::RdbStore> store = NativeRdb::RdbHelper::GetRdbStore(config, 1, helper, errCode);
183     photosStorePtr = store;
184     InitPhotoAlbum();
185     restoreService = std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, UPGRADE_RESTORE_ID);
186     restoreService->Init(TEST_BACKUP_PATH, TEST_UPGRADE_FILE_DIR, false);
187     restoreService->InitGarbageAlbum();
188 }
189 
RestoreFromGallery()190 void RestoreFromGallery()
191 {
192     std::vector<FileInfo> fileInfos = restoreService->QueryFileInfos(0);
193     for (size_t i = 0; i < fileInfos.size(); i++) {
194         const NativeRdb::ValuesBucket values = restoreService->GetInsertValue(fileInfos[i], TEST_BACKUP_PATH,
195             SourceType::GALLERY);
196         int64_t rowNum = 0;
197         if (photosStorePtr->Insert(rowNum, "Photos", values) != E_OK) {
198             MEDIA_ERR_LOG("InsertSql failed, filePath = %{private}s", fileInfos[i].filePath.c_str());
199         }
200     }
201 }
202 
RestoreFromExternal(GallerySource & gallerySource,bool isCamera)203 void RestoreFromExternal(GallerySource &gallerySource, bool isCamera)
204 {
205     MEDIA_INFO_LOG("start restore from %{public}s", (isCamera ? "camera" : "others"));
206     int32_t maxId = BackupDatabaseUtils::QueryInt(gallerySource.galleryStorePtr_, isCamera ?
207         QUERY_MAX_ID_CAMERA_SCREENSHOT : QUERY_MAX_ID_OTHERS, CUSTOM_MAX_ID);
208     int32_t type = isCamera ? SourceType::EXTERNAL_CAMERA : SourceType::EXTERNAL_OTHERS;
209     std::vector<FileInfo> fileInfos = restoreService->QueryFileInfosFromExternal(0, maxId, isCamera);
210     MEDIA_INFO_LOG("%{public}d asset will restor, maxid: %{public}d", (int)fileInfos.size(), maxId);
211     for (size_t i = 0; i < fileInfos.size(); i++) {
212         const NativeRdb::ValuesBucket values = restoreService->GetInsertValue(fileInfos[i], TEST_BACKUP_PATH,
213             type);
214         int64_t rowNum = 0;
215         if (photosStorePtr->Insert(rowNum, "Photos", values) != E_OK) {
216             MEDIA_ERR_LOG("InsertSql failed, filePath = %{private}s", fileInfos[i].filePath.c_str());
217         }
218     }
219 }
220 
SetUpTestCase(void)221 void MediaLibraryBackupTest::SetUpTestCase(void)
222 {
223     MEDIA_INFO_LOG("SetUpTestCase");
224     GallerySource gallerySource;
225     ExternalSource externalSource;
226     Init(gallerySource, externalSource);
227     RestoreFromGallery();
228     RestoreFromExternal(gallerySource, true);
229     RestoreFromExternal(gallerySource, false);
230 }
231 
TearDownTestCase(void)232 void MediaLibraryBackupTest::TearDownTestCase(void)
233 {
234     MEDIA_INFO_LOG("TearDownTestCase");
235 }
236 
237 // SetUp:Execute before each test case
SetUp()238 void MediaLibraryBackupTest::SetUp() {}
239 
TearDown(void)240 void MediaLibraryBackupTest::TearDown(void) {}
241 
242 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_init, TestSize.Level0)
243 {
244     MEDIA_INFO_LOG("medialib_backup_test_init start");
245     std::unique_ptr<UpgradeRestore> restoreService = std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME,
246         UPGRADE_RESTORE_ID);
247     int32_t result = restoreService->Init(TEST_BACKUP_PATH, TEST_UPGRADE_FILE_DIR, false);
248     EXPECT_EQ(result, 0);
249     MEDIA_INFO_LOG("medialib_backup_test_init end");
250 }
251 
252 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_not_sync_valid, TestSize.Level0)
253 {
254     MEDIA_INFO_LOG("medialib_backup_test_not_sync_valid start");
255     std::string queryNotSyncValid = "SELECT file_id from Photos where display_name ='not_sync_weixin.jpg'";
256     auto resultSet = photosStorePtr->QuerySql(queryNotSyncValid);
257     ASSERT_FALSE(resultSet == nullptr);
258     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
259     MEDIA_INFO_LOG("medialib_backup_test_not_sync_valid end");
260 }
261 
262 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_not_sync_invalid, TestSize.Level0)
263 {
264     MEDIA_INFO_LOG("medialib_backup_test_not_sync_invalid start");
265     std::string queryNotSyncInvalid =
266         "SELECT file_id from Photos where display_name ='not_sync_invalid.jpg'";
267     auto resultSet = photosStorePtr->QuerySql(queryNotSyncInvalid);
268     ASSERT_FALSE(resultSet == nullptr);
269     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
270     MEDIA_INFO_LOG("medialib_backup_test_not_sync_invalid end");
271 }
272 
273 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_not_sync_pending_camera, TestSize.Level0)
274 {
275     MEDIA_INFO_LOG("medialib_backup_test_not_sync_pending_camera start");
276     std::string queryNotSyncPendingCamera =
277         "SELECT file_id from Photos where display_name ='not_sync_pending_camera.jpg'";
278     auto resultSet = photosStorePtr->QuerySql(queryNotSyncPendingCamera);
279     ASSERT_FALSE(resultSet == nullptr);
280     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
281     MEDIA_INFO_LOG("medialib_backup_test_not_sync_pending_camera end");
282 }
283 
284 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_not_sync_pending_others, TestSize.Level0)
285 {
286     MEDIA_INFO_LOG("medialib_backup_test_not_sync_pending_others start");
287     std::string queryNotSyncPendingOthers =
288         "SELECT file_id from Photos where display_name ='not_sync_pending_others.jpg'";
289     auto resultSet = photosStorePtr->QuerySql(queryNotSyncPendingOthers);
290     ASSERT_FALSE(resultSet == nullptr);
291     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
292     MEDIA_INFO_LOG("medialib_backup_test_not_sync_pending_others end");
293 }
294 
295 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_not_restore_size_0, TestSize.Level0)
296 {
297     MEDIA_INFO_LOG("medialib_backup_test_not_restore_size_0 start");
298     std::string queryNotSyncPendingOthers =
299         "SELECT file_id from Photos where display_name ='zero_size.jpg'";
300     auto resultSet = photosStorePtr->QuerySql(queryNotSyncPendingOthers);
301     ASSERT_FALSE(resultSet == nullptr);
302     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
303     MEDIA_INFO_LOG("medialib_backup_test_not_restore_size_0 end");
304 }
305 
306 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_create_asset_path_by_id, TestSize.Level0)
307 {
308     MEDIA_INFO_LOG("medialib_backup_test_create_asset_path_by_id start");
309     int32_t uniqueId = 2;
310     int32_t fileType = 1;
311     std::string extension = "jpg";
312     std::string cloudPath;
313     int64_t currentTime = MediaFileUtils::UTCTimeSeconds();
314     std::string dir = RESTORE_CLOUD_DIR + "/" + to_string(uniqueId) + "/IMG_" +
315         to_string(MediaFileUtils::UTCTimeSeconds()) + "_00" + to_string(uniqueId) + "." + extension;
316     int32_t errCode = BackupFileUtils::CreateAssetPathById(uniqueId, fileType, extension, cloudPath);
317     MEDIA_INFO_LOG("dir: %{public}s, cloudPath: %{public}s", dir.c_str(), cloudPath.c_str());
318     ASSERT_TRUE(dir == cloudPath);
319     MEDIA_INFO_LOG("medialib_backup_test_create_asset_path_by_id end");
320 }
321 
322 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_update_clone, TestSize.Level0)
323 {
324     MEDIA_INFO_LOG("medialib_backup_test_update_clone start");
325     int32_t uniqueId = 2;
326     int32_t fileType = 1;
327     std::string extension = "jpg";
328     std::string cloudPath;
329     int64_t currentTime = MediaFileUtils::UTCTimeSeconds();
330     std::string dir = RESTORE_CLOUD_DIR + "/" + to_string(uniqueId) + "/IMG_" +
331         to_string(MediaFileUtils::UTCTimeSeconds()) + "_00" + to_string(uniqueId) + "." + extension;
332     int32_t errCode = BackupFileUtils::CreateAssetPathById(uniqueId, fileType, extension, cloudPath);
333     MEDIA_INFO_LOG("dir: %{public}s, cloudPath: %{public}s", dir.c_str(), cloudPath.c_str());
334     ASSERT_TRUE(dir == cloudPath);
335     MEDIA_INFO_LOG("medialib_backup_test_update_clone end");
336 }
337 
338 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_a_media_not_sync_valid, TestSize.Level0)
339 {
340     MEDIA_INFO_LOG("medialib_backup_test_a_media_not_sync_valid start");
341     std::string queryNotSyncValid = "SELECT file_id from Photos where display_name ='a_media_not_sync.jpg'";
342     auto resultSet = photosStorePtr->QuerySql(queryNotSyncValid);
343     ASSERT_FALSE(resultSet == nullptr);
344     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
345     MEDIA_INFO_LOG("medialib_backup_test_a_media_not_sync_valid end");
346 }
347 
348 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_a_media_zero_size, TestSize.Level0)
349 {
350     MEDIA_INFO_LOG("medialib_backup_test_a_media_zero_size start");
351     std::string queryNotSyncValid = "SELECT file_id from Photos where display_name ='a_media_zero_size.jpg'";
352     auto resultSet = photosStorePtr->QuerySql(queryNotSyncValid);
353     ASSERT_FALSE(resultSet == nullptr);
354     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
355     MEDIA_INFO_LOG("medialib_backup_test_a_media_zero_size end");
356 }
357 
358 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_duplicate_data, TestSize.Level0)
359 {
360     MEDIA_INFO_LOG("medialib_backup_test_duplicate_data start");
361     restoreService->photosRestore_.galleryRdb_ = restoreService->galleryRdb_;
362     ASSERT_NE(restoreService->photosRestore_.galleryRdb_, nullptr);
363 
364     restoreService->AnalyzeGalleryErrorSource();
365     size_t count = restoreService->photosRestore_.duplicateDataUsedCountMap_.size();
366     MEDIA_INFO_LOG("count: %{public}zu", count);
367     EXPECT_EQ(count, 0); // has duplicate data
368 
369     string dataPath = "/storage/emulated/0/A/media/Rocket/test/duplicate_data.mp4";
370     bool isDuplicateData = restoreService->photosRestore_.IsDuplicateData(dataPath);
371     MEDIA_INFO_LOG("check %{public}s: %{public}d", dataPath.c_str(), static_cast<int32_t>(isDuplicateData));
372     EXPECT_EQ(isDuplicateData, false); // first time used, not duplicate
373     isDuplicateData = restoreService->photosRestore_.IsDuplicateData(dataPath);
374     MEDIA_INFO_LOG("double check %{public}s: %{public}d", dataPath.c_str(), static_cast<int32_t>(isDuplicateData));
375     EXPECT_EQ(isDuplicateData, false); // second time used, duplicate
376     dataPath = "/storage/emulated/0/fake/fake.jpg";
377     isDuplicateData = restoreService->photosRestore_.IsDuplicateData(dataPath);
378     MEDIA_INFO_LOG("check %{public}s: %{public}d", dataPath.c_str(), static_cast<int32_t>(isDuplicateData));
379     EXPECT_EQ(isDuplicateData, false); // not exist in map, not duplicate
380     MEDIA_INFO_LOG("medialib_backup_test_duplicate_data end");
381 }
382 
383 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_modify_file, TestSize.Level0)
384 {
385     MEDIA_INFO_LOG("medialib_backup_test_modify_file start");
386     struct stat bufBefore;
387     const char *path = "/data/test/backup/1.txt";
388     stat(path, &bufBefore);
389     int64_t beforeModifiedTime = MediaFileUtils::Timespec2Millisecond(bufBefore.st_mtim);
390     int64_t currentTime = MediaFileUtils::UTCTimeSeconds();
391     struct utimbuf buf;
392     buf.actime = currentTime;
393     buf.modtime = currentTime;
394     utime(path, &buf);
395     struct stat bufAfter;
396     stat(path, &bufAfter);
397     int64_t afterModifiedTime = MediaFileUtils::Timespec2Millisecond(bufAfter.st_mtim);
398     ASSERT_TRUE(afterModifiedTime != beforeModifiedTime);
399     MEDIA_INFO_LOG("medialib_backup_test_modify_file end");
400 }
401 
402 HWTEST_F(MediaLibraryBackupTest, BackupFileUtils_CreateAssetPathById_mediaType_audio, TestSize.Level0)
403 {
404     MEDIA_INFO_LOG("BackupFileUtils_CreateAssetPathById_mediaType_audio start");
405     int32_t uniqueId = 2;
406     int32_t fileType = 3;
407     std::string extension = "mp3";
408     std::string cloudPath;
409     int32_t errCode = BackupFileUtils::CreateAssetPathById(uniqueId, fileType, extension, cloudPath);
410     EXPECT_EQ(errCode, E_OK);
411     MEDIA_INFO_LOG("BackupFileUtils_CreateAssetPathById_mediaType_audio end");
412 }
413 
414 HWTEST_F(MediaLibraryBackupTest, BackupFileUtils_CreateAssetPathById_mediaType_video, TestSize.Level0)
415 {
416     MEDIA_INFO_LOG("BackupFileUtils_CreateAssetPathById_mediaType_video start");
417     int32_t uniqueId = 2;
418     int32_t fileType = 2;
419     std::string extension = "mp4";
420     std::string cloudPath;
421     int32_t errCode = BackupFileUtils::CreateAssetPathById(uniqueId, fileType, extension, cloudPath);
422     EXPECT_EQ(errCode, E_OK);
423     MEDIA_INFO_LOG("BackupFileUtils_CreateAssetPathById_mediaType_video end");
424 }
425 
426 HWTEST_F(MediaLibraryBackupTest, BackupFileUtils_CreateAssetPathById_illegal_fileId, TestSize.Level0)
427 {
428     MEDIA_INFO_LOG("BackupFileUtils_CreateAssetPathById_Illegal_fileId start");
429     int32_t fileId = -1;
430     int32_t fileType = 2;
431     std::string extension = "mp4";
432     std::string cloudPath;
433     // fileId < 0 CreateAssetPathById will return E_INVALID_FILEID -208
434     int32_t errCode = BackupFileUtils::CreateAssetPathById(fileId, fileType, extension, cloudPath);
435     EXPECT_EQ(errCode, E_INVALID_FILEID);
436     MEDIA_INFO_LOG("BackupFileUtils_CreateAssetPathById_Illegal_fileId end");
437 }
438 
439 HWTEST_F(MediaLibraryBackupTest, BackupFileUtils_CreateAssetPathById_Normal_fileId, TestSize.Level0)
440 {
441     MEDIA_INFO_LOG("BackupFileUtils_CreateAssetPathById_Normal_fileId start");
442     // file id > ASSET_DIR_START_NUM * ASSET_IN_BUCKET_NUM_MAX (16 * 1000) and Remainder != 0
443     int32_t fileId = 16 * 1000 + 1;
444     int32_t fileType = 2;
445     std::string extension = "mp4";
446     std::string cloudPath;
447     int32_t errCode = BackupFileUtils::CreateAssetPathById(fileId, fileType, extension, cloudPath);
448     EXPECT_EQ(errCode, E_OK);
449     MEDIA_INFO_LOG("BackupFileUtils_CreateAssetPathById_Normal_fileId end");
450 }
451 
452 HWTEST_F(MediaLibraryBackupTest, BackupFileUtils_CreateAssetPathById_Normal_fileId_NoRemainder, TestSize.Level0)
453 {
454     MEDIA_INFO_LOG("BackupFileUtils_CreateAssetPathById_Normal_fileId_NoRemainder start");
455     // file id > ASSET_DIR_START_NUM * ASSET_IN_BUCKET_NUM_MAX (16 * 1000) and fileIdRemainder == 0
456     int32_t fileId = 16 * 1000 + 16;
457     int32_t fileType = 2;
458     std::string extension = "mp4";
459     std::string cloudPath;
460     int32_t errCode = BackupFileUtils::CreateAssetPathById(fileId, fileType, extension, cloudPath);
461     EXPECT_EQ(errCode, E_OK);
462     MEDIA_INFO_LOG("BackupFileUtils_CreateAssetPathById_Normal_fileId_NoRemainder end");
463 }
464 
465 HWTEST_F(MediaLibraryBackupTest, BackupFileUtils_CreateAssetPathById_illegal_fileType_001, TestSize.Level0)
466 {
467     MEDIA_INFO_LOG("BackupFileUtils_CreateAssetPathById_illegal_fileType_001 start");
468     int32_t fileId = 2;
469     int32_t fileType = -1;
470     std::string extension = "mp4";
471     std::string cloudPath;
472     // normal fileId and illegal fileType CreateAssetPathById will return E_INVALID_VALUES
473     int32_t errCode = BackupFileUtils::CreateAssetPathById(fileId, fileType, extension, cloudPath);
474     EXPECT_EQ(errCode, E_INVALID_VALUES);
475     MEDIA_INFO_LOG("BackupFileUtils_CreateAssetPathById_illegal_fileType_001 end");
476 }
477 
478 HWTEST_F(MediaLibraryBackupTest, BackupFileUtils_CreateAssetPathById_Illegal_fileType_002, TestSize.Level0)
479 {
480     MEDIA_INFO_LOG("BackupFileUtils_CreateAssetPathById_Illegal_fileType_002 start");
481     // fileId = ASSET_MAX_COMPLEMENT_ID + invalid file type
482     int32_t fileId = 999;
483     int32_t fileType = -1;
484     std::string extension = "mp4";
485     std::string cloudPath;
486     int32_t errCode = BackupFileUtils::CreateAssetPathById(fileId, fileType, extension, cloudPath);
487     EXPECT_EQ(errCode, E_INVALID_VALUES);
488     MEDIA_INFO_LOG("BackupFileUtils_CreateAssetPathById_Illegal_fileType_002 end");
489 }
490 
491 HWTEST_F(MediaLibraryBackupTest, BackupFileUtils_CreateAssetPathById_Illegal_fileType_003, TestSize.Level0)
492 {
493     MEDIA_INFO_LOG("BackupFileUtils_CreateAssetPathById_Illegal_fileType_003 start");
494     // fileId > ASSET_MAX_COMPLEMENT_ID + invalid file type
495     int32_t fileId = 1000;
496     int32_t fileType = -1;
497     std::string extension = "mp4";
498     std::string cloudPath;
499     int32_t errCode = BackupFileUtils::CreateAssetPathById(fileId, fileType, extension, cloudPath);
500     EXPECT_EQ(errCode, E_INVALID_VALUES);
501     MEDIA_INFO_LOG("BackupFileUtils_CreateAssetPathById_Illegal_fileType_003 end");
502 }
503 
504 HWTEST_F(MediaLibraryBackupTest, BackupFileUtils_GetFileNameFromPath_path_empty, TestSize.Level0)
505 {
506     MEDIA_INFO_LOG("BackupFileUtils_GetFileNameFromPath_path_empty start");
507     string path;
508     string res = BackupFileUtils::GetFileNameFromPath(path);
509     EXPECT_EQ(res, "");
510     MEDIA_INFO_LOG("BackupFileUtils_GetFileNameFromPath_path_empty end");
511 }
512 
513 HWTEST_F(MediaLibraryBackupTest, BackupFileUtils_GetFileNameFromPath_path_not_have, TestSize.Level0)
514 {
515     MEDIA_INFO_LOG("BackupFileUtils_GetFileNameFromPath_path_not_have start");
516     string path = "test";
517     string res = BackupFileUtils::GetFileNameFromPath(path);
518     EXPECT_EQ(res, "");
519     MEDIA_INFO_LOG("BackupFileUtils_GetFileNameFromPath_path_not_have end");
520 }
521 
522 HWTEST_F(MediaLibraryBackupTest, BackupFileUtils_GetFileNameFromPath_ok, TestSize.Level0)
523 {
524     MEDIA_INFO_LOG("BackupFileUtils_GetFileNameFromPath_ok start");
525     string path = "test/ee/ee";
526     string res = BackupFileUtils::GetFileNameFromPath(path);
527     EXPECT_NE(res, "");
528     MEDIA_INFO_LOG("BackupFileUtils_GetFileNameFromPath_ok end");
529 }
530 
531 HWTEST_F(MediaLibraryBackupTest, BackupFileUtils_GetFileTitle_dispalyName_empty, TestSize.Level0)
532 {
533     MEDIA_INFO_LOG("BackupFileUtils_GetFileTitle_dispalyName_empty start");
534     string displayName;
535     string res = BackupFileUtils::GetFileTitle(displayName);
536     EXPECT_EQ(res, "");
537     MEDIA_INFO_LOG("BackupFileUtils_GetFileTitle_dispalyName_empty end");
538 }
539 
540 HWTEST_F(MediaLibraryBackupTest, BackupFileUtils_GetFileTitle_ok, TestSize.Level0)
541 {
542     MEDIA_INFO_LOG("BackupFileUtils_GetFileTitle_ok start");
543     string displayName = "test.mp3";
544     string res = BackupFileUtils::GetFileTitle(displayName);
545     EXPECT_NE(res, "");
546     MEDIA_INFO_LOG("BackupFileUtils_GetFileTitle_ok end");
547 }
548 
549 HWTEST_F(MediaLibraryBackupTest, BackupFileUtils_GetFileTitle_no_dot, TestSize.Level0)
550 {
551     MEDIA_INFO_LOG("BackupFileUtils_GetFileTitle_no_dot start");
552     string displayName = "testmp3";
553     string res = BackupFileUtils::GetFileTitle(displayName);
554     EXPECT_EQ(res, "testmp3");
555     MEDIA_INFO_LOG("BackupFileUtils_GetFileTitle_no_dot end");
556 }
557 
558 HWTEST_F(MediaLibraryBackupTest, BackupFileUtils_GetFullPathByPrefixType_normal_type, TestSize.Level0)
559 {
560     MEDIA_INFO_LOG("BackupFileUtils_GetFullPathByPrefixType_normal_type start");
561     // test case 1 normal PrefixType
562     string path = "/test.cpp";
563     PrefixType type = PrefixType::CLOUD;
564     string res = BackupFileUtils::GetFullPathByPrefixType(type, path);
565     EXPECT_EQ(res, "/storage/cloud/files/test.cpp");
566     MEDIA_INFO_LOG("BackupFileUtils_GetFullPathByPrefixType_normal_type end");
567 }
568 
569 HWTEST_F(MediaLibraryBackupTest, BackupFileUtils_GetFullPathByPrefixType_illegal_type, TestSize.Level0)
570 {
571     MEDIA_INFO_LOG("BackupFileUtils_GetFullPathByPrefixType_illegal_type start");
572     // test case 2 illegal PrefixType
573     string path = "/test.cpp";
574     PrefixType type = static_cast<PrefixType>(-1);
575     string res = BackupFileUtils::GetFullPathByPrefixType(type, path);
576     EXPECT_EQ(res.length(), 0);
577     MEDIA_INFO_LOG("BackupFileUtils_GetFullPathByPrefixType_illegal_type end");
578 }
579 
580 HWTEST_F(MediaLibraryBackupTest, BackupFileUtils_GarbleFileName_normal_name, TestSize.Level0)
581 {
582     MEDIA_INFO_LOG("BackupFileUtils_GarbleFileName_normal_name start");
583     // name start with Screenshot_
584     string name = "Screenshot_test";
585     auto ret = BackupFileUtils::GarbleFileName(name);
586     EXPECT_EQ(ret, "Screenshot_test");
587 
588     // name start with SVID_
589     name = "SVID_test";
590     ret = BackupFileUtils::GarbleFileName(name);
591     EXPECT_EQ(ret, "SVID_test");
592 
593     // name start with IMG_
594     name = "IMG_test";
595     ret = BackupFileUtils::GarbleFileName(name);
596     EXPECT_EQ(ret, "IMG_test");
597 
598     // name start with VID_
599     name = "VID_test";
600     ret = BackupFileUtils::GarbleFileName(name);
601     EXPECT_EQ(ret, "VID_test");
602 
603     // name without extension and size <= GARBLE.size() * 2
604     name = "test";
605     ret = BackupFileUtils::GarbleFileName(name);
606     EXPECT_EQ(ret, name);
607 
608     // name with extension
609     name = "test_garble_file_name.ext";
610     ret = BackupFileUtils::GarbleFileName(name);
611     EXPECT_EQ(ret.find(GARBLE), 0);
612     MEDIA_INFO_LOG("BackupFileUtils_GarbleFileName_normal_name end");
613 }
614 
615 HWTEST_F(MediaLibraryBackupTest, BackupFileUtils_GarbleFileName_empty_name, TestSize.Level0)
616 {
617     MEDIA_INFO_LOG("BackupFileUtils_GarbleFileName_empty_name start");
618     // empty file name
619     string name;
620     auto ret = BackupFileUtils::GarbleFileName(name);
621     EXPECT_EQ(ret.length(), 0);
622     MEDIA_INFO_LOG("BackupFileUtils_GarbleFileName_empty_name end");
623 }
624 
625 HWTEST_F(MediaLibraryBackupTest, BackupFileUtils_GetReplacedPathByPrefixType_illegal_srcprefix, TestSize.Level0)
626 {
627     MEDIA_INFO_LOG("BackupFileUtils_GetReplacedPathByPrefixType_illegal_srcprefix start");
628     // illegal srcPrefix + normal dstPrefix
629     PrefixType srcPrefix = static_cast<PrefixType>(-1);
630     PrefixType dstPrefix = PrefixType::CLOUD_EDIT_DATA;
631     string path = "test_path";
632     auto ret = BackupFileUtils::GetReplacedPathByPrefixType(srcPrefix, dstPrefix, path);
633     EXPECT_EQ(ret.length(), 0);
634     MEDIA_INFO_LOG("BackupFileUtils_GetReplacedPathByPrefixType_illegal_srcprefix end");
635 }
636 
637 HWTEST_F(MediaLibraryBackupTest, BackupFileUtils_GetReplacedPathByPrefixType_illegal_dstprefix, TestSize.Level0)
638 {
639     MEDIA_INFO_LOG("BackupFileUtils_GetReplacedPathByPrefixType_illegal_dstprefix start");
640     // illegal dstPrefix + normal srcPrefix
641     PrefixType srcPrefix = PrefixType::CLOUD_EDIT_DATA;
642     PrefixType dstPrefix = static_cast<PrefixType>(-1);
643     string path = "test_path";
644     auto ret = BackupFileUtils::GetReplacedPathByPrefixType(srcPrefix, dstPrefix, path);
645     EXPECT_EQ(ret.length(), 0);
646     MEDIA_INFO_LOG("BackupFileUtils_GetReplacedPathByPrefixType_illegal_dstprefix end");
647 }
648 
649 HWTEST_F(MediaLibraryBackupTest, BackupFileUtils_GetReplacedPathByPrefixType_normal_prefix, TestSize.Level0)
650 {
651     MEDIA_INFO_LOG("BackupFileUtils_GetReplacedPathByPrefixType_normal_prefix start");
652     // normal srcPrefix + normal dstPrefix
653     PrefixType srcPrefix = PrefixType::LOCAL;
654     PrefixType dstPrefix = PrefixType::LOCAL;
655     string path = "test_path";
656     auto ret = BackupFileUtils::GetReplacedPathByPrefixType(srcPrefix, dstPrefix, path);
657     EXPECT_EQ(ret, "/storage/media/local/files");
658     MEDIA_INFO_LOG("BackupFileUtils_GetReplacedPathByPrefixType_normal_prefix end");
659 }
660 
661 HWTEST_F(MediaLibraryBackupTest, RestoreAudio_sceneCode_UPGRADE_RESTORE_ID, TestSize.Level0)
662 {
663     MEDIA_INFO_LOG("RestoreAudio_sceneCode_UPGRADE_RESTORE_ID start");
664     restoreService->RestoreAudio();
665     std::string queryAudio = "SELECT file_id from Audios where display_name ='audio1.mp3'";
666     auto resultSet = photosStorePtr->QuerySql(queryAudio);
667     ASSERT_FALSE(resultSet == nullptr);
668     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
669     MEDIA_INFO_LOG("RestoreAudio_sceneCode_UPGRADE_RESTORE_ID end");
670 }
671 
672 HWTEST_F(MediaLibraryBackupTest, RestoreAudio_sceneCode_Clone, TestSize.Level0)
673 {
674     MEDIA_INFO_LOG("RestoreAudio_sceneCode_Clone start");
675     restoreService->sceneCode_ = DUAL_FRAME_CLONE_RESTORE_ID;
676     restoreService->RestoreAudio();
677     std::string queryAudio = "SELECT file_id from Audios where display_name ='audio1.mp3'";
678     auto resultSet = photosStorePtr->QuerySql(queryAudio);
679     ASSERT_FALSE(resultSet == nullptr);
680     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
681     MEDIA_INFO_LOG("RestoreAudio_sceneCode_Clone end");
682 }
683 
684 HWTEST_F(MediaLibraryBackupTest, RestoreAudio_RestoreAudioBatch_clone_no_audioRdb, TestSize.Level0)
685 {
686     MEDIA_INFO_LOG("RestoreAudio_RestoreAudioBatch_clone_no_db start");
687     std::unique_ptr<UpgradeRestore> upgrade =
688         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
689     upgrade->RestoreAudioBatch(0);
690     std::string queryAudio = "SELECT file_id from Audios where display_name ='audio1.mp3'";
691     auto resultSet = photosStorePtr->QuerySql(queryAudio);
692     ASSERT_FALSE(resultSet == nullptr);
693     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
694     MEDIA_INFO_LOG("RestoreAudio_RestoreAudioBatch_clone_no_db end");
695 }
696 
697 HWTEST_F(MediaLibraryBackupTest, RestoreAudio_RestoreAudioBatch_clone_fake_audiodb, TestSize.Level0)
698 {
699     MEDIA_INFO_LOG("RestoreAudio_RestoreAudioBatch_clone_fake_audiodb start");
700     std::unique_ptr<UpgradeRestore> upgrade =
701         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
702     upgrade->audioRdb_ = photosStorePtr;
703     upgrade->RestoreAudioBatch(0);
704     std::string queryAudio = "SELECT file_id from Audios where display_name ='audio1.mp3'";
705     auto resultSet = photosStorePtr->QuerySql(queryAudio);
706     ASSERT_FALSE(resultSet == nullptr);
707     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
708     MEDIA_INFO_LOG("RestoreAudio_RestoreAudioBatch_clone_no_db end");
709 }
710 
711 HWTEST_F(MediaLibraryBackupTest, RestoreAudio_ParseResultSetFromAudioDb_return_false, TestSize.Level0)
712 {
713     MEDIA_INFO_LOG("RestoreAudio_ParseResultSetFromAudioDb_return_false start");
714     std::unique_ptr<UpgradeRestore> upgrade =
715         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
716     std::shared_ptr<NativeRdb::ResultSet> resultSet;
717     FileInfo info;
718     bool res = upgrade->ParseResultSetFromAudioDb(resultSet, info);
719     EXPECT_NE(res, true);
720     MEDIA_INFO_LOG("RestoreAudio_ParseResultSetFromAudioDb_return_false end");
721 }
722 
723 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test001, TestSize.Level0)
724 {
725     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test001 start";
726     MEDIA_INFO_LOG("medialib_backup_test_ablum_test001 start");
727     restoreService->RestorePhoto();
728     std::string queryTrashed = "SELECT album_id from PhotoAlbum where album_name = 'test001';";
729     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
730     ASSERT_FALSE(resultSet == nullptr);
731     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
732     MEDIA_INFO_LOG("medialib_backup_test_ablum_test001 end");
733     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test001 end";
734 }
735 
736 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test002, TestSize.Level0)
737 {
738     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test002 start";
739     MEDIA_INFO_LOG("medialib_backup_test_ablum_test002 start");
740     restoreService->RestorePhoto();
741     std::string queryTrashed = "SELECT album_id from PhotoAlbum where album_name = 'test002';";
742     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
743     ASSERT_FALSE(resultSet == nullptr);
744     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
745     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test002 end";
746 }
747 
748 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test003, TestSize.Level0)
749 {
750     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test003 start";
751     MEDIA_INFO_LOG("medialib_backup_test_ablum_test003 start");
752     restoreService->RestorePhoto();
753     std::string queryTrashed = "SELECT album_id from PhotoAlbum where album_name = 'test003';";
754     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
755     ASSERT_FALSE(resultSet == nullptr);
756     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
757     MEDIA_INFO_LOG("medialib_backup_test_ablum_test003 end");
758     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test003 end";
759 }
760 
761 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test004, TestSize.Level0)
762 {
763     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test004 start";
764     MEDIA_INFO_LOG("medialib_backup_test_ablum_test004 start");
765     restoreService->RestorePhoto();
766     std::string queryTrashed = "SELECT album_id from PhotoAlbum where album_name = 'TmallPic';";
767     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
768     ASSERT_FALSE(resultSet == nullptr);
769     ASSERT_TRUE(resultSet->GoToNextRow() == NativeRdb::E_OK);
770     MEDIA_INFO_LOG("medialib_backup_test_ablum_test004 end");
771     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test004 end";
772 }
773 
774 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test005, TestSize.Level0)
775 {
776     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test005 start";
777     MEDIA_INFO_LOG("medialib_backup_test_ablum_test005 start");
778     restoreService->RestorePhoto();
779     std::string queryTrashed = "SELECT album_id from PhotoAlbum where album_name = 'UCDownloads';";
780     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
781     ASSERT_FALSE(resultSet == nullptr);
782     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
783     MEDIA_INFO_LOG("medialib_backup_test_ablum_test005 end");
784     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test005 end";
785 }
786 
787 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test006, TestSize.Level0)
788 {
789     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test006 start";
790     MEDIA_INFO_LOG("medialib_backup_test_ablum_test006 start");
791     restoreService->RestorePhoto();
792     std::string queryTrashed = "SELECT album_id from PhotoAlbum where album_name  = 'xiaohongshu';";
793     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
794     ASSERT_FALSE(resultSet == nullptr);
795     ASSERT_TRUE(resultSet->GoToNextRow() == NativeRdb::E_OK);
796     MEDIA_INFO_LOG("medialib_backup_test_ablum_test006 end");
797     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test006 end";
798 }
799 
800 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test007, TestSize.Level0)
801 {
802     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test007 start";
803     MEDIA_INFO_LOG("medialib_backup_test_ablum_test007 start");
804     restoreService->RestorePhoto();
805     std::string queryTrashed = "SELECT album_id from PhotoAlbum where album_name = 'Douyin';";
806     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
807     ASSERT_FALSE(resultSet == nullptr);
808     ASSERT_TRUE(resultSet->GoToNextRow() == NativeRdb::E_OK);
809     MEDIA_INFO_LOG("medialib_backup_test_ablum_test007 end");
810     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test007 end";
811 }
812 
813 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test008, TestSize.Level0)
814 {
815     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test008 start";
816     MEDIA_INFO_LOG("medialib_backup_test_ablum_test008 start");
817     restoreService->RestorePhoto();
818     std::string queryTrashed = "SELECT album_id from PhotoAlbum where album_name = 'Weibo';";
819     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
820     ASSERT_FALSE(resultSet == nullptr);
821     ASSERT_TRUE(resultSet->GoToNextRow() == NativeRdb::E_OK);
822     MEDIA_INFO_LOG("medialib_backup_test_ablum_test008 end");
823     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test008 end";
824 }
825 
826 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test009, TestSize.Level0)
827 {
828     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test009 start";
829     MEDIA_INFO_LOG("medialib_backup_test_ablum_test009 start");
830     restoreService->RestorePhoto();
831     std::string queryTrashed = "SELECT album_id from PhotoAlbum where album_name = 'Camera';";
832     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
833     ASSERT_FALSE(resultSet == nullptr);
834     ASSERT_TRUE(resultSet->GoToNextRow() == NativeRdb::E_OK);
835 
836     queryTrashed = "SELECT file_id from Photos where display_name = 'camera1.jpg';";
837     resultSet = photosStorePtr->QuerySql(queryTrashed);
838     ASSERT_FALSE(resultSet == nullptr);
839     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
840     MEDIA_INFO_LOG("medialib_backup_test_ablum_test009 end");
841     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test009 end";
842 }
843 
844 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test010, TestSize.Level0)
845 {
846     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test010 start";
847     MEDIA_INFO_LOG("medialib_backup_test_ablum_test010 start");
848     restoreService->RestorePhoto();
849     std::string queryTrashed = "SELECT album_id from PhotoAlbum where album_name = 'Screenshots';";
850     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
851     ASSERT_FALSE(resultSet == nullptr);
852     ASSERT_TRUE(resultSet->GoToNextRow() == NativeRdb::E_OK);
853 
854     queryTrashed = "SELECT file_id from Photos where display_name = 'screenshots1.jpg';";
855     resultSet = photosStorePtr->QuerySql(queryTrashed);
856     ASSERT_FALSE(resultSet == nullptr);
857     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
858     MEDIA_INFO_LOG("medialib_backup_test_ablum_test010 end");
859     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test010 end";
860 }
861 
862 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test011, TestSize.Level0)
863 {
864     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test011 start";
865     MEDIA_INFO_LOG("medialib_backup_test_ablum_test011 start");
866     restoreService->RestorePhoto();
867     std::string queryTrashed = "SELECT album_id from PhotoAlbum where album_name = 'Screenrecorder';";
868     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
869     ASSERT_FALSE(resultSet == nullptr);
870     ASSERT_TRUE(resultSet->GoToNextRow() == NativeRdb::E_OK);
871 
872     queryTrashed = "SELECT file_id from Photos where display_name = 'screenrecorder1.mp4';";
873     resultSet = photosStorePtr->QuerySql(queryTrashed);
874     ASSERT_FALSE(resultSet == nullptr);
875     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
876     MEDIA_INFO_LOG("medialib_backup_test_ablum_test011 end");
877     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test011 end";
878 }
879 
880 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test012, TestSize.Level0)
881 {
882     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test012 start";
883     MEDIA_INFO_LOG("medialib_backup_test_ablum_test012 start");
884     restoreService->RestorePhoto();
885     std::string sql = "SELECT album_id from PhotoAlbum where album_name = '" + GetDUALBundleName() + " Share';";
886     auto resultSet = photosStorePtr->QuerySql(sql);
887     ASSERT_FALSE(resultSet == nullptr);
888     ASSERT_TRUE(resultSet->GoToNextRow() == NativeRdb::E_OK);
889 
890     sql = "SELECT file_id from Photos where display_name = '" + GetDUALBundleName() + "Share1.jpg';";
891     resultSet = photosStorePtr->QuerySql(sql);
892     ASSERT_FALSE(resultSet == nullptr);
893     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
894     MEDIA_INFO_LOG("medialib_backup_test_ablum_test012 end");
895     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test012 end";
896 }
897 
898 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test101, TestSize.Level0)
899 {
900     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test101 start";
901     MEDIA_INFO_LOG("medialib_backup_test_ablum_test101 start");
902     restoreService->RestorePhoto();
903     std::string queryTrashed = "SELECT album_type,album_subtype from PhotoAlbum where album_name = 'test101';";
904     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
905     int32_t album_type = GetInt32Val("album_type", resultSet);
906     int32_t album_subtype = GetInt32Val("album_subtype", resultSet);
907     ASSERT_FALSE(resultSet == nullptr);
908     ASSERT_TRUE(resultSet->GoToNextRow() == NativeRdb::E_OK);
909 
910     EXPECT_EQ(album_type, 0);
911     EXPECT_EQ(album_subtype, 0);
912     MEDIA_INFO_LOG("medialib_backup_test_ablum_test101 end");
913     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test101 end";
914 }
915 
916 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test102, TestSize.Level0)
917 {
918     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test102 start";
919     MEDIA_INFO_LOG("medialib_backup_test_ablum_test102 start");
920     restoreService->RestorePhoto();
921     std::string queryTrashed = "SELECT album_id from PhotoAlbum where album_name = 'TmallPic';";
922     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
923     ASSERT_FALSE(resultSet == nullptr);
924     ASSERT_TRUE(resultSet->GoToNextRow() == NativeRdb::E_OK);
925     MEDIA_INFO_LOG("medialib_backup_test_ablum_test102 end");
926     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test102 end";
927 }
928 
929 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test103, TestSize.Level0)
930 {
931     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test103 start";
932     MEDIA_INFO_LOG("medialib_backup_test_ablum_test103 start");
933     restoreService->RestorePhoto();
934     std::string queryTrashed = "SELECT album_id from PhotoAlbum where album_name = 'MTTT';";
935     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
936     ASSERT_FALSE(resultSet == nullptr);
937     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
938     MEDIA_INFO_LOG("medialib_backup_test_ablum_test103 end");
939     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test103 end";
940 }
941 
942 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test104, TestSize.Level0)
943 {
944     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test104 start";
945     MEDIA_INFO_LOG("medialib_backup_test_ablum_test104 start");
946     restoreService->RestorePhoto();
947     std::string queryTrashed = "SELECT album_id from PhotoAlbum where album_name = 'funnygallery';";
948     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
949     ASSERT_FALSE(resultSet == nullptr);
950     ASSERT_TRUE(resultSet->GoToNextRow() == NativeRdb::E_OK);
951     MEDIA_INFO_LOG("medialib_backup_test_ablum_test104 end");
952     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test104 end";
953 }
954 
955 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test105, TestSize.Level0)
956 {
957     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test105 start";
958     MEDIA_INFO_LOG("medialib_backup_test_ablum_test105 start");
959     restoreService->RestorePhoto();
960     std::string queryTrashed = "SELECT album_id from PhotoAlbum where album_name = 'xiaohongshu';";
961     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
962     ASSERT_FALSE(resultSet == nullptr);
963     ASSERT_TRUE(resultSet->GoToNextRow() == NativeRdb::E_OK);
964     MEDIA_INFO_LOG("medialib_backup_test_ablum_test105 end");
965     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test105 end";
966 }
967 
968 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test106, TestSize.Level0)
969 {
970     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test106 start";
971     MEDIA_INFO_LOG("medialib_backup_test_ablum_test106 start");
972     restoreService->RestorePhoto();
973     std::string queryTrashed = "SELECT album_id from PhotoAlbum where album_name = 'Douyin';";
974     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
975     ASSERT_FALSE(resultSet == nullptr);
976     ASSERT_TRUE(resultSet->GoToNextRow() == NativeRdb::E_OK);
977     MEDIA_INFO_LOG("medialib_backup_test_ablum_test106 end");
978     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test106 end";
979 }
980 
981 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test107, TestSize.Level0)
982 {
983     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test107 start";
984     MEDIA_INFO_LOG("medialib_backup_test_ablum_test107 start");
985     restoreService->RestorePhoto();
986     std::string queryTrashed = "SELECT album_id from PhotoAlbum where album_name = 'save';";
987     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
988     ASSERT_FALSE(resultSet == nullptr);
989     ASSERT_TRUE(resultSet->GoToNextRow() == NativeRdb::E_OK);
990     MEDIA_INFO_LOG("medialib_backup_test_ablum_test107 end");
991     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test107 end";
992 }
993 
994 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test108, TestSize.Level0)
995 {
996     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test108 start";
997     MEDIA_INFO_LOG("medialib_backup_test_ablum_test108 start");
998     restoreService->RestorePhoto();
999     std::string queryTrashed = "SELECT album_id from PhotoAlbum where album_name = 'Weibo';";
1000     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
1001     ASSERT_FALSE(resultSet == nullptr);
1002     ASSERT_TRUE(resultSet->GoToNextRow() == NativeRdb::E_OK);
1003     MEDIA_INFO_LOG("medialib_backup_test_ablum_test108 end");
1004     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test108 end";
1005 }
1006 
1007 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test109, TestSize.Level0)
1008 {
1009     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test109 start";
1010     MEDIA_INFO_LOG("medialib_backup_test_ablum_test109 start");
1011     restoreService->RestorePhoto();
1012     std::string queryTrashed = "SELECT album_id from PhotoAlbum where album_name = 'Camera';";
1013     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
1014     ASSERT_FALSE(resultSet == nullptr);
1015     ASSERT_TRUE(resultSet->GoToNextRow() == NativeRdb::E_OK);
1016 
1017     queryTrashed = "SELECT file_id from Photos where display_name = 'camera2.jpg';";
1018     resultSet = photosStorePtr->QuerySql(queryTrashed);
1019     ASSERT_FALSE(resultSet == nullptr);
1020     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
1021     MEDIA_INFO_LOG("medialib_backup_test_ablum_test109 end");
1022     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test109 end";
1023 }
1024 
1025 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test110, TestSize.Level0)
1026 {
1027     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test110 start";
1028     MEDIA_INFO_LOG("medialib_backup_test_ablum_test110 start");
1029     restoreService->RestorePhoto();
1030     std::string queryTrashed = "SELECT album_id from PhotoAlbum where album_name = 'Screenshots';";
1031     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
1032     ASSERT_FALSE(resultSet == nullptr);
1033     ASSERT_TRUE(resultSet->GoToNextRow() == NativeRdb::E_OK);
1034 
1035     queryTrashed = "SELECT file_id from Photos where display_name = 'screenshots2.jpg';";
1036     resultSet = photosStorePtr->QuerySql(queryTrashed);
1037     ASSERT_FALSE(resultSet == nullptr);
1038     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
1039     MEDIA_INFO_LOG("medialib_backup_test_ablum_test110 end");
1040     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test110 end";
1041 }
1042 
1043 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test111, TestSize.Level0)
1044 {
1045     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test111 start";
1046     MEDIA_INFO_LOG("medialib_backup_test_ablum_test111 start");
1047     restoreService->RestorePhoto();
1048     std::string queryTrashed = "SELECT album_id from PhotoAlbum where album_name = 'Screenrecorder';";
1049     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
1050     ASSERT_FALSE(resultSet == nullptr);
1051     ASSERT_TRUE(resultSet->GoToNextRow() == NativeRdb::E_OK);
1052 
1053     queryTrashed = "SELECT file_id from Photos where display_name = 'screenrecorder2.mp4';";
1054     resultSet = photosStorePtr->QuerySql(queryTrashed);
1055     ASSERT_FALSE(resultSet == nullptr);
1056     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
1057     MEDIA_INFO_LOG("medialib_backup_test_ablum_test111 end");
1058     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test111 end";
1059 }
1060 
1061 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ablum_test112, TestSize.Level0)
1062 {
1063     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test112 start";
1064     MEDIA_INFO_LOG("medialib_backup_test_ablum_test112 start");
1065     restoreService->RestorePhoto();
1066     std::string queryTrashed = "SELECT album_id from PhotoAlbum where album_name = '" + GetDUALBundleName() +" Share';";
1067     auto resultSet = photosStorePtr->QuerySql(queryTrashed);
1068     ASSERT_FALSE(resultSet == nullptr);
1069     ASSERT_TRUE(resultSet->GoToNextRow() == NativeRdb::E_OK);
1070 
1071     queryTrashed = "SELECT file_id from Photos where display_name = '" + GetDUALBundleName() + "Share2.jpg';";
1072     resultSet = photosStorePtr->QuerySql(queryTrashed);
1073     ASSERT_FALSE(resultSet == nullptr);
1074     ASSERT_FALSE(resultSet->GoToNextRow() == NativeRdb::E_OK);
1075     MEDIA_INFO_LOG("medialib_backup_test_ablum_test112 end");
1076     GTEST_LOG_(INFO) << "medialib_backup_test_ablum_test112 end";
1077 }
1078 
1079 HWTEST_F(MediaLibraryBackupTest, medialib_backup_InsertAudio_upgrade, TestSize.Level0)
1080 {
1081     MEDIA_INFO_LOG("medialib_backup_InsertAudio_upgrade start");
1082     std::unique_ptr<UpgradeRestore> upgrade =
1083         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1084     upgrade->mediaLibraryRdb_ = photosStorePtr;
1085     upgrade->migrateAudioDatabaseNumber_ = 0;
1086     std::vector<FileInfo> fileInfos;
1087     FileInfo fileInfo1;
1088     fileInfo1.filePath = "test";
1089     fileInfos.push_back(fileInfo1);
1090     FileInfo fileInfo2;
1091     fileInfo2.filePath = "/storage/cloud/100/files/Documents/CreateImageThumbnailTest_001.jpg";
1092     fileInfo2.cloudPath = "/storage/cloud/files/Audio/10/AUD_3322.jpg";
1093     fileInfos.push_back(fileInfo2);
1094     upgrade->InsertAudio(UPGRADE_RESTORE_ID, fileInfos);
1095     EXPECT_EQ(upgrade->migrateAudioDatabaseNumber_, 0);
1096     MEDIA_INFO_LOG("medialib_backup_InsertAudio_upgrade end");
1097 }
1098 
1099 HWTEST_F(MediaLibraryBackupTest, medialib_backup_InsertAudio_clone, TestSize.Level0)
1100 {
1101     MEDIA_INFO_LOG("medialib_backup_InsertAudio_clone start");
1102     std::unique_ptr<UpgradeRestore> upgrade =
1103         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1104     upgrade->mediaLibraryRdb_ = photosStorePtr;
1105     upgrade->migrateAudioDatabaseNumber_ = 0;
1106     std::vector<FileInfo> fileInfos;
1107     FileInfo fileInfo1;
1108     fileInfo1.filePath = "test";
1109     fileInfos.push_back(fileInfo1);
1110     FileInfo fileInfo2;
1111     fileInfo2.filePath = "/storage/cloud/100/files/Documents/CreateImageThumbnailTest_001.jpg";
1112     fileInfo2.cloudPath = "/storage/cloud/files/Audio/10/AUD_3322.jpg";
1113     fileInfos.push_back(fileInfo2);
1114     upgrade->InsertAudio(DUAL_FRAME_CLONE_RESTORE_ID, fileInfos);
1115     EXPECT_EQ(upgrade->migrateAudioDatabaseNumber_, 0);
1116     MEDIA_INFO_LOG("medialib_backup_InsertAudio_clone end");
1117 }
1118 
1119 HWTEST_F(MediaLibraryBackupTest, medialib_backup_InsertAudio_empty_file, TestSize.Level0)
1120 {
1121     MEDIA_INFO_LOG("medialib_backup_InsertAudio_empty_file start");
1122     std::unique_ptr<UpgradeRestore> upgrade =
1123         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1124     upgrade->mediaLibraryRdb_ = photosStorePtr;
1125     upgrade->migrateAudioDatabaseNumber_ = 0;
1126     std::vector<FileInfo> fileInfos;
1127     upgrade->InsertAudio(DUAL_FRAME_CLONE_RESTORE_ID, fileInfos);
1128     EXPECT_EQ(upgrade->migrateAudioDatabaseNumber_, 0);
1129     MEDIA_INFO_LOG("medialib_backup_InsertAudio_empty_file end");
1130 }
1131 
1132 HWTEST_F(MediaLibraryBackupTest, medialib_backup_MoveDirectory, TestSize.Level0)
1133 {
1134     MEDIA_INFO_LOG("medialib_backup_MoveDirectory start");
1135     std::unique_ptr<UpgradeRestore> upgrade =
1136         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1137     string srcDir = "/data/test";
1138     string dstDir = "/data/test1";
1139     EXPECT_EQ(upgrade->MoveDirectory(srcDir, dstDir), E_OK);
1140     // delete the destination directory after moving to prevent errors caused by an existing directory
1141     auto ret = MediaFileUtils::DeleteDir(dstDir);
1142     EXPECT_EQ(ret, true);
1143     MEDIA_INFO_LOG("medialib_backup_MoveDirectory end");
1144 }
1145 
1146 HWTEST_F(MediaLibraryBackupTest, medialib_backup_BatchQueryPhoto, TestSize.Level0)
1147 {
1148     MEDIA_INFO_LOG("medialib_backup_BatchQueryPhoto start");
1149     vector<FileInfo> fileInfos;
1150     FileInfo fileInfo1;
1151     fileInfo1.cloudPath = "test";
1152     fileInfo1.mediaAlbumId = TEST_FALSE_MEDIAID;
1153     fileInfos.push_back(fileInfo1);
1154 
1155     FileInfo fileInfo2;
1156     fileInfo2.cloudPath = "";
1157     fileInfo2.mediaAlbumId = TEST_FALSE_MEDIAID;
1158     fileInfos.push_back(fileInfo2);
1159 
1160     FileInfo fileInfo3;
1161     fileInfo3.cloudPath = "test";
1162     fileInfo3.mediaAlbumId = TEST_TRUE_MEDIAID;
1163     fileInfos.push_back(fileInfo3);
1164 
1165     FileInfo fileInfo4;
1166     fileInfo4.cloudPath = "";
1167     fileInfo4.mediaAlbumId = TEST_TRUE_MEDIAID;
1168     fileInfos.push_back(fileInfo4);
1169     std::unique_ptr<UpgradeRestore> upgrade =
1170         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1171     NeedQueryMap needQueryMap;
1172     upgrade->NeedBatchQueryPhotoForPhotoMap(fileInfos, needQueryMap);
1173     upgrade->BatchQueryPhoto(fileInfos, false, needQueryMap);
1174     EXPECT_EQ(fileInfos[0].fileIdNew, TEST_FALSE_MEDIAID);
1175     MEDIA_INFO_LOG("medialib_backup_BatchQueryPhoto end");
1176 }
1177 
1178 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ParseXml_002, TestSize.Level0)
1179 {
1180     GTEST_LOG_(INFO) << "medialib_backup_test_ParseXml_002 start";
1181     std::unique_ptr<UpgradeRestore> upgrade =
1182         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1183     string xmlPath = "/data/test/backup/test1.xml";
1184     auto res = upgrade->ParseXml(xmlPath);
1185     EXPECT_EQ(res, -1);
1186     GTEST_LOG_(INFO) << "medialib_backup_test_ParseXml_002 end";
1187 }
1188 
1189 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ParseXml_003, TestSize.Level0)
1190 {
1191     GTEST_LOG_(INFO) << "medialib_backup_test_ParseXml_003 start";
1192     std::unique_ptr<UpgradeRestore> upgrade =
1193         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1194     string xmlPath = "/data/test/backup/test2.xml";
1195     auto res = upgrade->ParseXml(xmlPath);
1196     EXPECT_EQ(res, -1);
1197     GTEST_LOG_(INFO) << "medialib_backup_test_ParseXml_003 end";
1198 }
1199 
1200 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ParseXml_004, TestSize.Level0)
1201 {
1202     GTEST_LOG_(INFO) << "medialib_backup_test_ParseXml_004 start";
1203     std::unique_ptr<UpgradeRestore> upgrade =
1204         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1205     string xmlPath = "/data/test/backup/test3.xml";
1206     auto res = upgrade->ParseXml(xmlPath);
1207     EXPECT_EQ(res, -1);
1208     GTEST_LOG_(INFO) << "medialib_backup_test_ParseXml_004 end";
1209 }
1210 
1211 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_ParseXml_005, TestSize.Level0)
1212 {
1213     GTEST_LOG_(INFO) << "medialib_backup_test_ParseXml_005 start";
1214     std::unique_ptr<UpgradeRestore> upgrade =
1215         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1216     string xmlPath = "/data/test/backup/test4.xml";
1217     auto res = upgrade->ParseXml(xmlPath);
1218     EXPECT_EQ(res, -1);
1219     GTEST_LOG_(INFO) << "medialib_backup_test_ParseXml_005 end";
1220 }
1221 
1222 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_StringToInt_001, TestSize.Level0)
1223 {
1224     GTEST_LOG_(INFO) << "medialib_backup_test_StringToInt_001 start";
1225     std::unique_ptr<UpgradeRestore> upgrade =
1226         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1227     string xmlPath = "";
1228     auto res = upgrade->StringToInt(xmlPath);
1229     EXPECT_EQ(res, 0);
1230     GTEST_LOG_(INFO) << "medialib_backup_test_StringToInt_001 end";
1231 }
1232 
1233 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_StringToInt_002, TestSize.Level0)
1234 {
1235     GTEST_LOG_(INFO) << "medialib_backup_test_StringToInt_002 start";
1236     std::unique_ptr<UpgradeRestore> upgrade =
1237         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1238     string xmlPath = "   22e";
1239     auto res = upgrade->StringToInt(xmlPath);
1240     EXPECT_EQ(res, 0);
1241     GTEST_LOG_(INFO) << "medialib_backup_test_StringToInt_002 end";
1242 }
1243 
1244 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_StringToInt_003, TestSize.Level0)
1245 {
1246     GTEST_LOG_(INFO) << "medialib_backup_test_StringToInt_003 start";
1247     std::unique_ptr<UpgradeRestore> upgrade =
1248         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1249     string xmlPath = "777777777777777777777777777777777777777777777777777";
1250     auto res = upgrade->StringToInt(xmlPath);
1251     EXPECT_EQ(res, 0);
1252     GTEST_LOG_(INFO) << "medialib_backup_test_StringToInt_003 end";
1253 }
1254 
1255 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_SetValueFromMetaData, TestSize.Level0)
1256 {
1257     GTEST_LOG_(INFO) << "medialib_backup_test_SetValueFromMetaData start";
1258     std::unique_ptr<UpgradeRestore> upgrade =
1259         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1260 
1261     // hasOrientation = true and fileinfo.fileType != MEDIA_TYPE_VIDEO
1262     FileInfo fileInfo;
1263     fileInfo.fileType = MEDIA_TYPE_FILE;
1264     NativeRdb::ValuesBucket valueBucket;
1265     valueBucket.PutString(PhotoColumn::PHOTO_ORIENTATION, "test");
1266     upgrade->SetValueFromMetaData(fileInfo, valueBucket);
1267     GTEST_LOG_(INFO) << "medialib_backup_test_SetValueFromMetaData end";
1268 }
1269 
1270 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_GetBackupInfo, TestSize.Level0)
1271 {
1272     GTEST_LOG_(INFO) << "medialib_backup_test_GetBackupInfo start";
1273     std::unique_ptr<UpgradeRestore> upgrade =
1274         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1275 
1276     string str = upgrade->GetBackupInfo();
1277     EXPECT_EQ(str, "");
1278     GTEST_LOG_(INFO) << "medialib_backup_test_GetBackupInfo end";
1279 }
1280 
1281 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_InsertPhoto_empty, TestSize.Level0)
1282 {
1283     GTEST_LOG_(INFO) << "medialib_backup_test_InsertPhoto_empty start";
1284     std::unique_ptr<UpgradeRestore> upgrade =
1285         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1286 
1287     // empty mediaLibraryRdb_
1288     int sceneCode = 0;
1289     int32_t sourceType = 0;
1290     vector<FileInfo> fileInfos;
1291     upgrade->mediaLibraryRdb_ = nullptr;
1292     upgrade->InsertPhoto(sceneCode, fileInfos, sourceType);
1293 
1294     //normal mediaLibraryRdb_ and empty file
1295     upgrade->mediaLibraryRdb_ = photosStorePtr;
1296     upgrade->InsertPhoto(sceneCode, fileInfos, sourceType);
1297     GTEST_LOG_(INFO) << "medialib_backup_test_InsertPhoto_empty end";
1298 }
1299 
1300 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_InsertPhoto_normal, TestSize.Level0)
1301 {
1302     GTEST_LOG_(INFO) << "medialib_backup_test_InsertPhoto_normal start";
1303     std::unique_ptr<UpgradeRestore> upgrade =
1304         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1305 
1306     int sceneCode = 0;
1307     FileInfo fileInfo1;
1308     FileInfo fileInfo2;
1309     int32_t sourceType = SourceType::GALLERY;
1310     upgrade->mediaLibraryRdb_ = photosStorePtr;
1311 
1312     vector<FileInfo> fileInfos;
1313     fileInfo1.filePath = "test";
1314     fileInfos.push_back(fileInfo1);
1315     fileInfo2.filePath = "/storage/cloud/100/files/Documents/CreateImageThumbnailTest_001.jpg";
1316     fileInfo2.cloudPath = "storage/cloud/files/Audio/10/AUD_3322/jpg";
1317     fileInfos.push_back(fileInfo2);
1318     upgrade->InsertPhoto(sceneCode, fileInfos, sourceType);
1319 
1320     // insertPhoto sourceType != SourceType::GALLERY
1321     sourceType = SourceType::EXTERNAL_CAMERA;
1322     upgrade->InsertPhoto(sceneCode, fileInfos, sourceType);
1323     GTEST_LOG_(INFO) << "medialib_backup_test_InsertPhoto_normal end";
1324 }
1325 
1326 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_UpdateFailedFileByFileType_image, TestSize.Level0)
1327 {
1328     GTEST_LOG_(INFO) << "medialib_backup_test_UpdateFailedFileByFileType_image start";
1329     std::unique_ptr<UpgradeRestore> upgrade =
1330         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1331 
1332     // type = image
1333     int32_t errCode = 0;
1334     string path = "image/";
1335     string type = STAT_TYPE_PHOTO;
1336     int32_t fileType = MediaType::MEDIA_TYPE_IMAGE;
1337     FileInfo fileInfo;
1338     fileInfo.oldPath = path;
1339 
1340     upgrade->UpdateFailedFileByFileType(fileType, fileInfo, errCode);
1341     auto ret = upgrade->GetFailedFiles(type);
1342     // ret[path] = errCode
1343     EXPECT_EQ(ret[path].errorCode, to_string(errCode));
1344     GTEST_LOG_(INFO) << "medialib_backup_test_UpdateFailedFileByFileType_image end";
1345 }
1346 
1347 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_UpdateFailedFileByFileType_video, TestSize.Level0)
1348 {
1349     GTEST_LOG_(INFO) << "medialib_backup_test_UpdateFailedFileByFileType_video start";
1350     std::unique_ptr<UpgradeRestore> upgrade =
1351         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1352 
1353     // type = video
1354     int32_t errCode = 1;
1355     string path = "video/";
1356     string type = STAT_TYPE_VIDEO;
1357     int32_t fileType = MediaType::MEDIA_TYPE_VIDEO;
1358     FileInfo fileInfo;
1359     fileInfo.oldPath = path;
1360 
1361     upgrade->UpdateFailedFileByFileType(fileType, fileInfo, errCode);
1362     auto ret = upgrade->GetFailedFiles(type);
1363     // ret[path] = errCode
1364     EXPECT_EQ(ret[path].errorCode, to_string(errCode));
1365     GTEST_LOG_(INFO) << "medialib_backup_test_UpdateFailedFileByFileType_video end";
1366 }
1367 
1368 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_UpdateFailedFileByFileType_audio, TestSize.Level0)
1369 {
1370     GTEST_LOG_(INFO) << "medialib_backup_test_UpdateFailedFileByFileType_audio start";
1371     std::unique_ptr<UpgradeRestore> upgrade =
1372         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1373 
1374     // type = audio
1375     int32_t errCode = -1;
1376     string path = "audio/";
1377     string type = STAT_TYPE_AUDIO;
1378     int32_t fileType = MediaType::MEDIA_TYPE_AUDIO;
1379     FileInfo fileInfo;
1380     fileInfo.oldPath = path;
1381 
1382     upgrade->UpdateFailedFileByFileType(fileType, fileInfo, errCode);
1383     auto ret = upgrade->GetFailedFiles(type);
1384     // ret[path] = errCode
1385     EXPECT_EQ(ret[path].errorCode, to_string(errCode));
1386     GTEST_LOG_(INFO) << "medialib_backup_test_UpdateFailedFileByFileType_audio end";
1387 }
1388 
1389 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_UpdateFailedFileByFileType_illegal_filetype, TestSize.Level0)
1390 {
1391     GTEST_LOG_(INFO) << "medialib_backup_test_UpdateFailedFileByFileType_illegal_filetype start";
1392     std::unique_ptr<UpgradeRestore> upgrade =
1393         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1394 
1395     // illegal file type
1396     int32_t fileType = -1;
1397     string path = "test_path";
1398     int32_t errCode = 3;
1399     FileInfo fileInfo;
1400     fileInfo.oldPath = path;
1401 
1402     upgrade->UpdateFailedFileByFileType(fileType, fileInfo, errCode);
1403     auto ret = upgrade->GetErrorInfoJson();
1404     string str = ret[STAT_KEY_ERROR_INFO].dump();
1405     str.erase(std::remove(str.begin(), str.end(), '\"'), str.end());
1406     EXPECT_EQ(str, "");
1407     GTEST_LOG_(INFO) << "medialib_backup_test_UpdateFailedFileByFileType_illegal_filetype end";
1408 }
1409 
1410 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_SetErrorCode, TestSize.Level0)
1411 {
1412     GTEST_LOG_(INFO) << "medialib_backup_test_SetErrorCode start";
1413     std::unique_ptr<UpgradeRestore> upgrade =
1414         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1415 
1416     // errCode = INIT_FAILED
1417     int32_t errCode = INIT_FAILED;
1418     upgrade->SetErrorCode(errCode);
1419     auto ret = upgrade->GetErrorInfoJson();
1420     string str = ret[STAT_KEY_ERROR_INFO].dump();
1421     str.erase(std::remove(str.begin(), str.end(), '\"'), str.end());
1422     EXPECT_EQ(str, "RESTORE_INIT_FAILED");
1423 
1424     // illegal errCode
1425     errCode = 999;
1426     upgrade->SetErrorCode(errCode);
1427     ret = upgrade->GetErrorInfoJson();
1428     str = ret[STAT_KEY_ERROR_INFO].dump();
1429     str.erase(std::remove(str.begin(), str.end(), '\"'), str.end());
1430     EXPECT_EQ(str.length(), 0);
1431     GTEST_LOG_(INFO) << "medialib_backup_test_SetErrorCode end";
1432 }
1433 
1434 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_GetSubCountInfo_illegal_type, TestSize.Level0)
1435 {
1436     GTEST_LOG_(INFO) << "medialib_backup_test_GetSubCountInfo_illegal_type start";
1437     std::unique_ptr<UpgradeRestore> upgrade =
1438         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1439 
1440     // case 1 illegal type GetSubCountInfo will return empty failedFiles
1441     string type = "test_types";
1442     SubCountInfo ret = upgrade->GetSubCountInfo(type);
1443     EXPECT_EQ(ret.failedFiles.empty(), 1);
1444     GTEST_LOG_(INFO) << "medialib_backup_test_GetSubCountInfo_illegal_type end";
1445 }
1446 
1447 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_GetCountInfoJson_empty_types, TestSize.Level0)
1448 {
1449     GTEST_LOG_(INFO) << "medialib_backup_test_GetCountInfoJson_empty_types start";
1450     std::unique_ptr<UpgradeRestore> upgrade =
1451         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1452 
1453     vector<string> types;
1454     auto ret = upgrade->GetCountInfoJson(types);
1455     //json node not available will return null
1456     string str = ret[STAT_KEY_INFOS].dump();
1457     str.erase(std::remove(str.begin(), str.end(), '\"'), str.end());
1458     EXPECT_EQ(str, "null");
1459     GTEST_LOG_(INFO) << "medialib_backup_test_GetCountInfoJson_empty_types end";
1460 }
1461 
1462 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_GetCountInfoJson_normal_types, TestSize.Level0)
1463 {
1464     GTEST_LOG_(INFO) << "medialib_backup_test_GetCountInfoJson_normal_types start";
1465     std::unique_ptr<UpgradeRestore> upgrade =
1466         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1467 
1468     vector<string> types = STAT_TYPES;
1469     auto ret = upgrade->GetCountInfoJson(types);
1470     // stat_types[1] = video ret[1][STAT_KEY_BACKUP_INFO] = video
1471     auto str = ret[STAT_KEY_INFOS][1][STAT_KEY_BACKUP_INFO].dump();
1472     str.erase(std::remove(str.begin(), str.end(), '\"'), str.end());
1473     EXPECT_EQ(str, "video");
1474     GTEST_LOG_(INFO) << "medialib_backup_test_GetCountInfoJson_normal_types end";
1475 }
1476 
1477 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_GetCountInfoJson_illegal_types, TestSize.Level0)
1478 {
1479     GTEST_LOG_(INFO) << "medialib_backup_test_GetCountInfoJson_illegal_types start";
1480     std::unique_ptr<UpgradeRestore> upgrade =
1481         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1482 
1483     vector<string> types = { "test" };
1484     auto ret = upgrade->GetCountInfoJson(types);
1485     string str = ret[STAT_KEY_INFOS][0][STAT_KEY_BACKUP_INFO].dump();
1486     str.erase(std::remove(str.begin(), str.end(), '\"'), str.end());
1487     EXPECT_EQ(str, "test");
1488     GTEST_LOG_(INFO) << "medialib_backup_test_GetCountInfoJson_illegal_types end";
1489 }
1490 
1491 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_need_batch_query_photo, TestSize.Level0)
1492 {
1493     GTEST_LOG_(INFO) << "medialib_backup_test_need_batch_query_photo start";
1494     std::unique_ptr<UpgradeRestore> upgrade =
1495         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, UPGRADE_RESTORE_ID);
1496     std::vector<FileInfo> fileInfos;
1497     NeedQueryMap needQueryMap;
1498     auto ret = upgrade->NeedBatchQueryPhoto(fileInfos, needQueryMap);
1499     EXPECT_EQ(ret, false);
1500     EXPECT_EQ(needQueryMap.empty(), true);
1501     GTEST_LOG_(INFO) << "medialib_backup_test_need_batch_query_photo end";
1502 }
1503 
TestConvertPathToRealPathByStorageType(bool isSd)1504 void TestConvertPathToRealPathByStorageType(bool isSd)
1505 {
1506     std::string srcPath = isSd ? "/storage/ABCD-0000" : "/storage/emulated/0";
1507     srcPath += TEST_RELATIVE_PATH;
1508     FileInfo fileInfo;
1509     fileInfo.fileSize = TEST_SIZE_2MB_BELOW;
1510     fileInfo.localMediaId = TEST_LOCAL_MEDIA_ID;
1511     std::unique_ptr<UpgradeRestore> upgrade =
1512         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1513     std::string newPath;
1514     std::string relativePath;
1515     bool result = upgrade->ConvertPathToRealPath(srcPath, TEST_PATH_PREFIX, newPath, relativePath, fileInfo);
1516     EXPECT_EQ(result, true);
1517     EXPECT_EQ(newPath, TEST_PATH_PREFIX + srcPath);
1518     EXPECT_EQ(relativePath, TEST_RELATIVE_PATH);
1519 }
1520 
1521 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_convert_path_to_real_path_001, TestSize.Level0)
1522 {
1523     GTEST_LOG_(INFO) << "medialib_backup_test_convert_path_to_real_path_001 start";
1524     TestConvertPathToRealPathByStorageType(false); // internal, normal
1525     GTEST_LOG_(INFO) << "medialib_backup_test_convert_path_to_real_path_001 end";
1526 }
1527 
1528 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_convert_path_to_real_path_002, TestSize.Level0)
1529 {
1530     GTEST_LOG_(INFO) << "medialib_backup_test_convert_path_to_real_path_002 start";
1531     TestConvertPathToRealPathByStorageType(true); // sd card, normal
1532     GTEST_LOG_(INFO) << "medialib_backup_test_convert_path_to_real_path_002 end";
1533 }
1534 
TestConvertPathToRealPathByFileSize(int64_t fileSize,const std::string & srcPath,const std::string & expectedNewPath)1535 void TestConvertPathToRealPathByFileSize(int64_t fileSize, const std::string &srcPath,
1536     const std::string &expectedNewPath)
1537 {
1538     FileInfo fileInfo;
1539     fileInfo.fileSize = fileSize;
1540     fileInfo.localMediaId = TEST_LOCAL_MEDIA_ID;
1541     std::unique_ptr<UpgradeRestore> upgrade =
1542         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1543     std::string newPath;
1544     std::string relativePath;
1545     bool result = upgrade->ConvertPathToRealPath(srcPath, TEST_PATH_PREFIX, newPath, relativePath, fileInfo);
1546     EXPECT_EQ(result, true);
1547     EXPECT_EQ(newPath, expectedNewPath);
1548     EXPECT_EQ(relativePath, TEST_RELATIVE_PATH);
1549 }
1550 
1551 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_convert_path_to_real_path_003, TestSize.Level0)
1552 {
1553     GTEST_LOG_(INFO) << "medialib_backup_test_convert_path_to_real_path_003 start";
1554     std::string srcPath = "/storage/ABCD-0000" + TEST_RELATIVE_PATH;
1555     std::string expectedNewPath = TEST_PATH_PREFIX + srcPath;
1556     TestConvertPathToRealPathByFileSize(TEST_SIZE_2MB_BELOW, srcPath, expectedNewPath); // Sd, below 2MB
1557     GTEST_LOG_(INFO) << "medialib_backup_test_convert_path_to_real_path_003 end";
1558 }
1559 
1560 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_convert_path_to_real_path_004, TestSize.Level0)
1561 {
1562     GTEST_LOG_(INFO) << "medialib_backup_test_convert_path_to_real_path_004 start";
1563     std::string srcPath = "/storage/ABCD-0000" + TEST_RELATIVE_PATH;
1564     std::string expectedNewPath = TEST_PATH_PREFIX + TEST_RELATIVE_PATH;
1565     TestConvertPathToRealPathByFileSize(TEST_SIZE_2MB, srcPath, expectedNewPath); // Sd, equal to 2MB
1566     GTEST_LOG_(INFO) << "medialib_backup_test_convert_path_to_real_path_004 end";
1567 }
1568 
1569 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_convert_path_to_real_path_005, TestSize.Level0)
1570 {
1571     GTEST_LOG_(INFO) << "medialib_backup_test_convert_path_to_real_path_005 start";
1572     std::string srcPath = "/storage/ABCD-0000" + TEST_RELATIVE_PATH;
1573     std::string expectedNewPath = TEST_PATH_PREFIX + TEST_RELATIVE_PATH;
1574     TestConvertPathToRealPathByFileSize(TEST_SIZE_2MB_ABOVE, srcPath, expectedNewPath); // Sd, above 2MB
1575     GTEST_LOG_(INFO) << "medialib_backup_test_convert_path_to_real_path_005 end";
1576 }
1577 
TestConvertPathToRealPathByLocalMediaId(int32_t localMediaId,const std::string & srcPath,const std::string & expectedNewPath)1578 void TestConvertPathToRealPathByLocalMediaId(int32_t localMediaId, const std::string &srcPath,
1579     const std::string &expectedNewPath)
1580 {
1581     FileInfo fileInfo;
1582     fileInfo.fileSize = TEST_SIZE_2MB_ABOVE;
1583     fileInfo.localMediaId = localMediaId;
1584     std::unique_ptr<UpgradeRestore> upgrade =
1585         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1586     std::string newPath;
1587     std::string relativePath;
1588     bool result = upgrade->ConvertPathToRealPath(srcPath, TEST_PATH_PREFIX, newPath, relativePath, fileInfo);
1589     EXPECT_EQ(result, true);
1590     EXPECT_EQ(newPath, expectedNewPath);
1591     EXPECT_EQ(relativePath, TEST_RELATIVE_PATH);
1592 }
1593 
1594 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_convert_path_to_real_path_006, TestSize.Level0)
1595 {
1596     GTEST_LOG_(INFO) << "medialib_backup_test_convert_path_to_real_path_006 start";
1597     std::string srcPath = "/storage/ABCD-0000" + TEST_RELATIVE_PATH;
1598     std::string expectedNewPath = TEST_PATH_PREFIX + srcPath;
1599     TestConvertPathToRealPathByLocalMediaId(GALLERY_HIDDEN_ID, srcPath, expectedNewPath); // Sd, hidden
1600     GTEST_LOG_(INFO) << "medialib_backup_test_convert_path_to_real_path_006 end";
1601 }
1602 
1603 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_convert_path_to_real_path_007, TestSize.Level0)
1604 {
1605     GTEST_LOG_(INFO) << "medialib_backup_test_convert_path_to_real_path_007 start";
1606     std::string srcPath = "/storage/ABCD-0000" + TEST_RELATIVE_PATH;
1607     std::string expectedNewPath = TEST_PATH_PREFIX + srcPath;
1608     TestConvertPathToRealPathByLocalMediaId(GALLERY_TRASHED_ID, srcPath, expectedNewPath); // Sd, trashed
1609     GTEST_LOG_(INFO) << "medialib_backup_test_convert_path_to_real_path_007 end";
1610 }
1611 
1612 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_get_path_pos_by_prefix_level, TestSize.Level0)
1613 {
1614     GTEST_LOG_(INFO) << "medialib_backup_test_get_path_pos_by_prefix_level start";
1615     std::string path = "/../";
1616     size_t pos = 0;
1617     bool result = BackupFileUtils::GetPathPosByPrefixLevel(DUAL_FRAME_CLONE_RESTORE_ID, path, TEST_PREFIX_LEVEL,
1618         pos);
1619     EXPECT_EQ(result, false);
1620     GTEST_LOG_(INFO) << "medialib_backup_test_get_path_pos_by_prefix_level end";
1621 }
1622 
1623 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_update_duplicate_number, TestSize.Level0)
1624 {
1625     GTEST_LOG_(INFO) << "medialib_backup_test_update_duplicate_number start";
1626     std::unique_ptr<UpgradeRestore> upgrade =
1627         std::make_unique<UpgradeRestore>(GALLERY_APP_NAME, MEDIA_APP_NAME, DUAL_FRAME_CLONE_RESTORE_ID);
1628     upgrade->UpdateDuplicateNumber(MediaType::MEDIA_TYPE_IMAGE);
1629     EXPECT_GT(upgrade->migratePhotoDuplicateNumber_, 0);
1630     upgrade->UpdateDuplicateNumber(MediaType::MEDIA_TYPE_VIDEO);
1631     EXPECT_GT(upgrade->migrateVideoDuplicateNumber_, 0);
1632     upgrade->UpdateDuplicateNumber(MediaType::MEDIA_TYPE_AUDIO);
1633     EXPECT_GT(upgrade->migrateAudioDuplicateNumber_, 0);
1634     uint64_t photoBefore = upgrade->migratePhotoDuplicateNumber_;
1635     uint64_t videoBefore = upgrade->migrateVideoDuplicateNumber_;
1636     uint64_t audioBefore = upgrade->migrateAudioDuplicateNumber_;
1637     upgrade->UpdateDuplicateNumber(-1);
1638     EXPECT_EQ(upgrade->migratePhotoDuplicateNumber_, photoBefore);
1639     EXPECT_EQ(upgrade->migrateVideoDuplicateNumber_, videoBefore);
1640     EXPECT_EQ(upgrade->migrateAudioDuplicateNumber_, audioBefore);
1641     GTEST_LOG_(INFO) << "medialib_backup_test_update_duplicate_number end";
1642 }
1643 
1644 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_update_sd_where_clause, TestSize.Level0)
1645 {
1646     GTEST_LOG_(INFO) << "medialib_backup_test_update_sd_where_clause start";
1647     std::string whereClause;
1648     BackupDatabaseUtils::UpdateSdWhereClause(whereClause, true);
1649     EXPECT_EQ(whereClause.empty(), true);
1650     BackupDatabaseUtils::UpdateSdWhereClause(whereClause, false);
1651     EXPECT_EQ(whereClause.empty(), false);
1652     GTEST_LOG_(INFO) << "medialib_backup_test_update_sd_where_clause end";
1653 }
1654 
1655 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_get_landmarks_scale_001, TestSize.Level0)
1656 {
1657     GTEST_LOG_(INFO) << "medialib_backup_test_get_landmarks_scale_001 start";
1658     int length = TEST_SIZE_MIN; // (0, 2 * min), no need to scale
1659     float scale = BackupDatabaseUtils::GetLandmarksScale(length, length);
1660     EXPECT_EQ(scale, 1);
1661     GTEST_LOG_(INFO) << "medialib_backup_test_get_landmarks_scale_001 end";
1662 }
1663 
1664 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_get_landmarks_scale_002, TestSize.Level0)
1665 {
1666     GTEST_LOG_(INFO) << "medialib_backup_test_get_landmarks_scale_002 start";
1667     int length = TEST_SIZE_MIN * TEST_SIZE_MULT_UNIT + TEST_SIZE_INCR_UNIT; // [2 * min, 4 * min)
1668     float scale = BackupDatabaseUtils::GetLandmarksScale(length, length);
1669     float expectedScale = 1.0 / TEST_SIZE_MULT_UNIT;
1670     EXPECT_EQ(scale, expectedScale);
1671     GTEST_LOG_(INFO) << "medialib_backup_test_get_landmarks_scale_002 end";
1672 }
1673 
1674 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_get_landmarks_scale_003, TestSize.Level0)
1675 {
1676     GTEST_LOG_(INFO) << "medialib_backup_test_get_landmarks_scale_003 start";
1677     int length = TEST_SIZE_MIN * TEST_SIZE_MULT_UNIT * TEST_SIZE_MULT_UNIT; // [4 * min, ...)
1678     float scale = BackupDatabaseUtils::GetLandmarksScale(length, length);
1679     float expectedScale = 1.0 / TEST_SIZE_MULT_UNIT / TEST_SIZE_MULT_UNIT;
1680     EXPECT_EQ(scale, expectedScale);
1681     GTEST_LOG_(INFO) << "medialib_backup_test_get_landmarks_scale_003 end";
1682 }
1683 
1684 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_get_landmarks_scale_004, TestSize.Level0)
1685 {
1686     GTEST_LOG_(INFO) << "medialib_backup_test_get_landmarks_scale_004 start";
1687     int width = TEST_SIZE_MIN;
1688     int height = TEST_SIZE_MAX * TEST_SIZE_MULT_UNIT; // max len exceeds
1689     float scale = BackupDatabaseUtils::GetLandmarksScale(width, height);
1690     float expectedScale = 1.0 / TEST_SIZE_MULT_UNIT;
1691     EXPECT_EQ(scale, expectedScale);
1692     GTEST_LOG_(INFO) << "medialib_backup_test_get_landmarks_scale_004 end";
1693 }
1694 
InitFaceInfoScale(FaceInfo & faceInfo,float scaleX,float scaleY,float scaleWidth,float scaleHeight)1695 void InitFaceInfoScale(FaceInfo &faceInfo, float scaleX, float scaleY, float scaleWidth, float scaleHeight)
1696 {
1697     faceInfo.scaleX = scaleX;
1698     faceInfo.scaleY = scaleY;
1699     faceInfo.scaleWidth = scaleWidth;
1700     faceInfo.scaleHeight = scaleHeight;
1701 }
1702 
1703 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_is_landmark_valid_001, TestSize.Level0)
1704 {
1705     GTEST_LOG_(INFO) << "medialib_backup_test_is_landmark_valid_001 start";
1706     FaceInfo faceInfo;
1707     InitFaceInfoScale(faceInfo, TEST_SCALE_MIN, TEST_SCALE_MIN, TEST_SCALE_MAX - TEST_SCALE_MIN,
1708         TEST_SCALE_MAX - TEST_SCALE_MIN);
1709     bool result = BackupDatabaseUtils::IsLandmarkValid(faceInfo, TEST_LANDMARK_BETWEEN, TEST_LANDMARK_BETWEEN);
1710     EXPECT_EQ(result, true);
1711     GTEST_LOG_(INFO) << "medialib_backup_test_is_landmark_valid_001 end";
1712 }
1713 
1714 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_is_landmark_valid_002, TestSize.Level0)
1715 {
1716     GTEST_LOG_(INFO) << "medialib_backup_test_is_landmark_valid_002 start";
1717     FaceInfo faceInfo;
1718     InitFaceInfoScale(faceInfo, TEST_SCALE_MIN, TEST_SCALE_MIN, TEST_SCALE_MAX - TEST_SCALE_MIN,
1719         TEST_SCALE_MAX - TEST_SCALE_MIN);
1720     bool result = BackupDatabaseUtils::IsLandmarkValid(faceInfo, TEST_LANDMARK_BETWEEN, TEST_LANDMARK_BELOW);
1721     EXPECT_EQ(result, false);
1722     GTEST_LOG_(INFO) << "medialib_backup_test_is_landmark_valid_002 end";
1723 }
1724 
1725 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_is_landmark_valid_003, TestSize.Level0)
1726 {
1727     GTEST_LOG_(INFO) << "medialib_backup_test_is_landmark_valid_003 start";
1728     FaceInfo faceInfo;
1729     InitFaceInfoScale(faceInfo, TEST_SCALE_MIN, TEST_SCALE_MIN, TEST_SCALE_MAX - TEST_SCALE_MIN,
1730         TEST_SCALE_MAX - TEST_SCALE_MIN);
1731     bool result = BackupDatabaseUtils::IsLandmarkValid(faceInfo, TEST_LANDMARK_BETWEEN, TEST_LANDMARK_ABOVE);
1732     EXPECT_EQ(result, false);
1733     GTEST_LOG_(INFO) << "medialib_backup_test_is_landmark_valid_003 end";
1734 }
1735 
1736 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_is_landmark_valid_004, TestSize.Level0)
1737 {
1738     GTEST_LOG_(INFO) << "medialib_backup_test_is_landmark_valid_004 start";
1739     FaceInfo faceInfo;
1740     InitFaceInfoScale(faceInfo, TEST_SCALE_MIN, TEST_SCALE_MIN, TEST_SCALE_MAX - TEST_SCALE_MIN,
1741         TEST_SCALE_MAX - TEST_SCALE_MIN);
1742     bool result = BackupDatabaseUtils::IsLandmarkValid(faceInfo, TEST_LANDMARK_BELOW, TEST_LANDMARK_BETWEEN);
1743     EXPECT_EQ(result, false);
1744     GTEST_LOG_(INFO) << "medialib_backup_test_is_landmark_valid_004 end";
1745 }
1746 
1747 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_is_landmark_valid_005, TestSize.Level0)
1748 {
1749     GTEST_LOG_(INFO) << "medialib_backup_test_is_landmark_valid_005 start";
1750     FaceInfo faceInfo;
1751     InitFaceInfoScale(faceInfo, TEST_SCALE_MIN, TEST_SCALE_MIN, TEST_SCALE_MAX - TEST_SCALE_MIN,
1752         TEST_SCALE_MAX - TEST_SCALE_MIN);
1753     bool result = BackupDatabaseUtils::IsLandmarkValid(faceInfo, TEST_LANDMARK_ABOVE, TEST_LANDMARK_BETWEEN);
1754     EXPECT_EQ(result, false);
1755     GTEST_LOG_(INFO) << "medialib_backup_test_is_landmark_valid_005 end";
1756 }
1757 
ExecuteSqls(shared_ptr<RdbStore> rdbStore,const vector<string> & sqls)1758 void ExecuteSqls(shared_ptr<RdbStore> rdbStore, const vector<string> &sqls)
1759 {
1760     for (const auto &sql : sqls) {
1761         int32_t errCode = rdbStore->ExecuteSql(sql);
1762         if (errCode == E_OK) {
1763             continue;
1764         }
1765         MEDIA_ERR_LOG("Execute %{public}s failed: %{public}d", sql.c_str(), errCode);
1766     }
1767 }
1768 
ClearData(shared_ptr<RdbStore> rdbStore)1769 void ClearData(shared_ptr<RdbStore> rdbStore)
1770 {
1771     MEDIA_INFO_LOG("Start clear data");
1772     ExecuteSqls(rdbStore, CLEAR_SQLS);
1773     MediaLibraryUnitTestUtils::InitUnistore();
1774     auto mediaLibraryRdbStore = MediaLibraryUnistoreManager::GetInstance().GetRdbStore();
1775     MediaLibraryRdbUtils::UpdateAllAlbums(mediaLibraryRdbStore);
1776     MEDIA_INFO_LOG("End clear data");
1777 }
1778 
InsertPhoto(unique_ptr<UpgradeRestore> & upgrade,vector<FileInfo> & fileInfos)1779 void InsertPhoto(unique_ptr<UpgradeRestore> &upgrade, vector<FileInfo> &fileInfos)
1780 {
1781     // Photo
1782     for (auto &fileInfo : fileInfos) {
1783         fileInfo.cloudPath = TEST_CLOUD_PATH_PREFIX + fileInfo.displayName;
1784         ValuesBucket values = upgrade->GetInsertValue(fileInfo, fileInfo.cloudPath, SourceType::GALLERY);
1785         int64_t rowNum = 0;
1786         if (upgrade->mediaLibraryRdb_->Insert(rowNum, PhotoColumn::PHOTOS_TABLE, values) != E_OK) {
1787             MEDIA_ERR_LOG("InsertSql failed, filePath = %{public}s", fileInfo.filePath.c_str());
1788         }
1789     }
1790     // Photo related
1791     upgrade->InsertPhotoRelated(fileInfos, SourceType::GALLERY);
1792 }
1793 
RestorePhotoWithPortrait(unique_ptr<UpgradeRestore> & upgrade)1794 void RestorePhotoWithPortrait(unique_ptr<UpgradeRestore> &upgrade)
1795 {
1796     vector<FileInfo> fileInfos = upgrade->QueryFileInfos(0);
1797     InsertPhoto(upgrade, fileInfos);
1798     upgrade->UpdateFaceAnalysisStatus();
1799 }
1800 
QueryInt(shared_ptr<RdbStore> rdbStore,const string & querySql,const string & columnName,int32_t & result)1801 void QueryInt(shared_ptr<RdbStore> rdbStore, const string &querySql, const string &columnName,
1802     int32_t &result)
1803 {
1804     ASSERT_NE(rdbStore, nullptr);
1805     auto resultSet = rdbStore->QuerySql(querySql);
1806     ASSERT_NE(resultSet, nullptr);
1807     ASSERT_EQ(resultSet->GoToFirstRow(), E_OK);
1808     result = GetInt32Val(columnName, resultSet);
1809     MEDIA_INFO_LOG("Query %{public}s result: %{public}d", querySql.c_str(), result);
1810 }
1811 
QueryPortraitAlbumCount(shared_ptr<RdbStore> rdbStore,int32_t & result)1812 void QueryPortraitAlbumCount(shared_ptr<RdbStore> rdbStore, int32_t &result)
1813 {
1814     string querySql = "SELECT count(DISTINCT group_tag) AS count FROM AnalysisAlbum WHERE album_type = 4096 AND \
1815         album_subtype = 4102";
1816     QueryInt(rdbStore, querySql, "count", result);
1817 }
1818 
QueryPortraitTagCount(shared_ptr<RdbStore> rdbStore,int32_t & result)1819 void QueryPortraitTagCount(shared_ptr<RdbStore> rdbStore, int32_t &result)
1820 {
1821     string querySql = "SELECT count(1) as count FROM tab_analysis_face_tag";
1822     QueryInt(rdbStore, querySql, "count", result);
1823 }
1824 
QueryPortraitPhotoCount(shared_ptr<RdbStore> rdbStore,int32_t & result)1825 void QueryPortraitPhotoCount(shared_ptr<RdbStore> rdbStore, int32_t &result)
1826 {
1827     string querySql = "SELECT count(DISTINCT file_id) as count FROM tab_analysis_image_face";
1828     QueryInt(rdbStore, querySql, "count", result);
1829 }
1830 
QueryPortraitFaceCount(shared_ptr<RdbStore> rdbStore,int32_t & result)1831 void QueryPortraitFaceCount(shared_ptr<RdbStore> rdbStore, int32_t &result)
1832 {
1833     string querySql = "SELECT count(1) as count FROM tab_analysis_image_face";
1834     QueryInt(rdbStore, querySql, "count", result);
1835 }
1836 
QueryPortraitTotalCount(shared_ptr<RdbStore> rdbStore,int32_t & result)1837 void QueryPortraitTotalCount(shared_ptr<RdbStore> rdbStore, int32_t &result)
1838 {
1839     string querySql = "SELECT count(1) as count FROM tab_analysis_total WHERE face > 0";
1840     QueryInt(rdbStore, querySql, "count", result);
1841 }
1842 
1843 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_is_livephoto, TestSize.Level0)
1844 {
1845     MEDIA_INFO_LOG("medialib_backup_test_is_livephoto start");
1846     FileInfo info;
1847     info.specialFileType = 50;
1848     EXPECT_EQ(BackupFileUtils::IsLivePhoto(info), true);
1849     info.specialFileType = 1050;
1850     EXPECT_EQ(BackupFileUtils::IsLivePhoto(info), true);
1851     info.specialFileType = 0;
1852     EXPECT_EQ(BackupFileUtils::IsLivePhoto(info), false);
1853     info.specialFileType = 1000;
1854     EXPECT_EQ(BackupFileUtils::IsLivePhoto(info), false);
1855     info.specialFileType = -50;
1856     EXPECT_EQ(BackupFileUtils::IsLivePhoto(info), false);
1857     MEDIA_INFO_LOG("medialib_backup_test_is_livephoto end");
1858 }
1859 
1860 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_convert_to_moving_photo, TestSize.Level0)
1861 {
1862     MEDIA_INFO_LOG("medialib_backup_test_convert_to_moving_photo start");
1863     string livePhotoPath = "/data/test/backup_test_livephoto.jpg";
1864     EXPECT_EQ(MediaFileUtils::CreateDirectory("/data/test/"), true);
1865     EXPECT_EQ(MediaFileUtils::CreateFile(livePhotoPath), true);
1866 
1867     FileInfo info;
1868     info.filePath = livePhotoPath;
1869     BackupFileUtils::ConvertToMovingPhoto(info);
1870     EXPECT_EQ(info.movingPhotoVideoPath, "/data/test/backup_test_livephoto.jpg.mp4");
1871     EXPECT_EQ(info.extraDataPath, "/data/test/backup_test_livephoto.jpg.extra");
1872 
1873     info.filePath = livePhotoPath;
1874     EXPECT_EQ(MediaFileUtils::CreateFile(info.movingPhotoVideoPath), true);
1875     EXPECT_EQ(MediaFileUtils::CreateFile(info.extraDataPath), true);
1876     BackupFileUtils::ConvertToMovingPhoto(info);
1877     EXPECT_EQ(info.movingPhotoVideoPath, "/data/test/backup_test_livephoto.jpg.mp4.dup.mp4");
1878     EXPECT_EQ(info.extraDataPath, "/data/test/backup_test_livephoto.jpg.extra.dup.extra");
1879     MEDIA_INFO_LOG("medialib_backup_test_convert_to_moving_photo end");
1880 }
1881 
1882 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_file_access_helper, TestSize.Level0)
1883 {
1884     MEDIA_INFO_LOG("medialib_backup_test_file_access_helper start");
1885     string backupFilePath = "/data/test/Pictures/Camera/Flower.png";
1886     EXPECT_EQ(MediaFileUtils::CreateDirectory("/data/test/Pictures/Camera/"), true);
1887     EXPECT_EQ(MediaFileUtils::CreateFile(backupFilePath), true);
1888 
1889     string lowerCasePath = "/data/test/pictures/camera/flower.png";
1890     EXPECT_EQ(-1, access(lowerCasePath.c_str(), F_OK));
1891 
1892     std::shared_ptr<FileAccessHelper> fileAccessHelper_ = std::make_shared<FileAccessHelper>();
1893     string resultPath = lowerCasePath;
1894     bool res = fileAccessHelper_->GetValidPath(resultPath);
1895     EXPECT_EQ(true, res);
1896     EXPECT_EQ(backupFilePath, resultPath);
1897 
1898     resultPath = "/data/test/Pictures/Camera/FlowerNOT.png";
1899     res = fileAccessHelper_->GetValidPath(resultPath);
1900     EXPECT_EQ(false, res);
1901 
1902     MEDIA_INFO_LOG("medialib_backup_test_file_access_helper end");
1903 }
1904 
1905 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_media_type_beyong_1_3, TestSize.Level0)
1906 {
1907     MEDIA_INFO_LOG("medialib_backup_test_media_type start");
1908     PhotosRestore photosRestore;
1909     FileInfo fileInfo;
1910     fileInfo.displayName = "abc.jpg";
1911     MimeTypeUtils::InitMimeTypeMap();
1912     EXPECT_EQ(photosRestore.FindMediaType(fileInfo), MediaType::MEDIA_TYPE_IMAGE);
1913     fileInfo.displayName = "abc.mp4";
1914     EXPECT_EQ(photosRestore.FindMediaType(fileInfo), MediaType::MEDIA_TYPE_VIDEO);
1915     fileInfo.fileType = 1;
1916     fileInfo.displayName = "abc.mp4";
1917     EXPECT_EQ(photosRestore.FindMediaType(fileInfo), MediaType::MEDIA_TYPE_IMAGE);
1918     fileInfo.fileType = 3;
1919     fileInfo.displayName = "abc.jpg";
1920     EXPECT_EQ(photosRestore.FindMediaType(fileInfo), MediaType::MEDIA_TYPE_VIDEO);
1921     MEDIA_INFO_LOG("medialib_backup_test_media_type end");
1922 }
1923 
TestAppTwinData(const string & path,const string & expectedExtraPrefix,int32_t sceneCode=UPGRADE_RESTORE_ID)1924 void TestAppTwinData(const string &path, const string &expectedExtraPrefix, int32_t sceneCode = UPGRADE_RESTORE_ID)
1925 {
1926     string extraPrefix = BackupFileUtils::GetExtraPrefixForRealPath(sceneCode, path);
1927     MEDIA_INFO_LOG("path: %{public}s, extraPrefix: %{public}s", path.c_str(), extraPrefix.c_str());
1928     EXPECT_EQ(extraPrefix, expectedExtraPrefix);
1929 }
1930 
1931 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_app_twin_data_001, TestSize.Level0)
1932 {
1933     MEDIA_INFO_LOG("medialib_backup_test_app_twin_data_001 start");
1934     TestAppTwinData("", "", CLONE_RESTORE_ID); // not upgrade
1935     MEDIA_INFO_LOG("medialib_backup_test_app_twin_data_001 end");
1936 }
1937 
1938 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_app_twin_data_002, TestSize.Level0)
1939 {
1940     MEDIA_INFO_LOG("medialib_backup_test_app_twin_data_002 start");
1941     TestAppTwinData("", ""); // not app twin data: empty
1942     MEDIA_INFO_LOG("medialib_backup_test_app_twin_data_002 end");
1943 }
1944 
1945 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_app_twin_data_003, TestSize.Level0)
1946 {
1947     MEDIA_INFO_LOG("medialib_backup_test_app_twin_data_003 start");
1948     TestAppTwinData("/storage/ABCE-EFGH/0/", ""); // not app twin data: external
1949     MEDIA_INFO_LOG("medialib_backup_test_app_twin_data_003 end");
1950 }
1951 
1952 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_app_twin_data_004, TestSize.Level0)
1953 {
1954     MEDIA_INFO_LOG("medialib_backup_test_app_twin_data_004 start");
1955     TestAppTwinData("/storage/emulated/0/", ""); // not app twin data: main user
1956     MEDIA_INFO_LOG("medialib_backup_test_app_twin_data_004 end");
1957 }
1958 
1959 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_app_twin_data_005, TestSize.Level0)
1960 {
1961     MEDIA_INFO_LOG("medialib_backup_test_app_twin_data_005 start");
1962     TestAppTwinData("/storage/emulated", ""); // not app twin data: first / not found
1963     MEDIA_INFO_LOG("medialib_backup_test_app_twin_data_005 end");
1964 }
1965 
1966 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_app_twin_data_006, TestSize.Level0)
1967 {
1968     MEDIA_INFO_LOG("medialib_backup_test_app_twin_data_006 start");
1969     TestAppTwinData("/storage/emulated/", ""); // not app twin data: second / not found
1970     MEDIA_INFO_LOG("medialib_backup_test_app_twin_data_006 end");
1971 }
1972 
1973 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_app_twin_data_007, TestSize.Level0)
1974 {
1975     MEDIA_INFO_LOG("medialib_backup_test_app_twin_data_007 start");
1976     TestAppTwinData("/storage/emulated/abc/", ""); // not app twin data: not number
1977     MEDIA_INFO_LOG("medialib_backup_test_app_twin_data_007 end");
1978 }
1979 
1980 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_app_twin_data_008, TestSize.Level0)
1981 {
1982     MEDIA_INFO_LOG("medialib_backup_test_app_twin_data_008 start");
1983     TestAppTwinData("/storage/emulated/1234/", ""); // not app twin data: not in [128, 147]
1984     MEDIA_INFO_LOG("medialib_backup_test_app_twin_data_008 end");
1985 }
1986 
1987 HWTEST_F(MediaLibraryBackupTest, medialib_backup_test_app_twin_data_009, TestSize.Level0)
1988 {
1989     MEDIA_INFO_LOG("medialib_backup_test_app_twin_data_009 start");
1990     TestAppTwinData("/storage/emulated/128/", APP_TWIN_DATA_PREFIX); // app twin data
1991     MEDIA_INFO_LOG("medialib_backup_test_app_twin_data_009 end");
1992 }
1993 } // namespace Media
1994 } // namespace OHOS