1 /* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include "b_session_restore_async.h" 17 18 #include <fcntl.h> 19 #include <memory> 20 #include <sys/stat.h> 21 #include <sys/types.h> 22 23 #include <file_ex.h> 24 #include <gtest/gtest.h> 25 26 #include "b_error/b_error.h" 27 #include "test_manager.h" 28 29 namespace OHOS::FileManagement::Backup { 30 using namespace std; 31 32 namespace { 33 static BSessionRestoreAsync::Callbacks callbacks_ = {}; 34 static vector<BundleName> bundlesToRestore_ = {}; 35 } // namespace 36 ~BSessionRestoreAsync()37 BSessionRestoreAsync::~BSessionRestoreAsync() {} 38 Init(Callbacks callbacks)39 shared_ptr<BSessionRestoreAsync> BSessionRestoreAsync::Init(Callbacks callbacks) 40 { 41 GTEST_LOG_(INFO) << "BSessionRestoreAsync::Init"; 42 try { 43 auto restore = make_shared<BSessionRestoreAsync>(callbacks); 44 return restore; 45 } catch (const exception &e) { 46 return nullptr; 47 } 48 return nullptr; 49 } 50 PublishFile(BFileInfo fileInfo)51 ErrCode BSessionRestoreAsync::PublishFile(BFileInfo fileInfo) 52 { 53 return BError(BError::Codes::OK); 54 } 55 GetFileHandle(const string & bundleName,const string & fileName)56 ErrCode BSessionRestoreAsync::GetFileHandle(const string &bundleName, const string &fileName) 57 { 58 return BError(BError::Codes::OK); 59 } 60 AppendBundles(UniqueFd remoteCap,vector<BundleName> bundlesToRestore,vector<string> detailInfos,RestoreTypeEnum restoreType,int32_t userId)61 ErrCode BSessionRestoreAsync::AppendBundles(UniqueFd remoteCap, vector<BundleName> bundlesToRestore, 62 vector<string> detailInfos, RestoreTypeEnum restoreType, int32_t userId) 63 { 64 GTEST_LOG_(INFO) << "BSessionRestoreAsync::AppendBundles"; 65 if (restoreType == RestoreTypeEnum::RESTORE_DATA_READDY) { 66 callbacks_.onBackupServiceDied(); 67 return BError(BError::Codes::OK); 68 } 69 callbacks_.onBundleStarted(0, "com.example.app2backup"); 70 71 BFileInfo bFileInfo("com.example.app2backup", "1.tar", 0); 72 TestManager tm("BSessionRestoreAsyncMock_GetFd_0100"); 73 string filePath = tm.GetRootDirCurTest().append("1.tar"); 74 UniqueFd fd(open(filePath.data(), O_RDWR | O_CREAT, S_IRWXU)); 75 GTEST_LOG_(INFO) << "callbacks_::onFileReady 1.tar"; 76 callbacks_.onFileReady(bFileInfo, move(fd), 0); 77 78 string fileManagePath = tm.GetRootDirCurTest().append("manage.json"); 79 UniqueFd fdManage(open(fileManagePath.data(), O_RDWR | O_CREAT, S_IRWXU)); 80 bFileInfo.fileName = "manage.json"; 81 GTEST_LOG_(INFO) << "File ready callback for manage.json"; 82 callbacks_.onFileReady(bFileInfo, move(fdManage), 0); 83 callbacks_.onBundleFinished(0, "com.example.app2backup"); 84 85 callbacks_.onAllBundlesFinished(0); 86 callbacks_.onBundleStarted(1, "com.example.app2backup"); 87 callbacks_.onBundleFinished(1, "com.example.app2backup"); 88 callbacks_.onAllBundlesFinished(1); 89 callbacks_.onResultReport("com.example.app2backup", "ok"); 90 callbacks_.onBackupServiceDied(); 91 callbacks_.onProcess("com.example.app2backup", "100"); 92 return BError(BError::Codes::OK); 93 } 94 AppendBundles(UniqueFd remoteCap,vector<BundleName> bundlesToRestore,RestoreTypeEnum restoreType,int32_t userId)95 ErrCode BSessionRestoreAsync::AppendBundles(UniqueFd remoteCap, 96 vector<BundleName> bundlesToRestore, 97 RestoreTypeEnum restoreType, 98 int32_t userId) 99 { 100 GTEST_LOG_(INFO) << "BSessionRestoreAsync::AppendBundles"; 101 if (restoreType == RestoreTypeEnum::RESTORE_DATA_READDY) { 102 callbacks_.onBackupServiceDied(); 103 return BError(BError::Codes::OK); 104 } 105 callbacks_.onBundleStarted(0, "com.example.app2backup"); 106 107 BFileInfo bFileInfo("com.example.app2backup", "1.tar", 0); 108 TestManager tm("BSessionRestoreAsyncMock_GetFd_0100"); 109 string filePath = tm.GetRootDirCurTest().append("1.tar"); 110 UniqueFd fd(open(filePath.data(), O_RDWR | O_CREAT, S_IRWXU)); 111 GTEST_LOG_(INFO) << "callbacks_::onFileReady 1.tar"; 112 callbacks_.onFileReady(bFileInfo, move(fd), 0); 113 114 string fileManagePath = tm.GetRootDirCurTest().append("manage.json"); 115 UniqueFd fdManage(open(fileManagePath.data(), O_RDWR | O_CREAT, S_IRWXU)); 116 bFileInfo.fileName = "manage.json"; 117 GTEST_LOG_(INFO) << "File ready callback for manage.json"; 118 callbacks_.onFileReady(bFileInfo, move(fdManage), 0); 119 120 callbacks_.onBundleFinished(0, "com.example.app2backup"); 121 122 callbacks_.onAllBundlesFinished(0); 123 callbacks_.onBundleStarted(1, "com.example.app2backup"); 124 callbacks_.onBundleFinished(1, "com.example.app2backup"); 125 callbacks_.onAllBundlesFinished(1); 126 callbacks_.onBackupServiceDied(); 127 callbacks_.onProcess("com.example.app2backup", "100"); 128 return BError(BError::Codes::OK); 129 } 130 OnBackupServiceDied()131 void BSessionRestoreAsync::OnBackupServiceDied() {} 132 Release()133 ErrCode BSessionRestoreAsync::Release() 134 { 135 return BError(BError::Codes::OK); 136 } 137 RegisterBackupServiceDied(function<void ()> functor)138 void BSessionRestoreAsync::RegisterBackupServiceDied(function<void()> functor) {} 139 } // namespace OHOS::FileManagement::Backup