• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include <gtest/gtest.h>
16 #include "iconsumer_surface.h"
17 #include <iservice_registry.h>
18 #include <ctime>
19 #include "native_buffer.h"
20 #include "native_buffer_inner.h"
21 #include "native_window.h"
22 #include "surface_type.h"
23 #include "graphic_common_c.h"
24 
25 using namespace std;
26 using namespace testing;
27 using namespace testing::ext;
28 
29 namespace OHOS::Rosen {
30 class BufferConsumerListener : public IBufferConsumerListener {
31 public:
OnBufferAvailable()32     void OnBufferAvailable() override
33     {
34     }
35 };
36 
37 class NativeBufferTest : public testing::Test {
38 public:
39     static void SetUpTestCase();
40     static void TearDownTestCase();
41 
42     static inline OH_NativeBuffer_Config config = {
43         .width = 0x100,
44         .height = 0x100,
45         .format = GRAPHIC_PIXEL_FMT_RGBA_8888,
46         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
47     };
48     static inline OH_NativeBuffer_Config checkConfig = {};
49     static inline OH_NativeBuffer* buffer = nullptr;
50 };
51 
SetUpTestCase()52 void NativeBufferTest::SetUpTestCase()
53 {
54     buffer = nullptr;
55 }
56 
TearDownTestCase()57 void NativeBufferTest::TearDownTestCase()
58 {
59     buffer = nullptr;
60 }
61 
62 /*
63 * Function: OH_NativeBufferFromSurfaceBuffer
64 * Type: Function
65 * Rank: Important(2)
66 * EnvConditions: N/A
67 * CaseDescription: 1. call OH_NativeBufferFromSurfaceBuffer by abnormal input
68 *                  2. check ret
69 */
70 HWTEST_F(NativeBufferTest, OH_NativeBufferFromSurfaceBuffer001, Function | MediumTest | Level2)
71 {
72     sptr<OHOS::SurfaceBuffer> surfaceBuffer = OHOS::SurfaceBuffer::Create();
73     NativeWindowBuffer* nativeWindowBuffer = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&surfaceBuffer);
74     ASSERT_NE(nativeWindowBuffer, nullptr);
75     nativeWindowBuffer->sfbuffer = nullptr;
76     OH_NativeBuffer* nativeBuffer = OH_NativeBufferFromNativeWindowBuffer(nativeWindowBuffer);
77     ASSERT_EQ(nativeBuffer, nullptr);
78 }
79 
80 /*
81 * Function: OH_NativeBuffer_Alloc
82 * Type: Function
83 * Rank: Important(2)
84 * EnvConditions: N/A
85 * CaseDescription: 1. call OH_NativeBuffer_Alloc by abnormal input
86 *                  2. check ret
87 */
88 HWTEST_F(NativeBufferTest, OHNativeBufferAlloc001, Function | MediumTest | Level2)
89 {
90     buffer = OH_NativeBuffer_Alloc(nullptr);
91     ASSERT_EQ(buffer, nullptr);
92 }
93 
94 /*
95 * Function: OH_NativeBuffer_Alloc
96 * Type: Function
97 * Rank: Important(2)
98 * EnvConditions: N/A
99 * CaseDescription: 1. call OH_NativeBuffer_Alloc
100 *                  2. check ret
101 */
102 HWTEST_F(NativeBufferTest, OHNativeBufferAlloc002, Function | MediumTest | Level2)
103 {
104     buffer = OH_NativeBuffer_Alloc(&config);
105     ASSERT_NE(buffer, nullptr);
106 }
107 
108 /*
109 * Function: OH_NativeBuffer_GetSeqNum
110 * Type: Function
111 * Rank: Important(2)
112 * EnvConditions: N/A
113 * CaseDescription: 1. call OH_NativeBuffer_GetSeqNum by abnormal input
114 *                  2. check ret
115 */
116 HWTEST_F(NativeBufferTest, OHNativeBufferGetSeqNum001, Function | MediumTest | Level2)
117 {
118     uint32_t id = OH_NativeBuffer_GetSeqNum(nullptr);
119     ASSERT_EQ(id, UINT_MAX);
120 }
121 
122 /*
123 * Function: OH_NativeBuffer_GetSeqNum
124 * Type: Function
125 * Rank: Important(2)
126 * EnvConditions: N/A
127 * CaseDescription: 1. call OH_NativeBuffer_GetSeqNum
128 *                  2. check ret
129 */
130 HWTEST_F(NativeBufferTest, OHNativeBufferGetSeqNum002, Function | MediumTest | Level2)
131 {
132     uint32_t id = OH_NativeBuffer_GetSeqNum(buffer);
133     ASSERT_NE(id, GSERROR_INVALID_ARGUMENTS);
134 }
135 
136 /*
137 * Function: OH_NativeBuffer_GetConfig
138 * Type: Function
139 * Rank: Important(2)
140 * EnvConditions: N/A
141 * CaseDescription: 1. call OH_NativeBuffer_GetConfig
142 *                  2. check ret
143  */
144 HWTEST_F(NativeBufferTest, OHNativeBufferGetConfig001, Function | MediumTest | Level2)
145 {
146     OH_NativeBuffer_GetConfig(buffer, &checkConfig);
147     ASSERT_NE(&checkConfig, nullptr);
148 }
149 
150 /*
151 * Function: OH_NativeBuffer_GetConfig
152 * Type: Function
153 * Rank: Important(2)
154 * EnvConditions: N/A
155 * CaseDescription: 1. call OH_NativeBuffer_GetConfig by abnormal input
156 *                  2. check ret
157 */
158 HWTEST_F(NativeBufferTest, OHNativeBufferGetConfig002, Function | MediumTest | Level2)
159 {
160     checkConfig.width = 0x0;
161     checkConfig.height = 0x0;
162     checkConfig.format = 0x0;
163     checkConfig.usage = 0x0;
164     OH_NativeBuffer_GetConfig(nullptr, &checkConfig);
165     ASSERT_EQ(checkConfig.width, 0x0);
166     ASSERT_EQ(checkConfig.height, 0x0);
167     ASSERT_EQ(checkConfig.format, 0x0);
168     ASSERT_EQ(checkConfig.usage, 0x0);
169 }
170 
171 /*
172 * Function: OH_NativeBuffer_Reference
173 * Type: Function
174 * Rank: Important(2)
175 * EnvConditions: N/A
176 * CaseDescription: 1. call OH_NativeBuffer_Reference by abnormal input
177 *                  2. check ret
178 */
179 HWTEST_F(NativeBufferTest, OHNativeBufferReference001, Function | MediumTest | Level2)
180 {
181     int32_t ret = OH_NativeBuffer_Reference(nullptr);
182     ASSERT_NE(ret, GSERROR_OK);
183 }
184 
185 /*
186 * Function: OH_NativeBuffer_Reference
187 * Type: Function
188 * Rank: Important(2)
189 * EnvConditions: N/A
190 * CaseDescription: 1. call OH_NativeBuffer_Reference
191 *                  2. check ret
192 */
193 HWTEST_F(NativeBufferTest, OHNativeBufferReference002, Function | MediumTest | Level2)
194 {
195     int32_t ret = OH_NativeBuffer_Reference(buffer);
196     ASSERT_EQ(ret, GSERROR_OK);
197 }
198 
199 /*
200 * Function: OH_NativeBuffer_Unreference
201 * Type: Function
202 * Rank: Important(2)
203 * EnvConditions: N/A
204 * CaseDescription: 1. call OH_NativeBuffer_Unreference by abnormal input
205 *                  2. check ret
206 */
207 HWTEST_F(NativeBufferTest, OHNativeBufferUnreference001, Function | MediumTest | Level2)
208 {
209     int32_t ret = OH_NativeBuffer_Unreference(nullptr);
210     ASSERT_NE(ret, GSERROR_OK);
211 }
212 
213 /*
214 * Function: OH_NativeBuffer_Unreference
215 * Type: Function
216 * Rank: Important(2)
217 * EnvConditions: N/A
218 * CaseDescription: 1. call OH_NativeBuffer_Unreference
219 *                  2. check ret
220 */
221 HWTEST_F(NativeBufferTest, OHNativeBufferUnreference002, Function | MediumTest | Level2)
222 {
223     int32_t ret = OH_NativeBuffer_Unreference(buffer);
224     ASSERT_EQ(ret, GSERROR_OK);
225 }
226 
227 /*
228 * Function: OH_NativeBuffer_GetSeqNum and OH_NativeBuffer_Unreference
229 * Type: Function
230 * Rank: Important(2)
231 * EnvConditions: N/A
232 * CaseDescription: 1. call OH_NativeBuffer_GetSeqNum
233 *                  2. call OH_NativeBuffer_Unreference
234 *                  3. OH_NativeBuffer_Alloc again
235 *                  4. check OH_NativeBuffer_GetSeqNum = oldSeq + 1
236 */
237 HWTEST_F(NativeBufferTest, OHNativeBufferGetSeqNum003, Function | MediumTest | Level2)
238 {
239     uint32_t oldSeq = OH_NativeBuffer_GetSeqNum(buffer);
240     int32_t ret = OH_NativeBuffer_Unreference(buffer);
241     ASSERT_EQ(ret, GSERROR_OK);
242     buffer = OH_NativeBuffer_Alloc(&config);
243     ASSERT_EQ(oldSeq + 1, OH_NativeBuffer_GetSeqNum(buffer));
244 }
245 
246 /*
247 * Function: OH_NativeBuffer_GetNativeBufferConfig
248 * Type: Function
249 * Rank: Important(2)
250 * EnvConditions: N/A
251 * CaseDescription: 1. call OH_NativeBuffer_GetNativeBufferConfig
252 *                  2. check result
253 */
254 HWTEST_F(NativeBufferTest, OHNativeBufferGetNativeBufferConfig001, Function | MediumTest | Level2)
255 {
256     OH_NativeBuffer_Config testConfig = {};
257     OH_NativeBuffer_GetNativeBufferConfig(buffer, &testConfig);
258     ASSERT_EQ(testConfig.width, config.width);
259     ASSERT_EQ(testConfig.height, config.height);
260     ASSERT_EQ(testConfig.format, config.format);
261     ASSERT_EQ(testConfig.usage, config.usage);
262 }
263 
264 /*
265 * Function: OH_NativeBuffer_SetColorSpace
266 * Type: Function
267 * Rank: Important(2)
268 * EnvConditions: N/A
269 * CaseDescription: 1. call OH_NativeBuffer_SetColorSpace by abnormal input
270 *                  2. check ret
271 */
272 HWTEST_F(NativeBufferTest, OHNativeBufferSetColorSpace001, Function | MediumTest | Level2)
273 {
274     int32_t ret = OH_NativeBuffer_SetColorSpace(nullptr, OH_COLORSPACE_DISPLAY_BT2020_PQ);
275     ASSERT_NE(ret, GSERROR_OK);
276 }
277 
278 /*
279 * Function: OH_NativeBuffer_SetColorSpace
280 * Type: Function
281 * Rank: Important(2)
282 * EnvConditions: N/A
283 * CaseDescription: 1. call OH_NativeBuffer_SetColorSpace
284 *                  2. check ret
285 */
286 HWTEST_F(NativeBufferTest, OHNativeBufferSetColorSpace002, Function | MediumTest | Level2)
287 {
288     if (buffer == nullptr) {
289         buffer = OH_NativeBuffer_Alloc(&config);
290         ASSERT_NE(buffer, nullptr);
291     }
292 
293     int32_t ret = OH_NativeBuffer_SetColorSpace(buffer, OH_COLORSPACE_BT709_LIMIT);
294     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
295         ASSERT_EQ(ret, GSERROR_OK);
296     }
297 }
298 
299 /*
300 * Function: OH_NativeBuffer_GetColorSpace
301 * Type: Function
302 * Rank: Important(2)
303 * EnvConditions: N/A
304 * CaseDescription: 1. call OH_NativeBuffer_GetColorSpace by abnormal input
305 *                  2. check ret
306 */
307 HWTEST_F(NativeBufferTest, OHNativeBufferGetColorSpace001, Function | MediumTest | Level2)
308 {
309     OH_NativeBuffer_ColorSpace *colorSpace = nullptr;
310     int32_t ret = OH_NativeBuffer_GetColorSpace(nullptr, colorSpace);
311     ASSERT_NE(ret, GSERROR_OK);
312 }
313 
314 /*
315 * Function: OH_NativeBuffer_GetColorSpace
316 * Type: Function
317 * Rank: Important(2)
318 * EnvConditions: N/A
319 * CaseDescription: 1. call OH_NativeBuffer_GetColorSpace
320 *                  2. check ret
321 */
322 HWTEST_F(NativeBufferTest, OHNativeBufferGetColorSpace002, Function | MediumTest | Level2)
323 {
324     if (buffer == nullptr) {
325         buffer = OH_NativeBuffer_Alloc(&config);
326         ASSERT_NE(buffer, nullptr);
327     }
328     OH_NativeBuffer_ColorSpace colorSpace = OH_COLORSPACE_NONE;
329     int32_t ret = OH_NativeBuffer_SetColorSpace(buffer, OH_COLORSPACE_BT709_LIMIT);
330     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
331         ASSERT_EQ(ret, GSERROR_OK);
332     }
333     ret = OH_NativeBuffer_GetColorSpace(buffer, &colorSpace);
334     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
335         ASSERT_EQ(colorSpace, OH_COLORSPACE_BT709_LIMIT);
336         ASSERT_EQ(ret, GSERROR_OK);
337     }
338 }
339 
340 /*
341 * Function: OH_NativeBuffer_GetColorSpace
342 * Type: Function
343 * Rank: Important(2)
344 * EnvConditions: N/A
345 * CaseDescription: 1. call OH_NativeBuffer_GetColorSpace
346 *                  2. check ret
347 */
348 HWTEST_F(NativeBufferTest, OHNativeBufferGetColorSpace003, Function | MediumTest | Level2)
349 {
350     if (buffer == nullptr) {
351         buffer = OH_NativeBuffer_Alloc(&config);
352         ASSERT_NE(buffer, nullptr);
353     }
354     OH_NativeBuffer_ColorSpace colorSpace = OH_COLORSPACE_NONE;
355     int32_t ret = OH_NativeBuffer_GetColorSpace(buffer, &colorSpace);
356     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
357         ASSERT_EQ(ret, GSERROR_OK);
358     }
359     ret = OH_NativeBuffer_SetColorSpace(buffer, OH_COLORSPACE_BT709_LIMIT);
360     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
361         ASSERT_EQ(colorSpace, OH_COLORSPACE_BT709_LIMIT);
362         ASSERT_EQ(ret, GSERROR_OK);
363     }
364 }
365 
366 /*
367 * Function: OH_NativeBuffer_SetMetadataValue
368 * Type: Function
369 * Rank: Important(2)
370 * EnvConditions: N/A
371 * CaseDescription: 1. call OH_NativeBuffer_SetMetadataValue by abnormal input
372 *                  2. check ret
373 */
374 HWTEST_F(NativeBufferTest, OH_NativeBuffer_SetMetadataValue001, Function | MediumTest | Level2)
375 {
376     int32_t size = 1024;
377     uint8_t buff[size];
378     int32_t ret = OH_NativeBuffer_SetMetadataValue(nullptr, OH_HDR_STATIC_METADATA, size, buff);
379     ASSERT_NE(ret, GSERROR_OK);
380 }
381 
382 /*
383 * Function: OH_NativeBuffer_SetMetadataValue
384 * Type: Function
385 * Rank: Important(2)
386 * EnvConditions: N/A
387 * CaseDescription: 1. call OH_NativeBuffer_SetMetadataValue
388 *                  2. check ret
389 */
390 HWTEST_F(NativeBufferTest, OH_NativeBuffer_SetMetadataValue002, Function | MediumTest | Level2)
391 {
392     if (buffer == nullptr) {
393         buffer = OH_NativeBuffer_Alloc(&config);
394         ASSERT_NE(buffer, nullptr);
395     }
396     int32_t len = 60;
397     uint8_t outbuff[len];
398     for (int i = 0; i < 60; ++i) {
399         outbuff[i] = static_cast<uint8_t>(i);
400     }
401     int32_t ret = OH_NativeBuffer_SetMetadataValue(buffer, OH_HDR_STATIC_METADATA, len, outbuff);
402     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
403         ASSERT_EQ(ret, GSERROR_OK);
404     }
405     ret = OH_NativeBuffer_SetMetadataValue(buffer, OH_HDR_DYNAMIC_METADATA, len, outbuff);
406     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
407         ASSERT_EQ(ret, GSERROR_OK);
408     }
409     uint8_t type = OH_NativeBuffer_MetadataType::OH_VIDEO_HDR_HLG;
410     ret = OH_NativeBuffer_SetMetadataValue(buffer, OH_HDR_METADATA_TYPE, sizeof(OH_NativeBuffer_MetadataType), &type);
411     if (ret != GSERROR_NOT_SUPPORT)
412     { // some device not support set colorspace
413         ASSERT_EQ(ret, GSERROR_OK);
414     }
415     type = OH_NativeBuffer_MetadataType::OH_VIDEO_NONE;
416     ret = OH_NativeBuffer_SetMetadataValue(buffer, OH_HDR_METADATA_TYPE, sizeof(OH_NativeBuffer_MetadataType), &type);
417     if (ret != GSERROR_NOT_SUPPORT)
418     { // some device not support set colorspace
419         ASSERT_EQ(ret, GSERROR_INVALID_ARGUMENTS);
420     }
421     ret = OH_NativeBuffer_SetMetadataValue(buffer, static_cast<OH_NativeBuffer_MetadataKey>(-1), len, outbuff);
422     ASSERT_EQ(ret, GSERROR_INTERNAL);
423 }
424 
425 /*
426 * Function: OH_NativeBuffer_SetMetadataValue
427 * Type: Function
428 * Rank: Important(2)
429 * EnvConditions: N/A
430 * CaseDescription: 1. call OH_NativeBuffer_SetMetadataValue by abnormal input
431 *                  2. check ret
432 */
433 HWTEST_F(NativeBufferTest, OH_NativeBuffer_SetMetadataValue003, Function | MediumTest | Level2)
434 {
435     int32_t max_size = -1;
436     int32_t size = 60;
437     uint8_t buff[size];
438     int32_t ret = OH_NativeBuffer_SetMetadataValue(nullptr, OH_HDR_STATIC_METADATA, max_size, buff);
439     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
440         ASSERT_NE(ret, GSERROR_OK);
441     }
442 }
443 
444 /*
445 * Function: OH_NativeBuffer_GetMetadataValue
446 * Type: Function
447 * Rank: Important(2)
448 * EnvConditions: N/A
449 * CaseDescription: 1. call OH_NativeBuffer_GetMetadataValue by abnormal input
450 *                  2. check ret
451 */
452 HWTEST_F(NativeBufferTest, OH_NativeBuffer_GetMetadataValue001, Function | MediumTest | Level2)
453 {
454     int32_t size = 1024;
455     uint8_t *buff;
456     int32_t ret = OH_NativeBuffer_GetMetadataValue(nullptr, OH_HDR_STATIC_METADATA, &size, &buff);
457     if (buff != nullptr) {
458         delete[] buff;
459         buff = nullptr;
460     }
461     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
462         ASSERT_NE(ret, GSERROR_OK);
463     }
464 }
465 
466 /*
467 * Function: OH_NativeBuffer_GetMetadataValue
468 * Type: Function
469 * Rank: Important(2)
470 * EnvConditions: N/A
471 * CaseDescription: 1. call OH_NativeBuffer_GetMetadataValue
472 *                  2. check ret
473 */
474 HWTEST_F(NativeBufferTest, OH_NativeBuffer_GetMetadataValue002, Function | MediumTest | Level2)
475 {
476     if (buffer == nullptr) {
477         buffer = OH_NativeBuffer_Alloc(&config);
478         ASSERT_NE(buffer, nullptr);
479     }
480     int32_t len = 60;
481     uint8_t outbuff[len];
482     for (int i = 0; i < 60; ++i) {
483         outbuff[i] = static_cast<uint8_t>(i);
484     }
485     int32_t ret = OH_NativeBuffer_SetMetadataValue(buffer, OH_HDR_STATIC_METADATA, len, outbuff);
486     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
487         ASSERT_EQ(ret, GSERROR_OK);
488     }
489     int32_t buffSize = 0;
490     uint8_t *buff;
491     ret = OH_NativeBuffer_GetMetadataValue(buffer, OH_HDR_STATIC_METADATA, &buffSize, &buff);
492     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
493         if (buff != nullptr) {
494             ASSERT_EQ(memcmp(outbuff, buff, 60), 0);
495             delete[] buff;
496             buff = nullptr;
497         }
498         ASSERT_EQ(ret, GSERROR_OK);
499     }
500     ret = OH_NativeBuffer_SetMetadataValue(buffer, OH_HDR_DYNAMIC_METADATA, len, outbuff);
501     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
502         ASSERT_EQ(ret, GSERROR_OK);
503     }
504     ret = OH_NativeBuffer_GetMetadataValue(buffer, OH_HDR_DYNAMIC_METADATA, &buffSize, &buff);
505     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
506         if (buff != nullptr) {
507             ASSERT_EQ(memcmp(outbuff, buff, 60), 0);
508             delete[] buff;
509             buff = nullptr;
510         }
511         ASSERT_EQ(ret, GSERROR_OK);
512     }
513     ret = OH_NativeBuffer_GetMetadataValue(buffer, static_cast<OH_NativeBuffer_MetadataKey>(-1), &buffSize, &buff);
514     ASSERT_EQ(ret, GSERROR_INTERNAL);
515 }
516 
517 /*
518 * Function: OH_NativeBuffer_GetMetadataValue
519 * Type: Function
520 * Rank: Important(2)
521 * EnvConditions: N/A
522 * CaseDescription: 1. call OH_NativeBuffer_GetMetadataValue
523 *                  2. check ret
524 */
525 HWTEST_F(NativeBufferTest, OH_NativeBuffer_GetMetadataValue003, Function | MediumTest | Level2)
526 {
527     if (buffer == nullptr) {
528         buffer = OH_NativeBuffer_Alloc(&config);
529         ASSERT_NE(buffer, nullptr);
530     }
531     uint8_t *buff;
532     int32_t ret = OH_NativeBuffer_GetMetadataValue(buffer, OH_HDR_STATIC_METADATA, nullptr, &buff);
533     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
534         ASSERT_NE(ret, GSERROR_OK);
535     }
536     uint8_t type = OH_NativeBuffer_MetadataType::OH_VIDEO_HDR_HLG;
537     uint8_t *resType = new uint8_t;
538     int32_t typeSize = sizeof(OH_NativeBuffer_MetadataType);
539     ret = OH_NativeBuffer_SetMetadataValue(buffer, OH_HDR_METADATA_TYPE, typeSize, &type);
540     if (ret != GSERROR_NOT_SUPPORT)
541     { // some device not support set colorspace
542         ASSERT_EQ(ret, GSERROR_OK);
543     }
544     ret = OH_NativeBuffer_GetMetadataValue(buffer, OH_HDR_METADATA_TYPE, &typeSize, &resType);
545     if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
546         ASSERT_EQ(type, *resType);
547         ASSERT_EQ(ret, GSERROR_OK);
548     }
549     delete resType;
550     resType = nullptr;
551 }
552 
553 /*
554 * Function: OH_NativeBuffer_Map
555 * Type: Function
556 * Rank: Important(2)
557 * EnvConditions: N/A
558 * CaseDescription: 1. call OH_NativeBuffer_Map by abnormal input
559 *                  2. check ret
560 */
561 HWTEST_F(NativeBufferTest, OHNativeBufferMap001, Function | MediumTest | Level2)
562 {
563     void *virAddr = nullptr;
564     int32_t ret = OH_NativeBuffer_Map(nullptr, &virAddr);
565     ASSERT_NE(ret, GSERROR_OK);
566 }
567 
568 /*
569 * Function: OH_NativeBuffer_Map
570 * Type: Function
571 * Rank: Important(2)
572 * EnvConditions: N/A
573 * CaseDescription: 1. call OH_NativeBuffer_Map
574 *                  2. check ret
575 */
576 HWTEST_F(NativeBufferTest, OHNativeBufferMap002, Function | MediumTest | Level2)
577 {
578     void *virAddr = nullptr;
579     int32_t ret = OH_NativeBuffer_Map(buffer, &virAddr);
580     ASSERT_EQ(ret, GSERROR_OK);
581     ASSERT_NE(virAddr, nullptr);
582 }
583 
584 /*
585 * Function: OH_NativeBuffer_Unmap
586 * Type: Function
587 * Rank: Important(2)
588 * EnvConditions: N/A
589 * CaseDescription: 1. call OH_NativeBuffer_Unmap by abnormal input
590 *                  2. check ret
591 */
592 HWTEST_F(NativeBufferTest, OHNativeBufferUnmap001, Function | MediumTest | Level2)
593 {
594     int32_t ret = OH_NativeBuffer_Unmap(nullptr);
595     ASSERT_NE(ret, GSERROR_OK);
596 }
597 
598 /*
599 * Function: OH_NativeBuffer_Unmap and OH_NativeBuffer_Unreference
600 * Type: Function
601 * Rank: Important(2)
602 * EnvConditions: N/A
603 * CaseDescription: 1. call OH_NativeBuffer_Unmap
604 *                  2. check ret
605 *                  3. call OH_NativeBuffer_Unreference
606 */
607 HWTEST_F(NativeBufferTest, OHNativeBufferUnmap002, Function | MediumTest | Level2)
608 {
609     int32_t ret = OH_NativeBuffer_Unmap(buffer);
610     ASSERT_EQ(ret, GSERROR_OK);
611     ret = OH_NativeBuffer_Unreference(buffer);
612     ASSERT_EQ(ret, GSERROR_OK);
613 }
614 
615 /*
616 * Function: OH_NativeBufferFromNativeWindowBuffer
617 * Type: Function
618 * Rank: Important(2)
619 * EnvConditions: N/A
620 * CaseDescription: 1. call OH_NativeBufferFromNativeWindowBuffer by abnormal input
621 *                  2. check ret
622 */
623 HWTEST_F(NativeBufferTest, NativeBufferFromNativeWindowBuffer001, Function | MediumTest | Level2)
624 {
625     OH_NativeBuffer* nativeBuffer = OH_NativeBufferFromNativeWindowBuffer(nullptr);
626     ASSERT_EQ(nativeBuffer, nullptr);
627 }
628 
629 /*
630 * Function: OH_NativeBufferFromNativeWindowBuffer
631 * Type: Function
632 * Rank: Important(2)
633 * EnvConditions: N/A
634 * CaseDescription: 1. call OH_NativeBufferFromNativeWindowBuffer
635 *                  2. check ret
636 */
637 HWTEST_F(NativeBufferTest, NativeBufferFromNativeWindowBuffer002, Function | MediumTest | Level2)
638 {
639     sptr<OHOS::IConsumerSurface> cSurface = IConsumerSurface::Create();
640     sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
641     cSurface->RegisterConsumerListener(listener);
642     sptr<OHOS::IBufferProducer> producer = cSurface->GetProducer();
643     sptr<OHOS::Surface> pSurface = Surface::CreateSurfaceAsProducer(producer);
644     int32_t fence;
645     sptr<OHOS::SurfaceBuffer> sBuffer = nullptr;
646     BufferRequestConfig requestConfig = {
647         .width = 0x100,  // small
648         .height = 0x100, // small
649         .strideAlignment = 0x8,
650         .format = GRAPHIC_PIXEL_FMT_RGBA_8888,
651         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
652         .timeout = 0,
653     };
654     pSurface->RequestBuffer(sBuffer, fence, requestConfig);
655     NativeWindow* nativeWindow = OH_NativeWindow_CreateNativeWindow(&pSurface);
656     ASSERT_NE(nativeWindow, nullptr);
657     NativeWindowBuffer* nativeWindowBuffer = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&sBuffer);
658     ASSERT_NE(nativeWindowBuffer, nullptr);
659     OH_NativeBuffer* nativeBuffer = OH_NativeBufferFromNativeWindowBuffer(nativeWindowBuffer);
660     ASSERT_NE(nativeBuffer, nullptr);
661 
662     int32_t ret = OH_NativeBuffer_FromNativeWindowBuffer(nativeWindowBuffer, nullptr);
663     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
664     OH_NativeBuffer* nativeBufferTmp = nullptr;
665     ret = OH_NativeBuffer_FromNativeWindowBuffer(nativeWindowBuffer, &nativeBufferTmp);
666     ASSERT_EQ(ret, OHOS::GSERROR_OK);
667     ASSERT_EQ(nativeBuffer, nativeBufferTmp);
668 
669     void *virAddr = nullptr;
670     OH_NativeBuffer_Planes outPlanes;
671     ret = OH_NativeBuffer_MapPlanes(nativeBuffer, &virAddr, &outPlanes);
672     if (ret != GSERROR_HDI_ERROR) {
673         ASSERT_EQ(ret, OHOS::GSERROR_OK);
674     }
675 
676     sBuffer = nullptr;
677     cSurface = nullptr;
678     producer = nullptr;
679     pSurface = nullptr;
680     nativeWindow = nullptr;
681     nativeWindowBuffer = nullptr;
682 }
683 
684 /*
685 * Function: OH_NativeBuffer_FromNativeWindowBuffer
686 * Type: Function
687 * Rank: Important(2)
688 * EnvConditions: N/A
689 * CaseDescription: 1. call OH_NativeBuffer_FromNativeWindowBuffer by abnormal input
690 *                  2. check ret
691 */
692 HWTEST_F(NativeBufferTest, NativeBufferFromNativeWindowBuffer003, Function | MediumTest | Level2)
693 {
694     int32_t ret = OH_NativeBuffer_FromNativeWindowBuffer(nullptr, nullptr);
695     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
696 
697     NativeWindowBuffer nativeWindowBuffer;
698     ret = OH_NativeBuffer_FromNativeWindowBuffer(&nativeWindowBuffer, nullptr);
699     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
700 
701     OH_NativeBuffer_GetNativeBufferConfig(nullptr, nullptr);
702     OH_NativeBuffer_GetNativeBufferConfig(buffer, nullptr);
703     ASSERT_EQ(OH_NativeBuffer_GetBufferHandle(nullptr), nullptr);
704 }
705 
706 /*
707 * Function: OH_NativeBuffer_MapPlanes
708 * Type: Function
709 * Rank: Important(2)
710 * EnvConditions: N/A
711 * CaseDescription: 1. call OH_NativeBuffer_MapPlanes by abnormal input
712 *                  2. check ret
713 */
714 HWTEST_F(NativeBufferTest, OHNativeBufferMapPlanes001, Function | MediumTest | Level2)
715 {
716     int32_t ret = OH_NativeBuffer_MapPlanes(nullptr, nullptr, nullptr);
717     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
718 
719     OH_NativeBuffer *buffer = (OH_NativeBuffer *)0xFFFFFFFF;
720     ret = OH_NativeBuffer_MapPlanes(buffer, nullptr, nullptr);
721     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
722 
723     void *virAddr = nullptr;
724     ret = OH_NativeBuffer_MapPlanes(buffer, &virAddr, nullptr);
725     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
726 }
727 
728 /*
729 * Function: OH_NativeBuffer_MapPlanes
730 * Type: Function
731 * Rank: Important(2)
732 * EnvConditions: N/A
733 * CaseDescription: 1. call OH_NativeBuffer_MapPlanes
734 *                  2. check ret
735 */
736 HWTEST_F(NativeBufferTest, OHNativeBufferMapPlanes002, Function | MediumTest | Level2)
737 {
738     sptr<OHOS::IConsumerSurface> cSurface = IConsumerSurface::Create();
739     sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
740     cSurface->RegisterConsumerListener(listener);
741     sptr<OHOS::IBufferProducer> producer = cSurface->GetProducer();
742     sptr<OHOS::Surface> pSurface = Surface::CreateSurfaceAsProducer(producer);
743     int32_t fence;
744     sptr<OHOS::SurfaceBuffer> sBuffer = nullptr;
745     BufferRequestConfig requestConfig = {.width = 0x100, .height = 0x100, .strideAlignment = 0x8,
746         .format = GRAPHIC_PIXEL_FMT_YCBCR_420_SP,
747         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA, .timeout = 0};
748     pSurface->SetQueueSize(4);
749     int32_t formatType[] = {GRAPHIC_PIXEL_FMT_YCBCR_420_SP, GRAPHIC_PIXEL_FMT_YCRCB_420_SP,
750         GRAPHIC_PIXEL_FMT_YCBCR_420_P, GRAPHIC_PIXEL_FMT_YCRCB_420_P};
751     NativeWindow* nativeWindow;
752     NativeWindowBuffer* nativeWindowBuffer;
753     for (int32_t i = 0; i < sizeof(formatType) / sizeof(int32_t); i++) {
754         requestConfig.format = formatType[i];
755         pSurface->RequestBuffer(sBuffer, fence, requestConfig);
756         nativeWindow = OH_NativeWindow_CreateNativeWindow(&pSurface);
757         ASSERT_NE(nativeWindow, nullptr);
758         nativeWindowBuffer = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&sBuffer);
759         ASSERT_NE(nativeWindowBuffer, nullptr);
760         OH_NativeBuffer* nativeBuffer = OH_NativeBufferFromNativeWindowBuffer(nativeWindowBuffer);
761         ASSERT_NE(nativeBuffer, nullptr);
762 
763         void *virAddr = nullptr;
764         OH_NativeBuffer_Planes outPlanes;
765         int32_t ret = OH_NativeBuffer_MapPlanes(nativeBuffer, &virAddr, &outPlanes);
766         if (ret != GSERROR_HDI_ERROR) {
767             ASSERT_EQ(ret, OHOS::GSERROR_OK);
768             ASSERT_NE(virAddr, nullptr);
769         }
770     }
771 
772     sBuffer = nullptr;
773     cSurface = nullptr;
774     producer = nullptr;
775     pSurface = nullptr;
776     nativeWindow = nullptr;
777     nativeWindowBuffer = nullptr;
778 }
779 
780 /*
781 * Function: OH_NativeBuffer_MapPlanes
782 * Type: Function
783 * Rank: Important(2)
784 * EnvConditions: N/A
785 * CaseDescription: 1. call OH_NativeBuffer_MapPlanes
786 *                  2. check ret
787 */
788 HWTEST_F(NativeBufferTest, OHNativeBufferMapPlanes003, Function | MediumTest | Level2)
789 {
790     sptr<OHOS::IConsumerSurface> cSurface = IConsumerSurface::Create();
791     sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
792     cSurface->RegisterConsumerListener(listener);
793     sptr<OHOS::IBufferProducer> producer = cSurface->GetProducer();
794     sptr<OHOS::Surface> pSurface = Surface::CreateSurfaceAsProducer(producer);
795     int32_t fence;
796     sptr<OHOS::SurfaceBuffer> sBuffer = nullptr;
797     BufferRequestConfig requestConfig = {.width = 0x100, .height = 0x100, .strideAlignment = 0x8,
798         .format = GRAPHIC_PIXEL_FMT_YCBCR_420_SP,
799         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA, .timeout = 0};
800     pSurface->SetQueueSize(4);
801     int32_t formatType = GRAPHIC_PIXEL_FMT_YCBCR_420_SP;
802     NativeWindow* nativeWindow;
803     NativeWindowBuffer* nativeWindowBuffer;
804     requestConfig.format = formatType;
805     pSurface->RequestBuffer(sBuffer, fence, requestConfig);
806     nativeWindow = OH_NativeWindow_CreateNativeWindow(&pSurface);
807     ASSERT_NE(nativeWindow, nullptr);
808     nativeWindowBuffer = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&sBuffer);
809     ASSERT_NE(nativeWindowBuffer, nullptr);
810     OH_NativeBuffer* nativeBuffer = OH_NativeBufferFromNativeWindowBuffer(nativeWindowBuffer);
811     ASSERT_NE(nativeBuffer, nullptr);
812     OH_NativeBuffer* nativeBufferTmp = nullptr;
813     for (int32_t i = 0; i < 1000; i++) {
814         int32_t ret = OH_NativeBuffer_FromNativeWindowBuffer(nativeWindowBuffer, &nativeBufferTmp);
815         ASSERT_EQ(ret, OHOS::GSERROR_OK);
816         ASSERT_EQ(nativeBuffer, nativeBufferTmp);
817     }
818     void *virAddr = nullptr;
819     OH_NativeBuffer_Planes outPlanes;
820     clock_t startTime, endTime;
821     startTime = clock();
822     for (int32_t i = 0; i < 1000; i++) {
823         int32_t ret = OH_NativeBuffer_MapPlanes(nativeBuffer, &virAddr, &outPlanes);
824         if (ret != GSERROR_HDI_ERROR) {
825             ASSERT_EQ(ret, OHOS::GSERROR_OK);
826             ASSERT_NE(virAddr, nullptr);
827         }
828     }
829     endTime = clock();
830     cout << "OH_NativeBuffer_MapPlanes 1000 times cost time: " << (endTime - startTime) << "ms" << endl;
831     sBuffer = nullptr;
832     cSurface = nullptr;
833     producer = nullptr;
834     pSurface = nullptr;
835     nativeWindow = nullptr;
836     nativeWindowBuffer = nullptr;
837 }
838 }