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 #include "aafwk_browser_client_adapter_impl.h"
24 #include "aafwk_browser_host_impl.h"
25 #undef private
26
27 #include "foundation/graphic/graphic_surface/surface/include/native_window.h"
28 #include "aafwk_render_scheduler_host_adapter.h"
29 #include "app_mgr_client.h"
30 #include "ohos_adapter_helper.h"
31 #include "surface_utils.h"
32
33 using namespace testing;
34 using namespace testing::ext;
35 using namespace OHOS;
36 using namespace AppExecFwk;
37 using namespace OHOS::NWeb;
38
39 namespace OHOS::NWeb {
40 namespace {
41 const int NWEB_ERROR = -1;
42 const int RESULT_OK = 0;
43 constexpr int GET_TIMES_MAX_CNT = 5;
44 std::shared_ptr<AafwkAppMgrClientAdapterImpl> g_adapter;
45 } // namespace
46
47 class NWebAafwkAdapterTest : public testing::Test {
48 public:
49 static void SetUpTestCase(void);
50 static void TearDownTestCase(void);
51 void SetUp();
52 void TearDown();
53 };
54
SetUpTestCase(void)55 void NWebAafwkAdapterTest::SetUpTestCase(void)
56 {}
57
TearDownTestCase(void)58 void NWebAafwkAdapterTest::TearDownTestCase(void)
59 {}
60
SetUp(void)61 void NWebAafwkAdapterTest::SetUp(void)
62 {}
63
TearDown(void)64 void NWebAafwkAdapterTest::TearDown(void)
65 {}
66
67 class MockAppMgrClient : public AppMgrClient {
68 public:
69 MOCK_METHOD6(StartRenderProcess, int(const std::string&, int32_t, int32_t, int32_t, pid_t&, bool));
70 MOCK_METHOD2(GetRenderProcessTerminationStatus, int(pid_t, int &));
71 MOCK_METHOD1(SaveBrowserChannel, int(sptr<IRemoteObject>));
72 };
73
74 class RenderScheduler : public AafwkRenderSchedulerHostAdapter {
75 public:
76 void NotifyBrowserFd(int32_t ipcFd, int32_t sharedFd, int32_t crashFd);
77 void NotifyBrowser(int32_t ipcFd, int32_t sharedFd, int32_t crashFd,
78 std::shared_ptr<AafwkBrowserClientAdapter> adapter);
79 };
80
NotifyBrowserFd(int32_t ipcFd,int32_t sharedFd,int32_t crashFd)81 void RenderScheduler::NotifyBrowserFd(int32_t ipcFd, int32_t sharedFd, int32_t crashFd)
82 {
83 (void)ipcFd;
84 (void)sharedFd;
85 (void)crashFd;
86 }
87
NotifyBrowser(int32_t ipcFd,int32_t sharedFd,int32_t crashFd,std::shared_ptr<AafwkBrowserClientAdapter> adapter)88 void RenderScheduler::NotifyBrowser(int32_t ipcFd, int32_t sharedFd, int32_t crashFd,
89 std::shared_ptr<AafwkBrowserClientAdapter> adapter)
90 {
91 (void)ipcFd;
92 (void)sharedFd;
93 (void)crashFd;
94 (void)adapter;
95 }
96
97 class MockBrowserClient : public BrowserClient {
98 public:
99 explicit MockBrowserClient(const sptr<IRemoteObject> &impl);
100
101 sptr<IRemoteObject> QueryRenderSurface(int32_t surface_id);
102
103 void ReportThread(int32_t status, int32_t process_id, int32_t thread_id, int32_t role);
104
105 void PassSurface(sptr<Surface>surface, int64_t surface_id);
106
107 void DestroyRenderSurface(int32_t surface_id);
108 };
109
QueryRenderSurface(int32_t surface_id)110 sptr<IRemoteObject> MockBrowserClient::QueryRenderSurface(int32_t surface_id)
111 {
112 (void)surface_id;
113 return nullptr;
114 }
115
ReportThread(int32_t status,int32_t process_id,int32_t thread_id,int32_t role)116 void MockBrowserClient::ReportThread(int32_t status, int32_t process_id, int32_t thread_id, int32_t role)
117 {
118 (void)status;
119 (void)process_id;
120 (void)thread_id;
121 (void)role;
122 }
123
PassSurface(sptr<Surface> surface,int64_t surface_id)124 void MockBrowserClient::PassSurface(sptr<Surface>surface, int64_t surface_id)
125 {
126 (void)surface;
127 (void)surface_id;
128 }
129
DestroyRenderSurface(int32_t surface_id)130 void MockBrowserClient::DestroyRenderSurface(int32_t surface_id)
131 {
132 (void)surface_id;
133 }
134
135 class MockMessageParcel : public MessageParcel {
136 public:
137 MOCK_METHOD(bool, WriteInterfaceToken, (const std::string& token), ());
138
139 MOCK_METHOD(void, WriteInt32, (int32_t value), ());
140
141 MOCK_METHOD(sptr<IRemoteObject>, ReadRemoteObject, (), ());
142 };
143
144 class MockIRemoteObject : public IRemoteObject {
145 public:
MockIRemoteObject()146 MockIRemoteObject() : IRemoteObject(u"mock_i_remote_object") {}
147
~MockIRemoteObject()148 ~MockIRemoteObject() {}
149
150 MOCK_METHOD(int32_t, SendRequest,
151 (uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option), (override));
152
GetObjectRefCount()153 int32_t GetObjectRefCount() override
154 {
155 return 0;
156 }
157
IsProxyObject() const158 bool IsProxyObject() const override
159 {
160 return true;
161 }
162
CheckObjectLegality() const163 bool CheckObjectLegality() const override
164 {
165 return true;
166 }
167
AddDeathRecipient(const sptr<DeathRecipient> & recipient)168 bool AddDeathRecipient(const sptr<DeathRecipient> &recipient) override
169 {
170 return true;
171 }
172
RemoveDeathRecipient(const sptr<DeathRecipient> & recipient)173 bool RemoveDeathRecipient(const sptr<DeathRecipient> &recipient) override
174 {
175 return true;
176 }
177
Marshalling(Parcel & parcel) const178 bool Marshalling(Parcel &parcel) const override
179 {
180 return true;
181 }
182
AsInterface()183 sptr<IRemoteBroker> AsInterface() override
184 {
185 return nullptr;
186 }
187
Dump(int fd,const std::vector<std::u16string> & args)188 int Dump(int fd, const std::vector<std::u16string> &args) override
189 {
190 return 0;
191 }
192
GetObjectDescriptor() const193 std::u16string GetObjectDescriptor() const
194 {
195 std::u16string descriptor = std::u16string();
196 return descriptor;
197 }
198 };
199
200 class MockIBrowser : public IBrowser {
201 public:
202 MOCK_METHOD(sptr<IRemoteObject>, QueryRenderSurface, (int32_t surface_id), (override));
203
204 MOCK_METHOD(void, ReportThread, (int32_t status, int32_t process_id,
205 int32_t thread_id, int32_t role), (override));
206
207 MOCK_METHOD(void, PassSurface, (sptr<Surface> surface, int64_t surface_id), (override));
208
209 MOCK_METHOD(void, DestroyRenderSurface, (int32_t surface_id), (override));
210
211 MOCK_METHOD(sptr<IRemoteObject>, AsObject, (), (override));
212 };
213
214 class AafwkBrowserHostAdapterImpl : public AafwkBrowserHostAdapter {
215 public:
216 void* GetSurfaceFromKernel(int32_t surface_id);
217 void DestroySurfaceFromKernel(int32_t surface_id);
218 };
219
GetSurfaceFromKernel(int32_t surface_id)220 void* AafwkBrowserHostAdapterImpl::GetSurfaceFromKernel(int32_t surface_id)
221 {
222 if (surface_id == 0) {
223 return nullptr;
224 }
225 auto cSurface = IConsumerSurface::Create("test");
226 auto producer = cSurface->GetProducer();
227 auto pSurface = Surface::CreateSurfaceAsProducer(producer);
228 OHNativeWindow* window = ::CreateNativeWindowFromSurface(&pSurface);
229 return window;
230 };
231
DestroySurfaceFromKernel(int32_t surface_id)232 void AafwkBrowserHostAdapterImpl::DestroySurfaceFromKernel(int32_t surface_id)
233 {
234 (void)surface_id;
235 };
236
237 /**
238 * @tc.name: NWebInputEvent_AafwkAppMgrClientAdapterImpl_001.
239 * @tc.desc: Test the AafwkAppMgrClientAdapterImpl.
240 * @tc.type: FUNC
241 * @tc.require:
242 */
243 HWTEST_F(NWebAafwkAdapterTest, NWebInputEvent_AafwkAppMgrClientAdapterImpl_001, TestSize.Level1)
244 {
245 int result = 0;
246 g_adapter = std::make_shared<AafwkAppMgrClientAdapterImpl>();
247 if (g_adapter == nullptr) {
248 result = -1;
249 }
250 EXPECT_EQ(RESULT_OK, result);
251 }
252
253 /**
254 * @tc.name: NWebAafwkAdapter_StartRenderProcess_002.
255 * @tc.desc: Test the StartRenderProcess.
256 * @tc.type: FUNC
257 * @tc.require:
258 */
259 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_StartRenderProcess_002, TestSize.Level1)
260 {
261 MockAppMgrClient *mock = new MockAppMgrClient();
262 g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
263 EXPECT_CALL(*mock, StartRenderProcess(::testing::_, ::testing::_, ::testing::_,
264 ::testing::_, ::testing::_, ::testing::_))
265 .Times(1)
266 .WillRepeatedly(::testing::Return(0));
267 std::string renderParam = "test";
268 int32_t ipcFd = 0;
269 int32_t sharedFd = 0;
270 int32_t crashFd = 0;
271 pid_t renderPid = 0;
272 int result = g_adapter->StartRenderProcess(renderParam, ipcFd, sharedFd, crashFd, renderPid);
273 EXPECT_EQ(RESULT_OK, result);
274 }
275
276 /**
277 * @tc.name: NWebAafwkAdapter_StartRenderProcess_003.
278 * @tc.desc: Test the StartRenderProcess Exception scenarios.
279 * @tc.type: FUNC
280 * @tc.require:
281 */
282 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_StartRenderProcess_003, TestSize.Level1)
283 {
284 MockAppMgrClient *mock = new MockAppMgrClient();
285 g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
286 EXPECT_CALL(*mock, StartRenderProcess(::testing::_, ::testing::_, ::testing::_,
287 ::testing::_, ::testing::_, ::testing::_))
288 .Times(1)
289 .WillRepeatedly(::testing::Return(1));
290 std::string renderParam = "test";
291 int32_t ipcFd = 0;
292 int32_t sharedFd = 0;
293 pid_t renderPid = 0;
294 int32_t crashFd = 0;
295 int result = g_adapter->StartRenderProcess(renderParam, ipcFd, sharedFd, crashFd, renderPid);
296 EXPECT_NE(RESULT_OK, result);
297 }
298
299 /**
300 * @tc.name: NWebAafwkAdapter_StartRenderProcess_004.
301 * @tc.desc: Test the StartRenderProcess Exception scenarios.
302 * @tc.type: FUNC
303 * @tc.require:
304 */
305 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_StartRenderProcess_004, TestSize.Level1)
306 {
307 MockAppMgrClient *mock = new MockAppMgrClient();
308 g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
309 EXPECT_CALL(*mock, StartRenderProcess(::testing::_, ::testing::_, ::testing::_,
310 ::testing::_, ::testing::_, ::testing::_))
311 .Times(1)
312 .WillRepeatedly(::testing::Return(1));
313 std::string renderParam = "test";
314 int32_t ipcFd = 0;
315 int32_t sharedFd = 0;
316 pid_t renderPid = 0;
317 int32_t crashFd = 0;
318 int result = g_adapter->StartRenderProcess(renderParam, ipcFd, sharedFd, crashFd, renderPid);
319 EXPECT_NE(RESULT_OK, result);
320 }
321
322 /**
323 * @tc.name: NWebAafwkAdapter_StartRenderProcess_005.
324 * @tc.desc: Test the StartRenderProcess Exception scenarios.
325 * @tc.type: FUNC
326 * @tc.require:
327 */
328 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_StartRenderProcess_005, TestSize.Level1)
329 {
330 MockAppMgrClient *mock = new MockAppMgrClient();
331 g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
332 EXPECT_CALL(*mock, StartRenderProcess(::testing::_, ::testing::_, ::testing::_,
333 ::testing::_, ::testing::_, ::testing::_))
334 .Times(10)
335 .WillRepeatedly(::testing::Return(8454244));
336 std::string renderParam = "test";
337 int32_t ipcFd = 0;
338 int32_t sharedFd = 0;
339 pid_t renderPid = 0;
340 int32_t crashFd = 0;
341 int result = g_adapter->StartRenderProcess(renderParam, ipcFd, sharedFd, crashFd, renderPid);
342 EXPECT_NE(RESULT_OK, result);
343 }
344
345
346 /**
347 * @tc.name: NWebAafwkAdapter_AttachRenderProcess_004.
348 * @tc.desc: Test the AttachRenderProcess.
349 * @tc.type: FUNC
350 * @tc.require:
351 */
352 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_AttachRenderProcess_004, TestSize.Level1)
353 {
354 int red = 0;
355 std::shared_ptr<RenderScheduler> render = std::make_shared<RenderScheduler>();
356 if (render == nullptr) {
357 red = -1;
358 }
359 EXPECT_EQ(RESULT_OK, red);
360 g_adapter->AttachRenderProcess(render);
361 std::shared_ptr<RenderScheduler> renderd = nullptr;
362 g_adapter->AttachRenderProcess(renderd);
363 }
364
365 /**
366 * @tc.name: NWebAafwkAdapter_GetRenderProcessTerminationStatus_005.
367 * @tc.desc: Test the GetRenderProcessTerminationStatus.
368 * @tc.type: FUNC
369 * @tc.require:
370 */
371 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_GetRenderProcessTerminationStatus_005, TestSize.Level1)
372 {
373 int statused = 1;
374 MockAppMgrClient *mock = new MockAppMgrClient();
375 g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
376 EXPECT_CALL(*mock, GetRenderProcessTerminationStatus(::testing::_, ::testing::_))
377 .Times(1)
378 .WillRepeatedly(
379 ::testing::DoAll(
380 ::testing::SetArgReferee<1>(statused),
381 ::testing::Return(0)
382 )
383 );
384 pid_t red = 1;
385 int result = g_adapter->GetRenderProcessTerminationStatus(red, statused);
386 EXPECT_EQ(RESULT_OK, result);
387 }
388
389 /**
390 * @tc.name: NWebAafwkAdapter_GetRenderProcessTerminationStatus_006.
391 * @tc.desc: Test the GetRenderProcessTerminationStatus Exception scenarios.
392 * @tc.type: FUNC
393 * @tc.require:
394 */
395 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_GetRenderProcessTerminationStatus_006, TestSize.Level1)
396 {
397 int statused = 1;
398 MockAppMgrClient *mock = new MockAppMgrClient();
399 g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
400 EXPECT_CALL(*mock, GetRenderProcessTerminationStatus(::testing::_, ::testing::_))
401 .Times(1)
402 .WillRepeatedly(
403 ::testing::DoAll(
404 ::testing::SetArgReferee<1>(statused),
405 ::testing::Return(1)
406 )
407 );
408 pid_t red = 1;
409 int result = g_adapter->GetRenderProcessTerminationStatus(red, statused);
410 EXPECT_NE(RESULT_OK, result);
411 }
412
413 /**
414 * @tc.name: NWebAafwkAdapter_GetRenderProcessTerminationStatus_007.
415 * @tc.desc: Test the GetRenderProcessTerminationStatus Exception scenarios.
416 * @tc.type: FUNC
417 * @tc.require:
418 */
419 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_GetRenderProcessTerminationStatus_007, TestSize.Level1)
420 {
421 int statused = -1;
422 MockAppMgrClient *mock = new MockAppMgrClient();
423 g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
424 EXPECT_CALL(*mock, GetRenderProcessTerminationStatus(::testing::_, ::testing::_))
425 .Times(GET_TIMES_MAX_CNT)
426 .WillRepeatedly(
427 ::testing::DoAll(
428 ::testing::SetArgReferee<1>(statused),
429 ::testing::Return(0)
430 )
431 );
432 pid_t red = 1;
433 int result = g_adapter->GetRenderProcessTerminationStatus(red, statused);
434 EXPECT_NE(RESULT_OK, result);
435 }
436
437 /**
438 * @tc.name: NWebAafwkAdapter_StartRenderProcess_008.
439 * @tc.desc: In this scence StartRenderProcess will be fail.
440 * @tc.type: FUNC
441 * @tc.require:
442 */
443 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_StartRenderProcess_008, TestSize.Level1)
444 {
445 g_adapter->appMgrClient_ = nullptr;
446 std::string renderParam = "test";
447 int32_t ipcFd = 0;
448 int32_t sharedFd = 0;
449 pid_t renderPid = 0;
450 int32_t crashFd = 0;
451 int result = g_adapter->StartRenderProcess(renderParam, ipcFd, sharedFd, crashFd, renderPid);
452 EXPECT_NE(RESULT_OK, result);
453 result = 0;
454 std::shared_ptr<RenderScheduler> render = std::make_shared<RenderScheduler>();
455 if (render == nullptr) {
456 result = -1;
457 }
458 EXPECT_EQ(RESULT_OK, result);
459 g_adapter->AttachRenderProcess(render);
460 int statused = 0;
461 pid_t red = 1;
462 result = g_adapter->GetRenderProcessTerminationStatus(red, statused);
463 EXPECT_NE(RESULT_OK, result);
464 }
465
466 /**
467 * @tc.name: NWebAafwkAdapter_NotifyBrowserFd_009.
468 * @tc.desc: Test the NotifyBrowserFd.
469 * @tc.type: FUNC
470 * @tc.require:
471 */
472 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_NotifyBrowserFd_009, TestSize.Level1)
473 {
474 int result = 0;
475 std::shared_ptr<AafwkRenderSchedulerHostAdapter> adapter = std::make_shared<RenderScheduler>();
476 if (adapter == nullptr) {
477 result = -1;
478 }
479 EXPECT_EQ(RESULT_OK, result);
480 result = 0;
481 std::shared_ptr<AafwkRenderSchedulerImpl> render = std::make_shared<AafwkRenderSchedulerImpl>(adapter);
482 if (render == nullptr) {
483 result = -1;
484 }
485 EXPECT_EQ(RESULT_OK, result);
486 int32_t ipcFd = 1;
487 int32_t sharedFd = 2;
488 int32_t crashFd = 3;
489 render->NotifyBrowserFd(ipcFd, sharedFd, crashFd, nullptr);
490
491 std::shared_ptr<AafwkBrowserHostAdapter> hostAdapter = nullptr;
492 auto host = new AafwkBrowserHostImpl(hostAdapter);
493 render->NotifyBrowserFd(ipcFd, sharedFd, crashFd, host);
494
495 sptr<IRemoteObject> browser = nullptr;
496 auto client = new BrowserClient(browser);
497 ASSERT_NE(client, nullptr);
498 MessageParcel data;
499
500 client->WriteInterfaceToken(data);
501 render->renderSchedulerHostAdapter_ = nullptr;
502 render->NotifyBrowserFd(ipcFd, sharedFd, crashFd, nullptr);
503 }
504
505 /**
506 * @tc.name: NWebAafwkAdapter_WriteInterfaceToken_011.
507 * @tc.desc: test write interface token.
508 * @tc.type: FUNC
509 * @tc.require:
510 */
511 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_WriteInterfaceToken_011, TestSize.Level1)
512 {
513 sptr<IRemoteObject> impl;
514 auto client = new BrowserClient(impl);
515 ASSERT_NE(client, nullptr);
516 // MessageParcel data;
517 MessageParcel data;
518 client->WriteInterfaceToken(data);
519 }
520
521 /**
522 * @tc.name: NWebAafwkAdapter_QueryRenderSurface_012.
523 * @tc.desc: test query render surface.
524 * @tc.type: FUNC
525 * @tc.require:
526 */
527 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_QueryRenderSurface_012, TestSize.Level1)
528 {
529 sptr<IRemoteObject> impl;
530 auto client = new BrowserClient(impl);
531 ASSERT_NE(client, nullptr);
532 int32_t surface_id = 0;
533 client->QueryRenderSurface(surface_id);
534
535 sptr<MockIRemoteObject> mockImpl = new MockIRemoteObject();
536 auto mockClient = new BrowserClient(mockImpl);
537 ASSERT_NE(mockClient, nullptr);
538 EXPECT_CALL(*mockImpl, SendRequest(_, _, _, _)).WillOnce(Return(NWEB_ERROR));
539 mockClient->QueryRenderSurface(surface_id);
540 delete mockClient;
541 }
542
543 /**
544 * @tc.name: NWebAafwkAdapter_ReportThread_013.
545 * @tc.desc: test report thread.
546 * @tc.type: FUNC
547 * @tc.require:
548 */
549 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_ReportThread_013, TestSize.Level1)
550 {
551 sptr<IRemoteObject> impl;
552 auto client = new BrowserClient(impl);
553 ASSERT_NE(client, nullptr);
554 int32_t status = 0;
555 int32_t process_id = 0;
556 int32_t thread_id = 0;
557 int32_t role = 0;
558 client->ReportThread(status, process_id, thread_id, role);
559
560 sptr<MockIRemoteObject> mockImpl = new MockIRemoteObject();
561 auto mockClient = new BrowserClient(mockImpl);
562 ASSERT_NE(mockClient, nullptr);
563 EXPECT_CALL(*mockImpl, SendRequest(_, _, _, _)).WillOnce(Return(NWEB_ERROR));
564 mockClient->ReportThread(status, process_id, thread_id, role);
565 delete mockClient;
566 }
567
568 /**
569 * @tc.name: NWebAafwkAdapter_PassSurface_014.
570 * @tc.desc: test pass surface.
571 * @tc.type: FUNC
572 * @tc.require:
573 */
574 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_PassSurface_014, TestSize.Level1)
575 {
576 sptr<IRemoteObject> impl;
577 auto client = new BrowserClient(impl);
578 ASSERT_NE(client, nullptr);
579 sptr<Surface> surface;
580 int64_t surface_id = 0;
581 client->PassSurface(surface, surface_id);
582 auto cSurface = IConsumerSurface::Create("test");
583 auto producer = cSurface->GetProducer();
584 auto pSurface = Surface::CreateSurfaceAsProducer(producer);
585 client->PassSurface(pSurface, surface_id);
586 }
587
588 /**
589 * @tc.name: NWebAafwkAdapter_DestroyRenderSurface_015.
590 * @tc.desc: test destroy render surface.
591 * @tc.type: FUNC
592 * @tc.require:
593 */
594 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_DestroyRenderSurface_015, TestSize.Level1)
595 {
596 sptr<IRemoteObject> impl;
597 auto client = new BrowserClient(impl);
598 ASSERT_NE(client, nullptr);
599 int32_t surface_id = 0;
600 client->DestroyRenderSurface(surface_id);
601
602 sptr<MockIRemoteObject> mockImpl = new MockIRemoteObject();
603 auto mockClient = new BrowserClient(mockImpl);
604 ASSERT_NE(mockClient, nullptr);
605 EXPECT_CALL(*mockImpl, SendRequest(_, _, _, _)).WillOnce(Return(NWEB_ERROR));
606 mockClient->DestroyRenderSurface(surface_id);
607 delete mockClient;
608 }
609
610 /**
611 * @tc.name: NWebAafwkAdapter_QueryRenderSurface_016.
612 * @tc.desc: test query render surface.
613 * @tc.type: FUNC
614 * @tc.require:
615 */
616 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_QueryRenderSurface_016, TestSize.Level1)
617 {
618 std::shared_ptr<AafwkBrowserClientAdapterImpl> clientAdapter = std::make_shared<AafwkBrowserClientAdapterImpl>();
619 ASSERT_NE(clientAdapter, nullptr);
620 int32_t surface_id = 0;
621 clientAdapter->GetInstance().browserHost_ = nullptr;
622 clientAdapter->QueryRenderSurface(surface_id);
623
624 sptr<MockIBrowser> mockBrowser = new MockIBrowser();
625 clientAdapter->GetInstance().browserHost_ = mockBrowser;
626 clientAdapter->QueryRenderSurface(surface_id);
627 auto cSurface = IConsumerSurface::Create("test");
628 EXPECT_CALL(*mockBrowser, QueryRenderSurface(surface_id))
629 .WillOnce(::testing::Return(cSurface->GetProducer()->AsObject()));
630 clientAdapter->QueryRenderSurface(surface_id);
631 }
632
633 /**
634 * @tc.name: NWebAafwkAdapter_ReportThread_017.
635 * @tc.desc: test report thread.
636 * @tc.type: FUNC
637 * @tc.require:
638 */
639 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_ReportThread_017, TestSize.Level1)
640 {
641 std::shared_ptr<AafwkBrowserClientAdapterImpl> clientAdapter = std::make_shared<AafwkBrowserClientAdapterImpl>();
642 ASSERT_NE(clientAdapter, nullptr);
643 ResSchedStatusAdapter status = ResSchedStatusAdapter::THREAD_CREATED;
644 int32_t process_id = 0;
645 int32_t thread_id = 0;
646 ResSchedRoleAdapter role = ResSchedRoleAdapter::USER_INTERACT;
647 clientAdapter->GetInstance().browserHost_ = nullptr;
648 clientAdapter->ReportThread(status, process_id, thread_id, role);
649 sptr<MockIBrowser> mockBrowser = new MockIBrowser();
650 EXPECT_CALL(*mockBrowser, ReportThread(0, 0, 0, 0));
651 clientAdapter->GetInstance().browserHost_ = mockBrowser;
652 clientAdapter->ReportThread(status, process_id, thread_id, role);
653 }
654
655 /**
656 * @tc.name: NWebAafwkAdapter_PassSurface_018.
657 * @tc.desc: test pass surface.
658 * @tc.type: FUNC
659 * @tc.require:
660 */
661 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_PassSurface_018, TestSize.Level1)
662 {
663 std::shared_ptr<AafwkBrowserClientAdapterImpl> clientAdapter = std::make_shared<AafwkBrowserClientAdapterImpl>();
664 ASSERT_NE(clientAdapter, nullptr);
665 int64_t surface_id = 0;
666 clientAdapter->GetInstance().browserHost_ = nullptr;
667 clientAdapter->PassSurface(surface_id);
668 sptr<MockIBrowser> mockBrowser = new MockIBrowser();
669 clientAdapter->GetInstance().browserHost_ = mockBrowser;
670 clientAdapter->PassSurface(surface_id);
671
672 auto cSurface = IConsumerSurface::Create("test");
673 auto producer = cSurface->GetProducer();
674 auto pSurface = Surface::CreateSurfaceAsProducer(producer);
675 SurfaceUtils* utils = SurfaceUtils::GetInstance();
676 utils->Add(surface_id, pSurface);
677 ASSERT_NE(utils->GetSurface(surface_id), nullptr);
678 clientAdapter->PassSurface(surface_id);
679 utils->Remove(surface_id);
680 }
681
682 /**
683 * @tc.name: NWebAafwkAdapter_DestroyRenderSurface_019.
684 * @tc.desc: test destroy render surface.
685 * @tc.type: FUNC
686 * @tc.require:
687 */
688 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_DestroyRenderSurface_019, TestSize.Level1)
689 {
690 std::shared_ptr<AafwkBrowserClientAdapterImpl> clientAdapter = std::make_shared<AafwkBrowserClientAdapterImpl>();
691 ASSERT_NE(clientAdapter, nullptr);
692 int32_t surface_id = 0;
693 clientAdapter->GetInstance().browserHost_ = nullptr;
694 clientAdapter->DestroyRenderSurface(surface_id);
695 sptr<MockIBrowser> mockBrowser = new MockIBrowser();
696 EXPECT_CALL(*mockBrowser, DestroyRenderSurface(surface_id)).Times(2);
697 clientAdapter->GetInstance().browserHost_ = mockBrowser;
698 clientAdapter->DestroyRenderSurface(surface_id);
699
700 auto cSurface = IConsumerSurface::Create("test");
701 auto producer = cSurface->GetProducer();
702 auto pSurface = Surface::CreateSurfaceAsProducer(producer);
703 OHNativeWindow* window = ::CreateNativeWindowFromSurface(&pSurface);
704 clientAdapter->window_map_.emplace(surface_id, window);
705 clientAdapter->DestroyRenderSurface(surface_id);
706 }
707
708 /**
709 * @tc.name: NWebAafwkAdapter_browserHost_020.
710 * @tc.desc: test browser host.
711 * @tc.type: FUNC
712 * @tc.require:
713 */
714 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_browserHost_020, TestSize.Level1)
715 {
716 std::shared_ptr<AafwkBrowserHostAdapter> hostAdapter = nullptr;
717 auto host = new AafwkBrowserHostImpl(hostAdapter);
718 ASSERT_NE(host, nullptr);
719 uint32_t code = 0;
720 MessageParcel data;
721 MessageParcel reply;
722 MessageOption option;
723 host->OnRemoteRequest(code, data, reply, option);
724 code = 1;
725 data.WriteInterfaceToken(BrowserHost::GetDescriptor());
726 host->OnRemoteRequest(code, data, reply, option);
727 code = 100;
728 data.WriteInterfaceToken(BrowserHost::GetDescriptor());
729 host->OnRemoteRequest(code, data, reply, option);
730 }
731
732 /**
733 * @tc.name: NWebAafwkAdapter_browserHost_021.
734 * @tc.desc: test browser host.
735 * @tc.type: FUNC
736 * @tc.require:
737 */
738 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_browserHost_021, TestSize.Level1)
739 {
740 std::shared_ptr<AafwkBrowserHostAdapter> hostAdapter = nullptr;
741 auto host = new AafwkBrowserHostImpl(hostAdapter);
742 ASSERT_NE(host, nullptr);
743 MessageParcel data;
744 MessageParcel reply;
745 host->HandleQueryRenderSurface(data, reply);
746 }
747
748 /**
749 * @tc.name: NWebAafwkAdapter_browserHost_022.
750 * @tc.desc: test browser host.
751 * @tc.type: FUNC
752 * @tc.require:
753 */
754 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_browserHost_022, TestSize.Level1)
755 {
756 std::shared_ptr<AafwkBrowserHostAdapter> hostAdapter = nullptr;
757 auto host = new AafwkBrowserHostImpl(hostAdapter);
758 ASSERT_NE(host, nullptr);
759 MessageParcel data;
760 MessageParcel reply;
761 host->HandleReportThread(data, reply);
762 }
763
764 /**
765 * @tc.name: NWebAafwkAdapter_browserHost_023.
766 * @tc.desc: test browser host.
767 * @tc.type: FUNC
768 * @tc.require:
769 */
770 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_browserHost_023, TestSize.Level1)
771 {
772 std::shared_ptr<AafwkBrowserHostAdapter> hostAdapter = nullptr;
773 auto host = new AafwkBrowserHostImpl(hostAdapter);
774 ASSERT_NE(host, nullptr);
775 MessageParcel data;
776 MessageParcel reply;
777 host->HandlePassSurface(data, reply);
778
779 auto cSurface = IConsumerSurface::Create("test");
780 data.WriteRemoteObject(cSurface->GetProducer()->AsObject());
781 host->HandlePassSurface(data, reply);
782 }
783
784 /**
785 * @tc.name: NWebAafwkAdapter_browserHost_024.
786 * @tc.desc: test browser host.
787 * @tc.type: FUNC
788 * @tc.require:
789 */
790 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_browserHost_024, TestSize.Level1)
791 {
792 std::shared_ptr<AafwkBrowserHostAdapter> hostAdapter = nullptr;
793 auto host = new AafwkBrowserHostImpl(hostAdapter);
794 ASSERT_NE(host, nullptr);
795 MessageParcel data;
796 MessageParcel reply;
797 host->HandleDestroyRenderSurface(data, reply);
798 }
799
800 /**
801 * @tc.name: NWebAafwkAdapter_browserHost_025.
802 * @tc.desc: test browser host.
803 * @tc.type: FUNC
804 * @tc.require:
805 */
806 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_browserHost_025, TestSize.Level1)
807 {
808 std::shared_ptr<AafwkBrowserHostAdapter> hostAdapter = nullptr;
809 auto host = new AafwkBrowserHostImpl(hostAdapter);
810 ASSERT_NE(host, nullptr);
811 int32_t surface_id = 0;
812 host->QueryRenderSurface(surface_id);
813
814 auto mockHostAdapter = std::make_shared<AafwkBrowserHostAdapterImpl>();
815 auto mockHost = new AafwkBrowserHostImpl(mockHostAdapter);
816 mockHost->QueryRenderSurface(surface_id);
817 mockHost->QueryRenderSurface(1);
818 }
819
820 /**
821 * @tc.name: NWebAafwkAdapter_browserHost_026.
822 * @tc.desc: test browser host.
823 * @tc.type: FUNC
824 * @tc.require:
825 */
826 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_browserHost_026, TestSize.Level1)
827 {
828 std::shared_ptr<AafwkBrowserHostAdapter> hostAdapter = nullptr;
829 auto host = new AafwkBrowserHostImpl(hostAdapter);
830 ASSERT_NE(host, nullptr);
831 int32_t status = 0;
832 int32_t process_id = 0;
833 int32_t thread_id = 0;
834 int32_t role = 0;
835 host->ReportThread(status, process_id, thread_id, role);
836 }
837
838 /**
839 * @tc.name: NWebAafwkAdapter_browserHost_027.
840 * @tc.desc: test browser host.
841 * @tc.type: FUNC
842 * @tc.require:
843 */
844 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_browserHost_027, TestSize.Level1)
845 {
846 std::shared_ptr<AafwkBrowserHostAdapter> hostAdapter = nullptr;
847 auto host = new AafwkBrowserHostImpl(hostAdapter);
848 ASSERT_NE(host, nullptr);
849 sptr<Surface> surface;
850 int64_t surface_id = 0;
851 host->PassSurface(surface, surface_id);
852 }
853
854 /**
855 * @tc.name: NWebAafwkAdapter_browserHost_028.
856 * @tc.desc: test browser host.
857 * @tc.type: FUNC
858 * @tc.require:
859 */
860 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_browserHost_028, TestSize.Level1)
861 {
862 std::shared_ptr<AafwkBrowserHostAdapter> hostAdapter = nullptr;
863 auto host = new AafwkBrowserHostImpl(hostAdapter);
864 ASSERT_NE(host, nullptr);
865 int32_t surface_id = 0;
866 host->DestroyRenderSurface(surface_id);
867 delete host;
868
869 auto mockHostAdapter = std::make_shared<AafwkBrowserHostAdapterImpl>();
870 auto mockHost = new AafwkBrowserHostImpl(mockHostAdapter);
871 mockHost->DestroyRenderSurface(surface_id);
872 delete mockHost;
873 }
874
875 /**
876 * @tc.name: NWebAafwkAdapter_StartChildProcess_001.
877 * @tc.desc: Test the StartChildProcess Exception scenarios.
878 * @tc.type: FUNC
879 * @tc.require:
880 */
881 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_StartChildProcess_001, TestSize.Level1)
882 {
883 MockAppMgrClient *mock = new MockAppMgrClient();
884 g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
885 EXPECT_CALL(*mock, StartRenderProcess(::testing::_, ::testing::_, ::testing::_,
886 ::testing::_, ::testing::_, ::testing::_))
887 .Times(1)
888 .WillRepeatedly(::testing::Return(1));
889 std::string renderParam = "test";
890 int32_t ipcFd = 0;
891 int32_t sharedFd = 0;
892 pid_t renderPid = 0;
893 int32_t crashFd = 0;
894 std::string processtype = "gpu-process";
895 int result = g_adapter->StartChildProcess(renderParam, ipcFd, sharedFd, crashFd, renderPid, processtype);
896 EXPECT_NE(RESULT_OK, result);
897 }
898
899 /**
900 * @tc.name: NWebAafwkAdapter_StartChildProcess_002.
901 * @tc.desc: Test the StartChildProcess Exception scenarios.
902 * @tc.type: FUNC
903 * @tc.require:
904 */
905 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_StartChildProcess_002, TestSize.Level1)
906 {
907 MockAppMgrClient *mock = new MockAppMgrClient();
908 g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
909 EXPECT_CALL(*mock, StartRenderProcess(::testing::_, ::testing::_, ::testing::_,
910 ::testing::_, ::testing::_, ::testing::_))
911 .Times(1)
912 .WillRepeatedly(::testing::Return(0));
913 std::string renderParam = "test";
914 int32_t ipcFd = 0;
915 int32_t sharedFd = 0;
916 pid_t renderPid = 0;
917 int32_t crashFd = 0;
918 std::string processtype = "gpu-process";
919 int result = g_adapter->StartChildProcess(renderParam, ipcFd, sharedFd, crashFd, renderPid, processtype);
920 EXPECT_EQ(RESULT_OK, result);
921 }
922
923 /**
924 * @tc.name: NWebAafwkAdapter_StartChildProcess_003.
925 * @tc.desc: Test the StartChildProcess Exception scenarios.
926 * @tc.type: FUNC
927 * @tc.require:
928 */
929 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_StartChildProcess_003, TestSize.Level1)
930 {
931 MockAppMgrClient *mock = new MockAppMgrClient();
932 g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
933 EXPECT_CALL(*mock, StartRenderProcess(::testing::_, ::testing::_, ::testing::_,
934 ::testing::_, ::testing::_, ::testing::_))
935 .Times(10)
936 .WillRepeatedly(::testing::Return(8454244));
937 std::string renderParam = "test";
938 int32_t ipcFd = 0;
939 int32_t sharedFd = 0;
940 pid_t renderPid = 0;
941 int32_t crashFd = 0;
942 std::string processtype = "gpu-process";
943 int result = g_adapter->StartChildProcess(renderParam, ipcFd, sharedFd, crashFd, renderPid, processtype);
944 EXPECT_NE(RESULT_OK, result);
945 }
946
947 /**
948 * @tc.name: NWebAafwkAdapter_StartChildProcess_004.
949 * @tc.desc: In this scence StartChildProcess will be fail.
950 * @tc.type: FUNC
951 * @tc.require:
952 */
953 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_StartChildProcess_004, TestSize.Level1)
954 {
955 g_adapter->SaveBrowserConnect(nullptr);
956 auto adapter = std::make_shared<AafwkBrowserHostAdapterImpl>();
957 g_adapter->SaveBrowserConnect(adapter);
958 g_adapter->appMgrClient_ = nullptr;
959 std::string renderParam = "test";
960 int32_t ipcFd = 0;
961 int32_t sharedFd = 0;
962 pid_t renderPid = 0;
963 int32_t crashFd = 0;
964 std::string processtype = "gpu-process";
965 int result = g_adapter->StartChildProcess(renderParam, ipcFd, sharedFd, crashFd, renderPid, processtype);
966 EXPECT_NE(RESULT_OK, result);
967 g_adapter->SaveBrowserConnect(adapter);
968 }
969 }