• 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_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 }