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 #include <gmock/gmock.h>
16 #include <gtest/gtest.h>
17
18 #include <vector>
19
20 #include "b_jsonutil_mock.h"
21 #include "b_sa_utils_mock.h"
22 #include "if_system_ability_manager.h"
23 #include "iremote_stub.h"
24 #include "iservice_registry.h"
25 #include "module_external/bms_adapter.h"
26
27 namespace OHOS {
28 using namespace std;
29 using namespace testing;
30 using namespace FileManagement::Backup;
31
32 const string HMOS_HAP_CODE_PATH = "1";
33 const string LINUX_HAP_CODE_PATH = "2";
34 const string BUNDLE_NAME = "com.example.app2backup";
35 const int32_t USER_ID = 100;
36
37 class SystemAbilityManagerMock : public ISystemAbilityManager {
38 public:
39 MOCK_METHOD((sptr<IRemoteObject>), AsObject, ());
40 MOCK_METHOD((std::vector<std::u16string>), ListSystemAbilities, (unsigned int));
41 MOCK_METHOD((sptr<IRemoteObject>), GetSystemAbility, (int32_t));
42 MOCK_METHOD((sptr<IRemoteObject>), CheckSystemAbility, (int32_t));
43 MOCK_METHOD(int32_t, RemoveSystemAbility, (int32_t));
44 MOCK_METHOD(int32_t, SubscribeSystemAbility, (int32_t, (const sptr<ISystemAbilityStatusChange>&)));
45 MOCK_METHOD(int32_t, UnSubscribeSystemAbility, (int32_t, (const sptr<ISystemAbilityStatusChange>&)));
46 MOCK_METHOD((sptr<IRemoteObject>), GetSystemAbility, (int32_t, const std::string&));
47 MOCK_METHOD(sptr<IRemoteObject>, CheckSystemAbility, (int32_t, const std::string&));
48 MOCK_METHOD(int32_t, AddOnDemandSystemAbilityInfo, (int32_t, const std::u16string&));
49 MOCK_METHOD((sptr<IRemoteObject>), CheckSystemAbility, (int32_t, bool&));
50 MOCK_METHOD(int32_t, AddSystemAbility, (int32_t, (const sptr<IRemoteObject>&), const SAExtraProp&));
51 MOCK_METHOD(int32_t, AddSystemProcess, (const std::u16string&, (const sptr<IRemoteObject>&)));
52 MOCK_METHOD((sptr<IRemoteObject>), LoadSystemAbility, (int32_t, int32_t));
53 MOCK_METHOD(int32_t, LoadSystemAbility, (int32_t, (const sptr<ISystemAbilityLoadCallback>&)));
54 MOCK_METHOD(int32_t, LoadSystemAbility, (int32_t, const std::string&, (const sptr<ISystemAbilityLoadCallback>&)));
55 MOCK_METHOD(int32_t, UnloadSystemAbility, (int32_t));
56 MOCK_METHOD(int32_t, CancelUnloadSystemAbility, (int32_t));
57 MOCK_METHOD(int32_t, UnloadAllIdleSystemAbility, ());
58 MOCK_METHOD(int32_t, GetSystemProcessInfo, (int32_t, SystemProcessInfo&));
59 MOCK_METHOD(int32_t, GetRunningSystemProcess, (std::list<SystemProcessInfo>&));
60 MOCK_METHOD(int32_t, SubscribeSystemProcess, (const sptr<ISystemProcessStatusChange>&));
61 MOCK_METHOD(int32_t, SendStrategy, (int32_t, (std::vector<int32_t>&), int32_t, std::string&));
62 MOCK_METHOD(int32_t, UnSubscribeSystemProcess, (const sptr<ISystemProcessStatusChange>&));
63 MOCK_METHOD(int32_t, GetOnDemandReasonExtraData, (int64_t, MessageParcel&));
64 MOCK_METHOD(int32_t, GetOnDemandPolicy, (int32_t, OnDemandPolicyType, (std::vector<SystemAbilityOnDemandEvent>&)));
65 MOCK_METHOD(int32_t, UpdateOnDemandPolicy, (int32_t, OnDemandPolicyType,
66 (const std::vector<SystemAbilityOnDemandEvent>&)));
67 MOCK_METHOD(int32_t, GetOnDemandSystemAbilityIds, (std::vector<int32_t>&));
68 MOCK_METHOD(int32_t, GetExtensionSaIds, (const std::string&, std::vector<int32_t>&));
69 MOCK_METHOD(int32_t, GetExtensionRunningSaList, (const std::string&, (std::vector<sptr<IRemoteObject>>&)));
70 MOCK_METHOD(int32_t, GetRunningSaExtensionInfoList, (const std::string&, (std::vector<SaExtensionInfo>&)));
71 MOCK_METHOD(int32_t, GetCommonEventExtraDataIdlist, (int32_t, (std::vector<int64_t>&), const std::string&));
72 };
73
74 class BundleMgrMock : public IRemoteStub<AppExecFwk::IBundleMgr> {
75 public:
76 MOCK_METHOD((sptr<IRemoteObject>), AsObject, ());
77 MOCK_METHOD(bool, GetBundleInfos, (const AppExecFwk::BundleFlag, (std::vector<AppExecFwk::BundleInfo>&), int32_t));
78 MOCK_METHOD(ErrCode, GetCloneBundleInfo, (const std::string&, int32_t, int32_t, AppExecFwk::BundleInfo&, int32_t));
79 };
80
81 class BmsAdapterTest : public testing::Test {
82 public:
83 static void SetUpTestCase(void);
84 static void TearDownTestCase();
SetUp()85 void SetUp() override {};
TearDown()86 void TearDown() override {};
87 public:
88 static inline sptr<BundleMgrMock> bms = nullptr;
89 static inline sptr<SystemAbilityManagerMock> sam = nullptr;
90 static inline shared_ptr<SAUtilsMock> saUtils = nullptr;
91 static inline shared_ptr<BJsonUtilMock> jsonUtil = nullptr;
92 };
93
SetUpTestCase()94 void BmsAdapterTest::SetUpTestCase()
95 {
96 sam = sptr<SystemAbilityManagerMock>(new SystemAbilityManagerMock());
97 bms = sptr<BundleMgrMock>(new BundleMgrMock());
98 saUtils = make_shared<SAUtilsMock>();
99 SAUtilsMock::utils = saUtils;
100 jsonUtil = make_shared<BJsonUtilMock>();
101 BJsonUtilMock::jsonUtil = jsonUtil;
102 }
103
TearDownTestCase()104 void BmsAdapterTest::TearDownTestCase()
105 {
106 bms = nullptr;
107 sam = nullptr;
108 SAUtilsMock::utils = nullptr;
109 saUtils = nullptr;
110 BJsonUtilMock::jsonUtil = nullptr;
111 jsonUtil = nullptr;
112 }
113
GetSystemAbilityManager()114 sptr<ISystemAbilityManager> SystemAbilityManagerClient::GetSystemAbilityManager()
115 {
116 return BmsAdapterTest::sam;
117 }
118
119 /**
120 * @tc.number: SUB_bms_adapter_GetBundleInfosForLocalCapabilities_test_0100
121 * @tc.name: SUB_bms_adapter_GetBundleInfosForLocalCapabilities_test_0100
122 * @tc.desc: 测试 GetBundleInfosForLocalCapabilities 接口
123 * @tc.size: MEDIUM
124 * @tc.type: FUNC
125 * @tc.level Level 1
126 * @tc.require: issuesI9KPRL
127 */
128 HWTEST_F(BmsAdapterTest, SUB_bms_adapter_GetBundleInfosForLocalCapabilities_test_0100, testing::ext::TestSize.Level1)
129 {
130 GTEST_LOG_(INFO) << "BmsAdapterTest-begin SUB_bms_adapter_GetBundleInfosForLocalCapabilities_test_0100";
131 try {
132 EXPECT_CALL(*sam, GetSystemAbility(_)).WillOnce(Return(bms));
133 EXPECT_CALL(*bms, GetBundleInfos(_, _, _)).WillOnce(Return(false));
134 auto bundleInfo = BundleMgrAdapter::GetBundleInfosForLocalCapabilities(100);
135 EXPECT_EQ(bundleInfo.size(), 0);
136
137 AppExecFwk::BundleInfo info;
138 std::vector<AppExecFwk::BundleInfo> infos;
139 info.applicationInfo.codePath = HMOS_HAP_CODE_PATH;
140 infos.emplace_back(info);
141 info.applicationInfo.codePath = LINUX_HAP_CODE_PATH;
142 infos.emplace_back(info);
143 info.applicationInfo.codePath = "5";
144 info.appIndex = 1;
145 infos.emplace_back(info);
146 EXPECT_CALL(*sam, GetSystemAbility(_)).WillOnce(Return(bms)).WillOnce(Return(bms));
147 EXPECT_CALL(*bms, GetBundleInfos(_, _, _)).WillOnce(DoAll(SetArgReferee<1>(infos), Return(true)));
148 EXPECT_CALL(*bms, GetCloneBundleInfo(_, _, _, _, _)).WillOnce(Return(1));
149 EXPECT_CALL(*sam, GetExtensionSaIds(_, _)).WillOnce(Return(0));
150 bundleInfo = BundleMgrAdapter::GetBundleInfosForLocalCapabilities(100);
151 EXPECT_EQ(bundleInfo.size(), 0);
152
153 infos.clear();
154 info.applicationInfo.codePath = "5";
155 info.appIndex = 0;
156 infos.emplace_back(info);
157 EXPECT_CALL(*sam, GetSystemAbility(_)).WillOnce(Return(bms)).WillOnce(Return(bms));
158 EXPECT_CALL(*bms, GetBundleInfos(_, _, _)).WillOnce(DoAll(SetArgReferee<1>(infos), Return(true)));
159 EXPECT_CALL(*sam, GetExtensionSaIds(_, _)).WillOnce(Return(0));
160 bundleInfo = BundleMgrAdapter::GetBundleInfosForLocalCapabilities(100);
161 EXPECT_EQ(bundleInfo.size(), 0);
162 } catch (...) {
163 EXPECT_TRUE(false);
164 GTEST_LOG_(INFO) << "BmsAdapterTest-an exception occurred by GetBundleInfosForLocalCapabilities.";
165 }
166 GTEST_LOG_(INFO) << "BmsAdapterTest-end SUB_bms_adapter_GetBundleInfosForLocalCapabilities_test_0100";
167 }
168
169 /**
170 * @tc.number: SUB_bms_adapter_GetBundleInfosForIndex_test_0100
171 * @tc.name: SUB_bms_adapter_GetBundleInfosForIndex_test_0100
172 * @tc.desc: 测试 GetBundleInfosForIndex 接口
173 * @tc.size: MEDIUM
174 * @tc.type: FUNC
175 * @tc.level Level 1
176 * @tc.require: issuesI9KPRL
177 */
178 HWTEST_F(BmsAdapterTest, SUB_bms_adapter_GetBundleInfosForIndex_test_0100, testing::ext::TestSize.Level1)
179 {
180 GTEST_LOG_(INFO) << "BmsAdapterTest-begin SUB_bms_adapter_GetBundleInfosForIndex_test_0100";
181 try {
182 vector<string> bundleNames;
183 bundleNames.emplace_back("bundleName");
184 EXPECT_CALL(*sam, GetSystemAbility(_)).WillOnce(Return(bms));
185 EXPECT_CALL(*bms, GetCloneBundleInfo(_, _, _, _, _)).WillOnce(Return(1));
186 auto bundleInfo = BundleMgrAdapter::GetBundleInfosForIndex(bundleNames, 100);
187 EXPECT_EQ(bundleInfo.size(), 0);
188
189 AppExecFwk::BundleInfo info;
190 info.applicationInfo.codePath = "5";
191 EXPECT_CALL(*sam, GetSystemAbility(_)).WillOnce(Return(bms));
192 EXPECT_CALL(*bms, GetCloneBundleInfo(_, _, _, _, _)).WillOnce(DoAll(SetArgReferee<3>(info), Return(ERR_OK)));
193 bundleInfo = BundleMgrAdapter::GetBundleInfosForIndex(bundleNames, 100);
194 EXPECT_EQ(bundleInfo.size(), 0);
195 } catch (...) {
196 EXPECT_TRUE(false);
197 GTEST_LOG_(INFO) << "BmsAdapterTest-an exception occurred by GetBundleInfosForIndex.";
198 }
199 GTEST_LOG_(INFO) << "BmsAdapterTest-end SUB_bms_adapter_GetBundleInfosForIndex_test_0100";
200 }
201
202 /**
203 * @tc.number: SUB_bms_adapter_CreatBackupEnv_test_0000
204 * @tc.name: SUB_bms_adapter_CreatBackupEnv_test_0000
205 * @tc.desc: 测试 CreatBackupEnv 接口
206 * @tc.size: MEDIUM
207 * @tc.type: FUNC
208 * @tc.level Level 1
209 * @tc.require: issuesI9KPRL
210 */
211 HWTEST_F(BmsAdapterTest, SUB_bms_adapter_CreatBackupEnv_test_0000, testing::ext::TestSize.Level1)
212 {
213 GTEST_LOG_(INFO) << "BmsAdapterTest-begin SUB_bms_adapter_CreatBackupEnv_test_0000";
214 try {
215 std::vector<BIncrementalData> bundleNameList;
216 BIncrementalData data;
217 data.bundleName = BUNDLE_NAME;
218 data.lastIncrementalTime = 0;
219 bundleNameList.push_back(data);
220 EXPECT_CALL(*sam, GetSystemAbility(_)).WillOnce(Return(bms));
221 EXPECT_CALL(*saUtils, IsSABundleName(_)).WillOnce(Return(true));
222 BundleMgrAdapter::CreatBackupEnv(bundleNameList, USER_ID);
223 EXPECT_TRUE(true);
224
225 BJsonUtil::BundleDetailInfo info;
226 EXPECT_CALL(*sam, GetSystemAbility(_)).WillOnce(Return(bms));
227 EXPECT_CALL(*saUtils, IsSABundleName(_)).WillOnce(Return(false));
228 EXPECT_CALL(*jsonUtil, ParseBundleNameIndexStr(_)).WillOnce(Return(info));
229 EXPECT_CALL(*bms, GetCloneBundleInfo(_, _, _, _, _)).WillOnce(Return(1));
230 BundleMgrAdapter::CreatBackupEnv(bundleNameList, USER_ID);
231 EXPECT_TRUE(true);
232
233 AppExecFwk::BundleInfo bundleInfo;
234 bundleInfo.applicationInfo.codePath = "5";
235 EXPECT_CALL(*sam, GetSystemAbility(_)).WillOnce(Return(bms));
236 EXPECT_CALL(*saUtils, IsSABundleName(_)).WillOnce(Return(false));
237 EXPECT_CALL(*jsonUtil, ParseBundleNameIndexStr(_)).WillOnce(Return(info));
238 EXPECT_CALL(*bms, GetCloneBundleInfo(_, _, _, _, _))
239 .WillOnce(DoAll(SetArgReferee<3>(bundleInfo), Return(ERR_OK)));
240 BundleMgrAdapter::CreatBackupEnv(bundleNameList, USER_ID);
241 EXPECT_TRUE(true);
242 } catch (...) {
243 EXPECT_TRUE(false);
244 GTEST_LOG_(INFO) << "BmsAdapterTest-an exception occurred by CreatBackupEnv.";
245 }
246 GTEST_LOG_(INFO) << "BmsAdapterTest-end SUB_bms_adapter_CreatBackupEnv_test_0000";
247 }
248 } // namespace OHOS