• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 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 = 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