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 "ams_mgr_proxy.h"
19 #include "mock_ability_debug_response_stub.h"
20 #include "mock_ams_mgr_scheduler.h"
21 #include "mock_app_debug_listener_stub.h"
22
23 using namespace testing;
24 using namespace testing::ext;
25
26 namespace OHOS {
27 namespace AppExecFwk {
28 namespace {
29 const std::string STRING_BUNDLE_NAME = "bundleName";
30 const std::string EMPTY_BUNDLE_NAME = "";
31 } // namespace
32
33 class AmsMgrProxyTest : public testing::Test {
34 public:
35 static void SetUpTestCase();
36 static void TearDownTestCase();
37 void SetUp() override;
38 void TearDown() override;
39
40 sptr<MockAmsMgrScheduler> mockAmsMgrScheduler_;
41 sptr<AmsMgrProxy> amsMgrProxy_;
42 sptr<MockAppDebugListenerStub> listener_;
43 sptr<MockAbilityDebugResponseStub> response_;
44 };
45
SetUpTestCase(void)46 void AmsMgrProxyTest::SetUpTestCase(void)
47 {}
48
TearDownTestCase(void)49 void AmsMgrProxyTest::TearDownTestCase(void)
50 {}
51
SetUp()52 void AmsMgrProxyTest::SetUp()
53 {
54 GTEST_LOG_(INFO) << "AmsMgrProxyTest::SetUp()";
55
56 mockAmsMgrScheduler_ = new MockAmsMgrScheduler();
57 amsMgrProxy_ = new AmsMgrProxy(mockAmsMgrScheduler_);
58 listener_ = new MockAppDebugListenerStub();
59 response_ = new MockAbilityDebugResponseStub();
60 }
61
TearDown()62 void AmsMgrProxyTest::TearDown()
63 {}
64
65 /**
66 * @tc.name: RegisterAppDebugListener_0100
67 * @tc.desc: Register app debug listener, check nullptr listener.
68 * @tc.type: FUNC
69 */
70 HWTEST_F(AmsMgrProxyTest, RegisterAppDebugListener_0100, TestSize.Level1)
71 {
72 EXPECT_NE(amsMgrProxy_, nullptr);
73 EXPECT_NE(listener_, nullptr);
74 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _))
75 .Times(1)
76 .WillOnce(Return(0));
77 auto result = amsMgrProxy_->RegisterAppDebugListener(listener_);
78 EXPECT_EQ(result, NO_ERROR);
79
80 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _)).Times(0);
81 listener_ = nullptr;
82 result = amsMgrProxy_->RegisterAppDebugListener(listener_);
83 EXPECT_EQ(result, ERR_INVALID_DATA);
84 }
85
86 /**
87 * @tc.name: UnregisterAppDebugListener_0100
88 * @tc.desc: Unregister app debug listener, check nullptr listener.
89 * @tc.type: FUNC
90 */
91 HWTEST_F(AmsMgrProxyTest, UnregisterAppDebugListener_0100, TestSize.Level1)
92 {
93 EXPECT_NE(amsMgrProxy_, nullptr);
94 EXPECT_NE(listener_, nullptr);
95 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _))
96 .Times(1)
97 .WillOnce(Return(0));
98 auto result = amsMgrProxy_->UnregisterAppDebugListener(listener_);
99 EXPECT_EQ(result, NO_ERROR);
100
101 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _)).Times(0);
102 listener_ = nullptr;
103 result = amsMgrProxy_->UnregisterAppDebugListener(listener_);
104 EXPECT_EQ(result, ERR_INVALID_DATA);
105 }
106
107 /**
108 * @tc.name: AttachAppDebug_0100
109 * @tc.desc: Attach app debug by bundle name, check empty bundle name.
110 * @tc.type: FUNC
111 */
112 HWTEST_F(AmsMgrProxyTest, AttachAppDebug_0100, TestSize.Level1)
113 {
114 EXPECT_NE(amsMgrProxy_, nullptr);
115 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _))
116 .Times(1)
117 .WillOnce(Return(0));
118 auto result = amsMgrProxy_->AttachAppDebug(STRING_BUNDLE_NAME);
119 EXPECT_EQ(result, NO_ERROR);
120
121 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _)).Times(0);
122 result = amsMgrProxy_->AttachAppDebug(EMPTY_BUNDLE_NAME);
123 EXPECT_EQ(result, ERR_INVALID_DATA);
124 }
125
126 /**
127 * @tc.name: DetachAppDebug_0100
128 * @tc.desc: Detach app debug by bundleName, check empty bundle name.
129 * @tc.type: FUNC
130 */
131 HWTEST_F(AmsMgrProxyTest, DetachAppDebug_0100, TestSize.Level1)
132 {
133 EXPECT_NE(amsMgrProxy_, nullptr);
134 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _))
135 .Times(1)
136 .WillOnce(Return(0));
137 auto result = amsMgrProxy_->DetachAppDebug(STRING_BUNDLE_NAME);
138 EXPECT_EQ(result, NO_ERROR);
139
140 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _)).Times(0);
141 result = amsMgrProxy_->DetachAppDebug(EMPTY_BUNDLE_NAME);
142 EXPECT_EQ(result, ERR_INVALID_DATA);
143 }
144
145 /**
146 * @tc.name: RegisterAbilityDebugResponse_0100
147 * @tc.desc: Register ability debug response, check nullptr response.
148 * @tc.type: FUNC
149 */
150 HWTEST_F(AmsMgrProxyTest, RegisterAbilityDebugResponse_0100, TestSize.Level1)
151 {
152 EXPECT_NE(amsMgrProxy_, nullptr);
153 EXPECT_NE(response_, nullptr);
154 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _))
155 .Times(1)
156 .WillOnce(Return(0));
157 auto result = amsMgrProxy_->RegisterAbilityDebugResponse(response_);
158 EXPECT_EQ(result, NO_ERROR);
159
160 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _)).Times(0);
161 response_ = nullptr;
162 result = amsMgrProxy_->RegisterAbilityDebugResponse(response_);
163 EXPECT_EQ(result, ERR_INVALID_DATA);
164 }
165
166 /**
167 * @tc.name: NotifyAppMgrRecordExitReason_0100
168 * @tc.desc: NotifyAppMgrRecordExitReason.
169 * @tc.type: FUNC
170 */
171 HWTEST_F(AmsMgrProxyTest, NotifyAppMgrRecordExitReason_0100, TestSize.Level1)
172 {
173 EXPECT_NE(amsMgrProxy_, nullptr);
174 EXPECT_NE(response_, nullptr);
175 EXPECT_CALL(*mockAmsMgrScheduler_, SendRequest(_, _, _, _))
176 .Times(1)
177 .WillOnce(Return(NO_ERROR));
178
179 int32_t reason = 0;
180 int32_t pid = 1;
181 std::string exitMsg = "JsError";
182 auto result = amsMgrProxy_->NotifyAppMgrRecordExitReason(reason, pid, exitMsg);
183 EXPECT_EQ(result, NO_ERROR);
184 }
185 } // namespace AppExecFwk
186 } // namespace OHOS
187