132a6e48fSopenharmony_ci/*
232a6e48fSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
332a6e48fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
432a6e48fSopenharmony_ci * you may not use this file except in compliance with the License.
532a6e48fSopenharmony_ci * You may obtain a copy of the License at
632a6e48fSopenharmony_ci *
732a6e48fSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
832a6e48fSopenharmony_ci *
932a6e48fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1032a6e48fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1132a6e48fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1232a6e48fSopenharmony_ci * See the License for the specific language governing permissions and
1332a6e48fSopenharmony_ci * limitations under the License.
1432a6e48fSopenharmony_ci */
1532a6e48fSopenharmony_ci#include <gtest/gtest.h>
1632a6e48fSopenharmony_ci#include "iconsumer_surface.h"
1732a6e48fSopenharmony_ci#include <iservice_registry.h>
1832a6e48fSopenharmony_ci#include <ctime>
1932a6e48fSopenharmony_ci#include "native_buffer.h"
2032a6e48fSopenharmony_ci#include "native_buffer_inner.h"
2132a6e48fSopenharmony_ci#include "native_window.h"
2232a6e48fSopenharmony_ci#include "surface_type.h"
2332a6e48fSopenharmony_ci#include "graphic_common_c.h"
2432a6e48fSopenharmony_ci
2532a6e48fSopenharmony_ciusing namespace std;
2632a6e48fSopenharmony_ciusing namespace testing;
2732a6e48fSopenharmony_ciusing namespace testing::ext;
2832a6e48fSopenharmony_ci
2932a6e48fSopenharmony_cinamespace OHOS::Rosen {
3032a6e48fSopenharmony_ciclass BufferConsumerListener : public IBufferConsumerListener {
3132a6e48fSopenharmony_cipublic:
3232a6e48fSopenharmony_ci    void OnBufferAvailable() override
3332a6e48fSopenharmony_ci    {
3432a6e48fSopenharmony_ci    }
3532a6e48fSopenharmony_ci};
3632a6e48fSopenharmony_ci
3732a6e48fSopenharmony_ciclass NativeBufferTest : public testing::Test {
3832a6e48fSopenharmony_cipublic:
3932a6e48fSopenharmony_ci    static void SetUpTestCase();
4032a6e48fSopenharmony_ci    static void TearDownTestCase();
4132a6e48fSopenharmony_ci
4232a6e48fSopenharmony_ci    static inline OH_NativeBuffer_Config config = {
4332a6e48fSopenharmony_ci        .width = 0x100,
4432a6e48fSopenharmony_ci        .height = 0x100,
4532a6e48fSopenharmony_ci        .format = GRAPHIC_PIXEL_FMT_RGBA_8888,
4632a6e48fSopenharmony_ci        .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
4732a6e48fSopenharmony_ci    };
4832a6e48fSopenharmony_ci    static inline OH_NativeBuffer_Config checkConfig = {};
4932a6e48fSopenharmony_ci    static inline OH_NativeBuffer* buffer = nullptr;
5032a6e48fSopenharmony_ci};
5132a6e48fSopenharmony_ci
5232a6e48fSopenharmony_civoid NativeBufferTest::SetUpTestCase()
5332a6e48fSopenharmony_ci{
5432a6e48fSopenharmony_ci    buffer = nullptr;
5532a6e48fSopenharmony_ci}
5632a6e48fSopenharmony_ci
5732a6e48fSopenharmony_civoid NativeBufferTest::TearDownTestCase()
5832a6e48fSopenharmony_ci{
5932a6e48fSopenharmony_ci    buffer = nullptr;
6032a6e48fSopenharmony_ci}
6132a6e48fSopenharmony_ci
6232a6e48fSopenharmony_ci/*
6332a6e48fSopenharmony_ci* Function: OH_NativeBufferFromSurfaceBuffer
6432a6e48fSopenharmony_ci* Type: Function
6532a6e48fSopenharmony_ci* Rank: Important(2)
6632a6e48fSopenharmony_ci* EnvConditions: N/A
6732a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBufferFromSurfaceBuffer by abnormal input
6832a6e48fSopenharmony_ci*                  2. check ret
6932a6e48fSopenharmony_ci*/
7032a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OH_NativeBufferFromSurfaceBuffer001, Function | MediumTest | Level2)
7132a6e48fSopenharmony_ci{
7232a6e48fSopenharmony_ci    sptr<OHOS::SurfaceBuffer> surfaceBuffer = OHOS::SurfaceBuffer::Create();
7332a6e48fSopenharmony_ci    NativeWindowBuffer* nativeWindowBuffer = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&surfaceBuffer);
7432a6e48fSopenharmony_ci    ASSERT_NE(nativeWindowBuffer, nullptr);
7532a6e48fSopenharmony_ci    nativeWindowBuffer->sfbuffer = nullptr;
7632a6e48fSopenharmony_ci    OH_NativeBuffer* nativeBuffer = OH_NativeBufferFromNativeWindowBuffer(nativeWindowBuffer);
7732a6e48fSopenharmony_ci    ASSERT_EQ(nativeBuffer, nullptr);
7832a6e48fSopenharmony_ci}
7932a6e48fSopenharmony_ci
8032a6e48fSopenharmony_ci/*
8132a6e48fSopenharmony_ci* Function: OH_NativeBuffer_Alloc
8232a6e48fSopenharmony_ci* Type: Function
8332a6e48fSopenharmony_ci* Rank: Important(2)
8432a6e48fSopenharmony_ci* EnvConditions: N/A
8532a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_Alloc by abnormal input
8632a6e48fSopenharmony_ci*                  2. check ret
8732a6e48fSopenharmony_ci*/
8832a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferAlloc001, Function | MediumTest | Level2)
8932a6e48fSopenharmony_ci{
9032a6e48fSopenharmony_ci    buffer = OH_NativeBuffer_Alloc(nullptr);
9132a6e48fSopenharmony_ci    ASSERT_EQ(buffer, nullptr);
9232a6e48fSopenharmony_ci}
9332a6e48fSopenharmony_ci
9432a6e48fSopenharmony_ci/*
9532a6e48fSopenharmony_ci* Function: OH_NativeBuffer_Alloc
9632a6e48fSopenharmony_ci* Type: Function
9732a6e48fSopenharmony_ci* Rank: Important(2)
9832a6e48fSopenharmony_ci* EnvConditions: N/A
9932a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_Alloc
10032a6e48fSopenharmony_ci*                  2. check ret
10132a6e48fSopenharmony_ci*/
10232a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferAlloc002, Function | MediumTest | Level2)
10332a6e48fSopenharmony_ci{
10432a6e48fSopenharmony_ci    buffer = OH_NativeBuffer_Alloc(&config);
10532a6e48fSopenharmony_ci    ASSERT_NE(buffer, nullptr);
10632a6e48fSopenharmony_ci}
10732a6e48fSopenharmony_ci
10832a6e48fSopenharmony_ci/*
10932a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetSeqNum
11032a6e48fSopenharmony_ci* Type: Function
11132a6e48fSopenharmony_ci* Rank: Important(2)
11232a6e48fSopenharmony_ci* EnvConditions: N/A
11332a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetSeqNum by abnormal input
11432a6e48fSopenharmony_ci*                  2. check ret
11532a6e48fSopenharmony_ci*/
11632a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferGetSeqNum001, Function | MediumTest | Level2)
11732a6e48fSopenharmony_ci{
11832a6e48fSopenharmony_ci    uint32_t id = OH_NativeBuffer_GetSeqNum(nullptr);
11932a6e48fSopenharmony_ci    ASSERT_EQ(id, UINT_MAX);
12032a6e48fSopenharmony_ci}
12132a6e48fSopenharmony_ci
12232a6e48fSopenharmony_ci/*
12332a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetSeqNum
12432a6e48fSopenharmony_ci* Type: Function
12532a6e48fSopenharmony_ci* Rank: Important(2)
12632a6e48fSopenharmony_ci* EnvConditions: N/A
12732a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetSeqNum
12832a6e48fSopenharmony_ci*                  2. check ret
12932a6e48fSopenharmony_ci*/
13032a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferGetSeqNum002, Function | MediumTest | Level2)
13132a6e48fSopenharmony_ci{
13232a6e48fSopenharmony_ci    uint32_t id = OH_NativeBuffer_GetSeqNum(buffer);
13332a6e48fSopenharmony_ci    ASSERT_NE(id, GSERROR_INVALID_ARGUMENTS);
13432a6e48fSopenharmony_ci}
13532a6e48fSopenharmony_ci
13632a6e48fSopenharmony_ci/*
13732a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetConfig
13832a6e48fSopenharmony_ci* Type: Function
13932a6e48fSopenharmony_ci* Rank: Important(2)
14032a6e48fSopenharmony_ci* EnvConditions: N/A
14132a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetConfig
14232a6e48fSopenharmony_ci*                  2. check ret
14332a6e48fSopenharmony_ci */
14432a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferGetConfig001, Function | MediumTest | Level2)
14532a6e48fSopenharmony_ci{
14632a6e48fSopenharmony_ci    OH_NativeBuffer_GetConfig(buffer, &checkConfig);
14732a6e48fSopenharmony_ci    ASSERT_NE(&checkConfig, nullptr);
14832a6e48fSopenharmony_ci}
14932a6e48fSopenharmony_ci
15032a6e48fSopenharmony_ci/*
15132a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetConfig
15232a6e48fSopenharmony_ci* Type: Function
15332a6e48fSopenharmony_ci* Rank: Important(2)
15432a6e48fSopenharmony_ci* EnvConditions: N/A
15532a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetConfig by abnormal input
15632a6e48fSopenharmony_ci*                  2. check ret
15732a6e48fSopenharmony_ci*/
15832a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferGetConfig002, Function | MediumTest | Level2)
15932a6e48fSopenharmony_ci{
16032a6e48fSopenharmony_ci    checkConfig.width = 0x0;
16132a6e48fSopenharmony_ci    checkConfig.height = 0x0;
16232a6e48fSopenharmony_ci    checkConfig.format = 0x0;
16332a6e48fSopenharmony_ci    checkConfig.usage = 0x0;
16432a6e48fSopenharmony_ci    OH_NativeBuffer_GetConfig(nullptr, &checkConfig);
16532a6e48fSopenharmony_ci    ASSERT_EQ(checkConfig.width, 0x0);
16632a6e48fSopenharmony_ci    ASSERT_EQ(checkConfig.height, 0x0);
16732a6e48fSopenharmony_ci    ASSERT_EQ(checkConfig.format, 0x0);
16832a6e48fSopenharmony_ci    ASSERT_EQ(checkConfig.usage, 0x0);
16932a6e48fSopenharmony_ci}
17032a6e48fSopenharmony_ci
17132a6e48fSopenharmony_ci/*
17232a6e48fSopenharmony_ci* Function: OH_NativeBuffer_Reference
17332a6e48fSopenharmony_ci* Type: Function
17432a6e48fSopenharmony_ci* Rank: Important(2)
17532a6e48fSopenharmony_ci* EnvConditions: N/A
17632a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_Reference by abnormal input
17732a6e48fSopenharmony_ci*                  2. check ret
17832a6e48fSopenharmony_ci*/
17932a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferReference001, Function | MediumTest | Level2)
18032a6e48fSopenharmony_ci{
18132a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_Reference(nullptr);
18232a6e48fSopenharmony_ci    ASSERT_NE(ret, GSERROR_OK);
18332a6e48fSopenharmony_ci}
18432a6e48fSopenharmony_ci
18532a6e48fSopenharmony_ci/*
18632a6e48fSopenharmony_ci* Function: OH_NativeBuffer_Reference
18732a6e48fSopenharmony_ci* Type: Function
18832a6e48fSopenharmony_ci* Rank: Important(2)
18932a6e48fSopenharmony_ci* EnvConditions: N/A
19032a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_Reference
19132a6e48fSopenharmony_ci*                  2. check ret
19232a6e48fSopenharmony_ci*/
19332a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferReference002, Function | MediumTest | Level2)
19432a6e48fSopenharmony_ci{
19532a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_Reference(buffer);
19632a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_OK);
19732a6e48fSopenharmony_ci}
19832a6e48fSopenharmony_ci
19932a6e48fSopenharmony_ci/*
20032a6e48fSopenharmony_ci* Function: OH_NativeBuffer_Unreference
20132a6e48fSopenharmony_ci* Type: Function
20232a6e48fSopenharmony_ci* Rank: Important(2)
20332a6e48fSopenharmony_ci* EnvConditions: N/A
20432a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_Unreference by abnormal input
20532a6e48fSopenharmony_ci*                  2. check ret
20632a6e48fSopenharmony_ci*/
20732a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferUnreference001, Function | MediumTest | Level2)
20832a6e48fSopenharmony_ci{
20932a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_Unreference(nullptr);
21032a6e48fSopenharmony_ci    ASSERT_NE(ret, GSERROR_OK);
21132a6e48fSopenharmony_ci}
21232a6e48fSopenharmony_ci
21332a6e48fSopenharmony_ci/*
21432a6e48fSopenharmony_ci* Function: OH_NativeBuffer_Unreference
21532a6e48fSopenharmony_ci* Type: Function
21632a6e48fSopenharmony_ci* Rank: Important(2)
21732a6e48fSopenharmony_ci* EnvConditions: N/A
21832a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_Unreference
21932a6e48fSopenharmony_ci*                  2. check ret
22032a6e48fSopenharmony_ci*/
22132a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferUnreference002, Function | MediumTest | Level2)
22232a6e48fSopenharmony_ci{
22332a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_Unreference(buffer);
22432a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_OK);
22532a6e48fSopenharmony_ci}
22632a6e48fSopenharmony_ci
22732a6e48fSopenharmony_ci/*
22832a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetSeqNum and OH_NativeBuffer_Unreference
22932a6e48fSopenharmony_ci* Type: Function
23032a6e48fSopenharmony_ci* Rank: Important(2)
23132a6e48fSopenharmony_ci* EnvConditions: N/A
23232a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetSeqNum
23332a6e48fSopenharmony_ci*                  2. call OH_NativeBuffer_Unreference
23432a6e48fSopenharmony_ci*                  3. OH_NativeBuffer_Alloc again
23532a6e48fSopenharmony_ci*                  4. check OH_NativeBuffer_GetSeqNum = oldSeq + 1
23632a6e48fSopenharmony_ci*/
23732a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferGetSeqNum003, Function | MediumTest | Level2)
23832a6e48fSopenharmony_ci{
23932a6e48fSopenharmony_ci    uint32_t oldSeq = OH_NativeBuffer_GetSeqNum(buffer);
24032a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_Unreference(buffer);
24132a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_OK);
24232a6e48fSopenharmony_ci    buffer = OH_NativeBuffer_Alloc(&config);
24332a6e48fSopenharmony_ci    ASSERT_EQ(oldSeq + 1, OH_NativeBuffer_GetSeqNum(buffer));
24432a6e48fSopenharmony_ci}
24532a6e48fSopenharmony_ci
24632a6e48fSopenharmony_ci/*
24732a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetNativeBufferConfig
24832a6e48fSopenharmony_ci* Type: Function
24932a6e48fSopenharmony_ci* Rank: Important(2)
25032a6e48fSopenharmony_ci* EnvConditions: N/A
25132a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetNativeBufferConfig
25232a6e48fSopenharmony_ci*                  2. check result
25332a6e48fSopenharmony_ci*/
25432a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferGetNativeBufferConfig001, Function | MediumTest | Level2)
25532a6e48fSopenharmony_ci{
25632a6e48fSopenharmony_ci    OH_NativeBuffer_Config testConfig = {};
25732a6e48fSopenharmony_ci    OH_NativeBuffer_GetNativeBufferConfig(buffer, &testConfig);
25832a6e48fSopenharmony_ci    ASSERT_EQ(testConfig.width, config.width);
25932a6e48fSopenharmony_ci    ASSERT_EQ(testConfig.height, config.height);
26032a6e48fSopenharmony_ci    ASSERT_EQ(testConfig.format, config.format);
26132a6e48fSopenharmony_ci    ASSERT_EQ(testConfig.usage, config.usage);
26232a6e48fSopenharmony_ci}
26332a6e48fSopenharmony_ci
26432a6e48fSopenharmony_ci/*
26532a6e48fSopenharmony_ci* Function: OH_NativeBuffer_SetColorSpace
26632a6e48fSopenharmony_ci* Type: Function
26732a6e48fSopenharmony_ci* Rank: Important(2)
26832a6e48fSopenharmony_ci* EnvConditions: N/A
26932a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_SetColorSpace by abnormal input
27032a6e48fSopenharmony_ci*                  2. check ret
27132a6e48fSopenharmony_ci*/
27232a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferSetColorSpace001, Function | MediumTest | Level2)
27332a6e48fSopenharmony_ci{
27432a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_SetColorSpace(nullptr, OH_COLORSPACE_DISPLAY_BT2020_PQ);
27532a6e48fSopenharmony_ci    ASSERT_NE(ret, GSERROR_OK);
27632a6e48fSopenharmony_ci}
27732a6e48fSopenharmony_ci
27832a6e48fSopenharmony_ci/*
27932a6e48fSopenharmony_ci* Function: OH_NativeBuffer_SetColorSpace
28032a6e48fSopenharmony_ci* Type: Function
28132a6e48fSopenharmony_ci* Rank: Important(2)
28232a6e48fSopenharmony_ci* EnvConditions: N/A
28332a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_SetColorSpace
28432a6e48fSopenharmony_ci*                  2. check ret
28532a6e48fSopenharmony_ci*/
28632a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferSetColorSpace002, Function | MediumTest | Level2)
28732a6e48fSopenharmony_ci{
28832a6e48fSopenharmony_ci    if (buffer == nullptr) {
28932a6e48fSopenharmony_ci        buffer = OH_NativeBuffer_Alloc(&config);
29032a6e48fSopenharmony_ci        ASSERT_NE(buffer, nullptr);
29132a6e48fSopenharmony_ci    }
29232a6e48fSopenharmony_ci
29332a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_SetColorSpace(buffer, OH_COLORSPACE_BT709_LIMIT);
29432a6e48fSopenharmony_ci    if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
29532a6e48fSopenharmony_ci        ASSERT_EQ(ret, GSERROR_OK);
29632a6e48fSopenharmony_ci    }
29732a6e48fSopenharmony_ci}
29832a6e48fSopenharmony_ci
29932a6e48fSopenharmony_ci/*
30032a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetColorSpace
30132a6e48fSopenharmony_ci* Type: Function
30232a6e48fSopenharmony_ci* Rank: Important(2)
30332a6e48fSopenharmony_ci* EnvConditions: N/A
30432a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetColorSpace by abnormal input
30532a6e48fSopenharmony_ci*                  2. check ret
30632a6e48fSopenharmony_ci*/
30732a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferGetColorSpace001, Function | MediumTest | Level2)
30832a6e48fSopenharmony_ci{
30932a6e48fSopenharmony_ci    OH_NativeBuffer_ColorSpace *colorSpace = nullptr;
31032a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_GetColorSpace(nullptr, colorSpace);
31132a6e48fSopenharmony_ci    ASSERT_NE(ret, GSERROR_OK);
31232a6e48fSopenharmony_ci}
31332a6e48fSopenharmony_ci
31432a6e48fSopenharmony_ci/*
31532a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetColorSpace
31632a6e48fSopenharmony_ci* Type: Function
31732a6e48fSopenharmony_ci* Rank: Important(2)
31832a6e48fSopenharmony_ci* EnvConditions: N/A
31932a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetColorSpace
32032a6e48fSopenharmony_ci*                  2. check ret
32132a6e48fSopenharmony_ci*/
32232a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferGetColorSpace002, Function | MediumTest | Level2)
32332a6e48fSopenharmony_ci{
32432a6e48fSopenharmony_ci    if (buffer == nullptr) {
32532a6e48fSopenharmony_ci        buffer = OH_NativeBuffer_Alloc(&config);
32632a6e48fSopenharmony_ci        ASSERT_NE(buffer, nullptr);
32732a6e48fSopenharmony_ci    }
32832a6e48fSopenharmony_ci    OH_NativeBuffer_ColorSpace colorSpace = OH_COLORSPACE_NONE;
32932a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_SetColorSpace(buffer, OH_COLORSPACE_BT709_LIMIT);
33032a6e48fSopenharmony_ci    if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
33132a6e48fSopenharmony_ci        ASSERT_EQ(ret, GSERROR_OK);
33232a6e48fSopenharmony_ci    }
33332a6e48fSopenharmony_ci    ret = OH_NativeBuffer_GetColorSpace(buffer, &colorSpace);
33432a6e48fSopenharmony_ci    if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
33532a6e48fSopenharmony_ci        ASSERT_EQ(colorSpace, OH_COLORSPACE_BT709_LIMIT);
33632a6e48fSopenharmony_ci        ASSERT_EQ(ret, GSERROR_OK);
33732a6e48fSopenharmony_ci    }
33832a6e48fSopenharmony_ci}
33932a6e48fSopenharmony_ci
34032a6e48fSopenharmony_ci/*
34132a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetColorSpace
34232a6e48fSopenharmony_ci* Type: Function
34332a6e48fSopenharmony_ci* Rank: Important(2)
34432a6e48fSopenharmony_ci* EnvConditions: N/A
34532a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetColorSpace
34632a6e48fSopenharmony_ci*                  2. check ret
34732a6e48fSopenharmony_ci*/
34832a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferGetColorSpace003, Function | MediumTest | Level2)
34932a6e48fSopenharmony_ci{
35032a6e48fSopenharmony_ci    if (buffer == nullptr) {
35132a6e48fSopenharmony_ci        buffer = OH_NativeBuffer_Alloc(&config);
35232a6e48fSopenharmony_ci        ASSERT_NE(buffer, nullptr);
35332a6e48fSopenharmony_ci    }
35432a6e48fSopenharmony_ci    OH_NativeBuffer_ColorSpace colorSpace = OH_COLORSPACE_NONE;
35532a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_GetColorSpace(buffer, &colorSpace);
35632a6e48fSopenharmony_ci    if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
35732a6e48fSopenharmony_ci        ASSERT_EQ(ret, GSERROR_OK);
35832a6e48fSopenharmony_ci    }
35932a6e48fSopenharmony_ci    ret = OH_NativeBuffer_SetColorSpace(buffer, OH_COLORSPACE_BT709_LIMIT);
36032a6e48fSopenharmony_ci    if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
36132a6e48fSopenharmony_ci        ASSERT_EQ(colorSpace, OH_COLORSPACE_BT709_LIMIT);
36232a6e48fSopenharmony_ci        ASSERT_EQ(ret, GSERROR_OK);
36332a6e48fSopenharmony_ci    }
36432a6e48fSopenharmony_ci}
36532a6e48fSopenharmony_ci
36632a6e48fSopenharmony_ci/*
36732a6e48fSopenharmony_ci* Function: OH_NativeBuffer_SetMetadataValue
36832a6e48fSopenharmony_ci* Type: Function
36932a6e48fSopenharmony_ci* Rank: Important(2)
37032a6e48fSopenharmony_ci* EnvConditions: N/A
37132a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_SetMetadataValue by abnormal input
37232a6e48fSopenharmony_ci*                  2. check ret
37332a6e48fSopenharmony_ci*/
37432a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OH_NativeBuffer_SetMetadataValue001, Function | MediumTest | Level2)
37532a6e48fSopenharmony_ci{
37632a6e48fSopenharmony_ci    int32_t size = 1024;
37732a6e48fSopenharmony_ci    uint8_t buff[size];
37832a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_SetMetadataValue(nullptr, OH_HDR_STATIC_METADATA, size, buff);
37932a6e48fSopenharmony_ci    ASSERT_NE(ret, GSERROR_OK);
38032a6e48fSopenharmony_ci}
38132a6e48fSopenharmony_ci
38232a6e48fSopenharmony_ci/*
38332a6e48fSopenharmony_ci* Function: OH_NativeBuffer_SetMetadataValue
38432a6e48fSopenharmony_ci* Type: Function
38532a6e48fSopenharmony_ci* Rank: Important(2)
38632a6e48fSopenharmony_ci* EnvConditions: N/A
38732a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_SetMetadataValue
38832a6e48fSopenharmony_ci*                  2. check ret
38932a6e48fSopenharmony_ci*/
39032a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OH_NativeBuffer_SetMetadataValue002, Function | MediumTest | Level2)
39132a6e48fSopenharmony_ci{
39232a6e48fSopenharmony_ci    if (buffer == nullptr) {
39332a6e48fSopenharmony_ci        buffer = OH_NativeBuffer_Alloc(&config);
39432a6e48fSopenharmony_ci        ASSERT_NE(buffer, nullptr);
39532a6e48fSopenharmony_ci    }
39632a6e48fSopenharmony_ci    int32_t len = 60;
39732a6e48fSopenharmony_ci    uint8_t outbuff[len];
39832a6e48fSopenharmony_ci    for (int i = 0; i < 60; ++i) {
39932a6e48fSopenharmony_ci        outbuff[i] = static_cast<uint8_t>(i);
40032a6e48fSopenharmony_ci    }
40132a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_SetMetadataValue(buffer, OH_HDR_STATIC_METADATA, len, outbuff);
40232a6e48fSopenharmony_ci    if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
40332a6e48fSopenharmony_ci        ASSERT_EQ(ret, GSERROR_OK);
40432a6e48fSopenharmony_ci    }
40532a6e48fSopenharmony_ci    ret = OH_NativeBuffer_SetMetadataValue(buffer, OH_HDR_DYNAMIC_METADATA, len, outbuff);
40632a6e48fSopenharmony_ci    if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
40732a6e48fSopenharmony_ci        ASSERT_EQ(ret, GSERROR_OK);
40832a6e48fSopenharmony_ci    }
40932a6e48fSopenharmony_ci}
41032a6e48fSopenharmony_ci
41132a6e48fSopenharmony_ci/*
41232a6e48fSopenharmony_ci* Function: OH_NativeBuffer_SetMetadataValue
41332a6e48fSopenharmony_ci* Type: Function
41432a6e48fSopenharmony_ci* Rank: Important(2)
41532a6e48fSopenharmony_ci* EnvConditions: N/A
41632a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_SetMetadataValue by abnormal input
41732a6e48fSopenharmony_ci*                  2. check ret
41832a6e48fSopenharmony_ci*/
41932a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OH_NativeBuffer_SetMetadataValue003, Function | MediumTest | Level2)
42032a6e48fSopenharmony_ci{
42132a6e48fSopenharmony_ci    int32_t max_size = -1;
42232a6e48fSopenharmony_ci    int32_t size = 60;
42332a6e48fSopenharmony_ci    uint8_t buff[size];
42432a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_SetMetadataValue(nullptr, OH_HDR_STATIC_METADATA, max_size, buff);
42532a6e48fSopenharmony_ci    if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
42632a6e48fSopenharmony_ci        ASSERT_NE(ret, GSERROR_OK);
42732a6e48fSopenharmony_ci    }
42832a6e48fSopenharmony_ci}
42932a6e48fSopenharmony_ci
43032a6e48fSopenharmony_ci/*
43132a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetMetadataValue
43232a6e48fSopenharmony_ci* Type: Function
43332a6e48fSopenharmony_ci* Rank: Important(2)
43432a6e48fSopenharmony_ci* EnvConditions: N/A
43532a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetMetadataValue by abnormal input
43632a6e48fSopenharmony_ci*                  2. check ret
43732a6e48fSopenharmony_ci*/
43832a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OH_NativeBuffer_GetMetadataValue001, Function | MediumTest | Level2)
43932a6e48fSopenharmony_ci{
44032a6e48fSopenharmony_ci    int32_t size = 1024;
44132a6e48fSopenharmony_ci    uint8_t *buff;
44232a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_GetMetadataValue(nullptr, OH_HDR_STATIC_METADATA, &size, &buff);
44332a6e48fSopenharmony_ci    if (buff != nullptr) {
44432a6e48fSopenharmony_ci        delete[] buff;
44532a6e48fSopenharmony_ci        buff = nullptr;
44632a6e48fSopenharmony_ci    }
44732a6e48fSopenharmony_ci    if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
44832a6e48fSopenharmony_ci        ASSERT_NE(ret, GSERROR_OK);
44932a6e48fSopenharmony_ci    }
45032a6e48fSopenharmony_ci}
45132a6e48fSopenharmony_ci
45232a6e48fSopenharmony_ci/*
45332a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetMetadataValue
45432a6e48fSopenharmony_ci* Type: Function
45532a6e48fSopenharmony_ci* Rank: Important(2)
45632a6e48fSopenharmony_ci* EnvConditions: N/A
45732a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetMetadataValue
45832a6e48fSopenharmony_ci*                  2. check ret
45932a6e48fSopenharmony_ci*/
46032a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OH_NativeBuffer_GetMetadataValue002, Function | MediumTest | Level2)
46132a6e48fSopenharmony_ci{
46232a6e48fSopenharmony_ci    if (buffer == nullptr) {
46332a6e48fSopenharmony_ci        buffer = OH_NativeBuffer_Alloc(&config);
46432a6e48fSopenharmony_ci        ASSERT_NE(buffer, nullptr);
46532a6e48fSopenharmony_ci    }
46632a6e48fSopenharmony_ci    int32_t len = 60;
46732a6e48fSopenharmony_ci    uint8_t outbuff[len];
46832a6e48fSopenharmony_ci    for (int i = 0; i < 60; ++i) {
46932a6e48fSopenharmony_ci        outbuff[i] = static_cast<uint8_t>(i);
47032a6e48fSopenharmony_ci    }
47132a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_SetMetadataValue(buffer, OH_HDR_STATIC_METADATA, len, outbuff);
47232a6e48fSopenharmony_ci    if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
47332a6e48fSopenharmony_ci        ASSERT_EQ(ret, GSERROR_OK);
47432a6e48fSopenharmony_ci    }
47532a6e48fSopenharmony_ci    int32_t buffSize = 0;
47632a6e48fSopenharmony_ci    uint8_t *buff;
47732a6e48fSopenharmony_ci    ret = OH_NativeBuffer_GetMetadataValue(buffer, OH_HDR_STATIC_METADATA, &buffSize, &buff);
47832a6e48fSopenharmony_ci    if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
47932a6e48fSopenharmony_ci        if (buff != nullptr) {
48032a6e48fSopenharmony_ci            ASSERT_EQ(memcmp(outbuff, buff, 60), 0);
48132a6e48fSopenharmony_ci            delete[] buff;
48232a6e48fSopenharmony_ci            buff = nullptr;
48332a6e48fSopenharmony_ci        }
48432a6e48fSopenharmony_ci        ASSERT_EQ(ret, GSERROR_OK);
48532a6e48fSopenharmony_ci    }
48632a6e48fSopenharmony_ci    ret = OH_NativeBuffer_SetMetadataValue(buffer, OH_HDR_DYNAMIC_METADATA, len, outbuff);
48732a6e48fSopenharmony_ci    if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
48832a6e48fSopenharmony_ci        ASSERT_EQ(ret, GSERROR_OK);
48932a6e48fSopenharmony_ci    }
49032a6e48fSopenharmony_ci    ret = OH_NativeBuffer_GetMetadataValue(buffer, OH_HDR_DYNAMIC_METADATA, &buffSize, &buff);
49132a6e48fSopenharmony_ci    if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
49232a6e48fSopenharmony_ci        if (buff != nullptr) {
49332a6e48fSopenharmony_ci            ASSERT_EQ(memcmp(outbuff, buff, 60), 0);
49432a6e48fSopenharmony_ci            delete[] buff;
49532a6e48fSopenharmony_ci            buff = nullptr;
49632a6e48fSopenharmony_ci        }
49732a6e48fSopenharmony_ci        ASSERT_EQ(ret, GSERROR_OK);
49832a6e48fSopenharmony_ci    }
49932a6e48fSopenharmony_ci}
50032a6e48fSopenharmony_ci
50132a6e48fSopenharmony_ci/*
50232a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetMetadataValue
50332a6e48fSopenharmony_ci* Type: Function
50432a6e48fSopenharmony_ci* Rank: Important(2)
50532a6e48fSopenharmony_ci* EnvConditions: N/A
50632a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetMetadataValue
50732a6e48fSopenharmony_ci*                  2. check ret
50832a6e48fSopenharmony_ci*/
50932a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OH_NativeBuffer_GetMetadataValue003, Function | MediumTest | Level2)
51032a6e48fSopenharmony_ci{
51132a6e48fSopenharmony_ci    if (buffer == nullptr) {
51232a6e48fSopenharmony_ci        buffer = OH_NativeBuffer_Alloc(&config);
51332a6e48fSopenharmony_ci        ASSERT_NE(buffer, nullptr);
51432a6e48fSopenharmony_ci    }
51532a6e48fSopenharmony_ci    uint8_t *buff;
51632a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_GetMetadataValue(buffer, OH_HDR_STATIC_METADATA, nullptr, &buff);
51732a6e48fSopenharmony_ci    if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
51832a6e48fSopenharmony_ci        ASSERT_NE(ret, GSERROR_OK);
51932a6e48fSopenharmony_ci    }
52032a6e48fSopenharmony_ci}
52132a6e48fSopenharmony_ci
52232a6e48fSopenharmony_ci/*
52332a6e48fSopenharmony_ci* Function: OH_NativeBuffer_Map
52432a6e48fSopenharmony_ci* Type: Function
52532a6e48fSopenharmony_ci* Rank: Important(2)
52632a6e48fSopenharmony_ci* EnvConditions: N/A
52732a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_Map by abnormal input
52832a6e48fSopenharmony_ci*                  2. check ret
52932a6e48fSopenharmony_ci*/
53032a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferMap001, Function | MediumTest | Level2)
53132a6e48fSopenharmony_ci{
53232a6e48fSopenharmony_ci    void *virAddr = nullptr;
53332a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_Map(nullptr, &virAddr);
53432a6e48fSopenharmony_ci    ASSERT_NE(ret, GSERROR_OK);
53532a6e48fSopenharmony_ci}
53632a6e48fSopenharmony_ci
53732a6e48fSopenharmony_ci/*
53832a6e48fSopenharmony_ci* Function: OH_NativeBuffer_Map
53932a6e48fSopenharmony_ci* Type: Function
54032a6e48fSopenharmony_ci* Rank: Important(2)
54132a6e48fSopenharmony_ci* EnvConditions: N/A
54232a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_Map
54332a6e48fSopenharmony_ci*                  2. check ret
54432a6e48fSopenharmony_ci*/
54532a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferMap002, Function | MediumTest | Level2)
54632a6e48fSopenharmony_ci{
54732a6e48fSopenharmony_ci    void *virAddr = nullptr;
54832a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_Map(buffer, &virAddr);
54932a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_OK);
55032a6e48fSopenharmony_ci    ASSERT_NE(virAddr, nullptr);
55132a6e48fSopenharmony_ci}
55232a6e48fSopenharmony_ci
55332a6e48fSopenharmony_ci/*
55432a6e48fSopenharmony_ci* Function: OH_NativeBuffer_Unmap
55532a6e48fSopenharmony_ci* Type: Function
55632a6e48fSopenharmony_ci* Rank: Important(2)
55732a6e48fSopenharmony_ci* EnvConditions: N/A
55832a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_Unmap by abnormal input
55932a6e48fSopenharmony_ci*                  2. check ret
56032a6e48fSopenharmony_ci*/
56132a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferUnmap001, Function | MediumTest | Level2)
56232a6e48fSopenharmony_ci{
56332a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_Unmap(nullptr);
56432a6e48fSopenharmony_ci    ASSERT_NE(ret, GSERROR_OK);
56532a6e48fSopenharmony_ci}
56632a6e48fSopenharmony_ci
56732a6e48fSopenharmony_ci/*
56832a6e48fSopenharmony_ci* Function: OH_NativeBuffer_Unmap and OH_NativeBuffer_Unreference
56932a6e48fSopenharmony_ci* Type: Function
57032a6e48fSopenharmony_ci* Rank: Important(2)
57132a6e48fSopenharmony_ci* EnvConditions: N/A
57232a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_Unmap
57332a6e48fSopenharmony_ci*                  2. check ret
57432a6e48fSopenharmony_ci*                  3. call OH_NativeBuffer_Unreference
57532a6e48fSopenharmony_ci*/
57632a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferUnmap002, Function | MediumTest | Level2)
57732a6e48fSopenharmony_ci{
57832a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_Unmap(buffer);
57932a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_OK);
58032a6e48fSopenharmony_ci    ret = OH_NativeBuffer_Unreference(buffer);
58132a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_OK);
58232a6e48fSopenharmony_ci}
58332a6e48fSopenharmony_ci
58432a6e48fSopenharmony_ci/*
58532a6e48fSopenharmony_ci* Function: OH_NativeBufferFromNativeWindowBuffer
58632a6e48fSopenharmony_ci* Type: Function
58732a6e48fSopenharmony_ci* Rank: Important(2)
58832a6e48fSopenharmony_ci* EnvConditions: N/A
58932a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBufferFromNativeWindowBuffer by abnormal input
59032a6e48fSopenharmony_ci*                  2. check ret
59132a6e48fSopenharmony_ci*/
59232a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, NativeBufferFromNativeWindowBuffer001, Function | MediumTest | Level2)
59332a6e48fSopenharmony_ci{
59432a6e48fSopenharmony_ci    OH_NativeBuffer* nativeBuffer = OH_NativeBufferFromNativeWindowBuffer(nullptr);
59532a6e48fSopenharmony_ci    ASSERT_EQ(nativeBuffer, nullptr);
59632a6e48fSopenharmony_ci}
59732a6e48fSopenharmony_ci
59832a6e48fSopenharmony_ci/*
59932a6e48fSopenharmony_ci* Function: OH_NativeBufferFromNativeWindowBuffer
60032a6e48fSopenharmony_ci* Type: Function
60132a6e48fSopenharmony_ci* Rank: Important(2)
60232a6e48fSopenharmony_ci* EnvConditions: N/A
60332a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBufferFromNativeWindowBuffer
60432a6e48fSopenharmony_ci*                  2. check ret
60532a6e48fSopenharmony_ci*/
60632a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, NativeBufferFromNativeWindowBuffer002, Function | MediumTest | Level2)
60732a6e48fSopenharmony_ci{
60832a6e48fSopenharmony_ci    sptr<OHOS::IConsumerSurface> cSurface = IConsumerSurface::Create();
60932a6e48fSopenharmony_ci    sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
61032a6e48fSopenharmony_ci    cSurface->RegisterConsumerListener(listener);
61132a6e48fSopenharmony_ci    sptr<OHOS::IBufferProducer> producer = cSurface->GetProducer();
61232a6e48fSopenharmony_ci    sptr<OHOS::Surface> pSurface = Surface::CreateSurfaceAsProducer(producer);
61332a6e48fSopenharmony_ci    int32_t fence;
61432a6e48fSopenharmony_ci    sptr<OHOS::SurfaceBuffer> sBuffer = nullptr;
61532a6e48fSopenharmony_ci    BufferRequestConfig requestConfig = {
61632a6e48fSopenharmony_ci        .width = 0x100,  // small
61732a6e48fSopenharmony_ci        .height = 0x100, // small
61832a6e48fSopenharmony_ci        .strideAlignment = 0x8,
61932a6e48fSopenharmony_ci        .format = GRAPHIC_PIXEL_FMT_RGBA_8888,
62032a6e48fSopenharmony_ci        .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
62132a6e48fSopenharmony_ci        .timeout = 0,
62232a6e48fSopenharmony_ci    };
62332a6e48fSopenharmony_ci    pSurface->RequestBuffer(sBuffer, fence, requestConfig);
62432a6e48fSopenharmony_ci    NativeWindow* nativeWindow = OH_NativeWindow_CreateNativeWindow(&pSurface);
62532a6e48fSopenharmony_ci    ASSERT_NE(nativeWindow, nullptr);
62632a6e48fSopenharmony_ci    NativeWindowBuffer* nativeWindowBuffer = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&sBuffer);
62732a6e48fSopenharmony_ci    ASSERT_NE(nativeWindowBuffer, nullptr);
62832a6e48fSopenharmony_ci    OH_NativeBuffer* nativeBuffer = OH_NativeBufferFromNativeWindowBuffer(nativeWindowBuffer);
62932a6e48fSopenharmony_ci    ASSERT_NE(nativeBuffer, nullptr);
63032a6e48fSopenharmony_ci
63132a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_FromNativeWindowBuffer(nativeWindowBuffer, nullptr);
63232a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
63332a6e48fSopenharmony_ci    OH_NativeBuffer* nativeBufferTmp = nullptr;
63432a6e48fSopenharmony_ci    ret = OH_NativeBuffer_FromNativeWindowBuffer(nativeWindowBuffer, &nativeBufferTmp);
63532a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
63632a6e48fSopenharmony_ci    ASSERT_EQ(nativeBuffer, nativeBufferTmp);
63732a6e48fSopenharmony_ci
63832a6e48fSopenharmony_ci    void *virAddr = nullptr;
63932a6e48fSopenharmony_ci    OH_NativeBuffer_Planes outPlanes;
64032a6e48fSopenharmony_ci    ret = OH_NativeBuffer_MapPlanes(nativeBuffer, &virAddr, &outPlanes);
64132a6e48fSopenharmony_ci    if (ret != GSERROR_HDI_ERROR) {
64232a6e48fSopenharmony_ci        ASSERT_EQ(ret, OHOS::GSERROR_OK);
64332a6e48fSopenharmony_ci    }
64432a6e48fSopenharmony_ci
64532a6e48fSopenharmony_ci    sBuffer = nullptr;
64632a6e48fSopenharmony_ci    cSurface = nullptr;
64732a6e48fSopenharmony_ci    producer = nullptr;
64832a6e48fSopenharmony_ci    pSurface = nullptr;
64932a6e48fSopenharmony_ci    nativeWindow = nullptr;
65032a6e48fSopenharmony_ci    nativeWindowBuffer = nullptr;
65132a6e48fSopenharmony_ci}
65232a6e48fSopenharmony_ci
65332a6e48fSopenharmony_ci/*
65432a6e48fSopenharmony_ci* Function: OH_NativeBuffer_FromNativeWindowBuffer
65532a6e48fSopenharmony_ci* Type: Function
65632a6e48fSopenharmony_ci* Rank: Important(2)
65732a6e48fSopenharmony_ci* EnvConditions: N/A
65832a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_FromNativeWindowBuffer by abnormal input
65932a6e48fSopenharmony_ci*                  2. check ret
66032a6e48fSopenharmony_ci*/
66132a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, NativeBufferFromNativeWindowBuffer003, Function | MediumTest | Level2)
66232a6e48fSopenharmony_ci{
66332a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_FromNativeWindowBuffer(nullptr, nullptr);
66432a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
66532a6e48fSopenharmony_ci
66632a6e48fSopenharmony_ci    NativeWindowBuffer nativeWindowBuffer;
66732a6e48fSopenharmony_ci    ret = OH_NativeBuffer_FromNativeWindowBuffer(&nativeWindowBuffer, nullptr);
66832a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
66932a6e48fSopenharmony_ci
67032a6e48fSopenharmony_ci    OH_NativeBuffer_GetNativeBufferConfig(nullptr, nullptr);
67132a6e48fSopenharmony_ci    OH_NativeBuffer_GetNativeBufferConfig(buffer, nullptr);
67232a6e48fSopenharmony_ci    ASSERT_EQ(OH_NativeBuffer_GetBufferHandle(nullptr), nullptr);
67332a6e48fSopenharmony_ci}
67432a6e48fSopenharmony_ci
67532a6e48fSopenharmony_ci/*
67632a6e48fSopenharmony_ci* Function: OH_NativeBuffer_MapPlanes
67732a6e48fSopenharmony_ci* Type: Function
67832a6e48fSopenharmony_ci* Rank: Important(2)
67932a6e48fSopenharmony_ci* EnvConditions: N/A
68032a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_MapPlanes by abnormal input
68132a6e48fSopenharmony_ci*                  2. check ret
68232a6e48fSopenharmony_ci*/
68332a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferMapPlanes001, Function | MediumTest | Level2)
68432a6e48fSopenharmony_ci{
68532a6e48fSopenharmony_ci    int32_t ret = OH_NativeBuffer_MapPlanes(nullptr, nullptr, nullptr);
68632a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
68732a6e48fSopenharmony_ci
68832a6e48fSopenharmony_ci    OH_NativeBuffer *buffer = (OH_NativeBuffer *)0xFFFFFFFF;
68932a6e48fSopenharmony_ci    ret = OH_NativeBuffer_MapPlanes(buffer, nullptr, nullptr);
69032a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
69132a6e48fSopenharmony_ci
69232a6e48fSopenharmony_ci    void *virAddr = nullptr;
69332a6e48fSopenharmony_ci    ret = OH_NativeBuffer_MapPlanes(buffer, &virAddr, nullptr);
69432a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
69532a6e48fSopenharmony_ci}
69632a6e48fSopenharmony_ci
69732a6e48fSopenharmony_ci/*
69832a6e48fSopenharmony_ci* Function: OH_NativeBuffer_MapPlanes
69932a6e48fSopenharmony_ci* Type: Function
70032a6e48fSopenharmony_ci* Rank: Important(2)
70132a6e48fSopenharmony_ci* EnvConditions: N/A
70232a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_MapPlanes
70332a6e48fSopenharmony_ci*                  2. check ret
70432a6e48fSopenharmony_ci*/
70532a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferMapPlanes002, Function | MediumTest | Level2)
70632a6e48fSopenharmony_ci{
70732a6e48fSopenharmony_ci    sptr<OHOS::IConsumerSurface> cSurface = IConsumerSurface::Create();
70832a6e48fSopenharmony_ci    sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
70932a6e48fSopenharmony_ci    cSurface->RegisterConsumerListener(listener);
71032a6e48fSopenharmony_ci    sptr<OHOS::IBufferProducer> producer = cSurface->GetProducer();
71132a6e48fSopenharmony_ci    sptr<OHOS::Surface> pSurface = Surface::CreateSurfaceAsProducer(producer);
71232a6e48fSopenharmony_ci    int32_t fence;
71332a6e48fSopenharmony_ci    sptr<OHOS::SurfaceBuffer> sBuffer = nullptr;
71432a6e48fSopenharmony_ci    BufferRequestConfig requestConfig = {.width = 0x100, .height = 0x100, .strideAlignment = 0x8,
71532a6e48fSopenharmony_ci        .format = GRAPHIC_PIXEL_FMT_YCBCR_420_SP,
71632a6e48fSopenharmony_ci        .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA, .timeout = 0};
71732a6e48fSopenharmony_ci    pSurface->SetQueueSize(4);
71832a6e48fSopenharmony_ci    int32_t formatType[] = {GRAPHIC_PIXEL_FMT_YCBCR_420_SP, GRAPHIC_PIXEL_FMT_YCRCB_420_SP,
71932a6e48fSopenharmony_ci        GRAPHIC_PIXEL_FMT_YCBCR_420_P, GRAPHIC_PIXEL_FMT_YCRCB_420_P};
72032a6e48fSopenharmony_ci    NativeWindow* nativeWindow;
72132a6e48fSopenharmony_ci    NativeWindowBuffer* nativeWindowBuffer;
72232a6e48fSopenharmony_ci    for (int32_t i = 0; i < sizeof(formatType) / sizeof(int32_t); i++) {
72332a6e48fSopenharmony_ci        requestConfig.format = formatType[i];
72432a6e48fSopenharmony_ci        pSurface->RequestBuffer(sBuffer, fence, requestConfig);
72532a6e48fSopenharmony_ci        nativeWindow = OH_NativeWindow_CreateNativeWindow(&pSurface);
72632a6e48fSopenharmony_ci        ASSERT_NE(nativeWindow, nullptr);
72732a6e48fSopenharmony_ci        nativeWindowBuffer = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&sBuffer);
72832a6e48fSopenharmony_ci        ASSERT_NE(nativeWindowBuffer, nullptr);
72932a6e48fSopenharmony_ci        OH_NativeBuffer* nativeBuffer = OH_NativeBufferFromNativeWindowBuffer(nativeWindowBuffer);
73032a6e48fSopenharmony_ci        ASSERT_NE(nativeBuffer, nullptr);
73132a6e48fSopenharmony_ci
73232a6e48fSopenharmony_ci        void *virAddr = nullptr;
73332a6e48fSopenharmony_ci        OH_NativeBuffer_Planes outPlanes;
73432a6e48fSopenharmony_ci        int32_t ret = OH_NativeBuffer_MapPlanes(nativeBuffer, &virAddr, &outPlanes);
73532a6e48fSopenharmony_ci        if (ret != GSERROR_HDI_ERROR) {
73632a6e48fSopenharmony_ci            ASSERT_EQ(ret, OHOS::GSERROR_OK);
73732a6e48fSopenharmony_ci            ASSERT_NE(virAddr, nullptr);
73832a6e48fSopenharmony_ci        }
73932a6e48fSopenharmony_ci    }
74032a6e48fSopenharmony_ci
74132a6e48fSopenharmony_ci    sBuffer = nullptr;
74232a6e48fSopenharmony_ci    cSurface = nullptr;
74332a6e48fSopenharmony_ci    producer = nullptr;
74432a6e48fSopenharmony_ci    pSurface = nullptr;
74532a6e48fSopenharmony_ci    nativeWindow = nullptr;
74632a6e48fSopenharmony_ci    nativeWindowBuffer = nullptr;
74732a6e48fSopenharmony_ci}
74832a6e48fSopenharmony_ci
74932a6e48fSopenharmony_ci/*
75032a6e48fSopenharmony_ci* Function: OH_NativeBuffer_MapPlanes
75132a6e48fSopenharmony_ci* Type: Function
75232a6e48fSopenharmony_ci* Rank: Important(2)
75332a6e48fSopenharmony_ci* EnvConditions: N/A
75432a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_MapPlanes
75532a6e48fSopenharmony_ci*                  2. check ret
75632a6e48fSopenharmony_ci*/
75732a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferMapPlanes003, Function | MediumTest | Level2)
75832a6e48fSopenharmony_ci{
75932a6e48fSopenharmony_ci    sptr<OHOS::IConsumerSurface> cSurface = IConsumerSurface::Create();
76032a6e48fSopenharmony_ci    sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
76132a6e48fSopenharmony_ci    cSurface->RegisterConsumerListener(listener);
76232a6e48fSopenharmony_ci    sptr<OHOS::IBufferProducer> producer = cSurface->GetProducer();
76332a6e48fSopenharmony_ci    sptr<OHOS::Surface> pSurface = Surface::CreateSurfaceAsProducer(producer);
76432a6e48fSopenharmony_ci    int32_t fence;
76532a6e48fSopenharmony_ci    sptr<OHOS::SurfaceBuffer> sBuffer = nullptr;
76632a6e48fSopenharmony_ci    BufferRequestConfig requestConfig = {.width = 0x100, .height = 0x100, .strideAlignment = 0x8,
76732a6e48fSopenharmony_ci        .format = GRAPHIC_PIXEL_FMT_YCBCR_420_SP,
76832a6e48fSopenharmony_ci        .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA, .timeout = 0};
76932a6e48fSopenharmony_ci    pSurface->SetQueueSize(4);
77032a6e48fSopenharmony_ci    int32_t formatType = GRAPHIC_PIXEL_FMT_YCBCR_420_SP;
77132a6e48fSopenharmony_ci    NativeWindow* nativeWindow;
77232a6e48fSopenharmony_ci    NativeWindowBuffer* nativeWindowBuffer;
77332a6e48fSopenharmony_ci    requestConfig.format = formatType;
77432a6e48fSopenharmony_ci    pSurface->RequestBuffer(sBuffer, fence, requestConfig);
77532a6e48fSopenharmony_ci    nativeWindow = OH_NativeWindow_CreateNativeWindow(&pSurface);
77632a6e48fSopenharmony_ci    ASSERT_NE(nativeWindow, nullptr);
77732a6e48fSopenharmony_ci    nativeWindowBuffer = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&sBuffer);
77832a6e48fSopenharmony_ci    ASSERT_NE(nativeWindowBuffer, nullptr);
77932a6e48fSopenharmony_ci    OH_NativeBuffer* nativeBuffer = OH_NativeBufferFromNativeWindowBuffer(nativeWindowBuffer);
78032a6e48fSopenharmony_ci    ASSERT_NE(nativeBuffer, nullptr);
78132a6e48fSopenharmony_ci    OH_NativeBuffer* nativeBufferTmp = nullptr;
78232a6e48fSopenharmony_ci    for (int32_t i = 0; i < 1000; i++) {
78332a6e48fSopenharmony_ci        int32_t ret = OH_NativeBuffer_FromNativeWindowBuffer(nativeWindowBuffer, &nativeBufferTmp);
78432a6e48fSopenharmony_ci        ASSERT_EQ(ret, OHOS::GSERROR_OK);
78532a6e48fSopenharmony_ci        ASSERT_EQ(nativeBuffer, nativeBufferTmp);
78632a6e48fSopenharmony_ci    }
78732a6e48fSopenharmony_ci    void *virAddr = nullptr;
78832a6e48fSopenharmony_ci    OH_NativeBuffer_Planes outPlanes;
78932a6e48fSopenharmony_ci    clock_t startTime, endTime;
79032a6e48fSopenharmony_ci    startTime = clock();
79132a6e48fSopenharmony_ci    for (int32_t i = 0; i < 1000; i++) {
79232a6e48fSopenharmony_ci        int32_t ret = OH_NativeBuffer_MapPlanes(nativeBuffer, &virAddr, &outPlanes);
79332a6e48fSopenharmony_ci        if (ret != GSERROR_HDI_ERROR) {
79432a6e48fSopenharmony_ci            ASSERT_EQ(ret, OHOS::GSERROR_OK);
79532a6e48fSopenharmony_ci            ASSERT_NE(virAddr, nullptr);
79632a6e48fSopenharmony_ci        }
79732a6e48fSopenharmony_ci    }
79832a6e48fSopenharmony_ci    endTime = clock();
79932a6e48fSopenharmony_ci    cout << "OH_NativeBuffer_MapPlanes 1000 times cost time: " << (endTime - startTime) << "ms" << endl;
80032a6e48fSopenharmony_ci    sBuffer = nullptr;
80132a6e48fSopenharmony_ci    cSurface = nullptr;
80232a6e48fSopenharmony_ci    producer = nullptr;
80332a6e48fSopenharmony_ci    pSurface = nullptr;
80432a6e48fSopenharmony_ci    nativeWindow = nullptr;
80532a6e48fSopenharmony_ci    nativeWindowBuffer = nullptr;
80632a6e48fSopenharmony_ci}
80732a6e48fSopenharmony_ci}