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_METHOD4(StartRenderProcess, int(const std::string &, 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);
69 };
70
NotifyBrowserFd(int32_t ipcFd,int32_t sharedFd)71 void RenderScheduler::NotifyBrowserFd(int32_t ipcFd, int32_t sharedFd)
72 {
73 (void)ipcFd;
74 (void)sharedFd;
75 }
76
77 /**
78 * @tc.name: NWebInputEvent_AafwkAppMgrClientAdapterImpl_001.
79 * @tc.desc: Test the AafwkAppMgrClientAdapterImpl.
80 * @tc.type: FUNC
81 * @tc.require:
82 */
83 HWTEST_F(NWebAafwkAdapterTest, NWebInputEvent_AafwkAppMgrClientAdapterImpl_001, TestSize.Level1)
84 {
85 int result = 0;
86 g_adapter = std::make_shared<AafwkAppMgrClientAdapterImpl>();
87 if (g_adapter == nullptr) {
88 result = -1;
89 }
90 EXPECT_EQ(RESULT_OK, result);
91 }
92
93 /**
94 * @tc.name: NWebAafwkAdapter_StartRenderProcess_002.
95 * @tc.desc: Test the StartRenderProcess.
96 * @tc.type: FUNC
97 * @tc.require:
98 */
99 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_StartRenderProcess_002, TestSize.Level1)
100 {
101 MockAppMgrClient *mock = new MockAppMgrClient();
102 g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
103 EXPECT_CALL(*mock, StartRenderProcess(::testing::_, ::testing::_, ::testing::_, ::testing::_))
104 .Times(1)
105 .WillRepeatedly(::testing::Return(0));
106 std::string renderParam = "test";
107 int32_t ipcFd = 0;
108 int32_t sharedFd = 0;
109 pid_t renderPid = 0;
110 int result = g_adapter->StartRenderProcess(renderParam, ipcFd, sharedFd, renderPid);
111 EXPECT_EQ(RESULT_OK, result);
112 }
113
114 /**
115 * @tc.name: NWebAafwkAdapter_StartRenderProcess_003.
116 * @tc.desc: Test the StartRenderProcess Exception scenarios.
117 * @tc.type: FUNC
118 * @tc.require:
119 */
120 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_StartRenderProcess_003, TestSize.Level1)
121 {
122 MockAppMgrClient *mock = new MockAppMgrClient();
123 g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
124 EXPECT_CALL(*mock, StartRenderProcess(::testing::_, ::testing::_, ::testing::_, ::testing::_))
125 .Times(1)
126 .WillRepeatedly(::testing::Return(1));
127 std::string renderParam = "test";
128 int32_t ipcFd = 0;
129 int32_t sharedFd = 0;
130 pid_t renderPid = 0;
131 int result = g_adapter->StartRenderProcess(renderParam, ipcFd, sharedFd, renderPid);
132 EXPECT_NE(RESULT_OK, result);
133 }
134
135 /**
136 * @tc.name: NWebAafwkAdapter_AttachRenderProcess_004.
137 * @tc.desc: Test the AttachRenderProcess.
138 * @tc.type: FUNC
139 * @tc.require:
140 */
141 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_AttachRenderProcess_004, TestSize.Level1)
142 {
143 int red = 0;
144 std::shared_ptr<RenderScheduler> render = std::make_shared<RenderScheduler>();
145 if (render == nullptr) {
146 red = -1;
147 }
148 EXPECT_EQ(RESULT_OK, red);
149 g_adapter->AttachRenderProcess(render);
150 std::shared_ptr<RenderScheduler> renderd = nullptr;
151 g_adapter->AttachRenderProcess(renderd);
152 }
153
154 /**
155 * @tc.name: NWebAafwkAdapter_GetRenderProcessTerminationStatus_005.
156 * @tc.desc: Test the GetRenderProcessTerminationStatus.
157 * @tc.type: FUNC
158 * @tc.require:
159 */
160 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_GetRenderProcessTerminationStatus_005, TestSize.Level1)
161 {
162 int statused = 1;
163 MockAppMgrClient *mock = new MockAppMgrClient();
164 g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
165 EXPECT_CALL(*mock, GetRenderProcessTerminationStatus(::testing::_, ::testing::_))
166 .Times(1)
167 .WillRepeatedly(
168 ::testing::DoAll(
169 ::testing::SetArgReferee<1>(statused),
170 ::testing::Return(0)
171 )
172 );
173 pid_t red = 1;
174 int result = g_adapter->GetRenderProcessTerminationStatus(red, statused);
175 EXPECT_EQ(RESULT_OK, result);
176 }
177
178 /**
179 * @tc.name: NWebAafwkAdapter_GetRenderProcessTerminationStatus_006.
180 * @tc.desc: Test the GetRenderProcessTerminationStatus Exception scenarios.
181 * @tc.type: FUNC
182 * @tc.require:
183 */
184 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_GetRenderProcessTerminationStatus_006, TestSize.Level1)
185 {
186 int statused = 1;
187 MockAppMgrClient *mock = new MockAppMgrClient();
188 g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
189 EXPECT_CALL(*mock, GetRenderProcessTerminationStatus(::testing::_, ::testing::_))
190 .Times(1)
191 .WillRepeatedly(
192 ::testing::DoAll(
193 ::testing::SetArgReferee<1>(statused),
194 ::testing::Return(1)
195 )
196 );
197 pid_t red = 1;
198 int result = g_adapter->GetRenderProcessTerminationStatus(red, statused);
199 EXPECT_NE(RESULT_OK, result);
200 }
201
202 /**
203 * @tc.name: NWebAafwkAdapter_GetRenderProcessTerminationStatus_007.
204 * @tc.desc: Test the GetRenderProcessTerminationStatus Exception scenarios.
205 * @tc.type: FUNC
206 * @tc.require:
207 */
208 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_GetRenderProcessTerminationStatus_007, TestSize.Level1)
209 {
210 int statused = -1;
211 MockAppMgrClient *mock = new MockAppMgrClient();
212 g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
213 EXPECT_CALL(*mock, GetRenderProcessTerminationStatus(::testing::_, ::testing::_))
214 .Times(GET_TIMES_MAX_CNT)
215 .WillRepeatedly(
216 ::testing::DoAll(
217 ::testing::SetArgReferee<1>(statused),
218 ::testing::Return(0)
219 )
220 );
221 pid_t red = 1;
222 int result = g_adapter->GetRenderProcessTerminationStatus(red, statused);
223 EXPECT_NE(RESULT_OK, result);
224 }
225
226 /**
227 * @tc.name: NWebAafwkAdapter_StartRenderProcess_008.
228 * @tc.desc: In this scence StartRenderProcess will be fail.
229 * @tc.type: FUNC
230 * @tc.require:
231 */
232 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_StartRenderProcess_008, TestSize.Level1)
233 {
234 g_adapter->appMgrClient_ = nullptr;
235 std::string renderParam = "test";
236 int32_t ipcFd = 0;
237 int32_t sharedFd = 0;
238 pid_t renderPid = 0;
239 int result = g_adapter->StartRenderProcess(renderParam, ipcFd, sharedFd, renderPid);
240 EXPECT_NE(RESULT_OK, result);
241 result = 0;
242 std::shared_ptr<RenderScheduler> render = std::make_shared<RenderScheduler>();
243 if (render == nullptr) {
244 result = -1;
245 }
246 EXPECT_EQ(RESULT_OK, result);
247 g_adapter->AttachRenderProcess(render);
248 int statused = 0;
249 pid_t red = 1;
250 result = g_adapter->GetRenderProcessTerminationStatus(red, statused);
251 EXPECT_NE(RESULT_OK, result);
252 }
253
254 /**
255 * @tc.name: NWebAafwkAdapter_NotifyBrowserFd_009.
256 * @tc.desc: Test the NotifyBrowserFd.
257 * @tc.type: FUNC
258 * @tc.require:
259 */
260 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_NotifyBrowserFd_009, TestSize.Level1)
261 {
262 int result = 0;
263 std::shared_ptr<AafwkRenderSchedulerHostAdapter> adapter = std::make_shared<RenderScheduler>();
264 if (adapter == nullptr) {
265 result = -1;
266 }
267 EXPECT_EQ(RESULT_OK, result);
268 result = 0;
269 std::shared_ptr<AafwkRenderSchedulerImpl> render = std::make_shared<AafwkRenderSchedulerImpl>(adapter);
270 if (render == nullptr) {
271 result = -1;
272 }
273 EXPECT_EQ(RESULT_OK, result);
274 int32_t ipcFd = 1;
275 int32_t sharedFd = 2;
276 render->NotifyBrowserFd(ipcFd, sharedFd);
277 render->renderSchedulerHostAdapter_ = nullptr;
278 render->NotifyBrowserFd(ipcFd, sharedFd);
279 }
280 }