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