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 "aafwk_render_scheduler_host_adapter.h"
28 #include "app_mgr_client.h"
29 #include "ohos_adapter_helper.h"
30 
31 using namespace testing;
32 using namespace testing::ext;
33 using namespace OHOS;
34 using namespace AppExecFwk;
35 using namespace OHOS::NWeb;
36 
37 namespace OHOS::NWeb {
38 namespace {
39 const int NWEB_ERROR = -1;
40 const int RESULT_OK = 0;
41 constexpr int GET_TIMES_MAX_CNT = 5;
42 std::shared_ptr<AafwkAppMgrClientAdapterImpl> g_adapter;
43 } // namespace
44 
45 class NWebAafwkAdapterTest : public testing::Test {
46 public:
47     static void SetUpTestCase(void);
48     static void TearDownTestCase(void);
49     void SetUp();
50     void TearDown();
51 };
52 
SetUpTestCase(void)53 void NWebAafwkAdapterTest::SetUpTestCase(void)
54 {}
55 
TearDownTestCase(void)56 void NWebAafwkAdapterTest::TearDownTestCase(void)
57 {}
58 
SetUp(void)59 void NWebAafwkAdapterTest::SetUp(void)
60 {}
61 
TearDown(void)62 void NWebAafwkAdapterTest::TearDown(void)
63 {}
64 
65 class MockAppMgrClient : public AppMgrClient {
66 public:
67     MOCK_METHOD6(StartRenderProcess, int(const std::string&, int32_t, int32_t, int32_t, pid_t&, bool));
68     MOCK_METHOD2(GetRenderProcessTerminationStatus, int(pid_t, int &));
69 };
70 
71 class RenderScheduler : public AafwkRenderSchedulerHostAdapter {
72 public:
73     void NotifyBrowserFd(int32_t ipcFd, int32_t sharedFd, int32_t crashFd);
74     void NotifyBrowser(int32_t ipcFd, int32_t sharedFd, int32_t crashFd,
75         std::shared_ptr<AafwkBrowserClientAdapter> adapter);
76 };
77 
NotifyBrowserFd(int32_t ipcFd,int32_t sharedFd,int32_t crashFd)78 void RenderScheduler::NotifyBrowserFd(int32_t ipcFd, int32_t sharedFd, int32_t crashFd)
79 {
80     (void)ipcFd;
81     (void)sharedFd;
82     (void)crashFd;
83 }
84 
NotifyBrowser(int32_t ipcFd,int32_t sharedFd,int32_t crashFd,std::shared_ptr<AafwkBrowserClientAdapter> adapter)85 void RenderScheduler::NotifyBrowser(int32_t ipcFd, int32_t sharedFd, int32_t crashFd,
86     std::shared_ptr<AafwkBrowserClientAdapter> adapter)
87 {
88     (void)ipcFd;
89     (void)sharedFd;
90     (void)crashFd;
91     (void)adapter;
92 }
93 
94 class MockBrowserClient : public BrowserClient {
95 public:
96     explicit MockBrowserClient(const sptr<IRemoteObject> &impl);
97 
98     sptr<IRemoteObject> QueryRenderSurface(int32_t surface_id);
99 
100     void ReportThread(int32_t status, int32_t process_id, int32_t thread_id, int32_t role);
101 
102     void PassSurface(sptr<Surface>surface, int64_t surface_id);
103 
104     void DestroyRenderSurface(int32_t surface_id);
105 };
106 
QueryRenderSurface(int32_t surface_id)107 sptr<IRemoteObject> MockBrowserClient::QueryRenderSurface(int32_t surface_id)
108 {
109     (void)surface_id;
110     return nullptr;
111 }
112 
ReportThread(int32_t status,int32_t process_id,int32_t thread_id,int32_t role)113 void MockBrowserClient::ReportThread(int32_t status, int32_t process_id, int32_t thread_id, int32_t role)
114 {
115     (void)status;
116     (void)process_id;
117     (void)thread_id;
118     (void)role;
119 }
120 
PassSurface(sptr<Surface> surface,int64_t surface_id)121 void MockBrowserClient::PassSurface(sptr<Surface>surface, int64_t surface_id)
122 {
123     (void)surface;
124     (void)surface_id;
125 }
126 
DestroyRenderSurface(int32_t surface_id)127 void MockBrowserClient::DestroyRenderSurface(int32_t surface_id)
128 {
129     (void)surface_id;
130 }
131 
132 class MockMessageParcel : public MessageParcel {
133 public:
134     MOCK_METHOD(bool, WriteInterfaceToken, (const std::string& token), ());
135 
136     MOCK_METHOD(void, WriteInt32, (int32_t value), ());
137 
138     MOCK_METHOD(sptr<IRemoteObject>, ReadRemoteObject, (), ());
139 };
140 
141 class MockIRemoteObject : public IRemoteObject {
142 public:
MockIRemoteObject()143     MockIRemoteObject() : IRemoteObject(u"mock_i_remote_object") {}
144 
~MockIRemoteObject()145     ~MockIRemoteObject() {}
146 
147     MOCK_METHOD(int32_t, SendRequest,
148         (uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option), (override));
149 
GetObjectRefCount()150     int32_t GetObjectRefCount() override
151     {
152         return 0;
153     }
154 
IsProxyObject() const155     bool IsProxyObject() const override
156     {
157         return true;
158     }
159 
CheckObjectLegality() const160     bool CheckObjectLegality() const override
161     {
162         return true;
163     }
164 
AddDeathRecipient(const sptr<DeathRecipient> & recipient)165     bool AddDeathRecipient(const sptr<DeathRecipient> &recipient) override
166     {
167         return true;
168     }
169 
RemoveDeathRecipient(const sptr<DeathRecipient> & recipient)170     bool RemoveDeathRecipient(const sptr<DeathRecipient> &recipient) override
171     {
172         return true;
173     }
174 
Marshalling(Parcel & parcel) const175     bool Marshalling(Parcel &parcel) const override
176     {
177         return true;
178     }
179 
AsInterface()180     sptr<IRemoteBroker> AsInterface() override
181     {
182         return nullptr;
183     }
184 
Dump(int fd,const std::vector<std::u16string> & args)185     int Dump(int fd, const std::vector<std::u16string> &args) override
186     {
187         return 0;
188     }
189 
GetObjectDescriptor() const190     std::u16string GetObjectDescriptor() const
191     {
192         std::u16string descriptor = std::u16string();
193         return descriptor;
194     }
195 };
196 
197 class MockIBrowser : public IBrowser {
198 public:
199     MOCK_METHOD(sptr<IRemoteObject>, QueryRenderSurface, (int32_t surface_id), (override));
200 
201     MOCK_METHOD(void, ReportThread, (int32_t status, int32_t process_id,
202         int32_t thread_id, int32_t role), (override));
203 
204     MOCK_METHOD(void, PassSurface, (sptr<Surface> surface, int64_t surface_id), (override));
205 
206     MOCK_METHOD(void, DestroyRenderSurface, (int32_t surface_id), (override));
207 
208     MOCK_METHOD(sptr<IRemoteObject>, AsObject, (), (override));
209 };
210 
211 /**
212  * @tc.name: NWebInputEvent_AafwkAppMgrClientAdapterImpl_001.
213  * @tc.desc: Test the AafwkAppMgrClientAdapterImpl.
214  * @tc.type: FUNC
215  * @tc.require:
216  */
217 HWTEST_F(NWebAafwkAdapterTest, NWebInputEvent_AafwkAppMgrClientAdapterImpl_001, TestSize.Level1)
218 {
219     int result = 0;
220     g_adapter = std::make_shared<AafwkAppMgrClientAdapterImpl>();
221     if (g_adapter == nullptr) {
222         result = -1;
223     }
224     EXPECT_EQ(RESULT_OK, result);
225 }
226 
227 /**
228  * @tc.name: NWebAafwkAdapter_StartRenderProcess_002.
229  * @tc.desc: Test the StartRenderProcess.
230  * @tc.type: FUNC
231  * @tc.require:
232  */
233 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_StartRenderProcess_002, TestSize.Level1)
234 {
235     MockAppMgrClient *mock = new MockAppMgrClient();
236     g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
237     EXPECT_CALL(*mock, StartRenderProcess(::testing::_, ::testing::_, ::testing::_,
238                                           ::testing::_, ::testing::_, ::testing::_))
239         .Times(1)
240         .WillRepeatedly(::testing::Return(0));
241     std::string renderParam = "test";
242     int32_t ipcFd = 0;
243     int32_t sharedFd = 0;
244     int32_t crashFd = 0;
245     pid_t renderPid = 0;
246     int result = g_adapter->StartRenderProcess(renderParam, ipcFd, sharedFd, crashFd, renderPid);
247     EXPECT_EQ(RESULT_OK, result);
248 }
249 
250 /**
251  * @tc.name: NWebAafwkAdapter_StartRenderProcess_003.
252  * @tc.desc: Test the StartRenderProcess Exception scenarios.
253  * @tc.type: FUNC
254  * @tc.require:
255  */
256 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_StartRenderProcess_003, TestSize.Level1)
257 {
258     MockAppMgrClient *mock = new MockAppMgrClient();
259     g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
260     EXPECT_CALL(*mock, StartRenderProcess(::testing::_, ::testing::_, ::testing::_,
261                                           ::testing::_, ::testing::_, ::testing::_))
262         .Times(1)
263         .WillRepeatedly(::testing::Return(1));
264     std::string renderParam = "test";
265     int32_t ipcFd = 0;
266     int32_t sharedFd = 0;
267     pid_t renderPid = 0;
268     int32_t crashFd = 0;
269     int result = g_adapter->StartRenderProcess(renderParam, ipcFd, sharedFd, crashFd, renderPid);
270     EXPECT_NE(RESULT_OK, result);
271 }
272 
273 /**
274  * @tc.name: NWebAafwkAdapter_AttachRenderProcess_004.
275  * @tc.desc: Test the AttachRenderProcess.
276  * @tc.type: FUNC
277  * @tc.require:
278  */
279 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_AttachRenderProcess_004, TestSize.Level1)
280 {
281     int red = 0;
282     std::shared_ptr<RenderScheduler> render = std::make_shared<RenderScheduler>();
283     if (render == nullptr) {
284         red = -1;
285     }
286     EXPECT_EQ(RESULT_OK, red);
287     g_adapter->AttachRenderProcess(render);
288     std::shared_ptr<RenderScheduler> renderd = nullptr;
289     g_adapter->AttachRenderProcess(renderd);
290 }
291 
292 /**
293  * @tc.name: NWebAafwkAdapter_GetRenderProcessTerminationStatus_005.
294  * @tc.desc: Test the GetRenderProcessTerminationStatus.
295  * @tc.type: FUNC
296  * @tc.require:
297  */
298 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_GetRenderProcessTerminationStatus_005, TestSize.Level1)
299 {
300     int statused = 1;
301     MockAppMgrClient *mock = new MockAppMgrClient();
302     g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
303     EXPECT_CALL(*mock, GetRenderProcessTerminationStatus(::testing::_, ::testing::_))
304         .Times(1)
305         .WillRepeatedly(
306             ::testing::DoAll(
307                 ::testing::SetArgReferee<1>(statused),
308                 ::testing::Return(0)
309             )
310         );
311     pid_t red = 1;
312     int result = g_adapter->GetRenderProcessTerminationStatus(red, statused);
313     EXPECT_EQ(RESULT_OK, result);
314 }
315 
316 /**
317  * @tc.name: NWebAafwkAdapter_GetRenderProcessTerminationStatus_006.
318  * @tc.desc: Test the GetRenderProcessTerminationStatus Exception scenarios.
319  * @tc.type: FUNC
320  * @tc.require:
321  */
322 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_GetRenderProcessTerminationStatus_006, TestSize.Level1)
323 {
324     int statused = 1;
325     MockAppMgrClient *mock = new MockAppMgrClient();
326     g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
327     EXPECT_CALL(*mock, GetRenderProcessTerminationStatus(::testing::_, ::testing::_))
328         .Times(1)
329         .WillRepeatedly(
330             ::testing::DoAll(
331                 ::testing::SetArgReferee<1>(statused),
332                 ::testing::Return(1)
333             )
334         );
335     pid_t red = 1;
336     int result = g_adapter->GetRenderProcessTerminationStatus(red, statused);
337     EXPECT_NE(RESULT_OK, result);
338 }
339 
340 /**
341  * @tc.name: NWebAafwkAdapter_GetRenderProcessTerminationStatus_007.
342  * @tc.desc: Test the GetRenderProcessTerminationStatus Exception scenarios.
343  * @tc.type: FUNC
344  * @tc.require:
345  */
346 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_GetRenderProcessTerminationStatus_007, TestSize.Level1)
347 {
348     int statused = -1;
349     MockAppMgrClient *mock = new MockAppMgrClient();
350     g_adapter->appMgrClient_.reset((AppMgrClient *)mock);
351     EXPECT_CALL(*mock, GetRenderProcessTerminationStatus(::testing::_, ::testing::_))
352         .Times(GET_TIMES_MAX_CNT)
353         .WillRepeatedly(
354             ::testing::DoAll(
355                 ::testing::SetArgReferee<1>(statused),
356                 ::testing::Return(0)
357             )
358         );
359     pid_t red = 1;
360     int result = g_adapter->GetRenderProcessTerminationStatus(red, statused);
361     EXPECT_NE(RESULT_OK, result);
362 }
363 
364 /**
365  * @tc.name: NWebAafwkAdapter_StartRenderProcess_008.
366  * @tc.desc: In this scence StartRenderProcess will be fail.
367  * @tc.type: FUNC
368  * @tc.require:
369  */
370 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_StartRenderProcess_008, TestSize.Level1)
371 {
372     g_adapter->appMgrClient_ = nullptr;
373     std::string renderParam = "test";
374     int32_t ipcFd = 0;
375     int32_t sharedFd = 0;
376     pid_t renderPid = 0;
377     int32_t crashFd = 0;
378     int result = g_adapter->StartRenderProcess(renderParam, ipcFd, sharedFd, crashFd, renderPid);
379     EXPECT_NE(RESULT_OK, result);
380     result = 0;
381     std::shared_ptr<RenderScheduler> render = std::make_shared<RenderScheduler>();
382     if (render == nullptr) {
383         result = -1;
384     }
385     EXPECT_EQ(RESULT_OK, result);
386     g_adapter->AttachRenderProcess(render);
387     int statused = 0;
388     pid_t red = 1;
389     result = g_adapter->GetRenderProcessTerminationStatus(red, statused);
390     EXPECT_NE(RESULT_OK, result);
391 }
392 
393 /**
394  * @tc.name: NWebAafwkAdapter_NotifyBrowserFd_009.
395  * @tc.desc: Test the NotifyBrowserFd.
396  * @tc.type: FUNC
397  * @tc.require:
398  */
399 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_NotifyBrowserFd_009, TestSize.Level1)
400 {
401     int result = 0;
402     std::shared_ptr<AafwkRenderSchedulerHostAdapter> adapter = std::make_shared<RenderScheduler>();
403     if (adapter == nullptr) {
404         result = -1;
405     }
406     EXPECT_EQ(RESULT_OK, result);
407     result = 0;
408     std::shared_ptr<AafwkRenderSchedulerImpl> render = std::make_shared<AafwkRenderSchedulerImpl>(adapter);
409     if (render == nullptr) {
410         result = -1;
411     }
412     EXPECT_EQ(RESULT_OK, result);
413     int32_t ipcFd = 1;
414     int32_t sharedFd = 2;
415     int32_t crashFd = 3;
416     render->NotifyBrowserFd(ipcFd, sharedFd, crashFd, nullptr);
417     render->renderSchedulerHostAdapter_ = nullptr;
418     render->NotifyBrowserFd(ipcFd, sharedFd, crashFd, nullptr);
419 }
420 
421 /**
422  * @tc.name: NWebAafwkAdapter_WriteInterfaceToken_011.
423  * @tc.desc: test write interface token.
424  * @tc.type: FUNC
425  * @tc.require:
426  */
427 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_WriteInterfaceToken_011, TestSize.Level1)
428 {
429     sptr<IRemoteObject> impl;
430     auto client = new BrowserClient(impl);
431     ASSERT_NE(client, nullptr);
432     MessageParcel data;
433     client->WriteInterfaceToken(data);
434 }
435 
436 /**
437  * @tc.name: NWebAafwkAdapter_QueryRenderSurface_012.
438  * @tc.desc: test query render surface.
439  * @tc.type: FUNC
440  * @tc.require:
441  */
442 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_QueryRenderSurface_012, TestSize.Level1)
443 {
444     sptr<IRemoteObject> impl;
445     auto client = new BrowserClient(impl);
446     ASSERT_NE(client, nullptr);
447     int32_t surface_id = 0;
448     client->QueryRenderSurface(surface_id);
449 
450     sptr<MockIRemoteObject> mockImpl = new MockIRemoteObject();
451     auto mockClient = new BrowserClient(mockImpl);
452     ASSERT_NE(mockClient, nullptr);
453     EXPECT_CALL(*mockImpl, SendRequest(_, _, _, _)).WillOnce(Return(NWEB_ERROR));
454     mockClient->QueryRenderSurface(surface_id);
455     delete mockClient;
456 }
457 
458 /**
459  * @tc.name: NWebAafwkAdapter_ReportThread_013.
460  * @tc.desc: test report thread.
461  * @tc.type: FUNC
462  * @tc.require:
463  */
464 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_ReportThread_013, TestSize.Level1)
465 {
466     sptr<IRemoteObject> impl;
467     auto client = new BrowserClient(impl);
468     ASSERT_NE(client, nullptr);
469     int32_t status = 0;
470     int32_t process_id = 0;
471     int32_t thread_id = 0;
472     int32_t role = 0;
473     client->ReportThread(status, process_id, thread_id, role);
474 
475     sptr<MockIRemoteObject> mockImpl = new MockIRemoteObject();
476     auto mockClient = new BrowserClient(mockImpl);
477     ASSERT_NE(mockClient, nullptr);
478     EXPECT_CALL(*mockImpl, SendRequest(_, _, _, _)).WillOnce(Return(NWEB_ERROR));
479     mockClient->ReportThread(status, process_id, thread_id, role);
480     delete mockClient;
481 }
482 
483 /**
484  * @tc.name: NWebAafwkAdapter_PassSurface_014.
485  * @tc.desc: test pass surface.
486  * @tc.type: FUNC
487  * @tc.require:
488  */
489 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_PassSurface_014, TestSize.Level1)
490 {
491     sptr<IRemoteObject> impl;
492     auto client = new BrowserClient(impl);
493     ASSERT_NE(client, nullptr);
494     sptr<Surface> surface;
495     int64_t surface_id = 0;
496     client->PassSurface(surface, surface_id);
497 }
498 
499 /**
500  * @tc.name: NWebAafwkAdapter_DestroyRenderSurface_015.
501  * @tc.desc: test destroy render surface.
502  * @tc.type: FUNC
503  * @tc.require:
504  */
505 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_DestroyRenderSurface_015, TestSize.Level1)
506 {
507     sptr<IRemoteObject> impl;
508     auto client = new BrowserClient(impl);
509     ASSERT_NE(client, nullptr);
510     int32_t surface_id = 0;
511     client->DestroyRenderSurface(surface_id);
512 
513     sptr<MockIRemoteObject> mockImpl = new MockIRemoteObject();
514     auto mockClient = new BrowserClient(mockImpl);
515     ASSERT_NE(mockClient, nullptr);
516     EXPECT_CALL(*mockImpl, SendRequest(_, _, _, _)).WillOnce(Return(NWEB_ERROR));
517     mockClient->DestroyRenderSurface(surface_id);
518     delete mockClient;
519 }
520 
521 /**
522  * @tc.name: NWebAafwkAdapter_QueryRenderSurface_016.
523  * @tc.desc: test query render surface.
524  * @tc.type: FUNC
525  * @tc.require:
526  */
527 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_QueryRenderSurface_016, TestSize.Level1)
528 {
529     std::shared_ptr<AafwkBrowserClientAdapterImpl> clientAdapter = std::make_shared<AafwkBrowserClientAdapterImpl>();
530     ASSERT_NE(clientAdapter, nullptr);
531     int32_t surface_id = 0;
532     clientAdapter->GetInstance().browserHost_ = nullptr;
533     clientAdapter->QueryRenderSurface(surface_id);
534     sptr mockBrowser = new MockIBrowser();
535     EXPECT_CALL(*mockBrowser, QueryRenderSurface(surface_id));
536     clientAdapter->GetInstance().browserHost_ = mockBrowser;
537     clientAdapter->QueryRenderSurface(surface_id);
538 }
539 
540 /**
541  * @tc.name: NWebAafwkAdapter_ReportThread_017.
542  * @tc.desc: test report thread.
543  * @tc.type: FUNC
544  * @tc.require:
545  */
546 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_ReportThread_017, TestSize.Level1)
547 {
548     std::shared_ptr<AafwkBrowserClientAdapterImpl> clientAdapter = std::make_shared<AafwkBrowserClientAdapterImpl>();
549     ASSERT_NE(clientAdapter, nullptr);
550     ResSchedStatusAdapter status = ResSchedStatusAdapter::THREAD_CREATED;
551     int32_t process_id = 0;
552     int32_t thread_id = 0;
553     ResSchedRoleAdapter role = ResSchedRoleAdapter::USER_INTERACT;
554     clientAdapter->GetInstance().browserHost_ = nullptr;
555     clientAdapter->ReportThread(status, process_id, thread_id, role);
556     sptr<MockIBrowser> mockBrowser = new MockIBrowser();
557     EXPECT_CALL(*mockBrowser, ReportThread(0, 0, 0, 0));
558     clientAdapter->GetInstance().browserHost_ = mockBrowser;
559     clientAdapter->ReportThread(status, process_id, thread_id, role);
560 }
561 
562 /**
563  * @tc.name: NWebAafwkAdapter_PassSurface_018.
564  * @tc.desc: test pass surface.
565  * @tc.type: FUNC
566  * @tc.require:
567  */
568 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_PassSurface_018, TestSize.Level1)
569 {
570     std::shared_ptr<AafwkBrowserClientAdapterImpl> clientAdapter = std::make_shared<AafwkBrowserClientAdapterImpl>();
571     ASSERT_NE(clientAdapter, nullptr);
572     int64_t surface_id = 0;
573     clientAdapter->GetInstance().browserHost_ = nullptr;
574     clientAdapter->PassSurface(surface_id);
575     sptr<MockIBrowser> mockBrowser = new MockIBrowser();
576     clientAdapter->GetInstance().browserHost_ = mockBrowser;
577     clientAdapter->PassSurface(surface_id);
578 }
579 
580 /**
581  * @tc.name: NWebAafwkAdapter_DestroyRenderSurface_019.
582  * @tc.desc: test destroy render surface.
583  * @tc.type: FUNC
584  * @tc.require:
585  */
586 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_DestroyRenderSurface_019, TestSize.Level1)
587 {
588     std::shared_ptr<AafwkBrowserClientAdapterImpl> clientAdapter = std::make_shared<AafwkBrowserClientAdapterImpl>();
589     ASSERT_NE(clientAdapter, nullptr);
590     int32_t surface_id = 0;
591     clientAdapter->GetInstance().browserHost_ = nullptr;
592     clientAdapter->DestroyRenderSurface(surface_id);
593     sptr<MockIBrowser> mockBrowser = new MockIBrowser();
594     EXPECT_CALL(*mockBrowser, DestroyRenderSurface(surface_id)).Times(1);
595     clientAdapter->GetInstance().browserHost_ = mockBrowser;
596     clientAdapter->DestroyRenderSurface(surface_id);
597 }
598 
599 /**
600  * @tc.name: NWebAafwkAdapter_browserHost_020.
601  * @tc.desc: test browser host.
602  * @tc.type: FUNC
603  * @tc.require:
604  */
605 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_browserHost_020, TestSize.Level1)
606 {
607     std::shared_ptr<AafwkBrowserHostAdapter> hostAdapter = nullptr;
608     auto host = new AafwkBrowserHostImpl(hostAdapter);
609     ASSERT_NE(host, nullptr);
610     uint32_t code = 0;
611     MessageParcel data;
612     MessageParcel reply;
613     MessageOption option;
614     host->OnRemoteRequest(code, data, reply, option);
615     code = 1;
616     data.WriteInterfaceToken(BrowserHost::GetDescriptor());
617     host->OnRemoteRequest(code, data, reply, option);
618     code = 100;
619     data.WriteInterfaceToken(BrowserHost::GetDescriptor());
620     host->OnRemoteRequest(code, data, reply, option);
621 }
622 
623 /**
624  * @tc.name: NWebAafwkAdapter_browserHost_021.
625  * @tc.desc: test browser host.
626  * @tc.type: FUNC
627  * @tc.require:
628  */
629 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_browserHost_021, TestSize.Level1)
630 {
631     std::shared_ptr<AafwkBrowserHostAdapter> hostAdapter = nullptr;
632     auto host = new AafwkBrowserHostImpl(hostAdapter);
633     ASSERT_NE(host, nullptr);
634     MessageParcel data;
635     MessageParcel reply;
636     host->HandleQueryRenderSurface(data, reply);
637 }
638 
639 /**
640  * @tc.name: NWebAafwkAdapter_browserHost_022.
641  * @tc.desc: test browser host.
642  * @tc.type: FUNC
643  * @tc.require:
644  */
645 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_browserHost_022, TestSize.Level1)
646 {
647     std::shared_ptr<AafwkBrowserHostAdapter> hostAdapter = nullptr;
648     auto host = new AafwkBrowserHostImpl(hostAdapter);
649     ASSERT_NE(host, nullptr);
650     MessageParcel data;
651     MessageParcel reply;
652     host->HandleReportThread(data, reply);
653 }
654 
655 /**
656  * @tc.name: NWebAafwkAdapter_browserHost_023.
657  * @tc.desc: test browser host.
658  * @tc.type: FUNC
659  * @tc.require:
660  */
661 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_browserHost_023, TestSize.Level1)
662 {
663     std::shared_ptr<AafwkBrowserHostAdapter> hostAdapter = nullptr;
664     auto host = new AafwkBrowserHostImpl(hostAdapter);
665     ASSERT_NE(host, nullptr);
666     MessageParcel data;
667     MessageParcel reply;
668     host->HandlePassSurface(data, reply);
669 }
670 
671 /**
672  * @tc.name: NWebAafwkAdapter_browserHost_024.
673  * @tc.desc: test browser host.
674  * @tc.type: FUNC
675  * @tc.require:
676  */
677 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_browserHost_024, TestSize.Level1)
678 {
679     std::shared_ptr<AafwkBrowserHostAdapter> hostAdapter = nullptr;
680     auto host = new AafwkBrowserHostImpl(hostAdapter);
681     ASSERT_NE(host, nullptr);
682     MessageParcel data;
683     MessageParcel reply;
684     host->HandleDestroyRenderSurface(data, reply);
685 }
686 
687 /**
688  * @tc.name: NWebAafwkAdapter_browserHost_025.
689  * @tc.desc: test browser host.
690  * @tc.type: FUNC
691  * @tc.require:
692  */
693 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_browserHost_025, TestSize.Level1)
694 {
695     std::shared_ptr<AafwkBrowserHostAdapter> hostAdapter = nullptr;
696     auto host = new AafwkBrowserHostImpl(hostAdapter);
697     ASSERT_NE(host, nullptr);
698     int32_t surface_id = 0;
699     host->QueryRenderSurface(surface_id);
700 }
701 
702 /**
703  * @tc.name: NWebAafwkAdapter_browserHost_026.
704  * @tc.desc: test browser host.
705  * @tc.type: FUNC
706  * @tc.require:
707  */
708 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_browserHost_026, TestSize.Level1)
709 {
710     std::shared_ptr<AafwkBrowserHostAdapter> hostAdapter = nullptr;
711     auto host = new AafwkBrowserHostImpl(hostAdapter);
712     ASSERT_NE(host, nullptr);
713     int32_t status = 0;
714     int32_t process_id = 0;
715     int32_t thread_id = 0;
716     int32_t role = 0;
717     host->ReportThread(status, process_id, thread_id, role);
718 }
719 
720 /**
721  * @tc.name: NWebAafwkAdapter_browserHost_027.
722  * @tc.desc: test browser host.
723  * @tc.type: FUNC
724  * @tc.require:
725  */
726 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_browserHost_027, TestSize.Level1)
727 {
728     std::shared_ptr<AafwkBrowserHostAdapter> hostAdapter = nullptr;
729     auto host = new AafwkBrowserHostImpl(hostAdapter);
730     ASSERT_NE(host, nullptr);
731     sptr<Surface> surface;
732     int64_t surface_id = 0;
733     host->PassSurface(surface, surface_id);
734 }
735 
736 /**
737  * @tc.name: NWebAafwkAdapter_browserHost_028.
738  * @tc.desc: test browser host.
739  * @tc.type: FUNC
740  * @tc.require:
741  */
742 HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_browserHost_028, TestSize.Level1)
743 {
744     std::shared_ptr<AafwkBrowserHostAdapter> hostAdapter = nullptr;
745     auto host = new AafwkBrowserHostImpl(hostAdapter);
746     ASSERT_NE(host, nullptr);
747     int32_t surface_id = 0;
748     host->DestroyRenderSurface(surface_id);
749 }
750 }