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