• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }