• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024-2025 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 <gtest/gtest.h>
17 #include <string>
18 
19 #include "accesstoken_kit_mock.h"
20 #include "b_jsonutil_mock.h"
21 #include "backup_para_mock.h"
22 #include "ipc_skeleton_mock.h"
23 #include "module_ipc/service.h"
24 #include "svc_session_manager_throw_mock.h"
25 #include "test_manager.h"
26 
27 namespace OHOS::FileManagement::Backup {
28 using namespace std;
29 using namespace testing;
30 
31 constexpr int32_t SERVICE_ID = 5203;
32 constexpr int32_t DEBUG_ID = 100;
33 
34 class ServiceThrowTest : public testing::Test {
35 public:
36     static void SetUpTestCase(void);
37     static void TearDownTestCase();
SetUp()38     void SetUp() {};
TearDown()39     void TearDown() {};
40 
41     static inline sptr<Service> service = nullptr;
42     static inline shared_ptr<BackupParaMock> param = nullptr;
43     static inline shared_ptr<SvcSessionManagerMock> sessionMock = nullptr;
44     static inline shared_ptr<BJsonUtilMock> jsonUtil = nullptr;
45     static inline shared_ptr<IPCSkeletonMock> skeleton = nullptr;
46     static inline shared_ptr<AccessTokenKitMock> token = nullptr;
47 };
48 
SetUpTestCase(void)49 void ServiceThrowTest::SetUpTestCase(void)
50 {
51     GTEST_LOG_(INFO) << "SetUpTestCase enter";
52     service = sptr<Service>(new Service(SERVICE_ID));
53     sessionMock = make_shared<SvcSessionManagerMock>();
54     param = make_shared<BackupParaMock>();
55     BackupParaMock::backupPara = param;
56     SvcSessionManagerMock::session = sessionMock;
57     jsonUtil = make_shared<BJsonUtilMock>();
58     BJsonUtilMock::jsonUtil = jsonUtil;
59     skeleton = make_shared<IPCSkeletonMock>();
60     IPCSkeletonMock::skeleton = skeleton;
61     token = make_shared<AccessTokenKitMock>();
62     AccessTokenKitMock::token = token;
63 }
64 
TearDownTestCase()65 void ServiceThrowTest::TearDownTestCase()
66 {
67     GTEST_LOG_(INFO) << "TearDownTestCase enter";
68     service = nullptr;
69     BackupParaMock::backupPara = nullptr;
70     param = nullptr;
71     SvcSessionManagerMock::session = nullptr;
72     sessionMock = nullptr;
73     BJsonUtilMock::jsonUtil = nullptr;
74     jsonUtil = nullptr;
75     IPCSkeletonMock::skeleton = nullptr;
76     skeleton = nullptr;
77     AccessTokenKitMock::token = nullptr;
78     token = nullptr;
79 }
80 
81 /**
82  * @tc.number: SUB_Service_throw_GetLocalCapabilities_0100
83  * @tc.name: SUB_Service_throw_GetLocalCapabilities_0100
84  * @tc.desc: 测试 GetLocalCapabilities 接口的 catch 分支
85  * @tc.size: MEDIUM
86  * @tc.type: FUNC
87  * @tc.level Level 1
88  * @tc.require: issuesIAC04T
89  */
90 HWTEST_F(ServiceThrowTest, SUB_Service_throw_GetLocalCapabilities_0100, testing::ext::TestSize.Level1)
91 {
92     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_GetLocalCapabilities_0100";
93     try {
94         EXPECT_NE(service, nullptr);
__anon27196b3a0102() 95         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
96             throw BError(BError::Codes::EXT_THROW_EXCEPTION);
97         }));
98         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
99         auto ret = service->GetLocalCapabilities();
100         EXPECT_EQ(-ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode());
101 
__anon27196b3a0202() 102         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
103             throw runtime_error("运行时错误");
104         }));
105         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
106         ret = service->GetLocalCapabilities();
107         EXPECT_EQ(-ret, EPERM);
108 
__anon27196b3a0302() 109         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
110             throw "未知错误";
111         }));
112         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
113         ret = service->GetLocalCapabilities();
114         EXPECT_EQ(-ret, EPERM);
115     } catch (...) {
116         EXPECT_TRUE(false);
117         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by GetLocalCapabilities.";
118     }
119     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_GetLocalCapabilities_0100";
120 }
121 
122 /**
123  * @tc.number: SUB_Service_throw_InitRestoreSession_0100
124  * @tc.name: SUB_Service_throw_InitRestoreSession_0100
125  * @tc.desc: 测试 InitRestoreSession 接口的 catch 分支
126  * @tc.size: MEDIUM
127  * @tc.type: FUNC
128  * @tc.level Level 1
129  * @tc.require: issuesIAC04T
130  */
131 HWTEST_F(ServiceThrowTest, SUB_Service_throw_InitRestoreSession_0100, testing::ext::TestSize.Level1)
132 {
133     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_InitRestoreSession_0100";
134     EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::DEFAULT_USER_ID));
135     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0));
136     EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL));
137     EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
138             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
139     auto ret = service->InitRestoreSession(nullptr);
140     EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode());
141 
142     EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::SYSTEM_UID));
143     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)).WillOnce(Return(0)).WillOnce(Return(0));
144     EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL))
145         .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL));
146     EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
147             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
148     EXPECT_CALL(*sessionMock, Active(_)).WillOnce(Return(BError(BError::Codes::SA_REFUSED_ACT)));
149     EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Return(IServiceReverse::Scenario::UNDEFINED));
150     ret = service->InitRestoreSession(nullptr);
151     EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode());
152 
153     EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::SYSTEM_UID));
154     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)).WillOnce(Return(0)).WillOnce(Return(0));
155     EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL))
156         .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL));
157     EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
158             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
159     EXPECT_CALL(*sessionMock, Active(_)).WillOnce(Return(BError(BError::Codes::OK)));
160     ret = service->InitRestoreSession(nullptr);
161     EXPECT_EQ(ret, BError(BError::Codes::OK).GetCode());
162     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_InitRestoreSession_0100";
163 }
164 
165 /**
166  * @tc.number: SUB_Service_throw_InitRestoreSession_0200
167  * @tc.name: SUB_Service_throw_InitRestoreSession_0200
168  * @tc.desc: 测试 InitRestoreSession 接口的 catch 分支
169  * @tc.size: MEDIUM
170  * @tc.type: FUNC
171  * @tc.level Level 1
172  * @tc.require: issuesIAC04T
173  */
174 HWTEST_F(ServiceThrowTest, SUB_Service_throw_InitRestoreSession_0200, testing::ext::TestSize.Level1)
175 {
176     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_InitRestoreSession_0200";
177     std::string errMsg;
178     EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::DEFAULT_USER_ID));
179     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0));
180     EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL));
181     EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
182             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
183     auto ret = service->InitRestoreSession(nullptr, errMsg);
184     EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode());
185 
186     EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::SYSTEM_UID));
187     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)).WillOnce(Return(0)).WillOnce(Return(0));
188     EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL))
189         .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL));
190     EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
191             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
192     EXPECT_CALL(*sessionMock, Active(_)).WillOnce(Return(BError(BError::Codes::SA_REFUSED_ACT)));
193     EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Return(IServiceReverse::Scenario::UNDEFINED));
194     ret = service->InitRestoreSession(nullptr, errMsg);
195     EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode());
196 
197     EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::SYSTEM_UID));
198     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)).WillOnce(Return(0)).WillOnce(Return(0));
199     EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL))
200         .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL));
201     EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
202             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
203     EXPECT_CALL(*sessionMock, Active(_)).WillOnce(Return(BError(BError::Codes::SA_SESSION_CONFLICT)));
204     EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Return(IServiceReverse::Scenario::UNDEFINED));
205     ret = service->InitRestoreSession(nullptr, errMsg);
206     EXPECT_EQ(ret, BError(BError::Codes::SA_SESSION_CONFLICT).GetCode());
207 
208     EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::SYSTEM_UID));
209     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)).WillOnce(Return(0)).WillOnce(Return(0));
210     EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL))
211         .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL));
212     EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
213             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
214     EXPECT_CALL(*sessionMock, Active(_)).WillOnce(Return(BError(BError::Codes::OK)));
215     ret = service->InitRestoreSession(nullptr, errMsg);
216     EXPECT_EQ(ret, BError(BError::Codes::OK).GetCode());
217     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_InitRestoreSession_0200";
218 }
219 
220 /**
221  * @tc.number: SUB_Service_throw_InitBackupSession_0100
222  * @tc.name: SUB_Service_throw_InitBackupSession_0100
223  * @tc.desc: 测试 InitBackupSession 接口的 catch 分支
224  * @tc.size: MEDIUM
225  * @tc.type: FUNC
226  * @tc.level Level 1
227  * @tc.require: issuesIAC04T
228  */
229 HWTEST_F(ServiceThrowTest, SUB_Service_throw_InitBackupSession_0100, testing::ext::TestSize.Level1)
230 {
231     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_InitBackupSession_0100";
232     EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::DEFAULT_USER_ID));
233     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0));
234     EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL));
235     EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
236             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
237     auto ret = service->InitBackupSession(nullptr);
238     EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode());
239 
240     EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::SYSTEM_UID));
241     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)).WillOnce(Return(0)).WillOnce(Return(0));
242     EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL))
243         .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL));
244     EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
245             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
246     EXPECT_CALL(*sessionMock, Active(_)).WillOnce(Return(BError(BError::Codes::SA_REFUSED_ACT)));
247     EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Return(IServiceReverse::Scenario::UNDEFINED));
248     ret = service->InitBackupSession(nullptr);
249     EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode());
250 
251     EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::SYSTEM_UID));
252     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)).WillOnce(Return(0)).WillOnce(Return(0));
253     EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL))
254         .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL));
255     EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
256             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
257     EXPECT_CALL(*sessionMock, Active(_)).WillOnce(Return(BError(BError::Codes::OK)));
258     ret = service->InitBackupSession(nullptr);
259     EXPECT_EQ(ret, BError(BError::Codes::OK).GetCode());
260     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_InitBackupSession_0100";
261 }
262 
263 /**
264  * @tc.number: SUB_Service_throw_InitBackupSession_0200
265  * @tc.name: SUB_Service_throw_InitBackupSession_0200
266  * @tc.desc: 测试 InitBackupSession 接口的 catch 分支
267  * @tc.size: MEDIUM
268  * @tc.type: FUNC
269  * @tc.level Level 1
270  * @tc.require: issuesIAC04T
271  */
272 HWTEST_F(ServiceThrowTest, SUB_Service_throw_InitBackupSession_0200, testing::ext::TestSize.Level1)
273 {
274     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_InitBackupSession_0200";
275     std::string errMsg;
276     EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::DEFAULT_USER_ID));
277     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0));
278     EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL));
279     EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
280             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
281     auto ret = service->InitBackupSession(nullptr, errMsg);
282     EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode());
283 
284     EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::SYSTEM_UID));
285     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)).WillOnce(Return(0)).WillOnce(Return(0));
286     EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL))
287         .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL));
288     EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
289             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
290     EXPECT_CALL(*sessionMock, Active(_)).WillOnce(Return(BError(BError::Codes::SA_REFUSED_ACT)));
291     EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Return(IServiceReverse::Scenario::UNDEFINED));
292     ret = service->InitBackupSession(nullptr, errMsg);
293     EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode());
294 
295     EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::SYSTEM_UID));
296     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)).WillOnce(Return(0)).WillOnce(Return(0));
297     EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL))
298         .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL));
299     EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
300             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
301     EXPECT_CALL(*sessionMock, Active(_)).WillOnce(Return(BError(BError::Codes::SA_SESSION_CONFLICT)));
302     EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Return(IServiceReverse::Scenario::UNDEFINED));
303     ret = service->InitBackupSession(nullptr, errMsg);
304     EXPECT_EQ(ret, BError(BError::Codes::SA_SESSION_CONFLICT).GetCode());
305 
306     EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::SYSTEM_UID));
307     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)).WillOnce(Return(0)).WillOnce(Return(0));
308     EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL))
309         .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL));
310     EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
311             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
312     EXPECT_CALL(*sessionMock, Active(_)).WillOnce(Return(BError(BError::Codes::OK)));
313     ret = service->InitBackupSession(nullptr, errMsg);
314     EXPECT_EQ(ret, BError(BError::Codes::OK).GetCode());
315     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_InitBackupSession_0200";
316 }
317 
318 /**
319  * @tc.number: SUB_Service_throw_AppendBundlesRestoreSession_0100
320  * @tc.name: SUB_Service_throw_AppendBundlesRestoreSession_0100
321  * @tc.desc: 测试 AppendBundlesRestoreSession 接口的 catch 分支
322  * @tc.size: MEDIUM
323  * @tc.type: FUNC
324  * @tc.level Level 1
325  * @tc.require: issuesIAC04T
326  */
327 HWTEST_F(ServiceThrowTest, SUB_Service_throw_AppendBundlesRestoreSession_0100, testing::ext::TestSize.Level1)
328 {
329     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_AppendBundlesRestoreSession_0100";
330     try {
331         EXPECT_NE(service, nullptr);
__anon27196b3a0402() 332         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
333             throw BError(BError::Codes::EXT_THROW_EXCEPTION);
334         }));
335         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
336         auto ret = service->AppendBundlesRestoreSession(UniqueFd(-1), {}, {}, RESTORE_DATA_WAIT_SEND, 0);
337         EXPECT_EQ(ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode());
338 
__anon27196b3a0502() 339         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
340             throw "未知错误";
341         }));
342         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
343         ret = service->AppendBundlesRestoreSession(UniqueFd(-1), {}, {}, RESTORE_DATA_WAIT_SEND, 0);
344         EXPECT_EQ(ret, EPERM);
345     } catch (...) {
346         EXPECT_TRUE(false);
347         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by AppendBundlesRestoreSession.";
348     }
349     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_AppendBundlesRestoreSession_0100";
350 }
351 
352 /**
353  * @tc.number: SUB_Service_throw_AppendBundlesRestoreSession_0200
354  * @tc.name: SUB_Service_throw_AppendBundlesRestoreSession_0200
355  * @tc.desc: 测试 AppendBundlesRestoreSession 接口的 catch 分支
356  * @tc.size: MEDIUM
357  * @tc.type: FUNC
358  * @tc.level Level 1
359  * @tc.require: issuesIAC04T
360  */
361 HWTEST_F(ServiceThrowTest, SUB_Service_throw_AppendBundlesRestoreSession_0200, testing::ext::TestSize.Level1)
362 {
363     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_AppendBundlesRestoreSession_0200";
364     try {
365         EXPECT_NE(service, nullptr);
__anon27196b3a0602() 366         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
367             throw BError(BError::Codes::EXT_THROW_EXCEPTION);
368         }));
369         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
370         auto ret = service->AppendBundlesRestoreSession(UniqueFd(-1), {}, RESTORE_DATA_WAIT_SEND, 0);
371         EXPECT_EQ(ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode());
372 
__anon27196b3a0702() 373         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
374             throw "未知错误";
375         }));
376         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
377         ret = service->AppendBundlesRestoreSession(UniqueFd(-1), {}, RESTORE_DATA_WAIT_SEND, 0);
378         EXPECT_EQ(ret, EPERM);
379     } catch (...) {
380         EXPECT_TRUE(false);
381         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by AppendBundlesRestoreSession.";
382     }
383     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_AppendBundlesRestoreSession_0200";
384 }
385 
386 /**
387  * @tc.number: SUB_Service_throw_AppendBundlesBackupSession_0100
388  * @tc.name: SUB_Service_throw_AppendBundlesBackupSession_0100
389  * @tc.desc: 测试 AppendBundlesBackupSession 接口的 catch 分支
390  * @tc.size: MEDIUM
391  * @tc.type: FUNC
392  * @tc.level Level 1
393  * @tc.require: issuesIAC04T
394  */
395 HWTEST_F(ServiceThrowTest, SUB_Service_throw_AppendBundlesBackupSession_0100, testing::ext::TestSize.Level1)
396 {
397     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_AppendBundlesBackupSession_0100";
398     try {
399         EXPECT_NE(service, nullptr);
__anon27196b3a0802() 400         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
401             throw BError(BError::Codes::EXT_THROW_EXCEPTION);
402         }));
403         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
404         auto ret = service->AppendBundlesBackupSession({});
405         EXPECT_EQ(ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode());
406 
__anon27196b3a0902() 407         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
408             throw runtime_error("运行时错误");
409         }));
410         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
411         ret = service->AppendBundlesBackupSession({});
412         EXPECT_EQ(ret, EPERM);
413 
__anon27196b3a0a02() 414         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
415             throw "未知错误";
416         }));
417         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
418         ret = service->AppendBundlesBackupSession({});
419         EXPECT_EQ(ret, EPERM);
420     } catch (...) {
421         EXPECT_TRUE(false);
422         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by AppendBundlesBackupSession.";
423     }
424     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_AppendBundlesBackupSession_0100";
425 }
426 
427 /**
428  * @tc.number: SUB_Service_throw_AppendBundlesDetailsBackupSession_0100
429  * @tc.name: SUB_Service_throw_AppendBundlesDetailsBackupSession_0100
430  * @tc.desc: 测试 AppendBundlesDetailsBackupSession 接口的 catch 分支
431  * @tc.size: MEDIUM
432  * @tc.type: FUNC
433  * @tc.level Level 1
434  * @tc.require: issuesIAC04T
435  */
436 HWTEST_F(ServiceThrowTest, SUB_Service_throw_AppendBundlesDetailsBackupSession_0100, testing::ext::TestSize.Level1)
437 {
438     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_AppendBundlesDetailsBackupSession_0100";
439     try {
440         EXPECT_NE(service, nullptr);
__anon27196b3a0b02() 441         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
442             throw BError(BError::Codes::EXT_THROW_EXCEPTION);
443         }));
444         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
445         auto ret = service->AppendBundlesDetailsBackupSession({}, {});
446         EXPECT_EQ(ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode());
447 
__anon27196b3a0c02() 448         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
449             throw runtime_error("运行时错误");
450         }));
451         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
452         ret = service->AppendBundlesDetailsBackupSession({}, {});
453         EXPECT_EQ(ret, EPERM);
454 
__anon27196b3a0d02() 455         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
456             throw "未知错误";
457         }));
458         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
459         ret = service->AppendBundlesDetailsBackupSession({}, {});
460         EXPECT_EQ(ret, EPERM);
461     } catch (...) {
462         EXPECT_TRUE(false);
463         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by AppendBundlesDetailsBackupSession.";
464     }
465     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_AppendBundlesDetailsBackupSession_0100";
466 }
467 
468 /**
469  * @tc.number: SUB_Service_throw_PublishFile_0100
470  * @tc.name: SUB_Service_throw_PublishFile_0100
471  * @tc.desc: 测试 PublishFile 接口的 catch 分支
472  * @tc.size: MEDIUM
473  * @tc.type: FUNC
474  * @tc.level Level 1
475  * @tc.require: issuesIAC04T
476  */
477 HWTEST_F(ServiceThrowTest, SUB_Service_throw_PublishFile_0100, testing::ext::TestSize.Level1)
478 {
479     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_PublishFile_0100";
480     EXPECT_NE(service, nullptr);
481     BFileInfo fileInfo;
482     EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
483         .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
484     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0));
485     EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _))
486         .WillOnce(Return(BError(BError::Codes::SDK_MIXED_SCENARIO)));
487     auto ret = service->PublishFile(fileInfo);
488     EXPECT_EQ(ret, BError(BError::Codes::SDK_MIXED_SCENARIO).GetCode());
489 
490     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0));
491     EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _))
492         .WillOnce(Return(BError(BError(BError::Codes::SA_REFUSED_ACT))));
493     ret = service->PublishFile(fileInfo);
494     EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode());
495 
496     EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _))
497         .WillOnce(Return(BError(BError(BError::Codes::OK))));
498     EXPECT_CALL(*skeleton, GetCallingTokenID())
499         .WillOnce(Return(0))
500         .WillOnce(Return(0));
501     EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_NATIVE));
502     EXPECT_CALL(*token, VerifyAccessToken(_, _))
503         .WillOnce(Return(Security::AccessToken::PermissionState::PERMISSION_DENIED));
504     EXPECT_CALL(*token, GetHapTokenInfo(_, _)).WillOnce(Return(0));
505     ret = service->PublishFile(fileInfo);
506     EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode());
507     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_PublishFile_0100";
508 }
509 
510 /**
511  * @tc.number: SUB_Service_throw_AppFileReady_0100
512  * @tc.name: SUB_Service_throw_AppFileReady_0100
513  * @tc.desc: 测试 AppFileReady 接口的 catch 分支
514  * @tc.size: MEDIUM
515  * @tc.type: FUNC
516  * @tc.level Level 1
517  * @tc.require: issuesIAC04T
518  */
519 HWTEST_F(ServiceThrowTest, SUB_Service_throw_AppFileReady_0100, testing::ext::TestSize.Level1)
520 {
521     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_AppFileReady_0100";
522     try {
523         EXPECT_NE(service, nullptr);
524         string fileName;
525         EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0));
526         EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_HAP));
527         EXPECT_CALL(*token, GetHapTokenInfo(_, _)).WillOnce(Return(0));
528         EXPECT_CALL(*jsonUtil, BuildBundleNameIndexInfo(_, _)).WillOnce(Return("bundleName"));
529         EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Return(BError(BError::Codes::SA_INVAL_ARG)));
530         auto ret = service->AppFileReady(fileName, UniqueFd(-1), 0);
531         EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode());
532 
533         EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)).WillOnce(Return(0)).WillOnce(Return(0));
534         EXPECT_CALL(*token, GetTokenType(_))
535             .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_HAP))
536             .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_HAP));
537         EXPECT_CALL(*token, GetHapTokenInfo(_, _)).WillOnce(Return(0));
538         EXPECT_CALL(*jsonUtil, BuildBundleNameIndexInfo(_, _))
539             .WillOnce(Return("bundleName"))
540             .WillOnce(Return("bundleName"))
541             .WillOnce(Return("bundleName"));
542         EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Return(BError(BError::Codes::SA_REFUSED_ACT)));
543         ret = service->AppFileReady(fileName, UniqueFd(-1), 0);
544         EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode());
545     } catch (...) {
546         EXPECT_TRUE(false);
547         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by AppFileReady.";
548     }
549     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_AppFileReady_0100";
550 }
551 
552 /**
553  * @tc.number: SUB_Service_throw_AppDone_0100
554  * @tc.name: SUB_Service_throw_AppDone_0100
555  * @tc.desc: 测试 AppDone 接口的 catch 分支
556  * @tc.size: MEDIUM
557  * @tc.type: FUNC
558  * @tc.level Level 1
559  * @tc.require: issuesIAC04T
560  */
561 HWTEST_F(ServiceThrowTest, SUB_Service_throw_AppDone_0100, testing::ext::TestSize.Level1)
562 {
563     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_AppDone_0100";
564     try {
565         EXPECT_NE(service, nullptr);
566         EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0));
567         EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_HAP));
568         EXPECT_CALL(*token, GetHapTokenInfo(_, _)).WillOnce(Return(0));
569         EXPECT_CALL(*jsonUtil, BuildBundleNameIndexInfo(_, _)).WillOnce(Return("bundleName"));
570         EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Return(BError(BError::Codes::SA_INVAL_ARG)));
571         EXPECT_CALL(*sessionMock, IsOnAllBundlesFinished()).WillOnce(Return(false));
572         auto ret = service->AppDone(0);
573         EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode());
574     } catch (...) {
575         EXPECT_TRUE(false);
576         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by AppDone.";
577     }
578     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_AppDone_0100";
579 }
580 
581 /**
582  * @tc.number: SUB_Service_throw_LaunchBackupExtension_0100
583  * @tc.name: SUB_Service_throw_LaunchBackupExtension_0100
584  * @tc.desc: 测试 LaunchBackupExtension 接口的 catch 分支
585  * @tc.size: MEDIUM
586  * @tc.type: FUNC
587  * @tc.level Level 1
588  * @tc.require: issuesIAC04T
589  */
590 HWTEST_F(ServiceThrowTest, SUB_Service_throw_LaunchBackupExtension_0100, testing::ext::TestSize.Level1)
591 {
592     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_LaunchBackupExtension_0100";
593     try {
594         EXPECT_NE(service, nullptr);
595         BundleName bundleName;
596         EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Return(IServiceReverse::Scenario::UNDEFINED));
597         auto ret = service->LaunchBackupExtension(bundleName);
598         EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode());
599     } catch (...) {
600         EXPECT_TRUE(false);
601         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by LaunchBackupExtension.";
602     }
603     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_LaunchBackupExtension_0100";
604 }
605 
606 /**
607  * @tc.number: SUB_Service_throw_GetFileHandle_0100
608  * @tc.name: SUB_Service_throw_GetFileHandle_0100
609  * @tc.desc: 测试 GetFileHandle 接口的 catch 分支
610  * @tc.size: MEDIUM
611  * @tc.type: FUNC
612  * @tc.level Level 1
613  * @tc.require: issuesIAC04T
614  */
615 HWTEST_F(ServiceThrowTest, SUB_Service_throw_GetFileHandle_0100, testing::ext::TestSize.Level1)
616 {
617     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_GetFileHandle_0100";
618     try {
619         EXPECT_NE(service, nullptr);
620         string bundleName;
621         string fileName;
622         EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0));
623         EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce(
624             Return(BError(BError::Codes::SDK_MIXED_SCENARIO)));
625         auto ret = service->GetFileHandle(bundleName, fileName);
626         EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode());
627 
628         EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0));
629         EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce(
630             Return(BError(BError::Codes::SA_REFUSED_ACT)));
631         ret = service->GetFileHandle(bundleName, fileName);
632         EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode());
633     } catch (...) {
634         EXPECT_TRUE(false);
635         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by GetFileHandle.";
636     }
637     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_GetFileHandle_0100";
638 }
639 
640 /**
641  * @tc.number: SUB_Service_throw_OnBackupExtensionDied_0100
642  * @tc.name: SUB_Service_throw_OnBackupExtensionDied_0100
643  * @tc.desc: 测试 OnBackupExtensionDied 接口的 catch 分支
644  * @tc.size: MEDIUM
645  * @tc.type: FUNC
646  * @tc.level Level 1
647  * @tc.require: issuesIAC04T
648  */
649 HWTEST_F(ServiceThrowTest, SUB_Service_throw_OnBackupExtensionDied_0100, testing::ext::TestSize.Level1)
650 {
651     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_OnBackupExtensionDied_0100";
652     try {
653         EXPECT_NE(service, nullptr);
654         string bundleName;
655         EXPECT_CALL(*sessionMock, GetScenario())
656             .WillOnce(Return(IServiceReverse::Scenario::CLEAN))
657             .WillOnce(Return(IServiceReverse::Scenario::CLEAN));
658         EXPECT_CALL(*sessionMock, VerifyBundleName(_))
659             .WillOnce(Return(BError(BError::Codes::SA_INVAL_ARG)))
660             .WillOnce(Return(BError(BError::Codes::SA_INVAL_ARG)));
__anon27196b3a0e02() 661         EXPECT_CALL(*sessionMock, StopFwkTimer(_)).WillOnce(Invoke([]() {
662             throw BError(BError::Codes::EXT_THROW_EXCEPTION);
663             return true;
664         }));
__anon27196b3a0f02() 665         EXPECT_CALL(*sessionMock, RemoveExtInfo(_)).WillOnce(Invoke([]() {
666             throw BError(BError::Codes::EXT_THROW_EXCEPTION);
667         }));
668         EXPECT_CALL(*sessionMock, IsOnAllBundlesFinished()).WillOnce(Return(false));
669         service->OnBackupExtensionDied("bundleName");
670         EXPECT_TRUE(true);
671     } catch (...) {
672         EXPECT_TRUE(false);
673         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by OnBackupExtensionDied.";
674     }
675     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_OnBackupExtensionDied_0100";
676 }
677 
678 /**
679  * @tc.number: SUB_Service_throw_ExtConnectFailed_0100
680  * @tc.name: SUB_Service_throw_ExtConnectFailed_0100
681  * @tc.desc: 测试 ExtConnectFailed 接口的 catch 分支
682  * @tc.size: MEDIUM
683  * @tc.type: FUNC
684  * @tc.level Level 1
685  * @tc.require: issuesIAC04T
686  */
687 HWTEST_F(ServiceThrowTest, SUB_Service_throw_ExtConnectFailed_0100, testing::ext::TestSize.Level1)
688 {
689     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_ExtConnectFailed_0100";
690     try {
691         EXPECT_NE(service, nullptr);
692         BundleName bundleName;
__anon27196b3a1002() 693         EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Invoke([]() {
694             throw BError(BError::Codes::EXT_THROW_EXCEPTION);
695             return IServiceReverse::Scenario::UNDEFINED;
696         }));
697         service->ExtConnectFailed(bundleName, 0);
698         EXPECT_TRUE(true);
699 
__anon27196b3a1102() 700         EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Invoke([]() {
701             throw runtime_error("运行时错误");
702             return IServiceReverse::Scenario::UNDEFINED;
703         }));
704         service->ExtConnectFailed(bundleName, 0);
705         EXPECT_TRUE(true);
706 
__anon27196b3a1202() 707         EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Invoke([]() {
708             throw "未知错误";
709             return IServiceReverse::Scenario::UNDEFINED;
710         }));
711         service->ExtConnectFailed(bundleName, 0);
712         EXPECT_TRUE(true);
713     } catch (...) {
714         EXPECT_TRUE(false);
715         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by ExtConnectFailed.";
716     }
717     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_ExtConnectFailed_0100";
718 }
719 
720 /**
721  * @tc.number: SUB_Service_throw_NoticeClientFinish_0100
722  * @tc.name: SUB_Service_throw_NoticeClientFinish_0100
723  * @tc.desc: 测试 NoticeClientFinish 接口的 catch 分支
724  * @tc.size: MEDIUM
725  * @tc.type: FUNC
726  * @tc.level Level 1
727  * @tc.require: issuesIAC04T
728  */
729 HWTEST_F(ServiceThrowTest, SUB_Service_throw_NoticeClientFinish_0100, testing::ext::TestSize.Level1)
730 {
731     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_NoticeClientFinish_0100";
732     try {
733         EXPECT_NE(service, nullptr);
734         string bundleName;
735         ErrCode errCode = 0;
736         EXPECT_CALL(*sessionMock, GetScenario())
737             .WillOnce(Return(IServiceReverse::Scenario::UNDEFINED))
738             .WillOnce(Return(IServiceReverse::Scenario::UNDEFINED));
739         EXPECT_CALL(*sessionMock, IsOnAllBundlesFinished()).WillOnce(Return(false));
740         service->NoticeClientFinish(bundleName, errCode);
741         EXPECT_TRUE(true);
742     } catch (...) {
743         EXPECT_TRUE(false);
744         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by NoticeClientFinish.";
745     }
746     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_NoticeClientFinish_0100";
747 }
748 
749 /**
750  * @tc.number: SUB_Service_throw_ClearSessionAndSchedInfo_0100
751  * @tc.name: SUB_Service_throw_ClearSessionAndSchedInfo_0100
752  * @tc.desc: 测试 ClearSessionAndSchedInfo 接口的 catch 分支
753  * @tc.size: MEDIUM
754  * @tc.type: FUNC
755  * @tc.level Level 1
756  * @tc.require: issuesIAC04T
757  */
758 HWTEST_F(ServiceThrowTest, SUB_Service_throw_ClearSessionAndSchedInfo_0100, testing::ext::TestSize.Level1)
759 {
760     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_ClearSessionAndSchedInfo_0100";
761     try {
762         EXPECT_NE(service, nullptr);
763         BundleName bundleName;
__anon27196b3a1302() 764         EXPECT_CALL(*sessionMock, RemoveExtInfo(_)).WillOnce(Invoke([]() {
765             throw BError(BError::Codes::EXT_THROW_EXCEPTION);
766         }));
767         service->ClearSessionAndSchedInfo(bundleName);
768         EXPECT_TRUE(true);
769 
__anon27196b3a1402() 770         EXPECT_CALL(*sessionMock, RemoveExtInfo(_)).WillOnce(Invoke([]() {
771             throw runtime_error("运行时错误");
772         }));
773         service->ClearSessionAndSchedInfo(bundleName);
774         EXPECT_TRUE(true);
775 
__anon27196b3a1502() 776         EXPECT_CALL(*sessionMock, RemoveExtInfo(_)).WillOnce(Invoke([]() {
777             throw "未知错误";
778         }));
779         service->ClearSessionAndSchedInfo(bundleName);
780         EXPECT_TRUE(true);
781     } catch (...) {
782         EXPECT_TRUE(false);
783         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by ClearSessionAndSchedInfo.";
784     }
785     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_ClearSessionAndSchedInfo_0100";
786 }
787 
788 /**
789  * @tc.number: SUB_Service_throw_GetBackupInfo_0100
790  * @tc.name: SUB_Service_throw_GetBackupInfo_0100
791  * @tc.desc: 测试 GetBackupInfo 接口的 catch 分支
792  * @tc.size: MEDIUM
793  * @tc.type: FUNC
794  * @tc.level Level 1
795  * @tc.require: issuesIAC04T
796  */
797 HWTEST_F(ServiceThrowTest, SUB_Service_throw_GetBackupInfo_0100, testing::ext::TestSize.Level1)
798 {
799     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_GetBackupInfo_0100";
800     try {
801         EXPECT_NE(service, nullptr);
802         BundleName bundleName;
803         string result;
804         EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::DEFAULT_USER_ID));
805         EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0));
806         EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL));
807         EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
808             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
__anon27196b3a1602() 809         EXPECT_CALL(*sessionMock, GetImpl()).WillOnce(Invoke([]() {
810             throw "未知错误";
811             return SvcSessionManager::Impl();
812         }));
813         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
814         auto ret = service->GetBackupInfo(bundleName, result);
815         EXPECT_NE(ret, EPERM);
816     } catch (...) {
817         EXPECT_TRUE(false);
818         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by GetBackupInfo.";
819     }
820     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_GetBackupInfo_0100";
821 }
822 
823 /**
824  * @tc.number: SUB_Service_throw_UpdateTimer_0100
825  * @tc.name: SUB_Service_throw_UpdateTimer_0100
826  * @tc.desc: 测试 UpdateTimer 接口的 catch 分支
827  * @tc.size: MEDIUM
828  * @tc.type: FUNC
829  * @tc.level Level 1
830  * @tc.require: issuesIAC04T
831  */
832 HWTEST_F(ServiceThrowTest, SUB_Service_throw_UpdateTimer_0100, testing::ext::TestSize.Level1)
833 {
834     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_UpdateTimer_0100";
835     try {
836         EXPECT_NE(service, nullptr);
837         BundleName bundleName;
838         bool result = false;
__anon27196b3a1702() 839         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
840             throw "未知错误";
841         }));
842         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
843         auto ret = service->UpdateTimer(bundleName, 0, result);
844         EXPECT_EQ(ret, EPERM);
845     } catch (...) {
846         EXPECT_TRUE(false);
847         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by UpdateTimer.";
848     }
849     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_UpdateTimer_0100";
850 }
851 
852 /**
853  * @tc.number: SUB_Service_throw_SADone_0100
854  * @tc.name: SUB_Service_throw_SADone_0100
855  * @tc.desc: 测试 SADone 接口的 catch 分支
856  * @tc.size: MEDIUM
857  * @tc.type: FUNC
858  * @tc.level Level 1
859  * @tc.require: issuesIAC04T
860  */
861 HWTEST_F(ServiceThrowTest, SUB_Service_throw_SADone_0100, testing::ext::TestSize.Level1)
862 {
863     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_SADone_0100";
864     try {
865         EXPECT_NE(service, nullptr);
866         ErrCode errCode = 0;
867         string bundleName;
__anon27196b3a1802() 868         EXPECT_CALL(*sessionMock, OnBundleFileReady(_, _)).WillOnce(Invoke([]() {
869             throw BError(BError::Codes::EXT_THROW_EXCEPTION);
870             return false;
871         }));
872         EXPECT_CALL(*sessionMock, IsOnAllBundlesFinished()).WillOnce(Return(false));
873         auto ret = service->SADone(errCode, bundleName);
874         EXPECT_EQ(ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode());
875 
__anon27196b3a1902() 876         EXPECT_CALL(*sessionMock, OnBundleFileReady(_, _)).WillOnce(Invoke([]() {
877             throw runtime_error("运行时错误");
878             return false;
879         }));
880         EXPECT_CALL(*sessionMock, IsOnAllBundlesFinished()).WillOnce(Return(false));
881         ret = service->SADone(errCode, bundleName);
882         EXPECT_EQ(ret, EPERM);
883 
__anon27196b3a1a02() 884         EXPECT_CALL(*sessionMock, OnBundleFileReady(_, _)).WillOnce(Invoke([]() {
885             throw "未知错误";
886             return false;
887         }));
888         EXPECT_CALL(*sessionMock, IsOnAllBundlesFinished()).WillOnce(Return(false));
889         ret = service->SADone(errCode, bundleName);
890         EXPECT_EQ(ret, EPERM);
891     } catch (...) {
892         EXPECT_TRUE(false);
893         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by SADone.";
894     }
895     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_SADone_0100";
896 }
897 
898 /**
899  * @tc.number: SUB_Service_throw_GetLocalCapabilitiesIncremental_0100
900  * @tc.name: SUB_Service_throw_GetLocalCapabilitiesIncremental_0100
901  * @tc.desc: 测试 GetLocalCapabilitiesIncremental 接口的 catch 分支
902  * @tc.size: MEDIUM
903  * @tc.type: FUNC
904  * @tc.level Level 1
905  * @tc.require: issuesIAC04T
906  */
907 HWTEST_F(ServiceThrowTest, SUB_Service_throw_GetLocalCapabilitiesIncremental_0100, testing::ext::TestSize.Level1)
908 {
909     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_GetLocalCapabilitiesIncremental_0100";
910     try {
911         EXPECT_NE(service, nullptr);
912         vector<BIncrementalData> bundleNames;
__anon27196b3a1b02() 913         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
914             throw BError(BError::Codes::EXT_THROW_EXCEPTION);
915         }));
916         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
917         auto ret = service->GetLocalCapabilitiesIncremental(bundleNames);
918         EXPECT_EQ(-ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode());
919 
__anon27196b3a1c02() 920         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
921             throw runtime_error("运行时错误");
922         }));
923         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
924         ret = service->GetLocalCapabilitiesIncremental(bundleNames);
925         EXPECT_EQ(-ret, EPERM);
926 
__anon27196b3a1d02() 927         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
928             throw "未知错误";
929         }));
930         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
931         ret = service->GetLocalCapabilitiesIncremental(bundleNames);
932         EXPECT_EQ(-ret, EPERM);
933     } catch (...) {
934         EXPECT_TRUE(false);
935         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by GetLocalCapabilitiesIncremental.";
936     }
937     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_GetLocalCapabilitiesIncremental_0100";
938 }
939 
940 /**
941  * @tc.number: SUB_Service_throw_GetAppLocalListAndDoIncrementalBackup_0100
942  * @tc.name: SUB_Service_throw_GetAppLocalListAndDoIncrementalBackup_0100
943  * @tc.desc: 测试 GetAppLocalListAndDoIncrementalBackup 接口的 catch 分支
944  * @tc.size: MEDIUM
945  * @tc.type: FUNC
946  * @tc.level Level 1
947  * @tc.require: issuesIAC04T
948  */
949 HWTEST_F(ServiceThrowTest, SUB_Service_throw_GetAppLocalListAndDoIncrementalBackup_0100, testing::ext::TestSize.Level1)
950 {
951     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_GetAppLocalListAndDoIncrementalBackup_0100";
952     try {
953         EXPECT_NE(service, nullptr);
__anon27196b3a1e02() 954         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
955             throw BError(BError::Codes::EXT_THROW_EXCEPTION);
956         }));
957         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
958         auto ret = service->GetAppLocalListAndDoIncrementalBackup();
959         EXPECT_EQ(ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode());
960 
__anon27196b3a1f02() 961         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
962             throw runtime_error("运行时错误");
963         }));
964         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
965         ret = service->GetAppLocalListAndDoIncrementalBackup();
966         EXPECT_EQ(ret, EPERM);
967 
__anon27196b3a2002() 968         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
969             throw "未知错误";
970         }));
971         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
972         ret = service->GetAppLocalListAndDoIncrementalBackup();
973         EXPECT_EQ(ret, EPERM);
974     } catch (...) {
975         EXPECT_TRUE(false);
976         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by GetAppLocalListAndDoIncrementalBackup.";
977     }
978     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_GetAppLocalListAndDoIncrementalBackup_0100";
979 }
980 
981 /**
982  * @tc.number: SUB_Service_throw_InitIncrementalBackupSession_0100
983  * @tc.name: SUB_Service_throw_InitIncrementalBackupSession_0100
984  * @tc.desc: 测试 InitIncrementalBackupSession 接口的 catch 分支
985  * @tc.size: MEDIUM
986  * @tc.type: FUNC
987  * @tc.level Level 1
988  * @tc.require: issuesIAC04T
989  */
990 HWTEST_F(ServiceThrowTest, SUB_Service_throw_InitIncrementalBackupSession_0100, testing::ext::TestSize.Level1)
991 {
992     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_InitIncrementalBackupSession_0100";
993     EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::DEFAULT_USER_ID));
994     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0));
995     EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL));
996     EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
997             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
998     auto ret = service->InitIncrementalBackupSession(nullptr);
999     EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode());
1000 
1001     EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::SYSTEM_UID));
1002     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)).WillOnce(Return(0)).WillOnce(Return(0));
1003     EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL))
1004         .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL));
1005     EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
1006             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)))
1007             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
1008     EXPECT_CALL(*sessionMock, Active(_)).WillOnce(Return(BError(BError::Codes::SA_REFUSED_ACT)));
1009     EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Return(IServiceReverse::Scenario::UNDEFINED));
1010     ret = service->InitIncrementalBackupSession(nullptr);
1011     EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode());
1012 
1013     EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::SYSTEM_UID));
1014     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)).WillOnce(Return(0)).WillOnce(Return(0));
1015     EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL))
1016         .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL));
1017     EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
1018             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)))
1019             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)))
1020             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
1021     EXPECT_CALL(*sessionMock, Active(_)).WillOnce(Return(BError(BError::Codes::OK)));
1022     ret = service->InitIncrementalBackupSession(nullptr);
1023     EXPECT_EQ(ret, BError(BError::Codes::OK).GetCode());
1024     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_InitIncrementalBackupSession_0100";
1025 }
1026 
1027 /**
1028  * @tc.number: SUB_Service_throw_InitIncrementalBackupSession_0200
1029  * @tc.name: SUB_Service_throw_InitIncrementalBackupSession_0200
1030  * @tc.desc: 测试 InitIncrementalBackupSession 接口的 catch 分支
1031  * @tc.size: MEDIUM
1032  * @tc.type: FUNC
1033  * @tc.level Level 1
1034  * @tc.require: issuesIAC04T
1035  */
1036 HWTEST_F(ServiceThrowTest, SUB_Service_throw_InitIncrementalBackupSession_0200, testing::ext::TestSize.Level1)
1037 {
1038     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_InitIncrementalBackupSession_0200";
1039     std::string errMsg;
1040     EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::DEFAULT_USER_ID));
1041     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0));
1042     EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL));
1043     EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
1044             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
1045     auto ret = service->InitIncrementalBackupSession(nullptr, errMsg);
1046     EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode());
1047 
1048     EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::SYSTEM_UID));
1049     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)).WillOnce(Return(0)).WillOnce(Return(0));
1050     EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL))
1051         .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL));
1052     EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
1053             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)))
1054             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
1055     EXPECT_CALL(*sessionMock, Active(_)).WillOnce(Return(BError(BError::Codes::SA_REFUSED_ACT)));
1056     EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Return(IServiceReverse::Scenario::UNDEFINED));
1057     ret = service->InitIncrementalBackupSession(nullptr, errMsg);
1058     EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode());
1059 
1060     EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::SYSTEM_UID));
1061     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)).WillOnce(Return(0)).WillOnce(Return(0));
1062     EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL))
1063         .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL));
1064     EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
1065             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)))
1066             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
1067     EXPECT_CALL(*sessionMock, Active(_)).WillOnce(Return(BError(BError::Codes::SA_SESSION_CONFLICT)));
1068     EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Return(IServiceReverse::Scenario::UNDEFINED));
1069     ret = service->InitIncrementalBackupSession(nullptr, errMsg);
1070     EXPECT_EQ(ret, BError(BError::Codes::SA_SESSION_CONFLICT).GetCode());
1071 
1072     EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::SYSTEM_UID));
1073     EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)).WillOnce(Return(0)).WillOnce(Return(0));
1074     EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL))
1075         .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL));
1076     EXPECT_CALL(*param, GetBackupDebugOverrideAccount())
1077             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)))
1078             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)))
1079             .WillOnce(Return(make_pair<bool, int32_t>(true, DEBUG_ID + 1)));
1080     EXPECT_CALL(*sessionMock, Active(_)).WillOnce(Return(BError(BError::Codes::OK)));
1081     ret = service->InitIncrementalBackupSession(nullptr, errMsg);
1082     EXPECT_EQ(ret, BError(BError::Codes::OK).GetCode());
1083     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_InitIncrementalBackupSession_0200";
1084 }
1085 
1086 /**
1087  * @tc.number: SUB_Service_throw_AppendBundlesIncrementalBackupSession_0100
1088  * @tc.name: SUB_Service_throw_AppendBundlesIncrementalBackupSession_0100
1089  * @tc.desc: 测试 AppendBundlesIncrementalBackupSession 接口的 catch 分支
1090  * @tc.size: MEDIUM
1091  * @tc.type: FUNC
1092  * @tc.level Level 1
1093  * @tc.require: issuesIAC04T
1094  */
1095 HWTEST_F(ServiceThrowTest, SUB_Service_throw_AppendBundlesIncrementalBackupSession_0100, testing::ext::TestSize.Level1)
1096 {
1097     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_AppendBundlesIncrementalBackupSession_0100";
1098     try {
1099         EXPECT_NE(service, nullptr);
1100         vector<BIncrementalData> bundlesToBackup;
__anon27196b3a2102() 1101         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
1102             throw BError(BError::Codes::EXT_THROW_EXCEPTION);
1103         }));
1104         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
1105         auto ret = service->AppendBundlesIncrementalBackupSession(bundlesToBackup);
1106         EXPECT_EQ(ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode());
1107 
__anon27196b3a2202() 1108         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
1109             throw "未知错误";
1110         }));
1111         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
1112         ret = service->AppendBundlesIncrementalBackupSession(bundlesToBackup);
1113         EXPECT_EQ(ret, EPERM);
1114     } catch (...) {
1115         EXPECT_TRUE(false);
1116         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by AppendBundlesIncrementalBackupSession.";
1117     }
1118     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_AppendBundlesIncrementalBackupSession_0100";
1119 }
1120 
1121 /**
1122  * @tc.number: SUB_Service_throw_AppendBundlesIncrementalBackupSession_0200
1123  * @tc.name: SUB_Service_throw_AppendBundlesIncrementalBackupSession_0200
1124  * @tc.desc: 测试 AppendBundlesIncrementalBackupSession 接口的 catch 分支
1125  * @tc.size: MEDIUM
1126  * @tc.type: FUNC
1127  * @tc.level Level 1
1128  * @tc.require: issuesIAC04T
1129  */
1130 HWTEST_F(ServiceThrowTest, SUB_Service_throw_AppendBundlesIncrementalBackupSession_0200, testing::ext::TestSize.Level1)
1131 {
1132     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_AppendBundlesIncrementalBackupSession_0200";
1133     try {
1134         EXPECT_NE(service, nullptr);
1135         vector<BIncrementalData> bundlesToBackup;
1136         vector<std::string> infos;
__anon27196b3a2302() 1137         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
1138             throw BError(BError::Codes::EXT_THROW_EXCEPTION);
1139         }));
1140         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
1141         auto ret = service->AppendBundlesIncrementalBackupSession(bundlesToBackup, infos);
1142         EXPECT_EQ(ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode());
1143 
__anon27196b3a2402() 1144         EXPECT_CALL(*sessionMock, IncreaseSessionCnt(_)).WillOnce(Invoke([]() {
1145             throw "未知错误";
1146         }));
1147         EXPECT_CALL(*sessionMock, DecreaseSessionCnt(_)).WillOnce(Return());
1148         ret = service->AppendBundlesIncrementalBackupSession(bundlesToBackup, infos);
1149         EXPECT_EQ(ret, EPERM);
1150     } catch (...) {
1151         EXPECT_TRUE(false);
1152         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by AppendBundlesIncrementalBackupSession.";
1153     }
1154     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_AppendBundlesIncrementalBackupSession_0200";
1155 }
1156 
1157 /**
1158  * @tc.number: SUB_Service_throw_PublishIncrementalFile_0100
1159  * @tc.name: SUB_Service_throw_PublishIncrementalFile_0100
1160  * @tc.desc: 测试 PublishIncrementalFile 接口的 catch 分支
1161  * @tc.size: MEDIUM
1162  * @tc.type: FUNC
1163  * @tc.level Level 1
1164  * @tc.require: issuesIAC04T
1165  */
1166 HWTEST_F(ServiceThrowTest, SUB_Service_throw_PublishIncrementalFile_0100, testing::ext::TestSize.Level1)
1167 {
1168     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_PublishIncrementalFile_0100";
1169     try {
1170         EXPECT_NE(service, nullptr);
1171         BFileInfo fileInfo;
1172         EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0));
1173         EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce(
1174             Return(BError(BError::Codes::SDK_MIXED_SCENARIO)));
1175         auto ret = service->PublishIncrementalFile(fileInfo);
1176         EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode());
1177 
1178         EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0));
1179         EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce(
1180             Return(BError(BError::Codes::SA_REFUSED_ACT)));
1181         ret = service->PublishIncrementalFile(fileInfo);
1182         EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode());
1183     } catch (...) {
1184         EXPECT_TRUE(false);
1185         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by PublishIncrementalFile.";
1186     }
1187     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_PublishIncrementalFile_0100";
1188 }
1189 
1190 /**
1191  * @tc.number: SUB_Service_throw_AppIncrementalFileReady_0100
1192  * @tc.name: SUB_Service_throw_AppIncrementalFileReady_0100
1193  * @tc.desc: 测试 AppIncrementalFileReady 接口的 catch 分支
1194  * @tc.size: MEDIUM
1195  * @tc.type: FUNC
1196  * @tc.level Level 1
1197  * @tc.require: issuesIAC04T
1198  */
1199 HWTEST_F(ServiceThrowTest, SUB_Service_throw_AppIncrementalFileReady_0100, testing::ext::TestSize.Level1)
1200 {
1201     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_AppIncrementalFileReady_0100";
1202     try {
1203         EXPECT_NE(service, nullptr);
1204         string fileName;
1205         EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0));
1206         EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_HAP));
1207         EXPECT_CALL(*token, GetHapTokenInfo(_, _)).WillOnce(Return(0));
1208         EXPECT_CALL(*jsonUtil, BuildBundleNameIndexInfo(_, _)).WillOnce(Return("bundleName"));
1209         EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Return(BError(BError::Codes::SA_INVAL_ARG)));
1210         auto ret = service->AppIncrementalFileReady(fileName, UniqueFd(-1), UniqueFd(-1), 0);
1211         EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode());
1212 
1213         EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)).WillOnce(Return(0)).WillOnce(Return(0));
1214         EXPECT_CALL(*token, GetTokenType(_))
1215             .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_HAP))
1216             .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_HAP));
1217         EXPECT_CALL(*token, GetHapTokenInfo(_, _)).WillOnce(Return(0));
1218         EXPECT_CALL(*jsonUtil, BuildBundleNameIndexInfo(_, _))
1219             .WillOnce(Return("bundleName"))
1220             .WillOnce(Return("bundleName"))
1221             .WillOnce(Return("bundleName"));
1222         EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Return(BError(BError::Codes::SA_REFUSED_ACT)));
1223         ret = service->AppIncrementalFileReady(fileName, UniqueFd(-1), UniqueFd(-1), 0);
1224         EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode());
1225     } catch (...) {
1226         EXPECT_TRUE(false);
1227         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by AppIncrementalFileReady.";
1228     }
1229     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_AppIncrementalFileReady_0100";
1230 }
1231 
1232 /**
1233  * @tc.number: SUB_Service_throw_AppIncrementalDone_0100
1234  * @tc.name: SUB_Service_throw_AppIncrementalDone_0100
1235  * @tc.desc: 测试 AppIncrementalDone 接口的 catch 分支
1236  * @tc.size: MEDIUM
1237  * @tc.type: FUNC
1238  * @tc.level Level 1
1239  * @tc.require: issuesIAC04T
1240  */
1241 HWTEST_F(ServiceThrowTest, SUB_Service_throw_AppIncrementalDone_0100, testing::ext::TestSize.Level1)
1242 {
1243     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_AppIncrementalDone_0100";
1244     try {
1245         EXPECT_NE(service, nullptr);
1246         EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)).WillOnce(Return(0)).WillOnce(Return(0));
1247         EXPECT_CALL(*token, GetTokenType(_))
1248             .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_HAP))
1249             .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_HAP));
1250         EXPECT_CALL(*token, GetHapTokenInfo(_, _)).WillOnce(Return(0));
1251         EXPECT_CALL(*jsonUtil, BuildBundleNameIndexInfo(_, _))
1252             .WillOnce(Return("bundleName"))
1253             .WillOnce(Return("bundleName"))
1254             .WillOnce(Return("bundleName"));
1255         EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Return(BError(BError::Codes::SA_INVAL_ARG)));
1256         EXPECT_CALL(*sessionMock, IsOnAllBundlesFinished()).WillOnce(Return(false));
1257         auto ret = service->AppIncrementalDone(0);
1258         EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode());
1259 
1260         EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)).WillOnce(Return(0)).WillOnce(Return(0));
1261         EXPECT_CALL(*token, GetTokenType(_))
1262             .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_HAP))
1263             .WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_HAP));
1264         EXPECT_CALL(*token, GetHapTokenInfo(_, _)).WillOnce(Return(0));
1265         EXPECT_CALL(*jsonUtil, BuildBundleNameIndexInfo(_, _))
1266             .WillOnce(Return("bundleName"))
1267             .WillOnce(Return("bundleName"))
1268             .WillOnce(Return("bundleName"));
1269         EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Return(BError(BError::Codes::SA_REFUSED_ACT)));
1270         EXPECT_CALL(*sessionMock, IsOnAllBundlesFinished()).WillOnce(Return(false));
1271         ret = service->AppIncrementalDone(0);
1272         EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode());
1273     } catch (...) {
1274         EXPECT_TRUE(false);
1275         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by AppIncrementalDone.";
1276     }
1277     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_AppIncrementalDone_0100";
1278 }
1279 
1280 /**
1281  * @tc.number: SUB_Service_throw_GetIncrementalFileHandle_0100
1282  * @tc.name: SUB_Service_throw_GetIncrementalFileHandle_0100
1283  * @tc.desc: 测试 GetIncrementalFileHandle 接口的 catch 分支
1284  * @tc.size: MEDIUM
1285  * @tc.type: FUNC
1286  * @tc.level Level 1
1287  * @tc.require: issuesIAC04T
1288  */
1289 HWTEST_F(ServiceThrowTest, SUB_Service_throw_GetIncrementalFileHandle_0100, testing::ext::TestSize.Level1)
1290 {
1291     GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_GetIncrementalFileHandle_0100";
1292     try {
1293         EXPECT_NE(service, nullptr);
1294         string bundleName;
1295         string fileName;
1296 
1297         EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0));
1298         EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_HAP));
1299         EXPECT_CALL(*token, GetHapTokenInfo(_, _)).WillOnce(Return(0));
1300         EXPECT_CALL(*jsonUtil, BuildBundleNameIndexInfo(_, _)).WillOnce(Return("bundleName"));
1301         EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce(
1302             Return(BError(BError::Codes::SDK_MIXED_SCENARIO)));
1303         auto ret = service->GetIncrementalFileHandle(bundleName, fileName);
1304         EXPECT_EQ(ret, BError(BError::Codes::SDK_MIXED_SCENARIO).GetCode());
1305 
1306         EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0));
1307         EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_HAP));
1308         EXPECT_CALL(*token, GetHapTokenInfo(_, _)).WillOnce(Return(0));
1309         EXPECT_CALL(*jsonUtil, BuildBundleNameIndexInfo(_, _)).WillOnce(Return("bundleName"));
1310         EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce(
1311             Return(BError(BError::Codes::SA_REFUSED_ACT)));
1312         ret = service->GetIncrementalFileHandle(bundleName, fileName);
1313         EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode());
1314     } catch (...) {
1315         EXPECT_TRUE(false);
1316         GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by GetIncrementalFileHandle.";
1317     }
1318     GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_GetIncrementalFileHandle_0100";
1319 }
1320 } // namespace OHOS::FileManagement::Backup