• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 #include <gtest/gtest.h>
16 #include "iconsumer_surface.h"
17 #include <iservice_registry.h>
18 #include <native_window.h>
19 #include <securec.h>
20 #include <ctime>
21 #include "buffer_log.h"
22 #include "external_window.h"
23 #include "surface_utils.h"
24 #include "sync_fence.h"
25 #include "ipc_inner_object.h"
26 #include "ipc_cparcel.h"
27 
28 using namespace std;
29 using namespace testing;
30 using namespace testing::ext;
31 
32 namespace OHOS::Rosen {
33 class BufferConsumerListener : public IBufferConsumerListener {
34 public:
OnBufferAvailable()35     void OnBufferAvailable() override
36     {
37     }
38 };
39 
OnBufferRelease(sptr<SurfaceBuffer> & buffer)40 static inline GSError OnBufferRelease(sptr<SurfaceBuffer> &buffer)
41 {
42     return GSERROR_OK;
43 }
44 
AllocOHExtDataHandle(uint32_t reserveInts)45 static OHExtDataHandle *AllocOHExtDataHandle(uint32_t reserveInts)
46 {
47     size_t handleSize = sizeof(OHExtDataHandle) + (sizeof(int32_t) * reserveInts);
48     OHExtDataHandle *handle = static_cast<OHExtDataHandle *>(malloc(handleSize));
49     if (handle == nullptr) {
50         BLOGE("AllocOHExtDataHandle malloc %zu failed", handleSize);
51         return nullptr;
52     }
53     auto ret = memset_s(handle, handleSize, 0, handleSize);
54     if (ret != EOK) {
55         BLOGE("AllocOHExtDataHandle memset_s failed");
56         free(handle);
57         return nullptr;
58     }
59     handle->fd = -1;
60     handle->reserveInts = reserveInts;
61     for (uint32_t i = 0; i < reserveInts; i++) {
62         handle->reserve[i] = -1;
63     }
64     return handle;
65 }
66 
FreeOHExtDataHandle(OHExtDataHandle * handle)67 static void FreeOHExtDataHandle(OHExtDataHandle *handle)
68 {
69     if (handle == nullptr) {
70         BLOGW("FreeOHExtDataHandle with nullptr handle");
71         return ;
72     }
73     if (handle->fd >= 0) {
74         close(handle->fd);
75         handle->fd = -1;
76     }
77     free(handle);
78 }
79 
80 class NativeWindowTest : public testing::Test {
81 public:
82     static void SetUpTestCase();
83     static void TearDownTestCase();
84 
85     static inline BufferRequestConfig requestConfig = {};
86     static inline BufferFlushConfig flushConfig = {};
87     static inline sptr<OHOS::IConsumerSurface> cSurface = nullptr;
88     static inline sptr<OHOS::IBufferProducer> producer = nullptr;
89     static inline sptr<OHOS::Surface> pSurface = nullptr;
90     static inline sptr<OHOS::SurfaceBuffer> sBuffer = nullptr;
91     static inline NativeWindow* nativeWindow = nullptr;
92     static inline NativeWindowBuffer* nativeWindowBuffer = nullptr;
93     static inline uint32_t firstSeqnum = 0;
94 };
95 
SetUpTestCase()96 void NativeWindowTest::SetUpTestCase()
97 {
98     requestConfig = {
99         .width = 0x100,  // small
100         .height = 0x100, // small
101         .strideAlignment = 0x8,
102         .format = GRAPHIC_PIXEL_FMT_RGBA_8888,
103         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
104         .timeout = 0,
105     };
106 
107     cSurface = IConsumerSurface::Create();
108     sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
109     cSurface->RegisterConsumerListener(listener);
110     producer = cSurface->GetProducer();
111     pSurface = Surface::CreateSurfaceAsProducer(producer);
112     int32_t fence;
113     pSurface->RequestBuffer(sBuffer, fence, requestConfig);
114     firstSeqnum = sBuffer->GetSeqNum();
115 }
116 
TearDownTestCase()117 void NativeWindowTest::TearDownTestCase()
118 {
119     flushConfig = { .damage = {
120         .w = 0x100,
121         .h = 0x100,
122     } };
123     pSurface->FlushBuffer(sBuffer, -1, flushConfig);
124     sBuffer = nullptr;
125     cSurface = nullptr;
126     producer = nullptr;
127     pSurface = nullptr;
128     OH_NativeWindow_DestroyNativeWindow(nativeWindow);
129     nativeWindow = nullptr;
130     nativeWindowBuffer = nullptr;
131 }
132 
133 /*
134 * Function: OH_NativeWindow_CreateNativeWindow
135 * Type: Function
136 * Rank: Important(2)
137 * EnvConditions: N/A
138 * CaseDescription: 1. call OH_NativeWindow_CreateNativeWindow by abnormal input
139 *                  2. check ret
140  */
141 HWTEST_F(NativeWindowTest, CreateNativeWindow001, TestSize.Level0)
142 {
143     ASSERT_EQ(OH_NativeWindow_CreateNativeWindow(nullptr), nullptr);
144 }
145 
146 /*
147 * Function: OH_NativeWindow_CreateNativeWindow
148 * Type: Function
149 * Rank: Important(2)
150 * EnvConditions: N/A
151 * CaseDescription: 1. call OH_NativeWindow_CreateNativeWindow
152 *                  2. check ret
153  */
154 HWTEST_F(NativeWindowTest, CreateNativeWindow002, TestSize.Level0)
155 {
156     nativeWindow = OH_NativeWindow_CreateNativeWindow(&pSurface);
157     ASSERT_NE(nativeWindow, nullptr);
158 }
159 
160 /*
161 * Function: OH_NativeWindow_CreateNativeWindow
162 * Type: Function
163 * Rank: Important(2)
164 * EnvConditions: N/A
165 * CaseDescription: 1. call OH_NativeWindow_CreateNativeWindow
166 *                  2. check ret
167  */
168 HWTEST_F(NativeWindowTest, CreateNativeWindow003, TestSize.Level0)
169 {
170     uint64_t surfaceId = 0;
171     int32_t ret = OH_NativeWindow_GetSurfaceId(nativeWindow, &surfaceId);
172     ASSERT_EQ(ret, OHOS::GSERROR_OK);
173     ASSERT_EQ(surfaceId, pSurface->GetUniqueId());
174 }
175 
176 /*
177 * Function: OH_NativeWindow_CreateNativeWindow
178 * Type: Function
179 * Rank: Important(2)
180 * EnvConditions: N/A
181 * CaseDescription: 1. call OH_NativeWindow_CreateNativeWindow
182 *                  2. check ret
183  */
184 HWTEST_F(NativeWindowTest, CreateNativeWindow004, TestSize.Level0)
185 {
186     sptr<OHOS::Surface> surfaceTmp = nullptr;
187     auto nativeWindowTmp = OH_NativeWindow_CreateNativeWindow(&surfaceTmp);
188     ASSERT_EQ(nativeWindowTmp, nullptr);
189 }
190 
191 /*
192 * Function: OH_NativeWindow_CreateNativeWindowFromSurfaceId
193 * Type: Function
194 * Rank: Important(2)
195 * EnvConditions: N/A
196 * CaseDescription: 1. call OH_NativeWindow_CreateNativeWindowFromSurfaceId
197 *                  2. check ret
198  */
199 HWTEST_F(NativeWindowTest, CreateNativeWindowFromSurfaceId001, TestSize.Level0)
200 {
201     uint64_t surfaceId = static_cast<uint64_t>(pSurface->GetUniqueId());
202     OHNativeWindow *window = nullptr;
203     int32_t ret = OH_NativeWindow_CreateNativeWindowFromSurfaceId(surfaceId, &window);
204     ASSERT_EQ(ret, OHOS::GSERROR_OK);
205     surfaceId = 0;
206     ret = OH_NativeWindow_GetSurfaceId(window, &surfaceId);
207     ASSERT_EQ(ret, OHOS::GSERROR_OK);
208     ASSERT_EQ(surfaceId, pSurface->GetUniqueId());
209     OH_NativeWindow_DestroyNativeWindow(window);
210 }
211 
212 /*
213 * Function: OH_NativeWindow_CreateNativeWindowFromSurfaceId
214 * Type: Function
215 * Rank: Important(2)
216 * EnvConditions: N/A
217 * CaseDescription: 1. call OH_NativeWindow_CreateNativeWindowFromSurfaceId
218 *                  2. check ret
219  */
220 HWTEST_F(NativeWindowTest, CreateNativeWindowFromSurfaceId002, TestSize.Level0)
221 {
222     int32_t ret = OH_NativeWindow_CreateNativeWindowFromSurfaceId(0, nullptr);
223     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
224     ret = OH_NativeWindow_GetSurfaceId(nullptr, nullptr);
225     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
226 }
227 
228 /*
229 * Function: OH_NativeWindow_CreateNativeWindowFromSurfaceId
230 * Type: Function
231 * Rank: Important(2)
232 * EnvConditions: N/A
233 * CaseDescription: 1. call OH_NativeWindow_CreateNativeWindowFromSurfaceId
234 *                  2. check ret
235  */
236 HWTEST_F(NativeWindowTest, CreateNativeWindowFromSurfaceId003, TestSize.Level0)
237 {
238     sptr<OHOS::IConsumerSurface> cSurfaceTmp = IConsumerSurface::Create();
239     sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
240     cSurfaceTmp->RegisterConsumerListener(listener);
241     sptr<OHOS::IBufferProducer> producerTmp = cSurfaceTmp->GetProducer();
242     sptr<OHOS::Surface> pSurfaceTmp = Surface::CreateSurfaceAsProducer(producerTmp);
243 
244     uint64_t surfaceId = static_cast<uint64_t>(pSurfaceTmp->GetUniqueId());
245     auto utils = SurfaceUtils::GetInstance();
246     utils->Add(surfaceId, pSurfaceTmp);
247     OHNativeWindow *nativeWindowTmp = nullptr;
248     int32_t ret = OH_NativeWindow_CreateNativeWindowFromSurfaceId(0xFFFFFFFF, &nativeWindowTmp);
249     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
250     ret = OH_NativeWindow_CreateNativeWindowFromSurfaceId(surfaceId, &nativeWindowTmp);
251     ASSERT_EQ(ret, OHOS::GSERROR_OK);
252     surfaceId = 0;
253     ret = OH_NativeWindow_GetSurfaceId(nativeWindowTmp, &surfaceId);
254     ASSERT_EQ(ret, OHOS::GSERROR_OK);
255     ASSERT_EQ(surfaceId, pSurfaceTmp->GetUniqueId());
256 
257     cSurfaceTmp = nullptr;
258     producerTmp = nullptr;
259     pSurfaceTmp = nullptr;
260     OH_NativeWindow_DestroyNativeWindow(nativeWindowTmp);
261 }
262 
263 /*
264 * Function: OH_NativeWindow_NativeWindowHandleOpt
265 * Type: Function
266 * Rank: Important(2)
267 * EnvConditions: N/A
268 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by abnormal input
269 *                  2. check ret
270  */
271 HWTEST_F(NativeWindowTest, HandleOpt001, TestSize.Level0)
272 {
273     int code = SET_USAGE;
274     uint64_t usage = BUFFER_USAGE_CPU_READ;
275     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nullptr, code, usage), OHOS::GSERROR_INVALID_ARGUMENTS);
276 }
277 
278 /*
279 * Function: OH_NativeWindow_NativeWindowHandleOpt
280 * Type: Function
281 * Rank: Important(2)
282 * EnvConditions: N/A
283 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
284 *                  2. check ret
285  */
286 HWTEST_F(NativeWindowTest, HandleOpt002, TestSize.Level0)
287 {
288     int code = SET_USAGE;
289     uint64_t usageSet = BUFFER_USAGE_CPU_READ;
290     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, usageSet), OHOS::GSERROR_OK);
291 
292     code = GET_USAGE;
293     uint64_t usageGet = BUFFER_USAGE_CPU_WRITE;
294     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &usageGet), OHOS::GSERROR_OK);
295     ASSERT_EQ(usageSet, usageGet);
296 }
297 
298 /*
299 * Function: OH_NativeWindow_NativeWindowHandleOpt
300 * Type: Function
301 * Rank: Important(2)
302 * EnvConditions: N/A
303 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
304 *                  2. check ret
305  */
306 HWTEST_F(NativeWindowTest, HandleOpt003, TestSize.Level0)
307 {
308     int code = SET_BUFFER_GEOMETRY;
309     int32_t heightSet = 0x100;
310     int32_t widthSet = 0x100;
311     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, heightSet, widthSet), OHOS::GSERROR_OK);
312 
313     code = GET_BUFFER_GEOMETRY;
314     int32_t heightGet = 0;
315     int32_t widthGet = 0;
316     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &heightGet, &widthGet), OHOS::GSERROR_OK);
317     ASSERT_EQ(heightSet, heightGet);
318     ASSERT_EQ(widthSet, widthGet);
319 }
320 
321 /*
322 * Function: OH_NativeWindow_NativeWindowHandleOpt
323 * Type: Function
324 * Rank: Important(2)
325 * EnvConditions: N/A
326 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
327 *                  2. check ret
328  */
329 HWTEST_F(NativeWindowTest, HandleOpt004, TestSize.Level0)
330 {
331     int code = SET_FORMAT;
332     int32_t formatSet = GRAPHIC_PIXEL_FMT_RGBA_8888;
333     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, formatSet), OHOS::GSERROR_OK);
334 
335     code = GET_FORMAT;
336     int32_t formatGet = GRAPHIC_PIXEL_FMT_CLUT8;
337     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &formatGet), OHOS::GSERROR_OK);
338     ASSERT_EQ(formatSet, formatGet);
339 }
340 
341 /*
342 * Function: OH_NativeWindow_NativeWindowHandleOpt
343 * Type: Function
344 * Rank: Important(2)
345 * EnvConditions: N/A
346 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
347 *                  2. check ret
348  */
349 HWTEST_F(NativeWindowTest, HandleOpt005, TestSize.Level0)
350 {
351     int code = SET_STRIDE;
352     int32_t strideSet = 0x8;
353     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, strideSet), OHOS::GSERROR_OK);
354 
355     code = GET_STRIDE;
356     int32_t strideGet = 0;
357     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &strideGet), OHOS::GSERROR_OK);
358     ASSERT_EQ(strideSet, strideGet);
359 }
360 
361 /*
362 * Function: OH_NativeWindow_NativeWindowHandleOpt
363 * Type: Function
364 * Rank: Important(2)
365 * EnvConditions: N/A
366 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
367 *                  2. check ret
368  */
369 HWTEST_F(NativeWindowTest, HandleOpt006, TestSize.Level0)
370 {
371     int code = SET_COLOR_GAMUT;
372     int32_t colorGamutSet = static_cast<int32_t>(GraphicColorGamut::GRAPHIC_COLOR_GAMUT_DCI_P3);
373     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, colorGamutSet), OHOS::GSERROR_OK);
374 
375     code = GET_COLOR_GAMUT;
376     int32_t colorGamutGet = 0;
377     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &colorGamutGet), OHOS::GSERROR_OK);
378     ASSERT_EQ(colorGamutSet, colorGamutGet);
379 }
380 
381 /*
382 * Function: OH_NativeWindow_NativeWindowHandleOpt
383 * Type: Function
384 * Rank: Important(2)
385 * EnvConditions: N/A
386 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
387 *                  2. check ret
388  */
389 HWTEST_F(NativeWindowTest, HandleOpt007, TestSize.Level0)
390 {
391     int code = SET_TIMEOUT;
392     int32_t timeoutSet = 10;  // 10: for test
393     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, timeoutSet), OHOS::GSERROR_OK);
394 
395     code = GET_TIMEOUT;
396     int32_t timeoutGet = 0;
397     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &timeoutGet), OHOS::GSERROR_OK);
398     ASSERT_EQ(timeoutSet, timeoutGet);
399 }
400 
401 /*
402 * Function: OH_NativeWindow_NativeWindowHandleOpt
403 * Type: Function
404 * Rank: Important(2)
405 * EnvConditions: N/A
406 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
407 *                  2. check ret
408  */
409 HWTEST_F(NativeWindowTest, HandleOpt008, TestSize.Level0)
410 {
411     int code = GET_TRANSFORM;
412     int32_t transform = 0;
413     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &transform), OHOS::GSERROR_OK);
414     transform = GraphicTransformType::GRAPHIC_ROTATE_90;
415     code = SET_TRANSFORM;
416     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, transform), OHOS::GSERROR_OK);
417     int32_t transformTmp = 0;
418     code = GET_TRANSFORM;
419     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &transformTmp), OHOS::GSERROR_OK);
420     ASSERT_EQ(transformTmp, GraphicTransformType::GRAPHIC_ROTATE_90);
421     nativeWindow->surface->SetTransform(GraphicTransformType::GRAPHIC_ROTATE_180);
422     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &transformTmp), OHOS::GSERROR_OK);
423     ASSERT_EQ(transformTmp, GraphicTransformType::GRAPHIC_ROTATE_180);
424 }
425 
426 /*
427 * Function: OH_NativeWindow_NativeWindowHandleOpt
428 * Type: Function
429 * Rank: Important(2)
430 * EnvConditions: N/A
431 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
432 *                  2. check ret
433  */
434 HWTEST_F(NativeWindowTest, HandleOpt009, TestSize.Level0)
435 {
436     int code = GET_BUFFERQUEUE_SIZE;
437     int32_t queueSize = 0;
438     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &queueSize), OHOS::GSERROR_OK);
439     ASSERT_EQ(queueSize, 3);
440     nativeWindow->surface->SetQueueSize(5);
441     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &queueSize), OHOS::GSERROR_OK);
442     ASSERT_EQ(queueSize, 5);
443 }
444 
445 /*
446 * Function: OH_NativeWindow_NativeWindowHandleOpt
447 * Type: Function
448 * Rank: Important(2)
449 * EnvConditions: N/A
450 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
451 *                  2. check ret
452  */
453 HWTEST_F(NativeWindowTest, HandleOpt010, TestSize.Level0)
454 {
455     int code = SET_USAGE;
456     uint64_t usageSet = NATIVEBUFFER_USAGE_HW_RENDER | NATIVEBUFFER_USAGE_HW_TEXTURE |
457     NATIVEBUFFER_USAGE_CPU_READ_OFTEN | NATIVEBUFFER_USAGE_ALIGNMENT_512;
458     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, usageSet), OHOS::GSERROR_OK);
459 
460     code = GET_USAGE;
461     uint64_t usageGet = usageSet;
462     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &usageGet), OHOS::GSERROR_OK);
463     ASSERT_EQ(usageSet, usageGet);
464 
465     code = SET_FORMAT;
466     int32_t formatSet = NATIVEBUFFER_PIXEL_FMT_YCBCR_P010;
467     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, formatSet), OHOS::GSERROR_OK);
468 
469     code = GET_FORMAT;
470     int32_t formatGet = NATIVEBUFFER_PIXEL_FMT_YCBCR_P010;
471     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &formatGet), OHOS::GSERROR_OK);
472     ASSERT_EQ(formatSet, formatGet);
473 }
474 
475 /*
476 * Function: OH_NativeWindow_NativeWindowHandleOpt
477 * Type: Function
478 * Rank: Important(2)
479 * EnvConditions: N/A
480 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
481 *                  2. check ret
482  */
483 HWTEST_F(NativeWindowTest, HandleOpt011, TestSize.Level0)
484 {
485     int code = SET_SOURCE_TYPE;
486     OHSurfaceSource typeSet = OHSurfaceSource::OH_SURFACE_SOURCE_GAME;
487     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, typeSet), OHOS::GSERROR_OK);
488 
489     code = GET_SOURCE_TYPE;
490     OHSurfaceSource typeGet = OHSurfaceSource::OH_SURFACE_SOURCE_DEFAULT;
491     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &typeGet), OHOS::GSERROR_OK);
492     ASSERT_EQ(typeSet, typeGet);
493 }
494 
495 /*
496 * Function: OH_NativeWindow_NativeWindowHandleOpt
497 * Type: Function
498 * Rank: Important(2)
499 * EnvConditions: N/A
500 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
501 *                  2. check ret
502  */
503 HWTEST_F(NativeWindowTest, HandleOpt012, TestSize.Level0)
504 {
505     int code = SET_APP_FRAMEWORK_TYPE;
506     const char* typeSet = "test";
507     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, typeSet), OHOS::GSERROR_OK);
508 
509     code = GET_APP_FRAMEWORK_TYPE;
510     const char* typeGet;
511     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &typeGet), OHOS::GSERROR_OK);
512     ASSERT_EQ(0, strcmp(typeSet, typeGet));
513 }
514 
515 /*
516 * Function: OH_NativeWindow_NativeWindowHandleOpt
517 * Type: Function
518 * Rank: Important(2)
519 * EnvConditions: N/A
520 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
521 *                  2. check ret
522  */
523 HWTEST_F(NativeWindowTest, HandleOpt013, TestSize.Level0)
524 {
525     int code = SET_HDR_WHITE_POINT_BRIGHTNESS;
526     float brightness = 0.8;
527     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, brightness), OHOS::GSERROR_OK);
528 
529     code = SET_SDR_WHITE_POINT_BRIGHTNESS;
530     brightness = 0.5;
531     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, brightness), OHOS::GSERROR_OK);
532 
533     ASSERT_EQ(fabs(cSurface->GetHdrWhitePointBrightness() - 0.8) < 1e-6, true);
534     ASSERT_EQ(fabs(cSurface->GetSdrWhitePointBrightness() - 0.5) < 1e-6, true);
535 
536     code = SET_HDR_WHITE_POINT_BRIGHTNESS;
537     brightness = 1.8;
538     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, brightness), OHOS::GSERROR_OK);
539     ASSERT_EQ(fabs(cSurface->GetHdrWhitePointBrightness() - 0.8) < 1e-6, true);
540     brightness = -0.5;
541     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, brightness), OHOS::GSERROR_OK);
542     ASSERT_EQ(fabs(cSurface->GetHdrWhitePointBrightness() - 0.8) < 1e-6, true);
543     brightness = 0.5;
544     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, brightness), OHOS::GSERROR_OK);
545     ASSERT_EQ(fabs(cSurface->GetHdrWhitePointBrightness() - 0.5) < 1e-6, true);
546 
547     code = SET_SDR_WHITE_POINT_BRIGHTNESS;
548     brightness = 1.5;
549     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, brightness), OHOS::GSERROR_OK);
550     ASSERT_EQ(fabs(cSurface->GetSdrWhitePointBrightness() - 0.5) < 1e-6, true);
551     brightness = -0.1;
552     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, brightness), OHOS::GSERROR_OK);
553     ASSERT_EQ(fabs(cSurface->GetSdrWhitePointBrightness() - 0.5) < 1e-6, true);
554     brightness = 0.8;
555     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, brightness), OHOS::GSERROR_OK);
556     ASSERT_EQ(fabs(cSurface->GetSdrWhitePointBrightness() - 0.8) < 1e-6, true);
557 }
558 
559 /*
560 * Function: OH_NativeWindow_NativeWindowHandleOpt
561 * Type: Function
562 * Rank: Important(2)
563 * EnvConditions: N/A
564 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
565 *                  2. check ret
566  */
567 HWTEST_F(NativeWindowTest, HandleOpt014, TestSize.Level0)
568 {
569     int code = SET_APP_FRAMEWORK_TYPE;
570     const char* typeSet = "testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttest";
571     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, typeSet), OHOS::GSERROR_OK);
572 
573     code = GET_APP_FRAMEWORK_TYPE;
574     const char* typeGet;
575     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &typeGet), OHOS::GSERROR_OK);
576     ASSERT_EQ(0, strcmp(typeSet, typeGet));
577 }
578 
579 /*
580 * Function: OH_NativeWindow_NativeWindowAttachBuffer
581 * Type: Function
582 * Rank: Important(2)
583 * EnvConditions: N/A
584 * CaseDescription: 1. call OH_NativeWindow_NativeWindowAttachBuffer by abnormal input
585 *                  2. check ret
586  */
587 HWTEST_F(NativeWindowTest, NativeWindowAttachBuffer001, TestSize.Level0)
588 {
589     ASSERT_EQ(OH_NativeWindow_NativeWindowAttachBuffer(nullptr, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
590     ASSERT_EQ(OH_NativeWindow_NativeWindowDetachBuffer(nullptr, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
591     ASSERT_EQ(OH_NativeWindow_NativeWindowAttachBuffer(nativeWindow, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
592     ASSERT_EQ(OH_NativeWindow_NativeWindowDetachBuffer(nativeWindow, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
593 }
594 
SetNativeWindowConfig(NativeWindow * nativeWindow)595 void SetNativeWindowConfig(NativeWindow *nativeWindow)
596 {
597     int code = SET_USAGE;
598     uint64_t usageSet = BUFFER_USAGE_CPU_READ;
599     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, usageSet), OHOS::GSERROR_OK);
600 
601     code = SET_BUFFER_GEOMETRY;
602     int32_t heightSet = 0x100;
603     int32_t widthSet = 0x100;
604     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, heightSet, widthSet), OHOS::GSERROR_OK);
605 
606     code = SET_FORMAT;
607     int32_t formatSet = GRAPHIC_PIXEL_FMT_RGBA_8888;
608     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, formatSet), OHOS::GSERROR_OK);
609 
610     code = SET_STRIDE;
611     int32_t strideSet = 0x8;
612     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, strideSet), OHOS::GSERROR_OK);
613 
614     code = SET_COLOR_GAMUT;
615     int32_t colorGamutSet = static_cast<int32_t>(GraphicColorGamut::GRAPHIC_COLOR_GAMUT_DCI_P3);
616     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, colorGamutSet), OHOS::GSERROR_OK);
617 
618     code = SET_TIMEOUT;
619     int32_t timeoutSet = 10;  // 10: for test
620     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, timeoutSet), OHOS::GSERROR_OK);
621 }
622 
623 /*
624 * Function: OH_NativeWindow_NativeWindowAttachBuffer
625 * Type: Function
626 * Rank: Important(2)
627 * EnvConditions: N/A
628 * CaseDescription: 1. call OH_NativeWindow_NativeWindowAttachBuffer by normal input
629 *                  2. check ret
630  */
631 HWTEST_F(NativeWindowTest, NativeWindowAttachBuffer002, TestSize.Level0)
632 {
633     sptr<OHOS::IConsumerSurface> cSurfaceTmp = IConsumerSurface::Create();
634     sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
635     cSurfaceTmp->RegisterConsumerListener(listener);
636     sptr<OHOS::IBufferProducer> producerTmp = cSurfaceTmp->GetProducer();
637     sptr<OHOS::Surface> pSurfaceTmp = Surface::CreateSurfaceAsProducer(producerTmp);
638 
639     NativeWindow *nativeWindowTmp = OH_NativeWindow_CreateNativeWindow(&pSurfaceTmp);
640     ASSERT_NE(nativeWindowTmp, nullptr);
641     SetNativeWindowConfig(nativeWindowTmp);
642 
643     NativeWindowBuffer *nativeWindowBuffer = nullptr;
644     int fenceFd = -1;
645     int32_t ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp, &nativeWindowBuffer, &fenceFd);
646     ASSERT_EQ(ret, GSERROR_OK);
647 
648     int code = GET_BUFFERQUEUE_SIZE;
649     int32_t queueSize = 0;
650     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindowTmp, code, &queueSize), OHOS::GSERROR_OK);
651     ASSERT_EQ(queueSize, 3);
652 
653     ASSERT_EQ(OH_NativeWindow_NativeWindowDetachBuffer(nativeWindowTmp, nativeWindowBuffer), OHOS::GSERROR_OK);
654 
655     ASSERT_EQ(OH_NativeWindow_NativeWindowAttachBuffer(nativeWindow, nativeWindowBuffer), OHOS::GSERROR_OK);
656 
657     ASSERT_EQ(OH_NativeWindow_NativeWindowDetachBuffer(nativeWindow, nativeWindowBuffer), OHOS::GSERROR_OK);
658 
659     ASSERT_EQ(OH_NativeWindow_NativeWindowAttachBuffer(nativeWindowTmp, nativeWindowBuffer), OHOS::GSERROR_OK);
660     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindowTmp, code, &queueSize), OHOS::GSERROR_OK);
661     ASSERT_EQ(queueSize, 3);
662     ASSERT_EQ(OH_NativeWindow_NativeWindowAttachBuffer(nativeWindowTmp, nativeWindowBuffer),
663         OHOS::GSERROR_BUFFER_IS_INCACHE);
664 
665     struct Region *region = new Region();
666     struct Region::Rect *rect = new Region::Rect();
667     rect->x = 0x100;
668     rect->y = 0x100;
669     rect->w = 0x100;
670     rect->h = 0x100;
671     region->rects = rect;
672     ret = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindowTmp, nativeWindowBuffer, fenceFd, *region);
673     ASSERT_EQ(ret, GSERROR_OK);
674 
675     OH_NativeWindow_DestroyNativeWindow(nativeWindowTmp);
676 }
677 
NativeWindowAttachBuffer003Test(NativeWindow * nativeWindowTmp,NativeWindow * nativeWindowTmp1)678 void NativeWindowAttachBuffer003Test(NativeWindow *nativeWindowTmp, NativeWindow *nativeWindowTmp1)
679 {
680     NativeWindowBuffer *nativeWindowBuffer1 = nullptr;
681     int fenceFd = -1;
682     int32_t ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp, &nativeWindowBuffer1, &fenceFd);
683     ASSERT_EQ(ret, GSERROR_OK);
684 
685     NativeWindowBuffer *nativeWindowBuffer2 = nullptr;
686     fenceFd = -1;
687     ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp, &nativeWindowBuffer2, &fenceFd);
688     ASSERT_EQ(ret, GSERROR_OK);
689 
690     NativeWindowBuffer *nativeWindowBuffer3 = nullptr;
691     fenceFd = -1;
692     ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp, &nativeWindowBuffer3, &fenceFd);
693     ASSERT_EQ(ret, GSERROR_OK);
694 
695     int code = GET_BUFFERQUEUE_SIZE;
696     int32_t queueSize = 0;
697     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindowTmp, code, &queueSize), OHOS::GSERROR_OK);
698     ASSERT_EQ(queueSize, 3);
699 
700     ASSERT_EQ(OH_NativeWindow_NativeWindowDetachBuffer(nativeWindowTmp, nativeWindowBuffer1), OHOS::GSERROR_OK);
701     ASSERT_EQ(OH_NativeWindow_NativeWindowDetachBuffer(nativeWindowTmp, nativeWindowBuffer2), OHOS::GSERROR_OK);
702     ASSERT_EQ(OH_NativeWindow_NativeWindowDetachBuffer(nativeWindowTmp, nativeWindowBuffer3), OHOS::GSERROR_OK);
703 
704     NativeWindowBuffer *nativeWindowBuffer4 = nullptr;
705     fenceFd = -1;
706     ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp, &nativeWindowBuffer4, &fenceFd);
707     ASSERT_EQ(ret, GSERROR_OK);
708 
709     NativeWindowBuffer *nativeWindowBuffer10 = nullptr;
710     fenceFd = -1;
711     ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp1, &nativeWindowBuffer10, &fenceFd);
712     ASSERT_EQ(ret, GSERROR_OK);
713 
714     NativeWindowBuffer *nativeWindowBuffer11 = nullptr;
715     fenceFd = -1;
716     ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp1, &nativeWindowBuffer11, &fenceFd);
717     ASSERT_EQ(ret, GSERROR_OK);
718 
719     NativeWindowBuffer *nativeWindowBuffer12 = nullptr;
720     fenceFd = -1;
721     ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp1, &nativeWindowBuffer12, &fenceFd);
722     ASSERT_EQ(ret, GSERROR_OK);
723 
724     ASSERT_EQ(OH_NativeWindow_NativeWindowAttachBuffer(nativeWindowTmp1, nativeWindowBuffer1),
725         OHOS::SURFACE_ERROR_BUFFER_QUEUE_FULL);
726 }
727 
728 /*
729 * Function: OH_NativeWindow_NativeWindowAttachBuffer
730 * Type: Function
731 * Rank: Important(2)
732 * EnvConditions: N/A
733 * CaseDescription: 1. call OH_NativeWindow_NativeWindowAttachBuffer by normal input
734 *                  2. check ret
735  */
736 HWTEST_F(NativeWindowTest, NativeWindowAttachBuffer003, TestSize.Level0)
737 {
738     sptr<OHOS::IConsumerSurface> cSurfaceTmp = IConsumerSurface::Create();
739     sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
740     cSurfaceTmp->RegisterConsumerListener(listener);
741     sptr<OHOS::IBufferProducer> producerTmp = cSurfaceTmp->GetProducer();
742     sptr<OHOS::Surface> pSurfaceTmp = Surface::CreateSurfaceAsProducer(producerTmp);
743 
744     NativeWindow *nativeWindowTmp = OH_NativeWindow_CreateNativeWindow(&pSurfaceTmp);
745     ASSERT_NE(nativeWindowTmp, nullptr);
746     SetNativeWindowConfig(nativeWindowTmp);
747 
748     sptr<OHOS::IConsumerSurface> cSurfaceTmp1 = IConsumerSurface::Create();
749     sptr<IBufferConsumerListener> listener1 = new BufferConsumerListener();
750     cSurfaceTmp1->RegisterConsumerListener(listener1);
751     sptr<OHOS::IBufferProducer> producerTmp1 = cSurfaceTmp1->GetProducer();
752     sptr<OHOS::Surface> pSurfaceTmp1 = Surface::CreateSurfaceAsProducer(producerTmp1);
753 
754     NativeWindow *nativeWindowTmp1 = OH_NativeWindow_CreateNativeWindow(&pSurfaceTmp1);
755     ASSERT_NE(nativeWindowTmp1, nullptr);
756     SetNativeWindowConfig(nativeWindowTmp1);
757 
758     NativeWindowAttachBuffer003Test(nativeWindowTmp, nativeWindowTmp1);
759 
760     OH_NativeWindow_DestroyNativeWindow(nativeWindowTmp);
761     OH_NativeWindow_DestroyNativeWindow(nativeWindowTmp1);
762 }
763 
764 /*
765 * Function: OH_NativeWindow_NativeWindowAttachBuffer
766 * Type: Function
767 * Rank: Important(2)
768 * EnvConditions: N/A
769 * CaseDescription: 1. call OH_NativeWindow_NativeWindowAttachBuffer by normal input
770 *                  2. check ret
771  */
772 HWTEST_F(NativeWindowTest, NativeWindowAttachBuffer004, TestSize.Level0)
773 {
774     sptr<OHOS::IConsumerSurface> cSurfaceTmp = IConsumerSurface::Create();
775     sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
776     cSurfaceTmp->RegisterConsumerListener(listener);
777     sptr<OHOS::IBufferProducer> producerTmp = cSurfaceTmp->GetProducer();
778     sptr<OHOS::Surface> pSurfaceTmp = Surface::CreateSurfaceAsProducer(producerTmp);
779 
780     NativeWindow *nativeWindowTmp = OH_NativeWindow_CreateNativeWindow(&pSurfaceTmp);
781     ASSERT_NE(nativeWindowTmp, nullptr);
782     SetNativeWindowConfig(nativeWindowTmp);
783 
784     NativeWindowBuffer *nativeWindowBuffer = nullptr;
785     int fenceFd = -1;
786     int32_t ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp, &nativeWindowBuffer, &fenceFd);
787     ASSERT_EQ(ret, GSERROR_OK);
788 
789     struct Region *region = new Region();
790     struct Region::Rect *rect = new Region::Rect();
791     rect->x = 0x100;
792     rect->y = 0x100;
793     rect->w = 0x100;
794     rect->h = 0x100;
795     region->rects = rect;
796     ret = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindowTmp, nativeWindowBuffer, fenceFd, *region);
797     ASSERT_EQ(ret, GSERROR_OK);
798 
799     ASSERT_EQ(OH_NativeWindow_NativeWindowDetachBuffer(nativeWindowTmp, nativeWindowBuffer),
800         OHOS::SURFACE_ERROR_BUFFER_STATE_INVALID);
801 
802     ASSERT_EQ(OH_NativeWindow_NativeWindowDetachBuffer(nativeWindow, nativeWindowBuffer),
803         OHOS::SURFACE_ERROR_BUFFER_NOT_INCACHE);
804 
805     OH_NativeWindow_DestroyNativeWindow(nativeWindowTmp);
806 }
807 
808 /*
809 * Function: OH_NativeWindow_NativeWindowAttachBuffer
810 * Type: Function
811 * Rank: Important(2)
812 * EnvConditions: N/A
813 * CaseDescription: 1. call OH_NativeWindow_NativeWindowAttachBuffer by normal input
814 *                  2. check ret
815  */
816 HWTEST_F(NativeWindowTest, NativeWindowAttachBuffer005, TestSize.Level0)
817 {
818     sptr<OHOS::IConsumerSurface> cSurfaceTmp = IConsumerSurface::Create();
819     sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
820     cSurfaceTmp->RegisterConsumerListener(listener);
821     sptr<OHOS::IBufferProducer> producerTmp = cSurfaceTmp->GetProducer();
822     sptr<OHOS::Surface> pSurfaceTmp = Surface::CreateSurfaceAsProducer(producerTmp);
823 
824     NativeWindow *nativeWindowTmp = OH_NativeWindow_CreateNativeWindow(&pSurfaceTmp);
825     ASSERT_NE(nativeWindowTmp, nullptr);
826     SetNativeWindowConfig(nativeWindowTmp);
827 
828     NativeWindowBuffer *nativeWindowBuffer = nullptr;
829     int fenceFd = -1;
830     int32_t ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp, &nativeWindowBuffer, &fenceFd);
831     ASSERT_EQ(ret, GSERROR_OK);
832 
833     ASSERT_EQ(cSurface->AttachBufferToQueue(nativeWindowBuffer->sfbuffer), GSERROR_OK);
834 
835     ASSERT_EQ(cSurface->DetachBufferFromQueue(nativeWindowBuffer->sfbuffer), GSERROR_OK);
836 
837     ASSERT_EQ(cSurface->AttachBufferToQueue(nativeWindowBuffer->sfbuffer), GSERROR_OK);
838 
839     sptr<SyncFence> fence = SyncFence::INVALID_FENCE;
840     ASSERT_EQ(cSurface->ReleaseBuffer(nativeWindowBuffer->sfbuffer, fence), GSERROR_OK);
841 
842     OH_NativeWindow_DestroyNativeWindow(nativeWindowTmp);
843 }
844 
845 /*
846 * Function: OH_NativeWindow_NativeWindowAttachBuffer
847 * Type: Function
848 * Rank: Important(2)
849 * EnvConditions: N/A
850 * CaseDescription: 1. call OH_NativeWindow_NativeWindowAttachBuffer by normal input
851 *                  2. check ret
852  */
853 HWTEST_F(NativeWindowTest, NativeWindowAttachBuffer006, TestSize.Level0)
854 {
855     sptr<OHOS::IConsumerSurface> cSurfaceTmp = IConsumerSurface::Create();
856     sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
857     cSurfaceTmp->RegisterConsumerListener(listener);
858     sptr<OHOS::IBufferProducer> producerTmp = cSurfaceTmp->GetProducer();
859     sptr<OHOS::Surface> pSurfaceTmp = Surface::CreateSurfaceAsProducer(producerTmp);
860 
861     NativeWindow *nativeWindowTmp = OH_NativeWindow_CreateNativeWindow(&pSurfaceTmp);
862     ASSERT_NE(nativeWindowTmp, nullptr);
863     SetNativeWindowConfig(nativeWindowTmp);
864 
865     NativeWindowBuffer *nativeWindowBuffer1 = nullptr;
866     int fenceFd = -1;
867     int32_t ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp, &nativeWindowBuffer1, &fenceFd);
868     ASSERT_EQ(ret, GSERROR_OK);
869 
870     int code = GET_BUFFERQUEUE_SIZE;
871     int32_t queueSize = 0;
872     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindowTmp, code, &queueSize), OHOS::GSERROR_OK);
873     ASSERT_EQ(queueSize, 3);
874     clock_t startTime, endTime;
875     startTime = clock();
876     for (int32_t i = 0; i < 1000; i++) {
877         ASSERT_EQ(OH_NativeWindow_NativeWindowDetachBuffer(nativeWindowTmp, nativeWindowBuffer1), OHOS::GSERROR_OK);
878         ASSERT_EQ(OH_NativeWindow_NativeWindowAttachBuffer(nativeWindowTmp, nativeWindowBuffer1), OHOS::GSERROR_OK);
879     }
880     endTime = clock();
881     cout << "DetachBuffer and AttachBuffer 1000 times cost time: " << (endTime - startTime) << "ms" << endl;
882     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindowTmp, code, &queueSize), OHOS::GSERROR_OK);
883     ASSERT_EQ(queueSize, 3);
884     OH_NativeWindow_DestroyNativeWindow(nativeWindowTmp);
885 }
886 
887 /*
888 * Function: OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer
889 * Type: Function
890 * Rank: Important(2)
891 * EnvConditions: N/A
892 * CaseDescription: 1. call OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer by abnormal input
893 *                  2. check ret
894  */
895 HWTEST_F(NativeWindowTest, CreateNativeWindowBuffer001, TestSize.Level0)
896 {
897     ASSERT_EQ(OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(nullptr), nullptr);
898 }
899 
900 /*
901 * Function: OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer
902 * Type: Function
903 * Rank: Important(2)
904 * EnvConditions: N/A
905 * CaseDescription: 1. call OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer
906 *                  2. check ret
907  */
908 HWTEST_F(NativeWindowTest, CreateNativeWindowBuffer002, TestSize.Level0)
909 {
910     nativeWindowBuffer = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&sBuffer);
911     ASSERT_NE(nativeWindowBuffer, nullptr);
912 }
913 
914 /*
915 * Function: OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer
916 * Type: Function
917 * Rank: Important(2)
918 * EnvConditions: N/A
919 * CaseDescription: 1. call OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer
920 *                  2. check ret
921 */
922 HWTEST_F(NativeWindowTest, CreateNativeWindowBuffer003, TestSize.Level0)
923 {
924     OH_NativeBuffer* nativeBuffer = sBuffer->SurfaceBufferToNativeBuffer();
925     ASSERT_NE(nativeBuffer, nullptr);
926     NativeWindowBuffer* nwBuffer = OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer(nativeBuffer);
927     ASSERT_NE(nwBuffer, nullptr);
928     OH_NativeWindow_DestroyNativeWindowBuffer(nwBuffer);
929 }
930 
931 /*
932 * Function: OH_NativeWindow_NativeWindowRequestBuffer
933 * Type: Function
934 * Rank: Important(2)
935 * EnvConditions: N/A
936 * CaseDescription: 1. call OH_NativeWindow_NativeWindowRequestBuffer by abnormal input
937 *                  2. check ret
938  */
939 HWTEST_F(NativeWindowTest, RequestBuffer001, TestSize.Level0)
940 {
941     ASSERT_EQ(OH_NativeWindow_NativeWindowRequestBuffer(nullptr, &nativeWindowBuffer, nullptr),
942               OHOS::GSERROR_INVALID_ARGUMENTS);
943 }
944 
945 /*
946 * Function: OH_NativeWindow_NativeWindowRequestBuffer
947 * Type: Function
948 * Rank: Important(2)
949 * EnvConditions: N/A
950 * CaseDescription: 1. call OH_NativeWindow_NativeWindowRequestBuffer by abnormal input
951 *                  2. check ret
952  */
953 HWTEST_F(NativeWindowTest, RequestBuffer002, TestSize.Level0)
954 {
955     ASSERT_EQ(OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, nullptr, nullptr),
956               OHOS::GSERROR_INVALID_ARGUMENTS);
957 }
958 
959 /*
960 * Function: OH_NativeWindow_GetBufferHandleFromNative
961 * Type: Function
962 * Rank: Important(2)
963 * EnvConditions: N/A
964 * CaseDescription: 1. call OH_NativeWindow_GetBufferHandleFromNative by abnormal input
965 *                  2. check ret
966  */
967 HWTEST_F(NativeWindowTest, GetBufferHandle001, TestSize.Level0)
968 {
969     ASSERT_EQ(OH_NativeWindow_GetBufferHandleFromNative(nullptr), nullptr);
970 }
971 
972 /*
973 * Function: OH_NativeWindow_GetBufferHandleFromNative
974 * Type: Function
975 * Rank: Important(2)
976 * EnvConditions: N/A
977 * CaseDescription: 1. call OH_NativeWindow_GetBufferHandleFromNative
978 *                  2. check ret
979  */
980 HWTEST_F(NativeWindowTest, GetBufferHandle002, TestSize.Level0)
981 {
982     struct NativeWindowBuffer *buffer = new NativeWindowBuffer();
983     buffer->sfbuffer = sBuffer;
984     ASSERT_NE(OH_NativeWindow_GetBufferHandleFromNative(nativeWindowBuffer), nullptr);
985     delete buffer;
986 }
987 
988 /*
989 * Function: OH_NativeWindow_NativeWindowFlushBuffer
990 * Type: Function
991 * Rank: Important(2)
992 * EnvConditions: N/A
993 * CaseDescription: 1. call OH_NativeWindow_NativeWindowFlushBuffer by abnormal input
994 *                  2. check ret
995  */
996 HWTEST_F(NativeWindowTest, FlushBuffer001, TestSize.Level0)
997 {
998     int fenceFd = -1;
999     struct Region *region = new Region();
1000     struct Region::Rect * rect = new Region::Rect();
1001     rect->x = 0x100;
1002     rect->y = 0x100;
1003     rect->w = 0x100;
1004     rect->h = 0x100;
1005     region->rects = rect;
1006 
1007     ASSERT_EQ(OH_NativeWindow_NativeWindowFlushBuffer(nullptr, nullptr, fenceFd, *region),
1008               OHOS::GSERROR_INVALID_ARGUMENTS);
1009     delete region;
1010 }
1011 
1012 /*
1013 * Function: OH_NativeWindow_NativeWindowFlushBuffer
1014 * Type: Function
1015 * Rank: Important(2)
1016 * EnvConditions: N/A
1017 * CaseDescription: 1. call OH_NativeWindow_NativeWindowFlushBuffer by abnormal input
1018 *                  2. check ret
1019  */
1020 HWTEST_F(NativeWindowTest, FlushBuffer002, TestSize.Level0)
1021 {
1022     int fenceFd = -1;
1023     struct Region *region = new Region();
1024     struct Region::Rect * rect = new Region::Rect();
1025     rect->x = 0x100;
1026     rect->y = 0x100;
1027     rect->w = 0x100;
1028     rect->h = 0x100;
1029     region->rects = rect;
1030 
1031     ASSERT_EQ(OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nullptr, fenceFd, *region),
1032               OHOS::GSERROR_INVALID_ARGUMENTS);
1033     delete region;
1034 }
1035 
1036 /*
1037 * Function: OH_NativeWindow_NativeWindowFlushBuffer
1038 * Type: Function
1039 * Rank: Important(2)
1040 * EnvConditions: N/A
1041 * CaseDescription: 1. call OH_NativeWindow_NativeWindowFlushBuffer
1042 *                  2. check ret
1043  */
1044 HWTEST_F(NativeWindowTest, FlushBuffer003, TestSize.Level0)
1045 {
1046     int fenceFd = -1;
1047     struct Region *region = new Region();
1048     region->rectNumber = 0;
1049     region->rects = nullptr;
1050     ASSERT_EQ(OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nativeWindowBuffer, fenceFd, *region),
1051               OHOS::GSERROR_OK);
1052 
1053     region->rectNumber = 1;
1054     struct Region::Rect * rect = new Region::Rect();
1055     rect->x = 0x100;
1056     rect->y = 0x100;
1057     rect->w = 0x100;
1058     rect->h = 0x100;
1059     region->rects = rect;
1060     ASSERT_EQ(OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nativeWindowBuffer, fenceFd, *region),
1061               OHOS::SURFACE_ERROR_BUFFER_STATE_INVALID);
1062     delete rect;
1063     delete region;
1064 }
1065 constexpr int32_t MATRIX_SIZE = 16;
CheckMatricIsSame(float matrixOld[MATRIX_SIZE],float matrixNew[MATRIX_SIZE])1066 bool CheckMatricIsSame(float matrixOld[MATRIX_SIZE], float matrixNew[MATRIX_SIZE])
1067 {
1068     for (int32_t i = 0; i < MATRIX_SIZE; i++) {
1069         if (fabs(matrixOld[i] - matrixNew[i]) > 1e-6) {
1070             return false;
1071         }
1072     }
1073     return true;
1074 }
1075 
1076 /*
1077 * Function: OH_NativeWindow_GetLastFlushedBuffer
1078 * Type: Function
1079 * Rank: Important(2)
1080 * EnvConditions: N/A
1081 * CaseDescription: 1. call OH_NativeWindow_NativeWindowRequestBuffer
1082 *                  2. call OH_NativeWindow_NativeWindowFlushBuffer
1083 *                  3. call OH_NativeWindow_GetLastFlushedBuffer
1084 *                  4. check ret
1085  */
1086 HWTEST_F(NativeWindowTest, GetLastFlushedBuffer001, TestSize.Level0)
1087 {
1088     int code = SET_TRANSFORM;
1089     int32_t transform = GraphicTransformType::GRAPHIC_ROTATE_90;
1090     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, transform), OHOS::GSERROR_OK);
1091 
1092     code = SET_FORMAT;
1093     int32_t format = GRAPHIC_PIXEL_FMT_RGBA_8888;
1094     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, format), OHOS::GSERROR_OK);
1095 
1096     NativeWindowBuffer *nativeWindowBuffer = nullptr;
1097     int fenceFd = -1;
1098     int32_t ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
1099     ASSERT_EQ(ret, GSERROR_OK);
1100 
1101     struct Region *region = new Region();
1102     struct Region::Rect *rect = new Region::Rect();
1103     rect->x = 0x100;
1104     rect->y = 0x100;
1105     rect->w = 0x100;
1106     rect->h = 0x100;
1107     region->rects = rect;
1108     BufferHandle *bufferHanlde = OH_NativeWindow_GetBufferHandleFromNative(nativeWindowBuffer);
1109     ret = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nativeWindowBuffer, fenceFd, *region);
1110     ASSERT_EQ(ret, GSERROR_OK);
1111     NativeWindowBuffer *lastFlushedBuffer;
1112     int lastFlushedFenceFd;
1113     float matrix[16];
1114     ASSERT_EQ(OH_NativeWindow_GetLastFlushedBuffer(nativeWindow, &lastFlushedBuffer, nullptr, matrix),
1115         SURFACE_ERROR_INVALID_PARAM);
1116     ASSERT_EQ(OH_NativeWindow_GetLastFlushedBuffer(nativeWindow, &lastFlushedBuffer, &lastFlushedFenceFd, matrix),
1117         OHOS::GSERROR_OK);
1118     BufferHandle *lastFlushedHanlde = OH_NativeWindow_GetBufferHandleFromNative(lastFlushedBuffer);
1119     ASSERT_EQ(bufferHanlde->virAddr, lastFlushedHanlde->virAddr);
1120 
1121     ASSERT_EQ(OH_NativeWindow_GetLastFlushedBufferV2(nativeWindow, &lastFlushedBuffer, &lastFlushedFenceFd, matrix),
1122         OHOS::GSERROR_OK);
1123     float matrix90[16] = {0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1};
1124     bool bRet = CheckMatricIsSame(matrix90, matrix);
1125     ASSERT_EQ(bRet, true);
1126 }
1127 
1128 /*
1129 * Function: OH_NativeWindow_GetLastFlushedBuffer
1130 * Type: Function
1131 * Rank: Important(2)
1132 * EnvConditions: N/A
1133 * CaseDescription: 1. call NativeWindowHandleOpt set BUFFER_USAGE_PROTECTED
1134 *                  2. call OH_NativeWindow_NativeWindowRequestBuffer
1135 *                  3. call OH_NativeWindow_NativeWindowFlushBuffer
1136 *                  4. call OH_NativeWindow_GetLastFlushedBuffer
1137 *                  5. check ret
1138  */
1139 HWTEST_F(NativeWindowTest, GetLastFlushedBuffer002, TestSize.Level0)
1140 {
1141     int code = SET_USAGE;
1142     uint64_t usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_MEM_DMA | BUFFER_USAGE_PROTECTED;
1143     ASSERT_EQ(NativeWindowHandleOpt(nativeWindow, code, usage), OHOS::GSERROR_OK);
1144 
1145     NativeWindowBuffer* nativeWindowBuffer = nullptr;
1146     int fenceFd = -1;
1147     int32_t ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
1148     ASSERT_EQ(ret, GSERROR_OK);
1149 
1150     struct Region *region = new Region();
1151     struct Region::Rect *rect = new Region::Rect();
1152     rect->x = 0x100;
1153     rect->y = 0x100;
1154     rect->w = 0x100;
1155     rect->h = 0x100;
1156     region->rects = rect;
1157     ret = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nativeWindowBuffer, fenceFd, *region);
1158     ASSERT_EQ(ret, GSERROR_OK);
1159     NativeWindowBuffer* lastFlushedBuffer;
1160     int lastFlushedFenceFd;
1161     float matrix[16];
1162     ASSERT_EQ(OH_NativeWindow_GetLastFlushedBuffer(nativeWindow, &lastFlushedBuffer, &lastFlushedFenceFd, matrix),
1163         OHOS::SURFACE_ERROR_NOT_SUPPORT);
1164 }
1165 
1166 /*
1167 * Function: OH_NativeWindow_SetColorSpace
1168 * Type: Function
1169 * Rank: Important(2)
1170 * EnvConditions: N/A
1171 * CaseDescription: 1. call OH_NativeWindow_SetColorSpace
1172 *                  2. check ret
1173  */
1174 HWTEST_F(NativeWindowTest, OH_NativeWindow_SetColorSpace001, TestSize.Level0)
1175 {
1176     OH_NativeBuffer_ColorSpace colorSpace = OH_COLORSPACE_BT709_LIMIT;
1177     auto ret = OH_NativeWindow_GetColorSpace(nullptr, &colorSpace);
1178     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1179         ASSERT_NE(ret, GSERROR_INTERNAL);
1180     }
1181 }
1182 
1183 /*
1184 * Function: OH_NativeWindow_SetColorSpace
1185 * Type: Function
1186 * Rank: Important(2)
1187 * EnvConditions: N/A
1188 * CaseDescription: 1. call OH_NativeWindow_SetColorSpace
1189 *                  2. check ret
1190  */
1191 HWTEST_F(NativeWindowTest, OH_NativeWindow_SetColorSpace002, TestSize.Level0)
1192 {
1193     OH_NativeBuffer_ColorSpace colorSpace = OH_COLORSPACE_BT709_LIMIT;
1194     auto ret = OH_NativeWindow_SetColorSpace(nativeWindow, colorSpace);
1195     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1196         ASSERT_EQ(ret, GSERROR_OK);
1197     }
1198 }
1199 
1200 /*
1201 * Function: OH_NativeWindow_GetColorSpace
1202 * Type: Function
1203 * Rank: Important(2)
1204 * EnvConditions: N/A
1205 * CaseDescription: 1. call OH_NativeWindow_GetColorSpace
1206 *                  2. check ret
1207  */
1208 HWTEST_F(NativeWindowTest, OH_NativeWindow_GetColorSpace001, TestSize.Level0)
1209 {
1210     OH_NativeBuffer_ColorSpace colorSpace = OH_COLORSPACE_NONE;
1211     auto ret = OH_NativeWindow_GetColorSpace(nativeWindow, &colorSpace);
1212     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1213         ASSERT_EQ(ret, GSERROR_OK);
1214     }
1215 }
1216 
1217 /*
1218 * Function: OH_NativeWindow_GetColorSpace
1219 * Type: Function
1220 * Rank: Important(2)
1221 * EnvConditions: N/A
1222 * CaseDescription: 1. call OH_NativeWindow_GetColorSpace
1223 *                  2. check ret
1224  */
1225 HWTEST_F(NativeWindowTest, OH_NativeWindow_GetColorSpace002, TestSize.Level0)
1226 {
1227     OH_NativeBuffer_ColorSpace colorSpace = OH_COLORSPACE_NONE;
1228     OH_NativeBuffer_ColorSpace colorSpaceSet = OH_COLORSPACE_BT709_FULL;
1229     auto ret = OH_NativeWindow_SetColorSpace(nativeWindow, colorSpaceSet);
1230     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1231         ASSERT_EQ(ret, GSERROR_OK);
1232     }
1233     ret = OH_NativeWindow_GetColorSpace(nativeWindow, &colorSpace);
1234     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1235         ASSERT_EQ(ret, GSERROR_OK);
1236         ASSERT_EQ(colorSpace, colorSpaceSet);
1237     }
1238 }
1239 
1240 /*
1241 * Function: OH_NativeWindow_SetMetadataValue
1242 * Type: Function
1243 * Rank: Important(2)
1244 * EnvConditions: N/A
1245 * CaseDescription: 1. call OH_NativeWindow_SetMetadataValue
1246 *                  2. check ret
1247  */
1248 HWTEST_F(NativeWindowTest, OH_NativeWindow_SetMetadataValue001, TestSize.Level0)
1249 {
1250     int len = 60;
1251     uint8_t buff[len];
1252     for (int i = 0; i < 60; ++i) {
1253         buff[i] = static_cast<uint8_t>(i);
1254     }
1255     int32_t buffSize;
1256     uint8_t *checkMetaData;
1257     auto ret = OH_NativeWindow_GetMetadataValue(nativeWindow, OH_HDR_STATIC_METADATA, &buffSize, &checkMetaData);
1258     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1259         ASSERT_NE(ret, GSERROR_OK);
1260     }
1261     ret = OH_NativeWindow_SetMetadataValue(nullptr, OH_HDR_STATIC_METADATA, (int32_t)len, buff);
1262     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1263         ASSERT_NE(ret, GSERROR_OK);
1264     }
1265 }
1266 
1267 /*
1268 * Function: OH_NativeWindow_SetMetadataValue
1269 * Type: Function
1270 * Rank: Important(2)
1271 * EnvConditions: N/A
1272 * CaseDescription: 1. call OH_NativeWindow_SetMetadataValue
1273 *                  2. check ret
1274  */
1275 HWTEST_F(NativeWindowTest, OH_NativeWindow_SetMetadataValue002, TestSize.Level0)
1276 {
1277     int len = 60;
1278     uint8_t buff[len];
1279     for (int i = 0; i < 60; ++i) {
1280         buff[i] = static_cast<uint8_t>(i);
1281     }
1282     int32_t max_size = -1;
1283     auto ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_STATIC_METADATA, (int32_t)max_size, buff);
1284     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1285         ASSERT_NE(ret, GSERROR_OK);
1286     }
1287 }
1288 
1289 /*
1290 * Function: OH_NativeWindow_SetMetadataValue
1291 * Type: Function
1292 * Rank: Important(2)
1293 * EnvConditions: N/A
1294 * CaseDescription: 1. call OH_NativeWindow_SetMetadataValue
1295 *                  2. check ret
1296  */
1297 HWTEST_F(NativeWindowTest, OH_NativeWindow_SetMetadataValue003, TestSize.Level0)
1298 {
1299     int len = 60;
1300     uint8_t buff[len];
1301     for (int i = 0; i < 60; ++i) {
1302         buff[i] = static_cast<uint8_t>(i);
1303     }
1304     auto ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_STATIC_METADATA, (int32_t)len, buff);
1305     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1306         ASSERT_EQ(ret, GSERROR_OK);
1307     }
1308     ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_DYNAMIC_METADATA, (int32_t)len, buff);
1309     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1310         ASSERT_EQ(ret, GSERROR_OK);
1311     }
1312     OH_NativeBuffer_MetadataType type = OH_VIDEO_HDR_HLG;
1313     ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_METADATA_TYPE, sizeof(type),
1314                                            reinterpret_cast<uint8_t *>(&type));
1315     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1316         ASSERT_EQ(ret, GSERROR_OK);
1317     }
1318 }
1319 
1320 /*
1321 * Function: OH_NativeWindow_SetMetadataValue
1322 * Type: Function
1323 * Rank: Important(2)
1324 * EnvConditions: N/A
1325 * CaseDescription: 1. call OH_NativeWindow_SetMetadataValue
1326 *                  2. check ret
1327  */
1328 HWTEST_F(NativeWindowTest, OH_NativeWindow_SetMetadataValue004, TestSize.Level0)
1329 {
1330     int len = 60;
1331     uint8_t buff[len];
1332     for (int i = 0; i < 60; ++i) {
1333         buff[i] = static_cast<uint8_t>(i);
1334     }
1335     auto ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_STATIC_METADATA, (int32_t)len, buff);
1336     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1337         ASSERT_EQ(ret, GSERROR_OK);
1338     }
1339     ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_STATIC_METADATA, (int32_t)len, buff);
1340     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1341         ASSERT_EQ(ret, GSERROR_OK);
1342     }
1343     ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_DYNAMIC_METADATA, (int32_t)len, buff);
1344     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1345         ASSERT_EQ(ret, GSERROR_OK);
1346     }
1347     ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_DYNAMIC_METADATA, (int32_t)len, buff);
1348     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1349         ASSERT_EQ(ret, GSERROR_OK);
1350     }
1351     OH_NativeBuffer_MetadataType type = OH_VIDEO_HDR_HLG;
1352     ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_METADATA_TYPE, sizeof(type),
1353                                            reinterpret_cast<uint8_t *>(&type));
1354     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1355         ASSERT_EQ(ret, GSERROR_OK);
1356     }
1357     ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_METADATA_TYPE, sizeof(type),
1358                                            reinterpret_cast<uint8_t *>(&type));
1359     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1360         ASSERT_EQ(ret, GSERROR_OK);
1361     }
1362 }
1363 
1364 /*
1365 * Function: OH_NativeWindow_SetMetadataValue
1366 * Type: Function
1367 * Rank: Important(2)
1368 * EnvConditions: N/A
1369 * CaseDescription: 1. call OH_NativeWindow_SetMetadataValue
1370 *                  2. check ret
1371  */
1372 HWTEST_F(NativeWindowTest, OH_NativeWindow_SetMetadataValue005, TestSize.Level0)
1373 {
1374     int len = 60;
1375     uint8_t buff[len];
1376     for (int i = 0; i < 60; ++i) {
1377         buff[i] = static_cast<uint8_t>(i);
1378     }
1379     NativeWindowBuffer *nativeWindowbuffer1 = nullptr;
1380     int fenceFd = -1;
1381     auto ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowbuffer1, &fenceFd);
1382     if (ret != GSERROR_HDI_ERROR) {
1383         ASSERT_EQ(ret, GSERROR_OK);
1384     }
1385     ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_STATIC_METADATA, (int32_t)len, buff);
1386     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1387         ASSERT_EQ(ret, GSERROR_OK);
1388     }
1389     ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_DYNAMIC_METADATA, (int32_t)len, buff);
1390     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1391         ASSERT_EQ(ret, GSERROR_OK);
1392     }
1393     OH_NativeBuffer_MetadataType type = OH_VIDEO_HDR_HLG;
1394     ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_METADATA_TYPE, sizeof(type),
1395                                            reinterpret_cast<uint8_t *>(&type));
1396     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1397         ASSERT_EQ(ret, GSERROR_OK);
1398     }
1399 }
1400 
1401 /*
1402 * Function: OH_NativeWindow_GetMetadataValue
1403 * Type: Function
1404 * Rank: Important(2)
1405 * EnvConditions: N/A
1406 * CaseDescription: 1. call OH_NativeWindow_SetMetadataValue
1407 *                  2. check ret
1408  */
1409 HWTEST_F(NativeWindowTest, OH_NativeWindow_GetMetadataValue001, TestSize.Level0)
1410 {
1411     int32_t buffSize;
1412     uint8_t *checkMetaData;
1413     auto ret = OH_NativeWindow_GetMetadataValue(nullptr, OH_HDR_STATIC_METADATA, &buffSize, &checkMetaData);
1414     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1415         ASSERT_NE(ret, GSERROR_OK);
1416     }
1417 }
1418 
1419 /*
1420 * Function: OH_NativeWindow_GetMetadataValue
1421 * Type: Function
1422 * Rank: Important(2)
1423 * EnvConditions: N/A
1424 * CaseDescription: 1. call OH_NativeWindow_GetMetadataValue
1425 *                  2. check ret
1426  */
1427 HWTEST_F(NativeWindowTest, OH_NativeWindow_GetMetadataValue002, TestSize.Level0)
1428 {
1429     uint8_t *checkMetaData;
1430     auto ret = OH_NativeWindow_GetMetadataValue(nativeWindow, OH_HDR_STATIC_METADATA, nullptr, &checkMetaData);
1431     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1432         ASSERT_NE(ret, GSERROR_OK);
1433     }
1434 }
1435 
1436 /*
1437 * Function: OH_NativeWindow_SetMetadataValue
1438 * Type: Function
1439 * Rank: Important(2)
1440 * EnvConditions: N/A
1441 * CaseDescription: 1. call OH_NativeWindow_SetMetadataValue
1442 *                  2. check ret
1443  */
1444 HWTEST_F(NativeWindowTest, OH_NativeWindow_GetMetadataValue003, TestSize.Level0)
1445 {
1446     int len = 60;
1447     uint8_t buff[len];
1448     for (int i = 0; i < 60; ++i) {
1449         buff[i] = static_cast<uint8_t>(60 - i);
1450     }
1451     int32_t buffSize;
1452     uint8_t *checkMetaData;
1453     auto ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_STATIC_METADATA, (int32_t)len, buff);
1454     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set metadataValue
1455         ASSERT_EQ(ret, GSERROR_OK);
1456     }
1457     ret = OH_NativeWindow_GetMetadataValue(nativeWindow, OH_HDR_STATIC_METADATA, &buffSize, &checkMetaData);
1458     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set metadataValue
1459         ASSERT_EQ(memcmp(checkMetaData, buff, 60), 0);
1460         delete[] checkMetaData;
1461         checkMetaData = nullptr;
1462         ASSERT_EQ(ret, GSERROR_OK);
1463     }
1464     for (int i = 0; i < 60; i++) {
1465         buff[i] = static_cast<uint8_t>(70 - i);
1466     }
1467     ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_DYNAMIC_METADATA, (int32_t)len, buff);
1468     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set metadataValue
1469         ASSERT_EQ(ret, GSERROR_OK);
1470     }
1471     ret = OH_NativeWindow_GetMetadataValue(nativeWindow, OH_HDR_DYNAMIC_METADATA, &buffSize, &checkMetaData);
1472     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set metadataValue
1473         ASSERT_EQ(memcmp(checkMetaData, buff, 60), 0);
1474         delete[] checkMetaData;
1475         checkMetaData = nullptr;
1476         ASSERT_EQ(ret, GSERROR_OK);
1477     }
1478     OH_NativeBuffer_MetadataType type = OH_VIDEO_HDR_HDR10;
1479     int32_t typeSize = sizeof(type);
1480     uint8_t pa = static_cast<uint8_t>(type);
1481     ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_METADATA_TYPE, sizeof(type), &pa);
1482     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1483         ASSERT_EQ(ret, GSERROR_OK);
1484     }
1485     ret = OH_NativeWindow_GetMetadataValue(nativeWindow, OH_HDR_METADATA_TYPE, &typeSize, &checkMetaData);
1486     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set metadataValue
1487         ASSERT_EQ(static_cast<uint8_t>(type), checkMetaData[0]);
1488         delete[] checkMetaData;
1489         checkMetaData = nullptr;
1490         ASSERT_EQ(ret, GSERROR_OK);
1491     }
1492 }
1493 /*
1494 * Function: OH_NativeWindow_NativeWindowAbortBuffer
1495 * Type: Function
1496 * Rank: Important(2)
1497 * EnvConditions: N/A
1498 * CaseDescription: 1. call OH_NativeWindow_NativeWindowAbortBuffer by abnormal input
1499 *                  2. check ret
1500  */
1501 HWTEST_F(NativeWindowTest, CancelBuffer001, TestSize.Level0)
1502 {
1503     ASSERT_EQ(OH_NativeWindow_NativeWindowAbortBuffer(nullptr, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
1504 }
1505 
1506 /*
1507 * Function: OH_NativeWindow_NativeWindowAbortBuffer
1508 * Type: Function
1509 * Rank: Important(2)
1510 * EnvConditions: N/A
1511 * CaseDescription: 1. call OH_NativeWindow_NativeWindowAbortBuffer by abnormal input
1512 *                  2. check ret
1513  */
1514 HWTEST_F(NativeWindowTest, CancelBuffer002, TestSize.Level0)
1515 {
1516     ASSERT_EQ(OH_NativeWindow_NativeWindowAbortBuffer(nativeWindow, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
1517 }
1518 
1519 /*
1520 * Function: OH_NativeWindow_NativeWindowAbortBuffer
1521 * Type: Function
1522 * Rank: Important(2)
1523 * EnvConditions: N/A
1524 * CaseDescription: 1. call OH_NativeWindow_NativeWindowAbortBuffer
1525 *                  2. check ret
1526  */
1527 HWTEST_F(NativeWindowTest, CancelBuffer003, TestSize.Level0)
1528 {
1529     ASSERT_EQ(OH_NativeWindow_NativeWindowAbortBuffer(nativeWindow, nativeWindowBuffer), OHOS::GSERROR_OK);
1530 }
1531 
1532 /*
1533 * Function: OH_NativeWindow_NativeObjectReference
1534 * Type: Function
1535 * Rank: Important(2)
1536 * EnvConditions: N/A
1537 * CaseDescription: 1. call OH_NativeWindow_NativeObjectReference
1538 *                  2. check ret
1539  */
1540 HWTEST_F(NativeWindowTest, Reference001, TestSize.Level0)
1541 {
1542     struct NativeWindowBuffer *buffer = new NativeWindowBuffer();
1543     buffer->sfbuffer = sBuffer;
1544     ASSERT_EQ(OH_NativeWindow_NativeObjectReference(reinterpret_cast<void *>(buffer)), OHOS::GSERROR_OK);
1545     delete buffer;
1546 }
1547 
1548 /*
1549 * Function: OH_NativeWindow_NativeObjectUnreference
1550 * Type: Function
1551 * Rank: Important(2)
1552 * EnvConditions: N/A
1553 * CaseDescription: 1. call OH_NativeWindow_NativeObjectUnreference
1554 *                  2. check ret
1555  */
1556 HWTEST_F(NativeWindowTest, Unreference001, TestSize.Level0)
1557 {
1558     struct NativeWindowBuffer *buffer = new NativeWindowBuffer();
1559     buffer->sfbuffer = sBuffer;
1560     ASSERT_EQ(OH_NativeWindow_NativeObjectUnreference(reinterpret_cast<void *>(buffer)), OHOS::GSERROR_OK);
1561     delete buffer;
1562 }
1563 
1564 /*
1565 * Function: OH_NativeWindow_DestroyNativeWindow
1566 * Type: Function
1567 * Rank: Important(2)
1568 * EnvConditions: N/A
1569 * CaseDescription: 1. call OH_NativeWindow_DestroyNativeWindow by abnormal input
1570 *                  2. check ret
1571  */
1572 HWTEST_F(NativeWindowTest, DestroyNativeWindow001, TestSize.Level0)
1573 {
1574     OHNativeWindow* window = nullptr;
1575     ASSERT_EQ(window, nullptr);
1576     OH_NativeWindow_DestroyNativeWindow(window);
1577 }
1578 
1579 /*
1580 * Function: OH_NativeWindow_DestroyNativeWindowBuffer
1581 * Type: Function
1582 * Rank: Important(2)
1583 * EnvConditions: N/A
1584 * CaseDescription: 1. call OH_NativeWindow_DestroyNativeWindowBuffer by abnormal input
1585 *                  2. check ret
1586  */
1587 HWTEST_F(NativeWindowTest, OH_NativeWindow_DestroyNativeWindowBuffer001, TestSize.Level0)
1588 {
1589     OHNativeWindowBuffer* buffer = nullptr;
1590     ASSERT_EQ(buffer, nullptr);
1591     OH_NativeWindow_DestroyNativeWindowBuffer(buffer);
1592 }
1593 
1594 /*
1595 * Function: OH_NativeWindow_NativeWindowSetScalingMode
1596 * Type: Function
1597 * Rank: Important(2)
1598 * EnvConditions: N/A
1599 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetScalingMode with abnormal parameters and check ret
1600  */
1601 HWTEST_F(NativeWindowTest, SetScalingMode001, TestSize.Level0)
1602 {
1603     OHScalingMode scalingMode = OHScalingMode::OH_SCALING_MODE_SCALE_TO_WINDOW;
1604     ASSERT_EQ(OH_NativeWindow_NativeWindowSetScalingMode(nullptr, -1, scalingMode), OHOS::GSERROR_INVALID_ARGUMENTS);
1605 }
1606 
1607 /*
1608 * Function: OH_NativeWindow_NativeWindowSetScalingMode
1609 * Type: Function
1610 * Rank: Important(2)
1611 * EnvConditions: N/A
1612 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetScalingMode with abnormal parameters and check ret
1613  */
1614 HWTEST_F(NativeWindowTest, SetScalingMode002, TestSize.Level0)
1615 {
1616     OHScalingMode scalingMode = OHScalingMode::OH_SCALING_MODE_SCALE_TO_WINDOW;
1617     ASSERT_EQ(OH_NativeWindow_NativeWindowSetScalingMode(nativeWindow, -1, scalingMode), OHOS::GSERROR_NO_ENTRY);
1618 }
1619 
1620 /*
1621 * Function: OH_NativeWindow_NativeWindowSetScalingMode
1622 * Type: Function
1623 * Rank: Important(2)
1624 * EnvConditions: N/A
1625 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetScalingMode with abnormal parameters and check ret
1626  */
1627 HWTEST_F(NativeWindowTest, SetScalingMode003, TestSize.Level0)
1628 {
1629     ASSERT_EQ(OH_NativeWindow_NativeWindowSetScalingMode(nativeWindow, firstSeqnum,
1630                                          static_cast<OHScalingMode>(OHScalingMode::OH_SCALING_MODE_NO_SCALE_CROP + 1)),
1631                                          OHOS::GSERROR_INVALID_ARGUMENTS);
1632 }
1633 
1634 /*
1635 * Function: OH_NativeWindow_NativeWindowSetScalingMode
1636 * Type: Function
1637 * Rank: Important(1)
1638 * EnvConditions: N/A
1639 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetScalingMode with abnormal parameters and check ret
1640 *                  2. call OH_NativeWindow_NativeWindowSetScalingMode with normal parameters and check ret
1641  */
1642 HWTEST_F(NativeWindowTest, SetScalingMode004, TestSize.Level0)
1643 {
1644     OHScalingMode scalingMode = OHScalingMode::OH_SCALING_MODE_SCALE_TO_WINDOW;
1645     ASSERT_EQ(OH_NativeWindow_NativeWindowSetScalingMode(nativeWindow, firstSeqnum, scalingMode), OHOS::GSERROR_OK);
1646 }
1647 
1648 /*
1649 * Function: OH_NativeWindow_NativeWindowSetScalingModeV2
1650 * Type: Function
1651 * Rank: Important(1)
1652 * EnvConditions: N/A
1653 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetScalingModeV2 with abnormal parameters and check ret
1654 *                  2. call OH_NativeWindow_NativeWindowSetScalingModeV2 with normal parameters and check ret
1655  */
1656 HWTEST_F(NativeWindowTest, SetScalingMode005, TestSize.Level0)
1657 {
1658     OHScalingModeV2 scalingMode = OHScalingModeV2::OH_SCALING_MODE_SCALE_TO_WINDOW_V2;
1659     ASSERT_EQ(OH_NativeWindow_NativeWindowSetScalingModeV2(nativeWindow, scalingMode), OHOS::GSERROR_OK);
1660 }
1661 
1662 
1663 /*
1664 * Function: OH_NativeWindow_NativeWindowSetMetaData
1665 * Type: Function
1666 * Rank: Important(2)
1667 * EnvConditions: N/A
1668 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaData with abnormal parameters and check ret
1669  */
1670 HWTEST_F(NativeWindowTest, SetMetaData001, TestSize.Level0)
1671 {
1672     ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaData(nullptr, -1, 0, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
1673 }
1674 
1675 /*
1676 * Function: OH_NativeWindow_NativeWindowSetMetaData
1677 * Type: Function
1678 * Rank: Important(2)
1679 * EnvConditions: N/A
1680 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaData with abnormal parameters and check ret
1681  */
1682 HWTEST_F(NativeWindowTest, SetMetaData002, TestSize.Level0)
1683 {
1684     ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaData(nativeWindow, -1, 0, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
1685 }
1686 
1687 /*
1688 * Function: OH_NativeWindow_NativeWindowSetMetaData
1689 * Type: Function
1690 * Rank: Important(2)
1691 * EnvConditions: N/A
1692 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaData with abnormal parameters and check ret
1693 *                  2. call OH_NativeWindow_NativeWindowSetMetaData with normal parameters and check ret
1694  */
1695 HWTEST_F(NativeWindowTest, SetMetaData003, TestSize.Level0)
1696 {
1697     ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaData(nativeWindow, firstSeqnum, 0, nullptr),
1698               OHOS::GSERROR_INVALID_ARGUMENTS);
1699 }
1700 
1701 /*
1702 * Function: OH_NativeWindow_NativeWindowSetMetaData
1703 * Type: Function
1704 * Rank: Important(2)
1705 * EnvConditions: N/A
1706 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaData with abnormal parameters and check ret
1707  */
1708 HWTEST_F(NativeWindowTest, SetMetaData004, TestSize.Level0)
1709 {
1710     int32_t size = 1;
1711     ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaData(nativeWindow, firstSeqnum, size, nullptr),
1712               OHOS::GSERROR_INVALID_ARGUMENTS);
1713 }
1714 
1715 /*
1716 * Function: OH_NativeWindow_NativeWindowSetMetaData
1717 * Type: Function
1718 * Rank: Important(2)
1719 * EnvConditions: N/A
1720 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaData with abnormal parameters and check ret
1721  */
1722 HWTEST_F(NativeWindowTest, SetMetaData005, TestSize.Level0)
1723 {
1724     int32_t size = 1;
1725     const OHHDRMetaData metaData[] = {{OH_METAKEY_RED_PRIMARY_X, 0}};
1726     ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaData(nativeWindow, -1, size, metaData), OHOS::GSERROR_NO_ENTRY);
1727 }
1728 
1729 /*
1730 * Function: OH_NativeWindow_NativeWindowSetMetaData
1731 * Type: Function
1732 * Rank: Important(1)
1733 * EnvConditions: N/A
1734 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaData with normal parameters and check ret
1735  */
1736 HWTEST_F(NativeWindowTest, SetMetaData006, TestSize.Level0)
1737 {
1738     int32_t size = 1;
1739     const OHHDRMetaData metaData[] = {{OH_METAKEY_RED_PRIMARY_X, 0}};
1740     ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaData(nativeWindow, firstSeqnum, size, metaData), OHOS::GSERROR_OK);
1741 }
1742 
1743 /*
1744 * Function: OH_NativeWindow_NativeWindowSetMetaDataSet
1745 * Type: Function
1746 * Rank: Important(2)
1747 * EnvConditions: N/A
1748 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaDataSet with abnormal parameters and check ret
1749  */
1750 HWTEST_F(NativeWindowTest, SetMetaDataSet001, TestSize.Level0)
1751 {
1752     OHHDRMetadataKey key = OHHDRMetadataKey::OH_METAKEY_HDR10_PLUS;
1753     ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaDataSet(nullptr, -1, key, 0, nullptr),
1754               OHOS::GSERROR_INVALID_ARGUMENTS);
1755 }
1756 
1757 /*
1758 * Function: OH_NativeWindow_NativeWindowSetMetaDataSet
1759 * Type: Function
1760 * Rank: Important(2)
1761 * EnvConditions: N/A
1762 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaDataSet with abnormal parameters and check ret
1763  */
1764 HWTEST_F(NativeWindowTest, SetMetaDataSet002, TestSize.Level0)
1765 {
1766     OHHDRMetadataKey key = OHHDRMetadataKey::OH_METAKEY_HDR10_PLUS;
1767     ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaDataSet(nativeWindow, -1, key, 0, nullptr),
1768               OHOS::GSERROR_INVALID_ARGUMENTS);
1769 }
1770 
1771 /*
1772 * Function: OH_NativeWindow_NativeWindowSetMetaDataSet
1773 * Type: Function
1774 * Rank: Important(2)
1775 * EnvConditions: N/A
1776 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaDataSet with abnormal parameters and check ret
1777  */
1778 HWTEST_F(NativeWindowTest, SetMetaDataSet003, TestSize.Level0)
1779 {
1780     OHHDRMetadataKey key = OHHDRMetadataKey::OH_METAKEY_HDR10_PLUS;
1781     ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaDataSet(nativeWindow, firstSeqnum, key, 0, nullptr),
1782               OHOS::GSERROR_INVALID_ARGUMENTS);
1783 }
1784 
1785 /*
1786 * Function: OH_NativeWindow_NativeWindowSetMetaDataSet
1787 * Type: Function
1788 * Rank: Important(2)
1789 * EnvConditions: N/A
1790 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaDataSet with abnormal parameters and check ret
1791  */
1792 HWTEST_F(NativeWindowTest, SetMetaDataSet004, TestSize.Level0)
1793 {
1794     int32_t size = 1;
1795     OHHDRMetadataKey key = OHHDRMetadataKey::OH_METAKEY_HDR10_PLUS;
1796     ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaDataSet(nativeWindow, firstSeqnum, key, size, nullptr),
1797               OHOS::GSERROR_INVALID_ARGUMENTS);
1798 }
1799 
1800 /*
1801 * Function: OH_NativeWindow_NativeWindowSetMetaDataSet
1802 * Type: Function
1803 * Rank: Important(2)
1804 * EnvConditions: N/A
1805 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaDataSet with abnormal parameters and check ret
1806  */
1807 HWTEST_F(NativeWindowTest, SetMetaDataSet005, TestSize.Level0)
1808 {
1809     int32_t size = 1;
1810     OHHDRMetadataKey key = OHHDRMetadataKey::OH_METAKEY_HDR10_PLUS;
1811     const uint8_t metaData[] = {0};
1812     ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaDataSet(nativeWindow, -1, key, size, metaData),
1813               OHOS::GSERROR_NO_ENTRY);
1814 }
1815 
1816 /*
1817 * Function: OH_NativeWindow_NativeWindowSetMetaDataSet
1818 * Type: Function
1819 * Rank: Important(1)
1820 * EnvConditions: N/A
1821 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaDataSet with normal parameters and check ret
1822  */
1823 HWTEST_F(NativeWindowTest, SetMetaDataSet006, TestSize.Level0)
1824 {
1825     int32_t size = 1;
1826     OHHDRMetadataKey key = OHHDRMetadataKey::OH_METAKEY_HDR10_PLUS;
1827     const uint8_t metaData[] = {0};
1828     ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaDataSet(nativeWindow, firstSeqnum, key, size, metaData),
1829               OHOS::GSERROR_OK);
1830 }
1831 
1832 /*
1833 * Function: OH_NativeWindow_NativeWindowSetTunnelHandle
1834 * Type: Function
1835 * Rank: Important(2)
1836 * EnvConditions: N/A
1837 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetTunnelHandle with abnormal parameters and check ret
1838  */
1839 HWTEST_F(NativeWindowTest, SetTunnelHandle001, TestSize.Level0)
1840 {
1841     ASSERT_EQ(OH_NativeWindow_NativeWindowSetTunnelHandle(nullptr, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
1842 }
1843 
1844 /*
1845 * Function: OH_NativeWindow_NativeWindowSetTunnelHandle
1846 * Type: Function
1847 * Rank: Important(2)
1848 * EnvConditions: N/A
1849 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetTunnelHandle with abnormal parameters and check ret
1850  */
1851 HWTEST_F(NativeWindowTest, SetTunnelHandle002, TestSize.Level0)
1852 {
1853     ASSERT_EQ(OH_NativeWindow_NativeWindowSetTunnelHandle(nativeWindow, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
1854 }
1855 
1856 /*
1857 * Function: OH_NativeWindow_NativeWindowSetTunnelHandle
1858 * Type: Function
1859 * Rank: Important(2)
1860 * EnvConditions: N/A
1861 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetTunnelHandle with normal parameters and check ret
1862  */
1863 HWTEST_F(NativeWindowTest, SetTunnelHandle003, TestSize.Level0)
1864 {
1865     uint32_t reserveInts = 1;
1866     OHExtDataHandle *handle = AllocOHExtDataHandle(reserveInts);
1867     ASSERT_EQ(OH_NativeWindow_NativeWindowSetTunnelHandle(nativeWindow, handle), OHOS::GSERROR_OK);
1868     FreeOHExtDataHandle(handle);
1869 }
1870 
1871 /*
1872 * Function: OH_NativeWindow_NativeWindowSetTunnelHandle
1873 * Type: Function
1874 * Rank: Important(1)
1875 * EnvConditions: N/A
1876 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetTunnelHandle with normal parameters and check ret
1877 * @tc.require: issueI5GMZN issueI5IWHW
1878  */
1879 HWTEST_F(NativeWindowTest, SetTunnelHandle004, TestSize.Level0)
1880 {
1881     uint32_t reserveInts = 2;
1882     OHExtDataHandle *handle = AllocOHExtDataHandle(reserveInts);
1883     nativeWindow = OH_NativeWindow_CreateNativeWindow(&pSurface);
1884     ASSERT_NE(nativeWindow, nullptr);
1885     ASSERT_EQ(OH_NativeWindow_NativeWindowSetTunnelHandle(nativeWindow, handle), OHOS::GSERROR_OK);
1886     ASSERT_EQ(OH_NativeWindow_NativeWindowSetTunnelHandle(nativeWindow, handle), OHOS::GSERROR_NO_ENTRY);
1887     FreeOHExtDataHandle(handle);
1888 }
1889 
1890 /*
1891 * Function: NativeWindowGetTransformHint
1892 * Type: Function
1893 * Rank: Important(1)
1894 * EnvConditions: N/A
1895 * CaseDescription: 1. call NativeWindowGetTransformHint with normal parameters and check ret
1896 * @tc.require: issueI5GMZN issueI5IWHW
1897  */
1898 HWTEST_F(NativeWindowTest, NativeWindowGetTransformHint001, TestSize.Level0)
1899 {
1900     OH_NativeBuffer_TransformType transform = OH_NativeBuffer_TransformType::NATIVEBUFFER_ROTATE_180;
1901     ASSERT_EQ(NativeWindowGetTransformHint(nullptr, &transform), OHOS::GSERROR_INVALID_ARGUMENTS);
1902     ASSERT_EQ(NativeWindowSetTransformHint(nullptr, transform), OHOS::GSERROR_INVALID_ARGUMENTS);
1903     ASSERT_EQ(NativeWindowSetTransformHint(nativeWindow, transform), OHOS::GSERROR_OK);
1904     transform = OH_NativeBuffer_TransformType::NATIVEBUFFER_ROTATE_NONE;
1905     ASSERT_EQ(NativeWindowGetTransformHint(nativeWindow, &transform), OHOS::GSERROR_OK);
1906     ASSERT_EQ(transform, OH_NativeBuffer_TransformType::NATIVEBUFFER_ROTATE_180);
1907 }
1908 
1909 /*
1910 * Function: NativeWindowGetDefaultWidthAndHeight
1911 * Type: Function
1912 * Rank: Important(1)
1913 * EnvConditions: N/A
1914 * CaseDescription: 1. call NativeWindowGetDefaultWidthAndHeight with normal parameters and check ret
1915 * @tc.require: issueI5GMZN issueI5IWHW
1916  */
1917 HWTEST_F(NativeWindowTest, NativeWindowGetDefaultWidthAndHeight001, TestSize.Level0)
1918 {
1919     ASSERT_EQ(NativeWindowGetDefaultWidthAndHeight(nullptr, nullptr, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
1920     cSurface->SetDefaultWidthAndHeight(300, 400);
1921     int32_t width;
1922     int32_t height;
1923     ASSERT_EQ(NativeWindowGetDefaultWidthAndHeight(nativeWindow, &width, &height), OHOS::GSERROR_OK);
1924     ASSERT_EQ(width, 300);
1925     ASSERT_EQ(height, 400);
1926 }
1927 
1928 /*
1929 * Function: NativeWindowSetBufferHold
1930 * Type: Function
1931 * Rank: Important(1)
1932 * EnvConditions: N/A
1933 * CaseDescription: 1. call NativeWindowSetBufferHold and no ret
1934 * @tc.require: issueI5GMZN issueI5IWHW
1935  */
1936 HWTEST_F(NativeWindowTest, NativeWindowSetBufferHold001, TestSize.Level0)
1937 {
1938     NativeWindowSetBufferHold(nullptr);
1939     NativeWindowSetBufferHold(nativeWindow);
1940     int fenceFd = -1;
1941     struct Region *region = new Region();
1942     region->rectNumber = 0;
1943     region->rects = nullptr;
1944     ASSERT_EQ(OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nativeWindowBuffer, fenceFd, *region),
1945               OHOS::GSERROR_BUFFER_STATE_INVALID);
1946     region->rectNumber = 1;
1947     struct Region::Rect * rect = new Region::Rect();
1948     rect->x = 0x100;
1949     rect->y = 0x100;
1950     rect->w = 0x100;
1951     rect->h = 0x100;
1952     region->rects = rect;
1953     ASSERT_EQ(OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nativeWindowBuffer, fenceFd, *region),
1954               OHOS::GSERROR_BUFFER_STATE_INVALID);
1955     cSurface->SetBufferHold(false);
1956     delete rect;
1957     delete region;
1958 }
1959 
1960 /*
1961 * Function: NativeWindow_ReadWriteWindow
1962 * Type: Function
1963 * Rank: Important(1)
1964 * EnvConditions: N/A
1965 * CaseDescription: 1. call OH_NativeWindow_WriteToParcel and OH_NativeWindow_ReadFromParcel
1966 * @tc.require: issueI5GMZN issueI5IWHW
1967  */
1968 HWTEST_F(NativeWindowTest, NativeWindowReadWriteWindow001, TestSize.Level0)
1969 {
1970     using namespace OHOS;
1971     sptr<OHOS::IConsumerSurface> cSurface = IConsumerSurface::Create();
1972     sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
1973     cSurface->RegisterConsumerListener(listener);
1974     sptr<OHOS::IBufferProducer> producer = cSurface->GetProducer();
1975     sptr<OHOS::Surface> pSurface = Surface::CreateSurfaceAsProducer(producer);
1976     OHNativeWindow* nativeWindow = CreateNativeWindowFromSurface(&pSurface);
1977     auto uniqueId = nativeWindow->surface->GetUniqueId();
1978     ASSERT_NE(nativeWindow, nullptr);
1979     OHIPCParcel *parcel1 = OH_IPCParcel_Create();
1980     OHIPCParcel *parcel2 = OH_IPCParcel_Create();
1981     ASSERT_NE(parcel1, nullptr);
1982     ASSERT_NE(parcel2, nullptr);
1983     ASSERT_EQ(OH_NativeWindow_WriteToParcel(nullptr, parcel1), SURFACE_ERROR_INVALID_PARAM);
1984     ASSERT_EQ(OH_NativeWindow_WriteToParcel(nativeWindow, nullptr), SURFACE_ERROR_INVALID_PARAM);
1985     auto innerParcel = parcel1->msgParcel;
1986     parcel1->msgParcel = nullptr;
1987     ASSERT_EQ(OH_NativeWindow_WriteToParcel(nativeWindow, parcel1), SURFACE_ERROR_INVALID_PARAM);
1988     parcel1->msgParcel = innerParcel;
1989     ASSERT_EQ(OH_NativeWindow_WriteToParcel(nativeWindow, parcel1), GSERROR_OK);
1990     ASSERT_EQ(OH_NativeWindow_WriteToParcel(nativeWindow, parcel2), GSERROR_OK);
1991     // test read
1992     OHNativeWindow *readWindow = nullptr;
1993     ASSERT_EQ(OH_NativeWindow_ReadFromParcel(nullptr, &readWindow), SURFACE_ERROR_INVALID_PARAM);
1994     ASSERT_EQ(OH_NativeWindow_ReadFromParcel(parcel1, &readWindow), GSERROR_OK);
1995     ASSERT_NE(readWindow, nullptr);
1996     // test read twice
1997     OHNativeWindow *tempWindow = nullptr;
1998     ASSERT_EQ(OH_NativeWindow_ReadFromParcel(parcel1, &tempWindow), SURFACE_ERROR_INVALID_PARAM);
1999     cout << "test read write window, write window is " << nativeWindow << ", read windows is " << readWindow << endl;
2000     auto readId = readWindow->surface->GetUniqueId();
2001     ASSERT_EQ(uniqueId, readId);
2002     OHNativeWindow *readWindow1 = nullptr;
2003     SurfaceUtils::GetInstance()->RemoveNativeWindow(uniqueId);
2004     ASSERT_EQ(OH_NativeWindow_ReadFromParcel(parcel2, &readWindow1), GSERROR_OK);
2005     ASSERT_NE(readWindow1, nativeWindow);
2006     auto readId1 = readWindow1->surface->GetUniqueId();
2007     ASSERT_EQ(uniqueId, readId1);
2008     cout << "write uniqueId is " << uniqueId << ", parcel1 read id is " << readId <<
2009         ", parcel2 read id is " << readId1 << endl;
2010     OH_NativeWindow_DestroyNativeWindow(readWindow1);
2011     OH_NativeWindow_DestroyNativeWindow(nativeWindow);
2012     OH_IPCParcel_Destroy(parcel1);
2013     OH_IPCParcel_Destroy(parcel2);
2014 }
2015 
2016 /*
2017 * Function: NativeWindow_ReadWriteWindow
2018 * Type: Function
2019 * Rank: Important(1)
2020 * EnvConditions: N/A
2021 * CaseDescription: 1. call OH_NativeWindow_WriteToParcel and OH_NativeWindow_ReadFromParcel
2022 * @tc.require: issueI5GMZN issueI5IWHW
2023  */
2024 HWTEST_F(NativeWindowTest, NativeWindowReadWriteWindow002, TestSize.Level0)
2025 {
2026     using namespace OHOS;
2027     // test for no surface->GetUniqueId
2028     OHNativeWindow* nativeWindow1 = new OHNativeWindow();
2029     ASSERT_NE(nativeWindow1, nullptr);
2030     OHIPCParcel *parcel1 = OH_IPCParcel_Create();
2031     ASSERT_NE(parcel1, nullptr);
2032     ASSERT_EQ(OH_NativeWindow_WriteToParcel(nativeWindow1, parcel1), SURFACE_ERROR_INVALID_PARAM);
2033     OHNativeWindow *readWindow = nullptr;
2034     ASSERT_EQ(OH_NativeWindow_ReadFromParcel(parcel1, nullptr), SURFACE_ERROR_INVALID_PARAM);
2035     ASSERT_EQ(OH_NativeWindow_ReadFromParcel(parcel1, &readWindow), SURFACE_ERROR_INVALID_PARAM);
2036     OH_IPCParcel_Destroy(parcel1);
2037     delete nativeWindow1;
2038 }
2039 
2040 /*
2041 * Function: SurfaceErrorInvalidParameter
2042 * Type: Function
2043 * Rank: Important(2)
2044 * EnvConditions: N/A
2045 * CaseDescription: 1. call functions with invalid parameters and check ret
2046 */
2047 HWTEST_F(NativeWindowTest, SurfaceErrorInvalidParameter001, TestSize.Level0)
2048 {
2049     int fence = -1;
2050     ASSERT_EQ(OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer(nullptr), nullptr);
2051     ASSERT_EQ(OH_NativeWindow_GetLastFlushedBuffer(nullptr, nullptr, &fence, nullptr), SURFACE_ERROR_INVALID_PARAM);
2052     ASSERT_EQ(OH_NativeWindow_GetLastFlushedBuffer(nativeWindow, nullptr, &fence, nullptr),
2053         SURFACE_ERROR_INVALID_PARAM);
2054     ASSERT_EQ(GetNativeObjectMagic(nullptr), -1);
2055     ASSERT_EQ(GetSurfaceId(nativeWindow, nullptr), SURFACE_ERROR_INVALID_PARAM);
2056     ASSERT_EQ(NativeWindowGetTransformHint(nativeWindow, nullptr), SURFACE_ERROR_INVALID_PARAM);
2057     ASSERT_EQ(NativeWindowGetDefaultWidthAndHeight(nativeWindow, nullptr, nullptr), SURFACE_ERROR_INVALID_PARAM);
2058     int32_t width;
2059     ASSERT_EQ(NativeWindowGetDefaultWidthAndHeight(nativeWindow, &width, nullptr), SURFACE_ERROR_INVALID_PARAM);
2060     ASSERT_EQ(OH_NativeWindow_GetLastFlushedBufferV2(nullptr, nullptr, &fence, nullptr), SURFACE_ERROR_INVALID_PARAM);
2061     ASSERT_EQ(OH_NativeWindow_GetLastFlushedBufferV2(nativeWindow, nullptr, &fence, nullptr),
2062         SURFACE_ERROR_INVALID_PARAM);
2063     ASSERT_EQ(OH_NativeWindow_GetLastFlushedBufferV2(nativeWindow, nullptr, nullptr, nullptr),
2064         SURFACE_ERROR_INVALID_PARAM);
2065     ASSERT_EQ(NativeWindowDisconnect(nullptr), SURFACE_ERROR_INVALID_PARAM);
2066     ASSERT_EQ(OH_NativeWindow_SetColorSpace(nullptr, OH_COLORSPACE_NONE), SURFACE_ERROR_INVALID_PARAM);
2067     ASSERT_EQ(OH_NativeWindow_GetColorSpace(nullptr, nullptr), SURFACE_ERROR_INVALID_PARAM);
2068     ASSERT_EQ(OH_NativeWindow_GetColorSpace(nativeWindow, nullptr), SURFACE_ERROR_INVALID_PARAM);
2069     ASSERT_EQ(OH_NativeWindow_GetMetadataValue(nullptr, OH_HDR_METADATA_TYPE, nullptr, nullptr),
2070         SURFACE_ERROR_INVALID_PARAM);
2071     ASSERT_EQ(OH_NativeWindow_GetMetadataValue(nativeWindow, OH_HDR_METADATA_TYPE, nullptr, nullptr),
2072         SURFACE_ERROR_INVALID_PARAM);
2073 }
2074 
2075 /*
2076 * Function: SurfaceErrorInvalidParameter
2077 * Type: Function
2078 * Rank: Important(2)
2079 * EnvConditions: N/A
2080 * CaseDescription: 1. call functions with invalid parameters and check ret
2081 */
2082 HWTEST_F(NativeWindowTest, SurfaceErrorInvalidParameter002, TestSize.Level0)
2083 {
2084     OHNativeWindow *nativeWindowTemp = new OHNativeWindow();
2085     NativeWindowBuffer *nativeWindowBuffer1;
2086     Region region;
2087     int32_t height;
2088     int32_t width;
2089     int fence = -1;
2090     ASSERT_EQ(OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer1, nullptr),
2091         SURFACE_ERROR_INVALID_PARAM);
2092     ASSERT_EQ(NativeWindowFlushBuffer(nativeWindowTemp, nativeWindowBuffer, fence, region),
2093         SURFACE_ERROR_INVALID_PARAM);
2094     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindowTemp, 0), OHOS::GSERROR_INVALID_ARGUMENTS);
2095     OHScalingMode scalingMode1 = OHScalingMode::OH_SCALING_MODE_SCALE_TO_WINDOW;
2096     OHScalingModeV2 scalingMode2 = OHScalingModeV2::OH_SCALING_MODE_SCALE_TO_WINDOW_V2;
2097     ASSERT_EQ(OH_NativeWindow_NativeWindowSetScalingMode(nativeWindowTemp, firstSeqnum, scalingMode1),
2098         OHOS::GSERROR_INVALID_ARGUMENTS);
2099     ASSERT_EQ(NativeWindowSetScalingModeV2(nativeWindowTemp, scalingMode2), OHOS::GSERROR_INVALID_ARGUMENTS);
2100     ASSERT_EQ(NativeWindowSetScalingModeV2(nullptr, scalingMode2), OHOS::GSERROR_INVALID_ARGUMENTS);
2101     ASSERT_EQ(NativeWindowSetMetaData(nativeWindowTemp, 0, 0, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
2102     OHHDRMetadataKey key = OHHDRMetadataKey::OH_METAKEY_HDR10_PLUS;
2103     ASSERT_EQ(NativeWindowSetMetaDataSet(nativeWindowTemp, 0, key, 0, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
2104     OHExtDataHandle *handle = AllocOHExtDataHandle(1);
2105     ASSERT_EQ(NativeWindowSetTunnelHandle(nativeWindowTemp, handle), OHOS::GSERROR_INVALID_ARGUMENTS);
2106     OH_NativeBuffer_TransformType transform = OH_NativeBuffer_TransformType::NATIVEBUFFER_ROTATE_180;
2107     ASSERT_EQ(NativeWindowGetTransformHint(nativeWindowTemp, &transform), OHOS::GSERROR_INVALID_ARGUMENTS);
2108     ASSERT_EQ(NativeWindowSetTransformHint(nativeWindowTemp, transform), OHOS::GSERROR_INVALID_ARGUMENTS);
2109     ASSERT_EQ(NativeWindowGetDefaultWidthAndHeight(nativeWindowTemp, &width, &height), OHOS::GSERROR_INVALID_ARGUMENTS);
2110     NativeWindowSetBufferHold(nativeWindowTemp);
2111 }
2112 
2113 /*
2114 * Function: NativeWindowSetRequestWidthAndHeight
2115 * Type: Function
2116 * Rank: Important(2)
2117 * EnvConditions: N/A
2118 * CaseDescription: 1. call NativeWindowSetRequestWidthAndHeight with invalid parameters and check ret
2119 *                  2. call NativeWindowSetRequestWidthAndHeight with normal parameters and check ret
2120 *                  3. call NativeWindowSetRequestWidthAndHeight with zore width and check ret
2121 *                  3. call NativeWindowSetRequestWidthAndHeight with zore height and check ret
2122  */
2123 HWTEST_F(NativeWindowTest, NativeWindowSetRequestWidthAndHeight001, TestSize.Level0)
2124 {
2125     int fence = -1;
2126     ASSERT_EQ(NativeWindowSetRequestWidthAndHeight(nullptr, 0, 0), SURFACE_ERROR_INVALID_PARAM);
2127     cSurface->SetDefaultWidthAndHeight(300, 400);
2128     //分支1:走使用requestWidth/Height新建config分支
2129     ASSERT_EQ(NativeWindowSetRequestWidthAndHeight(nativeWindow, 100, 200), OHOS::GSERROR_OK);
2130     NativeWindowBuffer *nativeWindowBuffer1 = nullptr;
2131     auto ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer1, &fence);
2132     if (ret != GSERROR_HDI_ERROR) {
2133         ASSERT_EQ(ret, GSERROR_OK);
2134         ASSERT_EQ(nativeWindowBuffer1->sfbuffer->GetWidth(), 100);
2135         ASSERT_EQ(nativeWindowBuffer1->sfbuffer->GetHeight(), 200);
2136         ASSERT_EQ(NativeWindowCancelBuffer(nativeWindow, nativeWindowBuffer1), GSERROR_OK);
2137     }
2138     //分支2:使用surface成员变量windowConfig_(未初始化)
2139     ASSERT_EQ(NativeWindowSetRequestWidthAndHeight(nativeWindow, 0, 200), OHOS::GSERROR_OK);
2140     ASSERT_NE(OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer1, &fence),
2141         OHOS::GSERROR_OK);
2142     ASSERT_EQ(NativeWindowSetRequestWidthAndHeight(nativeWindow, 100, 0), OHOS::GSERROR_OK);
2143     ASSERT_NE(OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer1, &fence),
2144         OHOS::GSERROR_OK);
2145 }
2146 
2147 /*
2148 * Function: OH_NativeWindow_DestroyNativeWindowBuffer
2149 * Type: Function
2150 * Rank: Important(2)
2151 * EnvConditions: N/A
2152 * CaseDescription: 1. call OH_NativeWindow_DestroyNativeWindowBuffer again
2153 *                  2. check ret
2154  */
2155 HWTEST_F(NativeWindowTest, OH_NativeWindow_DestroyNativeWindowBuffer002, TestSize.Level0)
2156 {
2157     ASSERT_NE(nativeWindowBuffer, nullptr);
2158     OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
2159 }
2160 
2161 /*
2162  * Function: NativeWindowSetUsageAndFormat
2163  * Type: Function
2164  * Rank: Important(2)
2165  * EnvConditions: N/A
2166  * CaseDescription: 1. preSet: call SET_USAGE with NATIVEBUFFER_USAGE_MEM_MMZ_CACHE and SET_FORMAT with
2167  *                             NATIVEBUFFER_PIXEL_FMT_Y8 and NATIVEBUFFER_PIXEL_FMT_Y16.
2168  *                  2. operation: request buffer and alloc buffer
2169  *                  3. result: request buffer and alloc buffer success
2170  */
2171 HWTEST_F(NativeWindowTest, NativeWindowSetUsageAndFormat, TestSize.Level0)
2172 {
2173     sptr<OHOS::IConsumerSurface> cSurfaceTmp = IConsumerSurface::Create();
2174     sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
2175     cSurfaceTmp->RegisterConsumerListener(listener);
2176     sptr<OHOS::IBufferProducer> producerTmp = cSurfaceTmp->GetProducer();
2177     sptr<OHOS::Surface> pSurfaceTmp = Surface::CreateSurfaceAsProducer(producerTmp);
2178 
2179     NativeWindow *nativeWindowTmp = OH_NativeWindow_CreateNativeWindow(&pSurfaceTmp);
2180     ASSERT_NE(nativeWindowTmp, nullptr);
2181     SetNativeWindowConfig(nativeWindowTmp);
2182 
2183     int code = SET_USAGE;
2184     uint64_t usageSet = NATIVEBUFFER_USAGE_MEM_MMZ_CACHE;
2185     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, usageSet), OHOS::GSERROR_OK);
2186     ASSERT_EQ(usageSet, BUFFER_USAGE_MEM_MMZ_CACHE);
2187 
2188     code = SET_FORMAT;
2189     int32_t formatSet = NATIVEBUFFER_PIXEL_FMT_Y8;
2190     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, formatSet), OHOS::GSERROR_OK);
2191     ASSERT_EQ(formatSet, GRAPHIC_PIXEL_FMT_Y8);
2192 
2193     NativeWindowBuffer *nativeWindowBuffer1 = nullptr;
2194     int fenceFd = -1;
2195     int32_t ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp, &nativeWindowBuffer1, &fenceFd);
2196     ASSERT_EQ(ret, GSERROR_OK);
2197     ASSERT_NE(nativeWindowBuffer1, nullptr);
2198 
2199     code = SET_FORMAT;
2200     formatSet = NATIVEBUFFER_PIXEL_FMT_Y16;
2201     ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, formatSet), OHOS::GSERROR_OK);
2202     ASSERT_EQ(formatSet, GRAPHIC_PIXEL_FMT_Y16);
2203 
2204     NativeWindowBuffer *nativeWindowBuffer2 = nullptr;
2205     ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp, &nativeWindowBuffer2, &fenceFd);
2206     ASSERT_EQ(ret, GSERROR_OK);
2207     ASSERT_NE(nativeWindowBuffer2, nullptr);
2208 }
2209 
2210 /*
2211 * Function: GetNativeObjectMagic
2212 * Type: Function
2213 * Rank: Important(2)
2214 * EnvConditions: N/A
2215 * CaseDescription: 1. call Func With Invalid NativeWindow
2216 *                  2. check ret
2217  */
2218 HWTEST_F(NativeWindowTest, InvalidNativewindow001, TestSize.Level0)
2219 {
2220     sptr<OHOS::IConsumerSurface> cSurfaceTestInvalid = IConsumerSurface::Create();
2221     sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
2222     cSurfaceTestInvalid->RegisterConsumerListener(listener);
2223     sptr<OHOS::IBufferProducer> producerTestInvalid = cSurfaceTestInvalid->GetProducer();
2224     sptr<OHOS::Surface> pSurfaceTestInvalid = Surface::CreateSurfaceAsProducer(producerTestInvalid);
2225     NativeWindow* InvalidNativeWindow = OH_NativeWindow_CreateNativeWindow(&pSurfaceTestInvalid);
2226     const char src[sizeof(NativeWindow)] = "TestInvalidNativeWindow";
2227     memcpy_s((void*)InvalidNativeWindow, sizeof(NativeWindow), src, strlen(src) + 1);
2228 
2229     NativeWindowBuffer *nativeWindowBuffer = nullptr;
2230     int fenceFd = -1;
2231     int32_t ret = OH_NativeWindow_NativeWindowRequestBuffer(InvalidNativeWindow, &nativeWindowBuffer, &fenceFd);
2232     EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2233 
2234     struct Region *region = new Region();
2235     struct NativeWindowBuffer *buffer = new NativeWindowBuffer();
2236     ret = OH_NativeWindow_NativeWindowFlushBuffer(InvalidNativeWindow, buffer, fenceFd, *region);
2237     EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2238 
2239     float matrix[16];
2240     ret = OH_NativeWindow_GetLastFlushedBuffer(InvalidNativeWindow, &nativeWindowBuffer, &fenceFd, matrix);
2241     EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2242 
2243     ret = OH_NativeWindow_NativeWindowAttachBuffer(InvalidNativeWindow, buffer);
2244     EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2245 
2246     ret = OH_NativeWindow_NativeWindowDetachBuffer(InvalidNativeWindow, buffer);
2247     EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2248 
2249     ret = OH_NativeWindow_NativeWindowAbortBuffer(InvalidNativeWindow, buffer);
2250     EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2251 
2252     int code = SET_USAGE;
2253     uint64_t usageSet = BUFFER_USAGE_CPU_READ;
2254     ret = OH_NativeWindow_NativeWindowHandleOpt(InvalidNativeWindow, code, usageSet);
2255     EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2256 
2257     OHScalingMode scalingMode = OHScalingMode::OH_SCALING_MODE_SCALE_TO_WINDOW;
2258     ret = OH_NativeWindow_NativeWindowSetScalingMode(InvalidNativeWindow, -1, scalingMode);
2259     EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2260 
2261     OHScalingModeV2 scalingModev2 = OHScalingModeV2::OH_SCALING_MODE_SCALE_TO_WINDOW_V2;
2262     ret = OH_NativeWindow_NativeWindowSetScalingModeV2(InvalidNativeWindow, scalingModev2);
2263     EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2264 }
2265 
2266 /*
2267 * Function: GetNativeObjectMagic
2268 * Type: Function
2269 * Rank: Important(2)
2270 * EnvConditions: N/A
2271 * CaseDescription: 1. call Func With Invalid NativeWindow
2272 *                  2. check ret
2273  */
2274 HWTEST_F(NativeWindowTest, InvalidNativewindow002, TestSize.Level0)
2275 {
2276     sptr<OHOS::IConsumerSurface> cSurfaceTestInvalid = IConsumerSurface::Create();
2277     sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
2278     cSurfaceTestInvalid->RegisterConsumerListener(listener);
2279     sptr<OHOS::IBufferProducer> producerTestInvalid = cSurfaceTestInvalid->GetProducer();
2280     sptr<OHOS::Surface> pSurfaceTestInvalid = Surface::CreateSurfaceAsProducer(producerTestInvalid);
2281     NativeWindow* InvalidNativeWindow = OH_NativeWindow_CreateNativeWindow(&pSurfaceTestInvalid);
2282     const char src[sizeof(NativeWindow)] = "TestInvalidNativeWindow";
2283     memcpy_s((void*)InvalidNativeWindow, sizeof(NativeWindow), src, strlen(src) + 1);
2284 
2285 
2286     int32_t size = 1;
2287     const OHHDRMetaData metaData[] = {{OH_METAKEY_RED_PRIMARY_X, 0}};
2288     int32_t ret = OH_NativeWindow_NativeWindowSetMetaData(InvalidNativeWindow, firstSeqnum, size, metaData);
2289     EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2290 
2291     OHHDRMetadataKey key = OHHDRMetadataKey::OH_METAKEY_HDR10_PLUS;
2292     const uint8_t metaDataSet[] = {0};
2293     ret = OH_NativeWindow_NativeWindowSetMetaDataSet(InvalidNativeWindow, firstSeqnum, key, size, metaDataSet);
2294     EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2295 
2296     OHExtDataHandle *handle = AllocOHExtDataHandle(1);
2297     ret = NativeWindowSetTunnelHandle(InvalidNativeWindow, handle);
2298     EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2299 
2300     uint64_t surfaceId = 0;
2301     ret = OH_NativeWindow_GetSurfaceId(InvalidNativeWindow, &surfaceId);
2302     EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2303 
2304     NativeWindowSetBufferHold(InvalidNativeWindow);
2305     OHIPCParcel *parcel = OH_IPCParcel_Create();
2306     ret = NativeWindowWriteToParcel(InvalidNativeWindow, parcel);
2307     EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2308 
2309     float matrix[16];
2310     NativeWindowBuffer* lastFlushedBuffer;
2311     int lastFlushedFenceFd;
2312     ret = OH_NativeWindow_GetLastFlushedBufferV2(InvalidNativeWindow, &lastFlushedBuffer, &lastFlushedFenceFd, matrix);
2313     EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2314 
2315     ret = OH_NativeWindow_CleanCache(InvalidNativeWindow);
2316     EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2317 }
2318 
2319 /*
2320 * Function: OH_NativeWindow_NativeWindowRequestBuffer
2321 * Type: Function
2322 * Rank: Important(2)
2323 * EnvConditions: N/A
2324 * CaseDescription: 1. call OH_NativeWindow_NativeWindowRequestBuffer by abnormal input
2325 *                  2. check ret
2326  */
2327 HWTEST_F(NativeWindowTest, DisconnectStrictly001, TestSize.Level0)
2328 {
2329     int32_t sRet = 0;
2330     uint32_t queueSize = 32;
2331 
2332     sptr<OHOS::IConsumerSurface> pConsumerSurface = IConsumerSurface::Create();
2333     sptr<IBufferConsumerListener> pListener = new BufferConsumerListener();
2334     pConsumerSurface->RegisterConsumerListener(pListener);
2335     sptr<OHOS::IBufferProducer> pBufferProducer = pConsumerSurface->GetProducer();
2336     sptr<OHOS::Surface> pSurface1 = Surface::CreateSurfaceAsProducer(pBufferProducer);
2337     sptr<OHOS::Surface> pSurface2 = Surface::CreateSurfaceAsProducer(pBufferProducer);
2338 
2339     sptr<OHOS::IConsumerSurface> tConsumerSurface = IConsumerSurface::Create();
2340     sptr<IBufferConsumerListener> tListener = new BufferConsumerListener();
2341     tConsumerSurface->RegisterConsumerListener(tListener);
2342     sptr<OHOS::IBufferProducer> tBufferProducer = tConsumerSurface->GetProducer();
2343     sptr<OHOS::Surface> tSurface = Surface::CreateSurfaceAsProducer(tBufferProducer);
2344 
2345     pSurface1->RegisterReleaseListener(OnBufferRelease);
2346     pSurface2->RegisterReleaseListener(OnBufferRelease);
2347     tSurface->RegisterReleaseListener(OnBufferRelease);
2348     pSurface1->SetQueueSize(queueSize);
2349     pSurface2->SetQueueSize(queueSize);
2350     tSurface->SetQueueSize(queueSize);
2351 
2352     OHNativeWindow* nativeWindow1 = OH_NativeWindow_CreateNativeWindow(&pSurface1);
2353     OHNativeWindow* nativeWindow2 = OH_NativeWindow_CreateNativeWindow(&pSurface2);
2354     OHNativeWindow* nativeWindow3 = OH_NativeWindow_CreateNativeWindow(&tSurface);
2355 
2356     SetNativeWindowConfig(nativeWindow1);
2357     SetNativeWindowConfig(nativeWindow2);
2358     SetNativeWindowConfig(nativeWindow3);
2359 
2360     int fenceFd = -1;
2361     struct Region *region = new Region();
2362     struct Region::Rect *rect = new Region::Rect();
2363     rect->x = 0x100;
2364     rect->y = 0x100;
2365     rect->w = 0x100;
2366     rect->h = 0x100;
2367     region->rects = rect;
2368 
2369     OHNativeWindowBuffer* nativeWindowBuffer1 = nullptr;
2370     OHNativeWindowBuffer* nativeWindowBuffer2 = nullptr;
2371 
2372     // 不同的surface(指不同消费端)创建不同的nativewindow
2373     pSurface1->ConnectStrictly();
2374     tSurface->DisconnectStrictly();
2375     sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2376     EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2377     sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2378     EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2379     sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow3, &nativeWindowBuffer2, &fenceFd);
2380     EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2381     tSurface->ConnectStrictly();
2382     sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow3, &nativeWindowBuffer2, &fenceFd);
2383     tSurface->DisconnectStrictly();
2384     sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow3, nativeWindowBuffer2, fenceFd, *region);
2385     EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2386 
2387     pSurface1->DisconnectStrictly();
2388     tSurface->ConnectStrictly();
2389     sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2390     EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2391     sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2392     EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2393     sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow3, &nativeWindowBuffer2, &fenceFd);
2394     EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2395     sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow3, nativeWindowBuffer2, fenceFd, *region);
2396     EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2397 
2398     // 同一个surface(指相同消费端)调用不同nativewindow
2399     pSurface1->ConnectStrictly();
2400     sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2401     EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2402     sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2403     EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2404     sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow2, &nativeWindowBuffer1, &fenceFd);
2405     EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2406     sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow2, nativeWindowBuffer1, fenceFd, *region);
2407     EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2408 
2409 
2410     pSurface2->DisconnectStrictly();
2411     sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2412     EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2413     sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2414     EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2415     sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow2, &nativeWindowBuffer1, &fenceFd);
2416     EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2417     sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow2, nativeWindowBuffer1, fenceFd, *region);
2418     EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2419 
2420     // 同一个surface调用相同nativewindow
2421     pSurface1->ConnectStrictly();
2422     sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2423     EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2424     sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2425     EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2426     sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2427     EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2428     sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2429     EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2430 
2431     pSurface1->DisconnectStrictly();
2432     sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2433     EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2434     sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2435     EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2436     sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2437     EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2438     sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2439     EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2440 
2441     // 调用1000次ConnectStrictly和DisconnectStrictly
2442     uint32_t testCount = 1000;
2443     for (int i = 0; i < testCount; i++) {
2444         pSurface1->ConnectStrictly();
2445     }
2446     sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2447     EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2448     sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2449     EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2450     for (int i = 0; i < testCount; i++) {
2451         pSurface1->DisconnectStrictly();
2452     }
2453     sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2454     EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2455     sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2456     EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2457 
2458     // 调用ConnectStrictly->DisconnectStrictly,再调用不同的nativewindow
2459     pSurface1->ConnectStrictly();
2460     pSurface1->DisconnectStrictly();
2461     sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2462     EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2463     sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2464     EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2465     sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow2, &nativeWindowBuffer1, &fenceFd);
2466     EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2467     sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow2, nativeWindowBuffer1, fenceFd, *region);
2468     EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2469 
2470     // 调用DisconnectStrictly->ConnectStrictly,再调用不同的nativewindow
2471     pSurface1->DisconnectStrictly();
2472     pSurface1->ConnectStrictly();
2473     sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2474     EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2475     sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2476     EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2477     sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow2, &nativeWindowBuffer1, &fenceFd);
2478     EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2479     sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow2, nativeWindowBuffer1, fenceFd, *region);
2480     EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2481 
2482 	// 验证OH_NativeWindow_CleanCache在消费端断连后的错误码
2483 	pSurface1->Connect();
2484 	sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2485 	pSurface1->Disconnect();
2486 	sRet = OH_NativeWindow_CleanCache(nativeWindow1);
2487 	EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2488     rect = nullptr;
2489     region = nullptr;
2490     delete rect;
2491     delete region;
2492 }
2493 
2494 /*
2495  * Function: NativeWindowLockBuffer
2496  * Type: Function
2497  * Rank: Important(2)
2498  * EnvConditions: N/A
2499  * CaseDescription: 1. preSet: call NativeWindowLockBuffer with null surface or null window
2500  *                  2. operation: request native buffer with lock
2501  *                  3. result: request native buffer with lock buffer fail
2502  */
2503 HWTEST_F(NativeWindowTest, NativeWindowLockBuffer001, TestSize.Level0)
2504 {
2505     OHNativeWindow* window = new OHNativeWindow();
2506     ASSERT_NE(window, nullptr);
2507 
2508     OHNativeWindowBuffer* buffer = nullptr;
2509     Region::Rect rect = {0};
2510     rect.x = 0x100;
2511     rect.y = 0x100;
2512     rect.w = 0x100;
2513     rect.h = 0x100;
2514     Region region = {.rects = &rect, .rectNumber = 1};
2515     int32_t ret = NativeWindowLockBuffer(nullptr, region, &buffer);
2516     ASSERT_EQ(ret, SURFACE_ERROR_INVALID_PARAM);
2517     ret = NativeWindowLockBuffer(window, region, nullptr);
2518     ASSERT_EQ(ret, SURFACE_ERROR_INVALID_PARAM);
2519     ret = NativeWindowLockBuffer(window, region, &buffer);
2520     ASSERT_EQ(ret, SURFACE_ERROR_ERROR);
2521     delete window;
2522 }
2523 
2524 /*
2525  * Function: NativeWindowLockBuffer
2526  * Type: Function
2527  * Rank: Important(2)
2528  * EnvConditions: N/A
2529  * CaseDescription: 1. preSet: native window is unlocked, call NativeWindowLockBuffer with null surface or null window
2530  *                  2. operation: request native buffer with lock
2531  *                  3. result: request native buffer with lock buffer fail
2532  */
2533 HWTEST_F(NativeWindowTest, NativeWindowLockBuffer002, TestSize.Level0)
2534 {
2535     sptr<OHOS::IConsumerSurface> cSurfaceTmp = IConsumerSurface::Create();
2536     sptr<IBufferConsumerListener> listenerTmp = new BufferConsumerListener();
2537     cSurfaceTmp->RegisterConsumerListener(listenerTmp);
2538     sptr<OHOS::IBufferProducer> producerTmp = cSurface->GetProducer();
2539     sptr<OHOS::Surface> pSurfaceTmp = Surface::CreateSurfaceAsProducer(producerTmp);
2540 
2541     OHNativeWindow* window = OH_NativeWindow_CreateNativeWindow(&pSurfaceTmp);
2542     ASSERT_NE(window, nullptr);
2543 
2544     OHNativeWindowBuffer* buffer = nullptr;
2545     Region::Rect rect = {0};
2546     rect.x = 0x100;
2547     rect.y = 0x100;
2548     rect.w = 0x100;
2549     rect.h = 0x100;
2550     Region region = {.rects = &rect, .rectNumber = 1};
2551     int32_t ret = NativeWindowLockBuffer(window, region, &buffer);
2552     ASSERT_EQ(ret, GSERROR_OK);
2553     ASSERT_NE(buffer, nullptr);
2554 
2555     ret = NativeWindowLockBuffer(window, region, &buffer);
2556     ASSERT_EQ(ret, GSERROR_INVALID_OPERATING);
2557     ASSERT_EQ(buffer, nullptr);
2558 
2559     ret = NativeWindowUnlockAndFlushBuffer(window);
2560     ASSERT_EQ(ret, GSERROR_OK);
2561     ASSERT_EQ(buffer, nullptr);
2562     OH_NativeWindow_DestroyNativeWindow(window);
2563 }
2564 
2565 /*
2566  * Function: NativeWindowUnlockAndFlushBuffer
2567  * Type: Function
2568  * Rank: Important(2)
2569  * EnvConditions: N/A
2570  * CaseDescription: 1. preSet: call NativeWindowUnlockAndFlushBuffer with null surface or null window
2571  *                  2. operation: unlock native buffer
2572  *                  3. result: unlock native buffer fail
2573  */
2574 HWTEST_F(NativeWindowTest, NativeWindowUnlockAndFlushBuffer001, TestSize.Level0)
2575 {
2576     OHNativeWindow* window = new OHNativeWindow();
2577     ASSERT_NE(window, nullptr);
2578 
2579     int32_t ret = NativeWindowUnlockAndFlushBuffer(nullptr);
2580     ASSERT_EQ(ret, SURFACE_ERROR_INVALID_PARAM);
2581 
2582     ret = NativeWindowUnlockAndFlushBuffer(window);
2583     ASSERT_EQ(ret, SURFACE_ERROR_ERROR);
2584     delete window;
2585 }
2586 
2587 /*
2588  * Function: NativeWindowUnlockAndFlushBuffer
2589  * Type: Function
2590  * Rank: Important(2)
2591  * EnvConditions: N/A
2592  * CaseDescription: 1. preSet: call NativeWindowUnlockAndFlushBuffer with valid window.
2593  *                  2. operation: unlock native buffer
2594  *                  3. result: unlock native buffer success
2595  */
2596 HWTEST_F(NativeWindowTest, NativeWindowUnlockAndFlushBuffer002, TestSize.Level0)
2597 {
2598     sptr<OHOS::IConsumerSurface> cSurfaceTmp = IConsumerSurface::Create();
2599     sptr<IBufferConsumerListener> listenerTmp = new BufferConsumerListener();
2600     cSurfaceTmp->RegisterConsumerListener(listenerTmp);
2601     sptr<OHOS::IBufferProducer> producerTmp = cSurface->GetProducer();
2602     sptr<OHOS::Surface> pSurfaceTmp = Surface::CreateSurfaceAsProducer(producerTmp);
2603 
2604     OHNativeWindow* window = OH_NativeWindow_CreateNativeWindow(&pSurfaceTmp);
2605     ASSERT_NE(window, nullptr);
2606 
2607     OHNativeWindowBuffer* buffer = nullptr;
2608     Region::Rect rect = {0};
2609     rect.x = 0x100;
2610     rect.y = 0x100;
2611     rect.w = 0x100;
2612     rect.h = 0x100;
2613     Region region = {.rects = &rect, .rectNumber = 1};
2614     int32_t ret = NativeWindowLockBuffer(window, region, &buffer);
2615     ASSERT_EQ(ret, GSERROR_OK);
2616     ASSERT_NE(buffer, nullptr);
2617 
2618     ret = NativeWindowUnlockAndFlushBuffer(window);
2619     ASSERT_EQ(ret, GSERROR_OK);
2620 
2621     ret = NativeWindowUnlockAndFlushBuffer(window);
2622     ASSERT_EQ(ret, GSERROR_INVALID_OPERATING);
2623     OH_NativeWindow_DestroyNativeWindow(window);
2624 }
2625 }
2626