1 /*
2 * Copyright (c) 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 <cstring>
17 #include <gmock/gmock.h>
18 #include <gtest/gtest.h>
19
20 #define private public
21 #include "aafwk_app_mgr_client_adapter_impl.h"
22 #include "aafwk_render_scheduler_impl.h"
23 #undef private
24
25 #include "app_mgr_client.h"
26 #include "ohos_adapter_helper.h"
27
28 using namespace testing;
29 using namespace testing::ext;
30 using namespace OHOS;
31 using namespace AppExecFwk;
32
33 namespace OHOS::NWeb {
34 namespace {
35 const int RESULT_OK = 0;
36 constexpr int GET_TIMES_MAX_CNT = 5;
37 std::shared_ptr<AafwkAppMgrClientAdapterImpl> g_adapter;
38 } // namespace
39
40 class NWebAafwkAdapterTest : public testing::Test {
41 public:
42 static void SetUpTestCase(void);
43 static void TearDownTestCase(void);
44 void SetUp();
45 void TearDown();
46 };
47
SetUpTestCase(void)48 void NWebAafwkAdapterTest::SetUpTestCase(void)
49 {}
50
TearDownTestCase(void)51 void NWebAafwkAdapterTest::TearDownTestCase(void)
52 {}
53
SetUp(void)54 void NWebAafwkAdapterTest::SetUp(void)
55 {}
56
TearDown(void)57 void NWebAafwkAdapterTest::TearDown(void)
58 {}
59
60 class MockAppMgrClient : public AppMgrClient {
61 public:
62 MOCK_METHOD5(StartRenderProcess, int(const std::string&, int32_t, int32_t, int32_t, pid_t&));
63 MOCK_METHOD2(GetRenderProcessTerminationStatus, int(pid_t, int &));
64 };
65
66 class RenderScheduler : public AafwkRenderSchedulerHostAdapter {
67 public:
68 void NotifyBrowserFd(int32_t ipcFd, int32_t sharedFd, int32_t crashFd);
69 };
70
NotifyBrowserFd(int32_t ipcFd,int32_t sharedFd,int32_t crashFd)71 void RenderScheduler::NotifyBrowserFd(int32_t ipcFd, int32_t sharedFd, int32_t crashFd)
72 {
73 (void)ipcFd;
74 (void)sharedFd;
75 (void)crashFd;
76 }
77
78 /**
79 * @tc.name: NWebInputEvent_AafwkAppMgrClientAdapterImpl_001.
80 * @tc.desc: Test the AafwkAppMgrClientAdapterImpl.
81 * @tc.type: FUNC
82 * @tc.require:
83 */
84 HWTEST_F(NWebAafwkAdapterTest, NWebInputEvent_AafwkAppMgrClientAdapterImpl_001, TestSize.Level1)
85 {
86 int result = 0;
87 g_adapter = std::make_shared<AafwkAppMgrClientAdapterImpl>();
88 if (g_adapter == nullptr) {
89 result = -1;
90 }
91 EXPECT_EQ(RESULT_OK, result);
92 }
93
94 /**
95 * @tc.name: NWebAafwkAdapter_StartRenderProcess_002.
96 * @tc.desc: Test the StartRenderProcess.
97 * @tc.type: FUNC
98 * @tc.require:
99 */
100 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_StartRenderProcess_002, TestSize.Level1)
101 {
102 MockAppMgrClient *mock = new MockAppMgrClient();
103 g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
104 EXPECT_CALL(*mock, StartRenderProcess(::testing::_, ::testing::_, ::testing::_, ::testing::_, ::testing::_))
105 .Times(1)
106 .WillRepeatedly(::testing::Return(0));
107 std::string renderParam = "test";
108 int32_t ipcFd = 0;
109 int32_t sharedFd = 0;
110 int32_t crashFd = 0;
111 pid_t renderPid = 0;
112 int result = g_adapter->StartRenderProcess(renderParam, ipcFd, sharedFd, crashFd, renderPid);
113 EXPECT_EQ(RESULT_OK, result);
114 }
115
116 /**
117 * @tc.name: NWebAafwkAdapter_StartRenderProcess_003.
118 * @tc.desc: Test the StartRenderProcess Exception scenarios.
119 * @tc.type: FUNC
120 * @tc.require:
121 */
122 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_StartRenderProcess_003, TestSize.Level1)
123 {
124 MockAppMgrClient *mock = new MockAppMgrClient();
125 g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
126 EXPECT_CALL(*mock, StartRenderProcess(::testing::_, ::testing::_, ::testing::_, ::testing::_, ::testing::_))
127 .Times(1)
128 .WillRepeatedly(::testing::Return(1));
129 std::string renderParam = "test";
130 int32_t ipcFd = 0;
131 int32_t sharedFd = 0;
132 pid_t renderPid = 0;
133 int32_t crashFd = 0;
134 int result = g_adapter->StartRenderProcess(renderParam, ipcFd, sharedFd, crashFd, renderPid);
135 EXPECT_NE(RESULT_OK, result);
136 }
137
138 /**
139 * @tc.name: NWebAafwkAdapter_AttachRenderProcess_004.
140 * @tc.desc: Test the AttachRenderProcess.
141 * @tc.type: FUNC
142 * @tc.require:
143 */
144 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_AttachRenderProcess_004, TestSize.Level1)
145 {
146 int red = 0;
147 std::shared_ptr<RenderScheduler> render = std::make_shared<RenderScheduler>();
148 if (render == nullptr) {
149 red = -1;
150 }
151 EXPECT_EQ(RESULT_OK, red);
152 g_adapter->AttachRenderProcess(render);
153 std::shared_ptr<RenderScheduler> renderd = nullptr;
154 g_adapter->AttachRenderProcess(renderd);
155 }
156
157 /**
158 * @tc.name: NWebAafwkAdapter_GetRenderProcessTerminationStatus_005.
159 * @tc.desc: Test the GetRenderProcessTerminationStatus.
160 * @tc.type: FUNC
161 * @tc.require:
162 */
163 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_GetRenderProcessTerminationStatus_005, TestSize.Level1)
164 {
165 int statused = 1;
166 MockAppMgrClient *mock = new MockAppMgrClient();
167 g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
168 EXPECT_CALL(*mock, GetRenderProcessTerminationStatus(::testing::_, ::testing::_))
169 .Times(1)
170 .WillRepeatedly(
171 ::testing::DoAll(
172 ::testing::SetArgReferee<1>(statused),
173 ::testing::Return(0)
174 )
175 );
176 pid_t red = 1;
177 int result = g_adapter->GetRenderProcessTerminationStatus(red, statused);
178 EXPECT_EQ(RESULT_OK, result);
179 }
180
181 /**
182 * @tc.name: NWebAafwkAdapter_GetRenderProcessTerminationStatus_006.
183 * @tc.desc: Test the GetRenderProcessTerminationStatus Exception scenarios.
184 * @tc.type: FUNC
185 * @tc.require:
186 */
187 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_GetRenderProcessTerminationStatus_006, TestSize.Level1)
188 {
189 int statused = 1;
190 MockAppMgrClient *mock = new MockAppMgrClient();
191 g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
192 EXPECT_CALL(*mock, GetRenderProcessTerminationStatus(::testing::_, ::testing::_))
193 .Times(1)
194 .WillRepeatedly(
195 ::testing::DoAll(
196 ::testing::SetArgReferee<1>(statused),
197 ::testing::Return(1)
198 )
199 );
200 pid_t red = 1;
201 int result = g_adapter->GetRenderProcessTerminationStatus(red, statused);
202 EXPECT_NE(RESULT_OK, result);
203 }
204
205 /**
206 * @tc.name: NWebAafwkAdapter_GetRenderProcessTerminationStatus_007.
207 * @tc.desc: Test the GetRenderProcessTerminationStatus Exception scenarios.
208 * @tc.type: FUNC
209 * @tc.require:
210 */
211 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_GetRenderProcessTerminationStatus_007, TestSize.Level1)
212 {
213 int statused = -1;
214 MockAppMgrClient *mock = new MockAppMgrClient();
215 g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
216 EXPECT_CALL(*mock, GetRenderProcessTerminationStatus(::testing::_, ::testing::_))
217 .Times(GET_TIMES_MAX_CNT)
218 .WillRepeatedly(
219 ::testing::DoAll(
220 ::testing::SetArgReferee<1>(statused),
221 ::testing::Return(0)
222 )
223 );
224 pid_t red = 1;
225 int result = g_adapter->GetRenderProcessTerminationStatus(red, statused);
226 EXPECT_NE(RESULT_OK, result);
227 }
228
229 /**
230 * @tc.name: NWebAafwkAdapter_StartRenderProcess_008.
231 * @tc.desc: In this scence StartRenderProcess will be fail.
232 * @tc.type: FUNC
233 * @tc.require:
234 */
235 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_StartRenderProcess_008, TestSize.Level1)
236 {
237 g_adapter->appMgrClient_ = nullptr;
238 std::string renderParam = "test";
239 int32_t ipcFd = 0;
240 int32_t sharedFd = 0;
241 pid_t renderPid = 0;
242 int32_t crashFd = 0;
243 int result = g_adapter->StartRenderProcess(renderParam, ipcFd, sharedFd, crashFd, renderPid);
244 EXPECT_NE(RESULT_OK, result);
245 result = 0;
246 std::shared_ptr<RenderScheduler> render = std::make_shared<RenderScheduler>();
247 if (render == nullptr) {
248 result = -1;
249 }
250 EXPECT_EQ(RESULT_OK, result);
251 g_adapter->AttachRenderProcess(render);
252 int statused = 0;
253 pid_t red = 1;
254 result = g_adapter->GetRenderProcessTerminationStatus(red, statused);
255 EXPECT_NE(RESULT_OK, result);
256 }
257
258 /**
259 * @tc.name: NWebAafwkAdapter_NotifyBrowserFd_009.
260 * @tc.desc: Test the NotifyBrowserFd.
261 * @tc.type: FUNC
262 * @tc.require:
263 */
264 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_NotifyBrowserFd_009, TestSize.Level1)
265 {
266 int result = 0;
267 std::shared_ptr<AafwkRenderSchedulerHostAdapter> adapter = std::make_shared<RenderScheduler>();
268 if (adapter == nullptr) {
269 result = -1;
270 }
271 EXPECT_EQ(RESULT_OK, result);
272 result = 0;
273 std::shared_ptr<AafwkRenderSchedulerImpl> render = std::make_shared<AafwkRenderSchedulerImpl>(adapter);
274 if (render == nullptr) {
275 result = -1;
276 }
277 EXPECT_EQ(RESULT_OK, result);
278 int32_t ipcFd = 1;
279 int32_t sharedFd = 2;
280 int32_t crashFd = 3;
281 render->NotifyBrowserFd(ipcFd, sharedFd, crashFd);
282 render->renderSchedulerHostAdapter_ = nullptr;
283 render->NotifyBrowserFd(ipcFd, sharedFd, crashFd);
284 }
285 }