1 /*
2 * Copyright (c) 2021-2022 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
18 #include "ability_manager_errors.h"
19 #include "ams_mgr_proxy.h"
20 #include "mock_ability_debug_response_stub.h"
21 #include "mock_ability_token.h"
22 #include "mock_ams_mgr_scheduler.h"
23 #include "mock_app_debug_listener_stub.h"
24
25 using namespace testing;
26 using namespace testing::ext;
27
28 namespace OHOS {
29 namespace AppExecFwk {
30 namespace {
31 const std::string STRING_BUNDLE_NAME = "bundleName";
32 const std::string EMPTY_BUNDLE_NAME = "";
33 } // namespace
34
35 class AmsMgrProxyTest : public testing::Test {
36 public:
37 static void SetUpTestCase();
38 static void TearDownTestCase();
39 void SetUp() override;
40 void TearDown() override;
41
42 sptr<MockAmsMgrScheduler> mockAmsMgrScheduler_;
43 sptr<AmsMgrProxy> amsMgrProxy_;
44 sptr<MockAppDebugListenerStub> listener_;
45 sptr<MockAbilityDebugResponseStub> response_;
46 };
47
SetUpTestCase(void)48 void AmsMgrProxyTest::SetUpTestCase(void)
49 {}
50
TearDownTestCase(void)51 void AmsMgrProxyTest::TearDownTestCase(void)
52 {}
53
SetUp()54 void AmsMgrProxyTest::SetUp()
55 {
56 GTEST_LOG_(INFO) << "AmsMgrProxyTest::SetUp()";
57
58 mockAmsMgrScheduler_ = new MockAmsMgrScheduler();
59 amsMgrProxy_ = new AmsMgrProxy(mockAmsMgrScheduler_);
60 listener_ = new MockAppDebugListenerStub();
61 response_ = new MockAbilityDebugResponseStub();
62 }
63
TearDown()64 void AmsMgrProxyTest::TearDown()
65 {}
66
67 /**
68 * @tc.name: RegisterAppDebugListener_0100
69 * @tc.desc: Register app debug listener, check nullptr listener.
70 * @tc.type: FUNC
71 */
72 HWTEST_F(AmsMgrProxyTest, RegisterAppDebugListener_0100, TestSize.Level1)
73 {
74 EXPECT_NE(amsMgrProxy_, nullptr);
75 EXPECT_NE(listener_, nullptr);
76 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _))
77 .Times(1)
78 .WillOnce(Return(0));
79 auto result = amsMgrProxy_->RegisterAppDebugListener(listener_);
80 EXPECT_EQ(result, NO_ERROR);
81
82 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _)).Times(0);
83 listener_ = nullptr;
84 result = amsMgrProxy_->RegisterAppDebugListener(listener_);
85 EXPECT_EQ(result, ERR_INVALID_DATA);
86 }
87
88 /**
89 * @tc.name: UnregisterAppDebugListener_0100
90 * @tc.desc: Unregister app debug listener, check nullptr listener.
91 * @tc.type: FUNC
92 */
93 HWTEST_F(AmsMgrProxyTest, UnregisterAppDebugListener_0100, TestSize.Level1)
94 {
95 EXPECT_NE(amsMgrProxy_, nullptr);
96 EXPECT_NE(listener_, nullptr);
97 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _))
98 .Times(1)
99 .WillOnce(Return(0));
100 auto result = amsMgrProxy_->UnregisterAppDebugListener(listener_);
101 EXPECT_EQ(result, NO_ERROR);
102
103 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _)).Times(0);
104 listener_ = nullptr;
105 result = amsMgrProxy_->UnregisterAppDebugListener(listener_);
106 EXPECT_EQ(result, ERR_INVALID_DATA);
107 }
108
109 /**
110 * @tc.name: AttachAppDebug_0100
111 * @tc.desc: Attach app debug by bundle name, check empty bundle name.
112 * @tc.type: FUNC
113 */
114 HWTEST_F(AmsMgrProxyTest, AttachAppDebug_0100, TestSize.Level1)
115 {
116 EXPECT_NE(amsMgrProxy_, nullptr);
117 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _))
118 .Times(1)
119 .WillOnce(Return(0));
120 auto result = amsMgrProxy_->AttachAppDebug(STRING_BUNDLE_NAME, false);
121 EXPECT_EQ(result, NO_ERROR);
122
123 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _)).Times(0);
124 result = amsMgrProxy_->AttachAppDebug(EMPTY_BUNDLE_NAME, false);
125 EXPECT_EQ(result, ERR_INVALID_DATA);
126 }
127
128 /**
129 * @tc.name: DetachAppDebug_0100
130 * @tc.desc: Detach app debug by bundleName, check empty bundle name.
131 * @tc.type: FUNC
132 */
133 HWTEST_F(AmsMgrProxyTest, DetachAppDebug_0100, TestSize.Level1)
134 {
135 EXPECT_NE(amsMgrProxy_, nullptr);
136 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _))
137 .Times(1)
138 .WillOnce(Return(0));
139 auto result = amsMgrProxy_->DetachAppDebug(STRING_BUNDLE_NAME);
140 EXPECT_EQ(result, NO_ERROR);
141
142 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _)).Times(0);
143 result = amsMgrProxy_->DetachAppDebug(EMPTY_BUNDLE_NAME);
144 EXPECT_EQ(result, ERR_INVALID_DATA);
145 }
146
147 /**
148 * @tc.name: RegisterAbilityDebugResponse_0100
149 * @tc.desc: Register ability debug response, check nullptr response.
150 * @tc.type: FUNC
151 */
152 HWTEST_F(AmsMgrProxyTest, RegisterAbilityDebugResponse_0100, TestSize.Level1)
153 {
154 EXPECT_NE(amsMgrProxy_, nullptr);
155 EXPECT_NE(response_, nullptr);
156 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _))
157 .Times(1)
158 .WillOnce(Return(0));
159 auto result = amsMgrProxy_->RegisterAbilityDebugResponse(response_);
160 EXPECT_EQ(result, NO_ERROR);
161
162 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _)).Times(0);
163 response_ = nullptr;
164 result = amsMgrProxy_->RegisterAbilityDebugResponse(response_);
165 EXPECT_EQ(result, ERR_INVALID_DATA);
166 }
167
168 /**
169 * @tc.name: NotifyAppMgrRecordExitReason_0100
170 * @tc.desc: NotifyAppMgrRecordExitReason.
171 * @tc.type: FUNC
172 */
173 HWTEST_F(AmsMgrProxyTest, NotifyAppMgrRecordExitReason_0100, TestSize.Level1)
174 {
175 EXPECT_NE(amsMgrProxy_, nullptr);
176 EXPECT_NE(response_, nullptr);
177 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _))
178 .Times(1)
179 .WillOnce(Return(NO_ERROR));
180
181 int32_t reason = 0;
182 int32_t pid = 1;
183 std::string exitMsg = "JsError";
184 auto result = amsMgrProxy_->NotifyAppMgrRecordExitReason(reason, pid, exitMsg);
185 EXPECT_EQ(result, NO_ERROR);
186 }
187
188 /**
189 * @tc.name: PreloadApplicationByPhase_0100
190 * @tc.desc: PreloadApplicationByPhase.
191 * @tc.type: FUNC
192 */
193 HWTEST_F(AmsMgrProxyTest, PreloadApplicationByPhase_0100, TestSize.Level1)
194 {
195 GTEST_LOG_(INFO) << "PreloadApplicationByPhase_0100 start";
196 ASSERT_NE(amsMgrProxy_, nullptr);
197
198 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _))
199 .Times(1)
200 .WillOnce(Return(ERR_NULL_OBJECT));
201 auto result = amsMgrProxy_->PreloadApplicationByPhase("com.acts.test", 100, 0, PreloadPhase::PROCESS_CREATED);
202 EXPECT_EQ(result, ERR_NULL_OBJECT);
203 GTEST_LOG_(INFO) << "PreloadApplicationByPhase_0100 end";
204 }
205
206 /**
207 * @tc.name: PreloadApplicationByPhase_0200
208 * @tc.desc: PreloadApplicationByPhase.
209 * @tc.type: FUNC
210 */
211 HWTEST_F(AmsMgrProxyTest, PreloadApplicationByPhase_0200, TestSize.Level1)
212 {
213 GTEST_LOG_(INFO) << "PreloadApplicationByPhase_0200 start";
214 ASSERT_NE(amsMgrProxy_, nullptr);
215
216 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _))
217 .Times(1)
218 .WillOnce(Return(ERR_OK));
219
220 auto result = amsMgrProxy_->PreloadApplicationByPhase("com.acts.test", 100, 0, PreloadPhase::PROCESS_CREATED);
221 EXPECT_EQ(result, ERR_OK);
222 GTEST_LOG_(INFO) << "PreloadApplicationByPhase_0200 end";
223 }
224
225 /**
226 * @tc.name: NotifyPreloadAbilityStateChanged_0100
227 * @tc.desc: NotifyPreloadAbilityStateChanged.
228 * @tc.type: FUNC
229 */
230 HWTEST_F(AmsMgrProxyTest, NotifyPreloadAbilityStateChanged_0100, TestSize.Level1)
231 {
232 GTEST_LOG_(INFO) << "NotifyPreloadAbilityStateChanged_0100 start";
233 ASSERT_NE(amsMgrProxy_, nullptr);
234
235 auto result = amsMgrProxy_->NotifyPreloadAbilityStateChanged(nullptr, true);
236 EXPECT_EQ(result, AAFwk::INVALID_CALLER_TOKEN);
237 GTEST_LOG_(INFO) << "NotifyPreloadAbilityStateChanged_0100 end";
238 }
239
240 /**
241 * @tc.name: NotifyPreloadAbilityStateChanged_0200
242 * @tc.desc: NotifyPreloadAbilityStateChanged.
243 * @tc.type: FUNC
244 */
245 HWTEST_F(AmsMgrProxyTest, NotifyPreloadAbilityStateChanged_0200, TestSize.Level1)
246 {
247 GTEST_LOG_(INFO) << "NotifyPreloadAbilityStateChanged_0200 start";
248 ASSERT_NE(amsMgrProxy_, nullptr);
249
250 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _))
251 .Times(1)
252 .WillOnce(Return(ERR_NULL_OBJECT));
253
254 sptr<IRemoteObject> token = new (std::nothrow) MockAbilityToken();
255 auto result = amsMgrProxy_->NotifyPreloadAbilityStateChanged(token, true);
256 EXPECT_EQ(result, ERR_NULL_OBJECT);
257 GTEST_LOG_(INFO) << "NotifyPreloadAbilityStateChanged_0200 end";
258 }
259
260 /**
261 * @tc.name: NotifyPreloadAbilityStateChanged_0300
262 * @tc.desc: NotifyPreloadAbilityStateChanged.
263 * @tc.type: FUNC
264 */
265 HWTEST_F(AmsMgrProxyTest, NotifyPreloadAbilityStateChanged_0300, TestSize.Level1)
266 {
267 GTEST_LOG_(INFO) << "NotifyPreloadAbilityStateChanged_0300 start";
268 ASSERT_NE(amsMgrProxy_, nullptr);
269
270 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _))
271 .Times(1)
272 .WillOnce(Return(ERR_OK));
273
274 sptr<IRemoteObject> token = new (std::nothrow) MockAbilityToken();
275 auto result = amsMgrProxy_->NotifyPreloadAbilityStateChanged(token, true);
276 EXPECT_EQ(result, ERR_OK);
277 GTEST_LOG_(INFO) << "NotifyPreloadAbilityStateChanged_0300 end";
278 }
279
280 /**
281 * @tc.name: CheckPreloadAppRecordExist_0100
282 * @tc.desc: CheckPreloadAppRecordExist.
283 * @tc.type: FUNC
284 */
285 HWTEST_F(AmsMgrProxyTest, CheckPreloadAppRecordExist_0100, TestSize.Level1)
286 {
287 GTEST_LOG_(INFO) << "CheckPreloadAppRecordExist_0100 start";
288 ASSERT_NE(amsMgrProxy_, nullptr);
289
290 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _))
291 .Times(1)
292 .WillOnce(Return(ERR_NULL_OBJECT));
293 bool isExist = false;
294 auto result = amsMgrProxy_->CheckPreloadAppRecordExist("com.acts.test", 100, 0, isExist);
295 EXPECT_EQ(result, ERR_NULL_OBJECT);
296 GTEST_LOG_(INFO) << "CheckPreloadAppRecordExist_0100 end";
297 }
298
299 /**
300 * @tc.name: CheckPreloadAppRecordExist_0200
301 * @tc.desc: CheckPreloadAppRecordExist.
302 * @tc.type: FUNC
303 */
304 HWTEST_F(AmsMgrProxyTest, CheckPreloadAppRecordExist_0200, TestSize.Level1)
305 {
306 GTEST_LOG_(INFO) << "CheckPreloadAppRecordExist_0200 start";
307 ASSERT_NE(amsMgrProxy_, nullptr);
308
309 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _))
310 .Times(1)
311 .WillOnce(Return(ERR_OK));
312 bool isExist = false;
313 auto result = amsMgrProxy_->CheckPreloadAppRecordExist("com.acts.test", 100, 0, isExist);
314 EXPECT_EQ(result, ERR_OK);
315 GTEST_LOG_(INFO) << "CheckPreloadAppRecordExist_0200 end";
316 }
317 } // namespace AppExecFwk
318 } // namespace OHOS
319