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