132a6e48fSopenharmony_ci/*
232a6e48fSopenharmony_ci * Copyright (c) 2021 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 <securec.h>
1632a6e48fSopenharmony_ci#include <gtest/gtest.h>
1732a6e48fSopenharmony_ci#include <surface.h>
1832a6e48fSopenharmony_ci#include <buffer_queue_producer.h>
1932a6e48fSopenharmony_ci#include <consumer_surface.h>
2032a6e48fSopenharmony_ci#include "buffer_consumer_listener.h"
2132a6e48fSopenharmony_ci#include "sync_fence.h"
2232a6e48fSopenharmony_ci#include "producer_surface_delegator.h"
2332a6e48fSopenharmony_ci#include "buffer_queue_consumer.h"
2432a6e48fSopenharmony_ci#include "buffer_queue.h"
2532a6e48fSopenharmony_ci#include "v1_1/buffer_handle_meta_key_type.h"
2632a6e48fSopenharmony_ci
2732a6e48fSopenharmony_ciusing namespace testing;
2832a6e48fSopenharmony_ciusing namespace testing::ext;
2932a6e48fSopenharmony_ci
3032a6e48fSopenharmony_cinamespace OHOS::Rosen {
3132a6e48fSopenharmony_ciclass ConsumerSurfaceTest : public testing::Test {
3232a6e48fSopenharmony_cipublic:
3332a6e48fSopenharmony_ci    static void SetUpTestCase();
3432a6e48fSopenharmony_ci    static void TearDownTestCase();
3532a6e48fSopenharmony_ci    void SetUp() override;
3632a6e48fSopenharmony_ci    void TearDown() override;
3732a6e48fSopenharmony_ci
3832a6e48fSopenharmony_ci    static inline BufferRequestConfig requestConfig = {
3932a6e48fSopenharmony_ci        .width = 0x100,
4032a6e48fSopenharmony_ci        .height = 0x100,
4132a6e48fSopenharmony_ci        .strideAlignment = 0x8,
4232a6e48fSopenharmony_ci        .format = GRAPHIC_PIXEL_FMT_RGBA_8888,
4332a6e48fSopenharmony_ci        .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
4432a6e48fSopenharmony_ci        .timeout = 0,
4532a6e48fSopenharmony_ci    };
4632a6e48fSopenharmony_ci    static inline BufferFlushConfig flushConfig = {
4732a6e48fSopenharmony_ci        .damage = {
4832a6e48fSopenharmony_ci            .w = 0x100,
4932a6e48fSopenharmony_ci            .h = 0x100,
5032a6e48fSopenharmony_ci        },
5132a6e48fSopenharmony_ci    };
5232a6e48fSopenharmony_ci    static inline BufferFlushConfigWithDamages flushConfigWithDamages = {
5332a6e48fSopenharmony_ci        .damages = {
5432a6e48fSopenharmony_ci            { .x = 0x100, .y = 0x100, .w = 0x100, .h = 0x100, },
5532a6e48fSopenharmony_ci            { .x = 0x200, .y = 0x200, .w = 0x200, .h = 0x200, },
5632a6e48fSopenharmony_ci        },
5732a6e48fSopenharmony_ci        .timestamp = 0x300,
5832a6e48fSopenharmony_ci    };
5932a6e48fSopenharmony_ci    static inline int64_t timestamp = 0;
6032a6e48fSopenharmony_ci    static inline Rect damage = {};
6132a6e48fSopenharmony_ci    static inline std::vector<Rect> damages = {};
6232a6e48fSopenharmony_ci    static inline sptr<IConsumerSurface> cs = nullptr;
6332a6e48fSopenharmony_ci    static inline sptr<Surface> ps = nullptr;
6432a6e48fSopenharmony_ci    static inline sptr<BufferQueue> bq = nullptr;
6532a6e48fSopenharmony_ci    static inline sptr<ProducerSurfaceDelegator> surfaceDelegator = nullptr;
6632a6e48fSopenharmony_ci    static inline sptr<BufferQueueConsumer> consumer_ = nullptr;
6732a6e48fSopenharmony_ci    static inline uint32_t firstSeqnum = 0;
6832a6e48fSopenharmony_ci    sptr<ConsumerSurface> surface_ = nullptr;
6932a6e48fSopenharmony_ci};
7032a6e48fSopenharmony_ci
7132a6e48fSopenharmony_civoid ConsumerSurfaceTest::SetUpTestCase()
7232a6e48fSopenharmony_ci{
7332a6e48fSopenharmony_ci    cs = IConsumerSurface::Create();
7432a6e48fSopenharmony_ci    sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
7532a6e48fSopenharmony_ci    cs->RegisterConsumerListener(listener);
7632a6e48fSopenharmony_ci    auto p = cs->GetProducer();
7732a6e48fSopenharmony_ci    bq = new BufferQueue("test");
7832a6e48fSopenharmony_ci    ps = Surface::CreateSurfaceAsProducer(p);
7932a6e48fSopenharmony_ci    surfaceDelegator = ProducerSurfaceDelegator::Create();
8032a6e48fSopenharmony_ci}
8132a6e48fSopenharmony_ci
8232a6e48fSopenharmony_civoid ConsumerSurfaceTest::TearDownTestCase()
8332a6e48fSopenharmony_ci{
8432a6e48fSopenharmony_ci    cs = nullptr;
8532a6e48fSopenharmony_ci}
8632a6e48fSopenharmony_ci
8732a6e48fSopenharmony_civoid ConsumerSurfaceTest::SetUp()
8832a6e48fSopenharmony_ci{
8932a6e48fSopenharmony_ci    surface_ = new ConsumerSurface("test", false);
9032a6e48fSopenharmony_ci    ASSERT_NE(surface_, nullptr);
9132a6e48fSopenharmony_ci    ASSERT_EQ(surface_->producer_, nullptr);
9232a6e48fSopenharmony_ci    ASSERT_EQ(surface_->consumer_, nullptr);
9332a6e48fSopenharmony_ci}
9432a6e48fSopenharmony_ci
9532a6e48fSopenharmony_civoid ConsumerSurfaceTest::TearDown()
9632a6e48fSopenharmony_ci{
9732a6e48fSopenharmony_ci    surface_ = nullptr;
9832a6e48fSopenharmony_ci}
9932a6e48fSopenharmony_ci
10032a6e48fSopenharmony_ciclass TestConsumerListenerClazz : public IBufferConsumerListenerClazz {
10132a6e48fSopenharmony_cipublic:
10232a6e48fSopenharmony_ci    void OnBufferAvailable() override
10332a6e48fSopenharmony_ci    {
10432a6e48fSopenharmony_ci    }
10532a6e48fSopenharmony_ci};
10632a6e48fSopenharmony_ci
10732a6e48fSopenharmony_ci/*
10832a6e48fSopenharmony_ci* Function: GetProducer
10932a6e48fSopenharmony_ci* Type: Function
11032a6e48fSopenharmony_ci* Rank: Important(2)
11132a6e48fSopenharmony_ci* EnvConditions: N/A
11232a6e48fSopenharmony_ci* CaseDescription: 1. get ConsumerSurface and GetProducer
11332a6e48fSopenharmony_ci*                  2. check ret
11432a6e48fSopenharmony_ci */
11532a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, ConsumerSurface001, Function | MediumTest | Level2)
11632a6e48fSopenharmony_ci{
11732a6e48fSopenharmony_ci    ASSERT_NE(cs, nullptr);
11832a6e48fSopenharmony_ci
11932a6e48fSopenharmony_ci    sptr<ConsumerSurface> qs = static_cast<ConsumerSurface*>(cs.GetRefPtr());
12032a6e48fSopenharmony_ci    ASSERT_NE(qs, nullptr);
12132a6e48fSopenharmony_ci    ASSERT_NE(qs->GetProducer(), nullptr);
12232a6e48fSopenharmony_ci}
12332a6e48fSopenharmony_ci
12432a6e48fSopenharmony_ci/*
12532a6e48fSopenharmony_ci* Function: ConsumerSurface dtor
12632a6e48fSopenharmony_ci* Type: Function
12732a6e48fSopenharmony_ci* Rank: Important(2)
12832a6e48fSopenharmony_ci* EnvConditions: N/A
12932a6e48fSopenharmony_ci* CaseDescription: 1. new ConsumerSurface, only one nullptr for consumer_ and producer_
13032a6e48fSopenharmony_ci*                  2. dtor and check ret
13132a6e48fSopenharmony_ci */
13232a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, ConsumerSurfaceDtor001, Function | MediumTest | Level2)
13332a6e48fSopenharmony_ci{
13432a6e48fSopenharmony_ci    sptr<BufferQueue> queue = new BufferQueue("test", false);
13532a6e48fSopenharmony_ci    surface_->producer_ = new BufferQueueProducer(queue);
13632a6e48fSopenharmony_ci    ASSERT_NE(surface_->producer_, nullptr);
13732a6e48fSopenharmony_ci    ASSERT_EQ(surface_->consumer_, nullptr);
13832a6e48fSopenharmony_ci}
13932a6e48fSopenharmony_ci
14032a6e48fSopenharmony_ci/*
14132a6e48fSopenharmony_ci* Function: ConsumerSurface dtor
14232a6e48fSopenharmony_ci* Type: Function
14332a6e48fSopenharmony_ci* Rank: Important(2)
14432a6e48fSopenharmony_ci* EnvConditions: N/A
14532a6e48fSopenharmony_ci* CaseDescription: 1. new ConsumerSurface, only one nullptr for consumer_ and producer_
14632a6e48fSopenharmony_ci*                  2. dtor and check ret
14732a6e48fSopenharmony_ci */
14832a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, ConsumerSurfaceDtor002, Function | MediumTest | Level2)
14932a6e48fSopenharmony_ci{
15032a6e48fSopenharmony_ci    sptr<BufferQueue> queue = new BufferQueue("test", false);
15132a6e48fSopenharmony_ci    surface_->consumer_ = new BufferQueueConsumer(queue);
15232a6e48fSopenharmony_ci    ASSERT_NE(surface_->consumer_, nullptr);
15332a6e48fSopenharmony_ci}
15432a6e48fSopenharmony_ci
15532a6e48fSopenharmony_ci/*
15632a6e48fSopenharmony_ci* Function: SetQueueSize and GetQueueSize
15732a6e48fSopenharmony_ci* Type: Function
15832a6e48fSopenharmony_ci* Rank: Important(2)
15932a6e48fSopenharmony_ci* EnvConditions: N/A
16032a6e48fSopenharmony_ci* CaseDescription: 1. call GetQueueSize and get default value
16132a6e48fSopenharmony_ci*                  2. call SetQueueSize
16232a6e48fSopenharmony_ci*                  3. call SetQueueSize again with abnormal value
16332a6e48fSopenharmony_ci*                  4. call GetQueueSize for BufferQueueProducer and BufferQueue
16432a6e48fSopenharmony_ci*                  5. check ret
16532a6e48fSopenharmony_ci */
16632a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, QueueSize001, Function | MediumTest | Level2)
16732a6e48fSopenharmony_ci{
16832a6e48fSopenharmony_ci    ASSERT_EQ(cs->GetQueueSize(), (uint32_t)SURFACE_DEFAULT_QUEUE_SIZE);
16932a6e48fSopenharmony_ci    GSError ret = cs->SetQueueSize(2);
17032a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
17132a6e48fSopenharmony_ci
17232a6e48fSopenharmony_ci    ret = cs->SetQueueSize(SURFACE_MAX_QUEUE_SIZE + 1);
17332a6e48fSopenharmony_ci    ASSERT_NE(ret, OHOS::GSERROR_OK);
17432a6e48fSopenharmony_ci
17532a6e48fSopenharmony_ci    ASSERT_EQ(cs->GetQueueSize(), 2u);
17632a6e48fSopenharmony_ci}
17732a6e48fSopenharmony_ci
17832a6e48fSopenharmony_ci/*
17932a6e48fSopenharmony_ci* Function: SetQueueSize and GetQueueSize
18032a6e48fSopenharmony_ci* Type: Function
18132a6e48fSopenharmony_ci* Rank: Important(2)
18232a6e48fSopenharmony_ci* EnvConditions: N/A
18332a6e48fSopenharmony_ci* CaseDescription: 1. call GetQueueSize
18432a6e48fSopenharmony_ci*                  2. call SetQueueSize 2 times
18532a6e48fSopenharmony_ci*                  3. check ret
18632a6e48fSopenharmony_ci */
18732a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, QueueSize002, Function | MediumTest | Level2)
18832a6e48fSopenharmony_ci{
18932a6e48fSopenharmony_ci    sptr<ConsumerSurface> qs = static_cast<ConsumerSurface*>(cs.GetRefPtr());
19032a6e48fSopenharmony_ci    sptr<BufferQueueProducer> bqp = static_cast<BufferQueueProducer*>(qs->GetProducer().GetRefPtr());
19132a6e48fSopenharmony_ci    ASSERT_EQ(bqp->GetQueueSize(), 2u);
19232a6e48fSopenharmony_ci
19332a6e48fSopenharmony_ci    GSError ret = cs->SetQueueSize(1);
19432a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
19532a6e48fSopenharmony_ci
19632a6e48fSopenharmony_ci    ret = cs->SetQueueSize(2);
19732a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
19832a6e48fSopenharmony_ci}
19932a6e48fSopenharmony_ci
20032a6e48fSopenharmony_ci/*
20132a6e48fSopenharmony_ci* Function: SetQueueSize and GetQueueSize
20232a6e48fSopenharmony_ci* Type: Function
20332a6e48fSopenharmony_ci* Rank: Important(2)
20432a6e48fSopenharmony_ci* EnvConditions: N/A
20532a6e48fSopenharmony_ci* CaseDescription: 1. call GetQueueSize with producer_ is nullptr
20632a6e48fSopenharmony_ci*                  2. call SetQueueSize with producer_ is nullptr
20732a6e48fSopenharmony_ci*                  3. check ret
20832a6e48fSopenharmony_ci */
20932a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, QueueSize003, Function | MediumTest | Level2)
21032a6e48fSopenharmony_ci{
21132a6e48fSopenharmony_ci    uint32_t size = surface_->GetQueueSize();
21232a6e48fSopenharmony_ci    ASSERT_EQ(size, 0);
21332a6e48fSopenharmony_ci    GSError ret = surface_->SetQueueSize(1);
21432a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
21532a6e48fSopenharmony_ci}
21632a6e48fSopenharmony_ci
21732a6e48fSopenharmony_ci/*
21832a6e48fSopenharmony_ci* Function: SetDefaultWidthAndHeight, GetDefaultWidth and GetDefaultHeight
21932a6e48fSopenharmony_ci* Type: Function
22032a6e48fSopenharmony_ci* Rank: Important(2)
22132a6e48fSopenharmony_ci* EnvConditions: N/A
22232a6e48fSopenharmony_ci* CaseDescription: 1. call SetDefaultWidthAndHeight with consumer_ is nullptr
22332a6e48fSopenharmony_ci*                  2. call GetDefaultWidth with producer_ is nullptr
22432a6e48fSopenharmony_ci*                  3. call GetDefaultHeight with producer_ is nullptr
22532a6e48fSopenharmony_ci*                  4. check ret
22632a6e48fSopenharmony_ci */
22732a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, DefaultWidthAndHeight001, Function | MediumTest | Level2)
22832a6e48fSopenharmony_ci{
22932a6e48fSopenharmony_ci    int32_t width = 0;
23032a6e48fSopenharmony_ci    int32_t height = 0;
23132a6e48fSopenharmony_ci    GSError ret = surface_->SetDefaultWidthAndHeight(width, height);
23232a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
23332a6e48fSopenharmony_ci    width = surface_->GetDefaultWidth();
23432a6e48fSopenharmony_ci    ASSERT_EQ(width, -1);
23532a6e48fSopenharmony_ci    height = surface_->GetDefaultHeight();
23632a6e48fSopenharmony_ci    ASSERT_EQ(height, -1);
23732a6e48fSopenharmony_ci}
23832a6e48fSopenharmony_ci
23932a6e48fSopenharmony_ci/*
24032a6e48fSopenharmony_ci* Function: SetDefaultWidthAndHeight, GetDefaultWidth and GetDefaultHeight
24132a6e48fSopenharmony_ci* Type: Function
24232a6e48fSopenharmony_ci* Rank: Important(2)
24332a6e48fSopenharmony_ci* EnvConditions: N/A
24432a6e48fSopenharmony_ci* CaseDescription: 1. call SetDefaultWidthAndHeight with noraml value
24532a6e48fSopenharmony_ci*                  2. call GetDefaultWidth
24632a6e48fSopenharmony_ci*                  3. call GetDefaultHeight
24732a6e48fSopenharmony_ci*                  4. check ret
24832a6e48fSopenharmony_ci */
24932a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, DefaultWidthAndHeight002, Function | MediumTest | Level2)
25032a6e48fSopenharmony_ci{
25132a6e48fSopenharmony_ci    ASSERT_NE(cs, nullptr);
25232a6e48fSopenharmony_ci    int32_t width = 100;  // 100 test value for width
25332a6e48fSopenharmony_ci    int32_t height = 100;  // 100 test value for height
25432a6e48fSopenharmony_ci    GSError ret = cs->SetDefaultWidthAndHeight(width, height);
25532a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
25632a6e48fSopenharmony_ci    int32_t value = cs->GetDefaultWidth();
25732a6e48fSopenharmony_ci    ASSERT_EQ(value, width);
25832a6e48fSopenharmony_ci    value = cs->GetDefaultHeight();
25932a6e48fSopenharmony_ci    ASSERT_EQ(value, height);
26032a6e48fSopenharmony_ci}
26132a6e48fSopenharmony_ci
26232a6e48fSopenharmony_ci/*
26332a6e48fSopenharmony_ci* Function: SetDefaultUsage and GetDefaultUsage
26432a6e48fSopenharmony_ci* Type: Function
26532a6e48fSopenharmony_ci* Rank: Important(2)
26632a6e48fSopenharmony_ci* EnvConditions: N/A
26732a6e48fSopenharmony_ci* CaseDescription: 1. call SetDefaultUsage with consumer_ is nullptr
26832a6e48fSopenharmony_ci*                  2. call GetDefaultUsage with producer_ is nullptr
26932a6e48fSopenharmony_ci*                  3. check ret
27032a6e48fSopenharmony_ci */
27132a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, DefaultUsage001, Function | MediumTest | Level2)
27232a6e48fSopenharmony_ci{
27332a6e48fSopenharmony_ci    GSError ret = surface_->SetDefaultUsage(0);
27432a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
27532a6e48fSopenharmony_ci    uint64_t value = surface_->GetDefaultUsage();
27632a6e48fSopenharmony_ci    ASSERT_EQ(value, 0);
27732a6e48fSopenharmony_ci}
27832a6e48fSopenharmony_ci
27932a6e48fSopenharmony_ci/*
28032a6e48fSopenharmony_ci* Function: SetDefaultUsage and GetDefaultUsage
28132a6e48fSopenharmony_ci* Type: Function
28232a6e48fSopenharmony_ci* Rank: Important(2)
28332a6e48fSopenharmony_ci* EnvConditions: N/A
28432a6e48fSopenharmony_ci* CaseDescription: 1. call GetDefaultUsage with normal
28532a6e48fSopenharmony_ci*                  2. call SetDefaultUsage with normal
28632a6e48fSopenharmony_ci*                  3. call GetDefaultUsage agagin
28732a6e48fSopenharmony_ci*                  4. check ret
28832a6e48fSopenharmony_ci */
28932a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, DefaultUsage002, Function | MediumTest | Level2)
29032a6e48fSopenharmony_ci{
29132a6e48fSopenharmony_ci    ASSERT_NE(cs, nullptr);
29232a6e48fSopenharmony_ci    int32_t usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA;
29332a6e48fSopenharmony_ci    uint32_t value = cs->GetDefaultUsage();
29432a6e48fSopenharmony_ci    ASSERT_EQ(value, 0);
29532a6e48fSopenharmony_ci    GSError ret = cs->SetDefaultUsage(usage);
29632a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
29732a6e48fSopenharmony_ci    value = cs->GetDefaultUsage();
29832a6e48fSopenharmony_ci    ASSERT_EQ(value, usage);
29932a6e48fSopenharmony_ci}
30032a6e48fSopenharmony_ci
30132a6e48fSopenharmony_ci/*
30232a6e48fSopenharmony_ci* Function: AcquireBuffer
30332a6e48fSopenharmony_ci* Type: Function
30432a6e48fSopenharmony_ci* Rank: Important(2)
30532a6e48fSopenharmony_ci* EnvConditions: N/A
30632a6e48fSopenharmony_ci* CaseDescription: 1. call AcquireBuffer with consumer_ is nullptr
30732a6e48fSopenharmony_ci*                  2. check ret
30832a6e48fSopenharmony_ci */
30932a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, AcquireBuffer001, Function | MediumTest | Level2)
31032a6e48fSopenharmony_ci{
31132a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer = SurfaceBuffer::Create();
31232a6e48fSopenharmony_ci    sptr<OHOS::SyncFence> fence;
31332a6e48fSopenharmony_ci    GSError ret = surface_->AcquireBuffer(buffer, fence, timestamp, damage);
31432a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
31532a6e48fSopenharmony_ci}
31632a6e48fSopenharmony_ci
31732a6e48fSopenharmony_ci/*
31832a6e48fSopenharmony_ci* Function: AcquireBuffer
31932a6e48fSopenharmony_ci* Type: Function
32032a6e48fSopenharmony_ci* Rank: Important(2)
32132a6e48fSopenharmony_ci* EnvConditions: N/A
32232a6e48fSopenharmony_ci* CaseDescription: 1. call AcquireBuffer with nullptr params
32332a6e48fSopenharmony_ci*                  2. check ret
32432a6e48fSopenharmony_ci */
32532a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, AcquireBuffer002, Function | MediumTest | Level2)
32632a6e48fSopenharmony_ci{
32732a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer = nullptr;
32832a6e48fSopenharmony_ci    sptr<OHOS::SyncFence> fence;
32932a6e48fSopenharmony_ci    GSError ret = surface_->AcquireBuffer(buffer, fence, timestamp, damage);
33032a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
33132a6e48fSopenharmony_ci    buffer = SurfaceBuffer::Create();
33232a6e48fSopenharmony_ci    fence = nullptr;
33332a6e48fSopenharmony_ci    ret = surface_->AcquireBuffer(buffer, fence, timestamp, damage);
33432a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
33532a6e48fSopenharmony_ci}
33632a6e48fSopenharmony_ci
33732a6e48fSopenharmony_ci/*
33832a6e48fSopenharmony_ci* Function: ReleaseBuffer
33932a6e48fSopenharmony_ci* Type: Function
34032a6e48fSopenharmony_ci* Rank: Important(2)
34132a6e48fSopenharmony_ci* EnvConditions: N/A
34232a6e48fSopenharmony_ci* CaseDescription: 1. call ReleaseBuffer with consumer_ is nullptr
34332a6e48fSopenharmony_ci*                  2. check ret
34432a6e48fSopenharmony_ci */
34532a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, ReleaseBuffer001, Function | MediumTest | Level2)
34632a6e48fSopenharmony_ci{
34732a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer = SurfaceBuffer::Create();
34832a6e48fSopenharmony_ci    sptr<OHOS::SyncFence> fence;
34932a6e48fSopenharmony_ci    GSError ret = surface_->ReleaseBuffer(buffer, fence);
35032a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
35132a6e48fSopenharmony_ci}
35232a6e48fSopenharmony_ci
35332a6e48fSopenharmony_ci/*
35432a6e48fSopenharmony_ci* Function: ReleaseBuffer
35532a6e48fSopenharmony_ci* Type: Function
35632a6e48fSopenharmony_ci* Rank: Important(2)
35732a6e48fSopenharmony_ci* EnvConditions: N/A
35832a6e48fSopenharmony_ci* CaseDescription: 1. call ReleaseBuffer with nullptr params
35932a6e48fSopenharmony_ci*                  2. check ret
36032a6e48fSopenharmony_ci */
36132a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, ReleaseBuffer002, Function | MediumTest | Level2)
36232a6e48fSopenharmony_ci{
36332a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer = nullptr;
36432a6e48fSopenharmony_ci    sptr<OHOS::SyncFence> fence;
36532a6e48fSopenharmony_ci    GSError ret = surface_->ReleaseBuffer(buffer, fence);
36632a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
36732a6e48fSopenharmony_ci}
36832a6e48fSopenharmony_ci
36932a6e48fSopenharmony_ci/*
37032a6e48fSopenharmony_ci* Function: DetachBuffer
37132a6e48fSopenharmony_ci* Type: Function
37232a6e48fSopenharmony_ci* Rank: Important(2)
37332a6e48fSopenharmony_ci* EnvConditions: N/A
37432a6e48fSopenharmony_ci* CaseDescription: 1. call DetachBuffer with consumer_ is nullptr
37532a6e48fSopenharmony_ci*                  2. check ret
37632a6e48fSopenharmony_ci */
37732a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, DetachBuffer001, Function | MediumTest | Level2)
37832a6e48fSopenharmony_ci{
37932a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer;
38032a6e48fSopenharmony_ci    GSError ret = surface_->DetachBuffer(buffer);
38132a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
38232a6e48fSopenharmony_ci}
38332a6e48fSopenharmony_ci
38432a6e48fSopenharmony_ci/*
38532a6e48fSopenharmony_ci* Function: DetachBuffer
38632a6e48fSopenharmony_ci* Type: Function
38732a6e48fSopenharmony_ci* Rank: Important(2)
38832a6e48fSopenharmony_ci* EnvConditions: N/A
38932a6e48fSopenharmony_ci* CaseDescription: 1. call DetachBuffer with nullptr params
39032a6e48fSopenharmony_ci*                  2. check ret
39132a6e48fSopenharmony_ci */
39232a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, DetachBuffer002, Function | MediumTest | Level2)
39332a6e48fSopenharmony_ci{
39432a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer = nullptr;
39532a6e48fSopenharmony_ci    GSError ret = surface_->DetachBuffer(buffer);
39632a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
39732a6e48fSopenharmony_ci}
39832a6e48fSopenharmony_ci
39932a6e48fSopenharmony_ci/*
40032a6e48fSopenharmony_ci* Function: QueryIfBufferAvailable
40132a6e48fSopenharmony_ci* Type: Function
40232a6e48fSopenharmony_ci* Rank: Important(2)
40332a6e48fSopenharmony_ci* EnvConditions: N/A
40432a6e48fSopenharmony_ci* CaseDescription: 1. call QueryIfBufferAvailable with consumer_ is nullptr
40532a6e48fSopenharmony_ci*                  2. check ret
40632a6e48fSopenharmony_ci */
40732a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, QueryIfBufferAvailable001, Function | MediumTest | Level2)
40832a6e48fSopenharmony_ci{
40932a6e48fSopenharmony_ci    bool ret = surface_->QueryIfBufferAvailable();
41032a6e48fSopenharmony_ci    ASSERT_EQ(ret, false);
41132a6e48fSopenharmony_ci}
41232a6e48fSopenharmony_ci
41332a6e48fSopenharmony_ci/*
41432a6e48fSopenharmony_ci* Function: QueryIfBufferAvailable
41532a6e48fSopenharmony_ci* Type: Function
41632a6e48fSopenharmony_ci* Rank: Important(2)
41732a6e48fSopenharmony_ci* EnvConditions: N/A
41832a6e48fSopenharmony_ci* CaseDescription: 1. call QueryIfBufferAvailable with normal
41932a6e48fSopenharmony_ci*                  2. check ret
42032a6e48fSopenharmony_ci */
42132a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, QueryIfBufferAvailable002, Function | MediumTest | Level2)
42232a6e48fSopenharmony_ci{
42332a6e48fSopenharmony_ci    ASSERT_NE(cs, nullptr);
42432a6e48fSopenharmony_ci    bool ret = cs->QueryIfBufferAvailable();
42532a6e48fSopenharmony_ci    ASSERT_EQ(ret, true);
42632a6e48fSopenharmony_ci}
42732a6e48fSopenharmony_ci
42832a6e48fSopenharmony_ci/*
42932a6e48fSopenharmony_ci* Function: RequestBuffer and FlushBuffer
43032a6e48fSopenharmony_ci* Type: Function
43132a6e48fSopenharmony_ci* Rank: Important(2)
43232a6e48fSopenharmony_ci* EnvConditions: N/A
43332a6e48fSopenharmony_ci* CaseDescription: 1. call RequestBuffer by cs and ps
43432a6e48fSopenharmony_ci*                  2. call FlushBuffer both
43532a6e48fSopenharmony_ci*                  3. check ret
43632a6e48fSopenharmony_ci */
43732a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, ReqCanFluAcqRel001, Function | MediumTest | Level2)
43832a6e48fSopenharmony_ci{
43932a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer;
44032a6e48fSopenharmony_ci    int releaseFence = -1;
44132a6e48fSopenharmony_ci
44232a6e48fSopenharmony_ci    GSError ret = ps->RequestBuffer(buffer, releaseFence, requestConfig);
44332a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
44432a6e48fSopenharmony_ci    ASSERT_NE(buffer, nullptr);
44532a6e48fSopenharmony_ci    firstSeqnum = buffer->GetSeqNum();
44632a6e48fSopenharmony_ci
44732a6e48fSopenharmony_ci    ret = ps->FlushBuffer(buffer, -1, flushConfig);
44832a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
44932a6e48fSopenharmony_ci
45032a6e48fSopenharmony_ci    ret = ps->RequestBuffer(buffer, releaseFence, requestConfig);
45132a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
45232a6e48fSopenharmony_ci    ret = ps->FlushBuffer(buffer, -1, flushConfig);
45332a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
45432a6e48fSopenharmony_ci}
45532a6e48fSopenharmony_ci
45632a6e48fSopenharmony_ci/*
45732a6e48fSopenharmony_ci* Function: AcquireBuffer and ReleaseBuffer
45832a6e48fSopenharmony_ci* Type: Function
45932a6e48fSopenharmony_ci* Rank: Important(2)
46032a6e48fSopenharmony_ci* EnvConditions: N/A
46132a6e48fSopenharmony_ci* CaseDescription: 1. call AcquireBuffer
46232a6e48fSopenharmony_ci*                  2. call ReleaseBuffer
46332a6e48fSopenharmony_ci*                  3. check ret
46432a6e48fSopenharmony_ci */
46532a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, ReqCanFluAcqRel002, Function | MediumTest | Level2)
46632a6e48fSopenharmony_ci{
46732a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer;
46832a6e48fSopenharmony_ci    int32_t flushFence;
46932a6e48fSopenharmony_ci
47032a6e48fSopenharmony_ci    GSError ret = cs->AcquireBuffer(buffer, flushFence, timestamp, damage);
47132a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
47232a6e48fSopenharmony_ci    ASSERT_NE(buffer, nullptr);
47332a6e48fSopenharmony_ci
47432a6e48fSopenharmony_ci    ret = cs->ReleaseBuffer(buffer, -1);
47532a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
47632a6e48fSopenharmony_ci}
47732a6e48fSopenharmony_ci
47832a6e48fSopenharmony_ci/*
47932a6e48fSopenharmony_ci* Function: AcquireBuffer and ReleaseBuffer
48032a6e48fSopenharmony_ci* Type: Function
48132a6e48fSopenharmony_ci* Rank: Important(2)
48232a6e48fSopenharmony_ci* EnvConditions: N/A
48332a6e48fSopenharmony_ci* CaseDescription: 1. call AcquireBuffer
48432a6e48fSopenharmony_ci*                  2. call ReleaseBuffer 2 times
48532a6e48fSopenharmony_ci*                  3. check ret
48632a6e48fSopenharmony_ci */
48732a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, ReqCanFluAcqRel003, Function | MediumTest | Level2)
48832a6e48fSopenharmony_ci{
48932a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer;
49032a6e48fSopenharmony_ci    int32_t flushFence;
49132a6e48fSopenharmony_ci
49232a6e48fSopenharmony_ci    GSError ret = cs->AcquireBuffer(buffer, flushFence, timestamp, damage);
49332a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
49432a6e48fSopenharmony_ci    ASSERT_NE(buffer, nullptr);
49532a6e48fSopenharmony_ci
49632a6e48fSopenharmony_ci    ret = cs->ReleaseBuffer(buffer, -1);
49732a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
49832a6e48fSopenharmony_ci
49932a6e48fSopenharmony_ci    ret = cs->ReleaseBuffer(buffer, -1);
50032a6e48fSopenharmony_ci    ASSERT_NE(ret, OHOS::GSERROR_OK);
50132a6e48fSopenharmony_ci}
50232a6e48fSopenharmony_ci
50332a6e48fSopenharmony_ci/*
50432a6e48fSopenharmony_ci* Function: RequestBuffer and CancelBuffer
50532a6e48fSopenharmony_ci* Type: Function
50632a6e48fSopenharmony_ci* Rank: Important(2)
50732a6e48fSopenharmony_ci* EnvConditions: N/A
50832a6e48fSopenharmony_ci* CaseDescription: 1. call RequestBuffer by cs and ps
50932a6e48fSopenharmony_ci*                  2. call CancelBuffer both
51032a6e48fSopenharmony_ci*                  3. check ret
51132a6e48fSopenharmony_ci */
51232a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, ReqCanFluAcqRel004, Function | MediumTest | Level2)
51332a6e48fSopenharmony_ci{
51432a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer;
51532a6e48fSopenharmony_ci    int releaseFence = -1;
51632a6e48fSopenharmony_ci
51732a6e48fSopenharmony_ci    GSError ret = ps->RequestBuffer(buffer, releaseFence, requestConfig);
51832a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
51932a6e48fSopenharmony_ci
52032a6e48fSopenharmony_ci    ret = ps->CancelBuffer(buffer);
52132a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
52232a6e48fSopenharmony_ci}
52332a6e48fSopenharmony_ci
52432a6e48fSopenharmony_ci/*
52532a6e48fSopenharmony_ci* Function: SetUserData
52632a6e48fSopenharmony_ci* Type: Function
52732a6e48fSopenharmony_ci* Rank: Important(2)
52832a6e48fSopenharmony_ci* EnvConditions: N/A
52932a6e48fSopenharmony_ci* CaseDescription: 1. call SetUserData many times
53032a6e48fSopenharmony_ci*                  2. check ret
53132a6e48fSopenharmony_ci */
53232a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, UserData001, Function | MediumTest | Level2)
53332a6e48fSopenharmony_ci{
53432a6e48fSopenharmony_ci    GSError ret;
53532a6e48fSopenharmony_ci
53632a6e48fSopenharmony_ci    std::string strs[SURFACE_MAX_USER_DATA_COUNT];
53732a6e48fSopenharmony_ci    constexpr int32_t stringLengthMax = 32;
53832a6e48fSopenharmony_ci    char str[stringLengthMax] = {};
53932a6e48fSopenharmony_ci    for (int i = 0; i < SURFACE_MAX_USER_DATA_COUNT; i++) {
54032a6e48fSopenharmony_ci        auto secRet = snprintf_s(str, sizeof(str), sizeof(str) - 1, "%d", i);
54132a6e48fSopenharmony_ci        ASSERT_GT(secRet, 0);
54232a6e48fSopenharmony_ci
54332a6e48fSopenharmony_ci        strs[i] = str;
54432a6e48fSopenharmony_ci        ret = cs->SetUserData(strs[i], "magic");
54532a6e48fSopenharmony_ci        ASSERT_EQ(ret, OHOS::GSERROR_OK);
54632a6e48fSopenharmony_ci    }
54732a6e48fSopenharmony_ci
54832a6e48fSopenharmony_ci    ret = cs->SetUserData("-1", "error");
54932a6e48fSopenharmony_ci    ASSERT_NE(ret, OHOS::GSERROR_OK);
55032a6e48fSopenharmony_ci
55132a6e48fSopenharmony_ci    std::string retStr;
55232a6e48fSopenharmony_ci    for (int i = 0; i < SURFACE_MAX_USER_DATA_COUNT; i++) {
55332a6e48fSopenharmony_ci        retStr = cs->GetUserData(strs[i]);
55432a6e48fSopenharmony_ci        ASSERT_EQ(retStr, "magic");
55532a6e48fSopenharmony_ci    }
55632a6e48fSopenharmony_ci}
55732a6e48fSopenharmony_ci
55832a6e48fSopenharmony_ci/*
55932a6e48fSopenharmony_ci* Function: UserDataChangeListen
56032a6e48fSopenharmony_ci* Type: Function
56132a6e48fSopenharmony_ci* Rank: Important(2)
56232a6e48fSopenharmony_ci* EnvConditions: N/A
56332a6e48fSopenharmony_ci* CaseDescription: 1. RegisterUserDataChangeListen
56432a6e48fSopenharmony_ci*                  2. SetUserData
56532a6e48fSopenharmony_ci*                  3. check ret
56632a6e48fSopenharmony_ci */
56732a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, UserDataChangeListen001, Function | MediumTest | Level2)
56832a6e48fSopenharmony_ci{
56932a6e48fSopenharmony_ci    sptr<IConsumerSurface> csTestUserData = IConsumerSurface::Create();
57032a6e48fSopenharmony_ci    GSError ret1 = OHOS::GSERROR_INVALID_ARGUMENTS;
57132a6e48fSopenharmony_ci    GSError ret2 = OHOS::GSERROR_INVALID_ARGUMENTS;
57232a6e48fSopenharmony_ci    auto func1 = [&ret1](const std::string& key, const std::string& value) {
57332a6e48fSopenharmony_ci        ret1 = OHOS::GSERROR_OK;
57432a6e48fSopenharmony_ci    };
57532a6e48fSopenharmony_ci    auto func2 = [&ret2](const std::string& key, const std::string& value) {
57632a6e48fSopenharmony_ci        ret2 = OHOS::GSERROR_OK;
57732a6e48fSopenharmony_ci    };
57832a6e48fSopenharmony_ci    csTestUserData->RegisterUserDataChangeListener("func1", func1);
57932a6e48fSopenharmony_ci    csTestUserData->RegisterUserDataChangeListener("func2", func2);
58032a6e48fSopenharmony_ci    csTestUserData->RegisterUserDataChangeListener("func3", nullptr);
58132a6e48fSopenharmony_ci    ASSERT_EQ(csTestUserData->RegisterUserDataChangeListener("func2", func2), OHOS::GSERROR_INVALID_ARGUMENTS);
58232a6e48fSopenharmony_ci
58332a6e48fSopenharmony_ci    if (csTestUserData->SetUserData("Regist", "OK") == OHOS::GSERROR_OK) {
58432a6e48fSopenharmony_ci        ASSERT_EQ(ret1, OHOS::GSERROR_OK);
58532a6e48fSopenharmony_ci        ASSERT_EQ(ret2, OHOS::GSERROR_OK);
58632a6e48fSopenharmony_ci    }
58732a6e48fSopenharmony_ci
58832a6e48fSopenharmony_ci    ret1 = OHOS::GSERROR_INVALID_ARGUMENTS;
58932a6e48fSopenharmony_ci    ret2 = OHOS::GSERROR_INVALID_ARGUMENTS;
59032a6e48fSopenharmony_ci    csTestUserData->UnRegisterUserDataChangeListener("func1");
59132a6e48fSopenharmony_ci    ASSERT_EQ(csTestUserData->UnRegisterUserDataChangeListener("func1"), OHOS::GSERROR_INVALID_ARGUMENTS);
59232a6e48fSopenharmony_ci
59332a6e48fSopenharmony_ci    if (csTestUserData->SetUserData("UnRegist", "INVALID") == OHOS::GSERROR_OK) {
59432a6e48fSopenharmony_ci        ASSERT_EQ(ret1, OHOS::GSERROR_INVALID_ARGUMENTS);
59532a6e48fSopenharmony_ci        ASSERT_EQ(ret2, OHOS::GSERROR_OK);
59632a6e48fSopenharmony_ci    }
59732a6e48fSopenharmony_ci
59832a6e48fSopenharmony_ci    ret1 = OHOS::GSERROR_INVALID_ARGUMENTS;
59932a6e48fSopenharmony_ci    ret2 = OHOS::GSERROR_INVALID_ARGUMENTS;
60032a6e48fSopenharmony_ci    csTestUserData->ClearUserDataChangeListener();
60132a6e48fSopenharmony_ci    csTestUserData->RegisterUserDataChangeListener("func1", func1);
60232a6e48fSopenharmony_ci    if (csTestUserData->SetUserData("Clear", "OK") == OHOS::GSERROR_OK) {
60332a6e48fSopenharmony_ci        ASSERT_EQ(ret1, OHOS::GSERROR_OK);
60432a6e48fSopenharmony_ci        ASSERT_EQ(ret2, OHOS::GSERROR_INVALID_ARGUMENTS);
60532a6e48fSopenharmony_ci    }
60632a6e48fSopenharmony_ci}
60732a6e48fSopenharmony_ci
60832a6e48fSopenharmony_ci/*
60932a6e48fSopenharmony_ci* Function: UserDataChangeListen
61032a6e48fSopenharmony_ci* Type: Function
61132a6e48fSopenharmony_ci* Rank: Important(2)
61232a6e48fSopenharmony_ci* EnvConditions: N/A
61332a6e48fSopenharmony_ci* CaseDescription: 1. RegisterUserDataChangeListen
61432a6e48fSopenharmony_ci*                  2. SetUserData
61532a6e48fSopenharmony_ci*                  3. check ret
61632a6e48fSopenharmony_ci */
61732a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, UserDataChangeListen002, Function | MediumTest | Level2)
61832a6e48fSopenharmony_ci{
61932a6e48fSopenharmony_ci    sptr<IConsumerSurface> csTestUserData = IConsumerSurface::Create();
62032a6e48fSopenharmony_ci
62132a6e48fSopenharmony_ci    auto func = [&csTestUserData](const std::string& FuncName) {
62232a6e48fSopenharmony_ci        constexpr int32_t RegisterListenerNum = 1000;
62332a6e48fSopenharmony_ci        std::vector<GSError> ret(RegisterListenerNum, OHOS::GSERROR_INVALID_ARGUMENTS);
62432a6e48fSopenharmony_ci        std::string strs[RegisterListenerNum];
62532a6e48fSopenharmony_ci        constexpr int32_t stringLengthMax = 32;
62632a6e48fSopenharmony_ci        char str[stringLengthMax] = {};
62732a6e48fSopenharmony_ci        for (int i = 0; i < RegisterListenerNum; i++) {
62832a6e48fSopenharmony_ci            auto secRet = snprintf_s(str, sizeof(str), sizeof(str) - 1, "%s%d", FuncName.c_str(), i);
62932a6e48fSopenharmony_ci            ASSERT_GT(secRet, 0);
63032a6e48fSopenharmony_ci            strs[i] = str;
63132a6e48fSopenharmony_ci            ASSERT_EQ(csTestUserData->RegisterUserDataChangeListener(strs[i], [i, &ret]
63232a6e48fSopenharmony_ci            (const std::string& key, const std::string& value) {
63332a6e48fSopenharmony_ci                ret[i] = OHOS::GSERROR_OK;
63432a6e48fSopenharmony_ci            }), OHOS::GSERROR_OK);
63532a6e48fSopenharmony_ci        }
63632a6e48fSopenharmony_ci
63732a6e48fSopenharmony_ci        if (csTestUserData->SetUserData("Regist", FuncName) == OHOS::GSERROR_OK) {
63832a6e48fSopenharmony_ci            for (int i = 0; i < RegisterListenerNum; i++) {
63932a6e48fSopenharmony_ci                ASSERT_EQ(ret[i], OHOS::GSERROR_OK);
64032a6e48fSopenharmony_ci            }
64132a6e48fSopenharmony_ci        }
64232a6e48fSopenharmony_ci
64332a6e48fSopenharmony_ci        for (int i = 0; i < RegisterListenerNum; i++) {
64432a6e48fSopenharmony_ci            csTestUserData->UnRegisterUserDataChangeListener(strs[i]);
64532a6e48fSopenharmony_ci        }
64632a6e48fSopenharmony_ci    };
64732a6e48fSopenharmony_ci
64832a6e48fSopenharmony_ci    std::thread t1(func, "thread1");
64932a6e48fSopenharmony_ci    std::thread t2(func, "thread2");
65032a6e48fSopenharmony_ci    t1.join();
65132a6e48fSopenharmony_ci    t2.join();
65232a6e48fSopenharmony_ci}
65332a6e48fSopenharmony_ci
65432a6e48fSopenharmony_ci/*
65532a6e48fSopenharmony_ci* Function: SetUserData
65632a6e48fSopenharmony_ci* Type: Function
65732a6e48fSopenharmony_ci* Rank: Important(2)
65832a6e48fSopenharmony_ci* EnvConditions: N/A
65932a6e48fSopenharmony_ci* CaseDescription: 1. call SetUserData many times
66032a6e48fSopenharmony_ci*                  2. check ret
66132a6e48fSopenharmony_ci */
66232a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, RegisterConsumerListener001, Function | MediumTest | Level2)
66332a6e48fSopenharmony_ci{
66432a6e48fSopenharmony_ci    class TestConsumerListener : public IBufferConsumerListener {
66532a6e48fSopenharmony_ci    public:
66632a6e48fSopenharmony_ci        void OnBufferAvailable() override
66732a6e48fSopenharmony_ci        {
66832a6e48fSopenharmony_ci            sptr<SurfaceBuffer> buffer;
66932a6e48fSopenharmony_ci            int32_t flushFence;
67032a6e48fSopenharmony_ci
67132a6e48fSopenharmony_ci            cs->AcquireBuffer(buffer, flushFence, timestamp, damage);
67232a6e48fSopenharmony_ci            int32_t *p = (int32_t*)buffer->GetVirAddr();
67332a6e48fSopenharmony_ci            if (p != nullptr) {
67432a6e48fSopenharmony_ci                for (int32_t i = 0; i < 128; i++) {
67532a6e48fSopenharmony_ci                    ASSERT_EQ(p[i], i);
67632a6e48fSopenharmony_ci                }
67732a6e48fSopenharmony_ci            }
67832a6e48fSopenharmony_ci
67932a6e48fSopenharmony_ci            cs->ReleaseBuffer(buffer, -1);
68032a6e48fSopenharmony_ci        }
68132a6e48fSopenharmony_ci    };
68232a6e48fSopenharmony_ci
68332a6e48fSopenharmony_ci    sptr<IBufferConsumerListener> listener = new TestConsumerListener();
68432a6e48fSopenharmony_ci    GSError ret = cs->RegisterConsumerListener(listener);
68532a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
68632a6e48fSopenharmony_ci
68732a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer;
68832a6e48fSopenharmony_ci    int releaseFence = -1;
68932a6e48fSopenharmony_ci    ret = ps->RequestBuffer(buffer, releaseFence, requestConfig);
69032a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
69132a6e48fSopenharmony_ci    ASSERT_NE(buffer, nullptr);
69232a6e48fSopenharmony_ci
69332a6e48fSopenharmony_ci    int32_t *p = (int32_t*)buffer->GetVirAddr();
69432a6e48fSopenharmony_ci    if (p != nullptr) {
69532a6e48fSopenharmony_ci        for (int32_t i = 0; i < 128; i++) {
69632a6e48fSopenharmony_ci            p[i] = i;
69732a6e48fSopenharmony_ci        }
69832a6e48fSopenharmony_ci    }
69932a6e48fSopenharmony_ci
70032a6e48fSopenharmony_ci    GraphicTransformType tranformType = ps->GetTransform();
70132a6e48fSopenharmony_ci    ret = ps->FlushBuffer(buffer, -1, flushConfig);
70232a6e48fSopenharmony_ci    ASSERT_EQ(ps->SetTransform(GraphicTransformType::GRAPHIC_ROTATE_180), OHOS::GSERROR_OK);
70332a6e48fSopenharmony_ci    GraphicTransformType bufferTranformType = GraphicTransformType::GRAPHIC_ROTATE_NONE;
70432a6e48fSopenharmony_ci    ASSERT_EQ(cs->GetSurfaceBufferTransformType(nullptr, &bufferTranformType), OHOS::SURFACE_ERROR_INVALID_PARAM);
70532a6e48fSopenharmony_ci    ASSERT_EQ(cs->GetSurfaceBufferTransformType(buffer, nullptr), OHOS::SURFACE_ERROR_INVALID_PARAM);
70632a6e48fSopenharmony_ci    ASSERT_EQ(cs->GetSurfaceBufferTransformType(buffer, &bufferTranformType), OHOS::GSERROR_OK);
70732a6e48fSopenharmony_ci    ASSERT_EQ(bufferTranformType, tranformType);
70832a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
70932a6e48fSopenharmony_ci    listener->OnTunnelHandleChange();
71032a6e48fSopenharmony_ci    listener->OnGoBackground();
71132a6e48fSopenharmony_ci    listener->OnCleanCache();
71232a6e48fSopenharmony_ci    listener->OnTransformChange();
71332a6e48fSopenharmony_ci    TestConsumerListenerClazz* listenerClazz = new TestConsumerListenerClazz();
71432a6e48fSopenharmony_ci    listenerClazz->OnTunnelHandleChange();
71532a6e48fSopenharmony_ci    listenerClazz->OnGoBackground();
71632a6e48fSopenharmony_ci    listenerClazz->OnCleanCache();
71732a6e48fSopenharmony_ci    listenerClazz->OnTransformChange();
71832a6e48fSopenharmony_ci    delete listenerClazz;
71932a6e48fSopenharmony_ci}
72032a6e48fSopenharmony_ci
72132a6e48fSopenharmony_ci/*
72232a6e48fSopenharmony_ci* Function: RegisterConsumerListener, RequestBuffer and FlushBuffer
72332a6e48fSopenharmony_ci* Type: Function
72432a6e48fSopenharmony_ci* Rank: Important(2)
72532a6e48fSopenharmony_ci* EnvConditions: N/A
72632a6e48fSopenharmony_ci* CaseDescription: 1. call RegisterConsumerListener
72732a6e48fSopenharmony_ci*                  2. call RequestBuffer
72832a6e48fSopenharmony_ci*                  3. call FlushBuffer
72932a6e48fSopenharmony_ci*                  4. check ret
73032a6e48fSopenharmony_ci */
73132a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, RegisterConsumerListener002, Function | MediumTest | Level2)
73232a6e48fSopenharmony_ci{
73332a6e48fSopenharmony_ci    sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
73432a6e48fSopenharmony_ci    GSError ret = cs->RegisterConsumerListener(listener);
73532a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
73632a6e48fSopenharmony_ci
73732a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer;
73832a6e48fSopenharmony_ci    int releaseFence = -1;
73932a6e48fSopenharmony_ci    ret = ps->RequestBuffer(buffer, releaseFence, requestConfig);
74032a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
74132a6e48fSopenharmony_ci    ASSERT_NE(buffer, nullptr);
74232a6e48fSopenharmony_ci
74332a6e48fSopenharmony_ci    int32_t *p = (int32_t*)buffer->GetVirAddr();
74432a6e48fSopenharmony_ci    if (p != nullptr) {
74532a6e48fSopenharmony_ci        for (int32_t i = 0; i < requestConfig.width * requestConfig.height; i++) {
74632a6e48fSopenharmony_ci            p[i] = i;
74732a6e48fSopenharmony_ci        }
74832a6e48fSopenharmony_ci    }
74932a6e48fSopenharmony_ci    ASSERT_EQ(ps->SetTransform(GraphicTransformType::GRAPHIC_ROTATE_90), OHOS::GSERROR_OK);
75032a6e48fSopenharmony_ci    ret = ps->FlushBuffer(buffer, -1, flushConfig);
75132a6e48fSopenharmony_ci    GraphicTransformType bufferTranformType = GraphicTransformType::GRAPHIC_ROTATE_NONE;
75232a6e48fSopenharmony_ci    ASSERT_EQ(cs->GetSurfaceBufferTransformType(buffer, &bufferTranformType), OHOS::GSERROR_OK);
75332a6e48fSopenharmony_ci    ASSERT_EQ(bufferTranformType, GraphicTransformType::GRAPHIC_ROTATE_90);
75432a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
75532a6e48fSopenharmony_ci    ASSERT_EQ(ps->SetTransform(GraphicTransformType::GRAPHIC_ROTATE_NONE), OHOS::GSERROR_OK);
75632a6e48fSopenharmony_ci    sptr<OHOS::SyncFence> flushFence;
75732a6e48fSopenharmony_ci    ret = cs->AcquireBuffer(buffer, flushFence, timestamp, damage);
75832a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
75932a6e48fSopenharmony_ci    ASSERT_NE(buffer, nullptr);
76032a6e48fSopenharmony_ci    bool isInCache = false;
76132a6e48fSopenharmony_ci    ASSERT_EQ(cs->IsSurfaceBufferInCache(buffer->GetSeqNum(), isInCache), OHOS::GSERROR_OK);
76232a6e48fSopenharmony_ci    ASSERT_EQ(isInCache, true);
76332a6e48fSopenharmony_ci    ASSERT_EQ(cs->IsSurfaceBufferInCache(0xFFFFFFFF, isInCache), OHOS::GSERROR_OK);
76432a6e48fSopenharmony_ci    ASSERT_EQ(isInCache, false);
76532a6e48fSopenharmony_ci}
76632a6e48fSopenharmony_ci
76732a6e48fSopenharmony_ci/*
76832a6e48fSopenharmony_ci* Function: RegisterConsumerListener
76932a6e48fSopenharmony_ci* Type: Function
77032a6e48fSopenharmony_ci* Rank: Important(2)
77132a6e48fSopenharmony_ci* EnvConditions: N/A
77232a6e48fSopenharmony_ci* CaseDescription: 1. call RegisterConsumerListener with nullptr params
77332a6e48fSopenharmony_ci*                  2. check ret
77432a6e48fSopenharmony_ci */
77532a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, RegisterConsumerListener003, Function | MediumTest | Level2)
77632a6e48fSopenharmony_ci{
77732a6e48fSopenharmony_ci    GSError ret = surface_->RegisterConsumerListener(nullptr);
77832a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
77932a6e48fSopenharmony_ci    sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
78032a6e48fSopenharmony_ci    ret = surface_->RegisterConsumerListener(listener);
78132a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
78232a6e48fSopenharmony_ci}
78332a6e48fSopenharmony_ci
78432a6e48fSopenharmony_ci/*
78532a6e48fSopenharmony_ci* Function: RegisterConsumerListener
78632a6e48fSopenharmony_ci* Type: Function
78732a6e48fSopenharmony_ci* Rank: Important(2)
78832a6e48fSopenharmony_ci* EnvConditions: N/A
78932a6e48fSopenharmony_ci* CaseDescription: 1. call RegisterConsumerListener with nullptr params
79032a6e48fSopenharmony_ci*                  2. check ret
79132a6e48fSopenharmony_ci */
79232a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, RegisterConsumerListener004, Function | MediumTest | Level2)
79332a6e48fSopenharmony_ci{
79432a6e48fSopenharmony_ci    GSError ret = surface_->RegisterConsumerListener(nullptr);
79532a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
79632a6e48fSopenharmony_ci    TestConsumerListenerClazz* listenerClazz = new TestConsumerListenerClazz();
79732a6e48fSopenharmony_ci    ret = surface_->RegisterConsumerListener(listenerClazz);
79832a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
79932a6e48fSopenharmony_ci    delete listenerClazz;
80032a6e48fSopenharmony_ci}
80132a6e48fSopenharmony_ci
80232a6e48fSopenharmony_ci/*
80332a6e48fSopenharmony_ci* Function: RegisterReleaseListener
80432a6e48fSopenharmony_ci* Type: Function
80532a6e48fSopenharmony_ci* Rank: Important(2)
80632a6e48fSopenharmony_ci* EnvConditions: N/A
80732a6e48fSopenharmony_ci* CaseDescription: 1. call RegisterReleaseListener with nullptr param
80832a6e48fSopenharmony_ci*                  2. check ret
80932a6e48fSopenharmony_ci */
81032a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, RegisterReleaseListener001, Function | MediumTest | Level2)
81132a6e48fSopenharmony_ci{
81232a6e48fSopenharmony_ci    OnReleaseFunc onBufferRelease = nullptr;
81332a6e48fSopenharmony_ci    GSError ret = surface_->RegisterReleaseListener(onBufferRelease);
81432a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
81532a6e48fSopenharmony_ci}
81632a6e48fSopenharmony_ci
81732a6e48fSopenharmony_ci/*
81832a6e48fSopenharmony_ci* Function: RegisterReleaseListener
81932a6e48fSopenharmony_ci* Type: Function
82032a6e48fSopenharmony_ci* Rank: Important(2)
82132a6e48fSopenharmony_ci* EnvConditions: N/A
82232a6e48fSopenharmony_ci* CaseDescription: 1. call RegisterReleaseListener with consumer_ is normal
82332a6e48fSopenharmony_ci*                  2. check ret
82432a6e48fSopenharmony_ci */
82532a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, RegisterReleaseListener002, Function | MediumTest | Level2)
82632a6e48fSopenharmony_ci{
82732a6e48fSopenharmony_ci    sptr<BufferQueue> queue = new BufferQueue("test", false);
82832a6e48fSopenharmony_ci    surface_->consumer_ = new BufferQueueConsumer(queue);
82932a6e48fSopenharmony_ci    ASSERT_NE(surface_->consumer_, nullptr);
83032a6e48fSopenharmony_ci    OnReleaseFunc onBufferRelease = nullptr;
83132a6e48fSopenharmony_ci    GSError ret = surface_->RegisterReleaseListener(onBufferRelease);
83232a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
83332a6e48fSopenharmony_ci}
83432a6e48fSopenharmony_ci
83532a6e48fSopenharmony_ci/*
83632a6e48fSopenharmony_ci* Function: RegisterReleaseListener
83732a6e48fSopenharmony_ci* Type: Function
83832a6e48fSopenharmony_ci* Rank: Important(2)
83932a6e48fSopenharmony_ci* EnvConditions: N/A
84032a6e48fSopenharmony_ci* CaseDescription: 1. call RegisterReleaseListener
84132a6e48fSopenharmony_ci*                  2. check ret
84232a6e48fSopenharmony_ci */
84332a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, RegisterReleaseListener003, Function | MediumTest | Level2)
84432a6e48fSopenharmony_ci{
84532a6e48fSopenharmony_ci    OnReleaseFuncWithFence func = nullptr;
84632a6e48fSopenharmony_ci    GSError ret = surface_->RegisterReleaseListener(func);
84732a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_NOT_SUPPORT);
84832a6e48fSopenharmony_ci}
84932a6e48fSopenharmony_ci
85032a6e48fSopenharmony_ci/*
85132a6e48fSopenharmony_ci* Function: UnRegisterReleaseListener
85232a6e48fSopenharmony_ci* Type: Function
85332a6e48fSopenharmony_ci* Rank: Important(2)
85432a6e48fSopenharmony_ci* EnvConditions: N/A
85532a6e48fSopenharmony_ci* CaseDescription: 1. call UnRegisterReleaseListener
85632a6e48fSopenharmony_ci*                  2. check ret
85732a6e48fSopenharmony_ci */
85832a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, UnRegisterReleaseListener001, Function | MediumTest | Level2)
85932a6e48fSopenharmony_ci{
86032a6e48fSopenharmony_ci    GSError ret = surface_->UnRegisterReleaseListener();
86132a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
86232a6e48fSopenharmony_ci}
86332a6e48fSopenharmony_ci
86432a6e48fSopenharmony_ci/*
86532a6e48fSopenharmony_ci* Function: RegisterDeleteBufferListener
86632a6e48fSopenharmony_ci* Type: Function
86732a6e48fSopenharmony_ci* Rank: Important(2)
86832a6e48fSopenharmony_ci* EnvConditions: N/A
86932a6e48fSopenharmony_ci* CaseDescription: 1. call RegisterDeleteBufferListener with consumer_ is nullptr
87032a6e48fSopenharmony_ci*                  2. check ret
87132a6e48fSopenharmony_ci */
87232a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, RegisterDeleteBufferListener001, Function | MediumTest | Level2)
87332a6e48fSopenharmony_ci{
87432a6e48fSopenharmony_ci    OnDeleteBufferFunc func = nullptr;
87532a6e48fSopenharmony_ci    GSError ret = surface_->RegisterDeleteBufferListener(func, false);
87632a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
87732a6e48fSopenharmony_ci}
87832a6e48fSopenharmony_ci
87932a6e48fSopenharmony_ci/*
88032a6e48fSopenharmony_ci* Function: RegisterDeleteBufferListener
88132a6e48fSopenharmony_ci* Type: Function
88232a6e48fSopenharmony_ci* Rank: Important(2)
88332a6e48fSopenharmony_ci* EnvConditions: N/A
88432a6e48fSopenharmony_ci* CaseDescription: 1. call RegisterDeleteBufferListener with consumer_ is normal
88532a6e48fSopenharmony_ci*                  2. check ret
88632a6e48fSopenharmony_ci */
88732a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, RegisterDeleteBufferListener002, Function | MediumTest | Level2)
88832a6e48fSopenharmony_ci{
88932a6e48fSopenharmony_ci    sptr<BufferQueue> queue = new BufferQueue("test", false);
89032a6e48fSopenharmony_ci    surface_->consumer_ = new BufferQueueConsumer(queue);
89132a6e48fSopenharmony_ci    ASSERT_NE(surface_->consumer_, nullptr);
89232a6e48fSopenharmony_ci    OnDeleteBufferFunc func = nullptr;
89332a6e48fSopenharmony_ci    GSError ret = surface_->RegisterDeleteBufferListener(func, false);
89432a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
89532a6e48fSopenharmony_ci    ret = surface_->RegisterDeleteBufferListener(func, true);
89632a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
89732a6e48fSopenharmony_ci}
89832a6e48fSopenharmony_ci
89932a6e48fSopenharmony_ci/*
90032a6e48fSopenharmony_ci* Function: UnregisterConsumerListener
90132a6e48fSopenharmony_ci* Type: Function
90232a6e48fSopenharmony_ci* Rank: Important(2)
90332a6e48fSopenharmony_ci* EnvConditions: N/A
90432a6e48fSopenharmony_ci* CaseDescription: 1. call UnregisterConsumerListener with consumer_ is nullptr
90532a6e48fSopenharmony_ci*                  2. check ret
90632a6e48fSopenharmony_ci */
90732a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, UnregisterConsumerListener001, Function | MediumTest | Level2)
90832a6e48fSopenharmony_ci{
90932a6e48fSopenharmony_ci    GSError ret = surface_->UnregisterConsumerListener();
91032a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
91132a6e48fSopenharmony_ci}
91232a6e48fSopenharmony_ci
91332a6e48fSopenharmony_ci/*
91432a6e48fSopenharmony_ci* Function: UnregisterConsumerListener
91532a6e48fSopenharmony_ci* Type: Function
91632a6e48fSopenharmony_ci* Rank: Important(2)
91732a6e48fSopenharmony_ci* EnvConditions: N/A
91832a6e48fSopenharmony_ci* CaseDescription: 1. call UnregisterConsumerListener with consumer_ is normal
91932a6e48fSopenharmony_ci*                  2. check ret
92032a6e48fSopenharmony_ci */
92132a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, UnregisterConsumerListener002, Function | MediumTest | Level2)
92232a6e48fSopenharmony_ci{
92332a6e48fSopenharmony_ci    sptr<BufferQueue> queue = new BufferQueue("test", false);
92432a6e48fSopenharmony_ci    surface_->consumer_ = new BufferQueueConsumer(queue);
92532a6e48fSopenharmony_ci    ASSERT_NE(surface_->consumer_, nullptr);
92632a6e48fSopenharmony_ci    GSError ret = surface_->UnregisterConsumerListener();
92732a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
92832a6e48fSopenharmony_ci}
92932a6e48fSopenharmony_ci
93032a6e48fSopenharmony_ci/*
93132a6e48fSopenharmony_ci* Function: RegisterUserDataChangeListener
93232a6e48fSopenharmony_ci* Type: Function
93332a6e48fSopenharmony_ci* Rank: Important(2)
93432a6e48fSopenharmony_ci* EnvConditions: N/A
93532a6e48fSopenharmony_ci* CaseDescription: 1. call RegisterUserDataChangeListener with nullptr param
93632a6e48fSopenharmony_ci*                  2. check ret
93732a6e48fSopenharmony_ci */
93832a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, RegisterUserDataChangeListener001, Function | MediumTest | Level2)
93932a6e48fSopenharmony_ci{
94032a6e48fSopenharmony_ci    GSError ret = surface_->RegisterUserDataChangeListener("test", nullptr);
94132a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
94232a6e48fSopenharmony_ci}
94332a6e48fSopenharmony_ci
94432a6e48fSopenharmony_ci/*
94532a6e48fSopenharmony_ci* Function: GoBackground
94632a6e48fSopenharmony_ci* Type: Function
94732a6e48fSopenharmony_ci* Rank: Important(2)
94832a6e48fSopenharmony_ci* EnvConditions: N/A
94932a6e48fSopenharmony_ci* CaseDescription: 1. call GoBackground with consumer_ is nullptr
95032a6e48fSopenharmony_ci*                  2. check ret
95132a6e48fSopenharmony_ci */
95232a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, GoBackground001, Function | MediumTest | Level2)
95332a6e48fSopenharmony_ci{
95432a6e48fSopenharmony_ci    GSError ret = surface_->GoBackground();
95532a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
95632a6e48fSopenharmony_ci}
95732a6e48fSopenharmony_ci
95832a6e48fSopenharmony_ci/*
95932a6e48fSopenharmony_ci* Function: GoBackground
96032a6e48fSopenharmony_ci* Type: Function
96132a6e48fSopenharmony_ci* Rank: Important(2)
96232a6e48fSopenharmony_ci* EnvConditions: N/A
96332a6e48fSopenharmony_ci* CaseDescription: 1. call GoBackground with consumer_ is normal
96432a6e48fSopenharmony_ci*                  2. check ret
96532a6e48fSopenharmony_ci */
96632a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, GoBackground002, Function | MediumTest | Level2)
96732a6e48fSopenharmony_ci{
96832a6e48fSopenharmony_ci    sptr<BufferQueue> queue = new BufferQueue("test", false);
96932a6e48fSopenharmony_ci    surface_->consumer_ = new BufferQueueConsumer(queue);
97032a6e48fSopenharmony_ci    ASSERT_NE(surface_->consumer_, nullptr);
97132a6e48fSopenharmony_ci    GSError ret = surface_->GoBackground();
97232a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
97332a6e48fSopenharmony_ci    surface_->producer_ = new BufferQueueProducer(queue);
97432a6e48fSopenharmony_ci    ASSERT_NE(surface_->producer_, nullptr);
97532a6e48fSopenharmony_ci    ret = surface_->GoBackground();
97632a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
97732a6e48fSopenharmony_ci}
97832a6e48fSopenharmony_ci
97932a6e48fSopenharmony_ci/*
98032a6e48fSopenharmony_ci* Function: GetUniqueId
98132a6e48fSopenharmony_ci* Type: Function
98232a6e48fSopenharmony_ci* Rank: Important(2)
98332a6e48fSopenharmony_ci* EnvConditions: N/A
98432a6e48fSopenharmony_ci* CaseDescription: 1. call GetUniqueId with producer_ is nullptr
98532a6e48fSopenharmony_ci*                  2. check ret
98632a6e48fSopenharmony_ci */
98732a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, GetUniqueId001, Function | MediumTest | Level2)
98832a6e48fSopenharmony_ci{
98932a6e48fSopenharmony_ci    uint64_t ret = surface_->GetUniqueId();
99032a6e48fSopenharmony_ci    ASSERT_EQ(ret, 0);
99132a6e48fSopenharmony_ci}
99232a6e48fSopenharmony_ci
99332a6e48fSopenharmony_ci/*
99432a6e48fSopenharmony_ci* Function: Dump
99532a6e48fSopenharmony_ci* Type: Function
99632a6e48fSopenharmony_ci* Rank: Important(2)
99732a6e48fSopenharmony_ci* EnvConditions: N/A
99832a6e48fSopenharmony_ci* CaseDescription: 1. call Dump
99932a6e48fSopenharmony_ci*                  2. check ret
100032a6e48fSopenharmony_ci */
100132a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, Dump001, Function | MediumTest | Level2)
100232a6e48fSopenharmony_ci{
100332a6e48fSopenharmony_ci    std::string result;
100432a6e48fSopenharmony_ci    surface_->Dump(result);
100532a6e48fSopenharmony_ci    sptr<BufferQueue> queue = new BufferQueue("test", false);
100632a6e48fSopenharmony_ci    surface_->consumer_ = new BufferQueueConsumer(queue);
100732a6e48fSopenharmony_ci    ASSERT_NE(surface_->consumer_, nullptr);
100832a6e48fSopenharmony_ci    surface_->Dump(result);
100932a6e48fSopenharmony_ci}
101032a6e48fSopenharmony_ci
101132a6e48fSopenharmony_ci/*
101232a6e48fSopenharmony_ci* Function: SetTransform and GetTransform
101332a6e48fSopenharmony_ci* Type: Function
101432a6e48fSopenharmony_ci* Rank: Important(2)
101532a6e48fSopenharmony_ci* EnvConditions: N/A
101632a6e48fSopenharmony_ci* CaseDescription: 1. call GetTransform by default
101732a6e48fSopenharmony_ci */
101832a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, transform001, Function | MediumTest | Level2)
101932a6e48fSopenharmony_ci{
102032a6e48fSopenharmony_ci    ASSERT_EQ(cs->GetTransform(), GraphicTransformType::GRAPHIC_ROTATE_NONE);
102132a6e48fSopenharmony_ci}
102232a6e48fSopenharmony_ci
102332a6e48fSopenharmony_ci/*
102432a6e48fSopenharmony_ci* Function: SetTransform and GetTransform
102532a6e48fSopenharmony_ci* Type: Function
102632a6e48fSopenharmony_ci* Rank: Important(1)
102732a6e48fSopenharmony_ci* EnvConditions: N/A
102832a6e48fSopenharmony_ci* CaseDescription: 1. call SetTransform with different paramaters and call GetTransform
102932a6e48fSopenharmony_ci*                  2. check ret
103032a6e48fSopenharmony_ci */
103132a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, transform002, Function | MediumTest | Level1)
103232a6e48fSopenharmony_ci{
103332a6e48fSopenharmony_ci    GraphicTransformType transform = GraphicTransformType::GRAPHIC_ROTATE_90;
103432a6e48fSopenharmony_ci    GSError ret = ps->SetTransform(transform);
103532a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
103632a6e48fSopenharmony_ci    ASSERT_EQ(cs->GetTransform(), GraphicTransformType::GRAPHIC_ROTATE_90);
103732a6e48fSopenharmony_ci}
103832a6e48fSopenharmony_ci
103932a6e48fSopenharmony_ci/*
104032a6e48fSopenharmony_ci* Function: SetTransform and GetTransform
104132a6e48fSopenharmony_ci* Type: Function
104232a6e48fSopenharmony_ci* Rank: Important(1)
104332a6e48fSopenharmony_ci* EnvConditions: N/A
104432a6e48fSopenharmony_ci* CaseDescription: 1. call SetTransform with different paramaters and call GetTransform
104532a6e48fSopenharmony_ci*                  2. check ret
104632a6e48fSopenharmony_ci */
104732a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, transform003, Function | MediumTest | Level1)
104832a6e48fSopenharmony_ci{
104932a6e48fSopenharmony_ci    GraphicTransformType transform = GraphicTransformType::GRAPHIC_ROTATE_180;
105032a6e48fSopenharmony_ci    GSError ret = ps->SetTransform(transform);
105132a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
105232a6e48fSopenharmony_ci    ASSERT_EQ(cs->GetTransform(), GraphicTransformType::GRAPHIC_ROTATE_180);
105332a6e48fSopenharmony_ci}
105432a6e48fSopenharmony_ci
105532a6e48fSopenharmony_ci/*
105632a6e48fSopenharmony_ci* Function: SetTransform and GetTransform
105732a6e48fSopenharmony_ci* Type: Function
105832a6e48fSopenharmony_ci* Rank: Important(1)
105932a6e48fSopenharmony_ci* EnvConditions: N/A
106032a6e48fSopenharmony_ci* CaseDescription: 1. call SetTransform with different paramaters and call GetTransform
106132a6e48fSopenharmony_ci*                  2. check ret
106232a6e48fSopenharmony_ci */
106332a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, transform004, Function | MediumTest | Level1)
106432a6e48fSopenharmony_ci{
106532a6e48fSopenharmony_ci    GraphicTransformType transform = GraphicTransformType::GRAPHIC_ROTATE_270;
106632a6e48fSopenharmony_ci    GSError ret = ps->SetTransform(transform);
106732a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
106832a6e48fSopenharmony_ci    ASSERT_EQ(cs->GetTransform(), GraphicTransformType::GRAPHIC_ROTATE_270);
106932a6e48fSopenharmony_ci}
107032a6e48fSopenharmony_ci
107132a6e48fSopenharmony_ci/*
107232a6e48fSopenharmony_ci* Function: SetTransform and GetTransform
107332a6e48fSopenharmony_ci* Type: Function
107432a6e48fSopenharmony_ci* Rank: Important(1)
107532a6e48fSopenharmony_ci* EnvConditions: N/A
107632a6e48fSopenharmony_ci* CaseDescription: 1. call SetTransform with different paramaters and call GetTransform
107732a6e48fSopenharmony_ci*                  2. check ret
107832a6e48fSopenharmony_ci */
107932a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, transform005, Function | MediumTest | Level1)
108032a6e48fSopenharmony_ci{
108132a6e48fSopenharmony_ci    GraphicTransformType transform = GraphicTransformType::GRAPHIC_ROTATE_NONE;
108232a6e48fSopenharmony_ci    GSError ret = ps->SetTransform(transform);
108332a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
108432a6e48fSopenharmony_ci    ASSERT_EQ(cs->GetTransform(), GraphicTransformType::GRAPHIC_ROTATE_NONE);
108532a6e48fSopenharmony_ci}
108632a6e48fSopenharmony_ci
108732a6e48fSopenharmony_ci/*
108832a6e48fSopenharmony_ci* Function: SetTransform and GetTransform
108932a6e48fSopenharmony_ci* Type: Function
109032a6e48fSopenharmony_ci* Rank: Important(1)
109132a6e48fSopenharmony_ci* EnvConditions: N/A
109232a6e48fSopenharmony_ci* CaseDescription: 1. call SetTransform GetTransform with nullptr
109332a6e48fSopenharmony_ci*                  2. check ret
109432a6e48fSopenharmony_ci */
109532a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, transform006, Function | MediumTest | Level1)
109632a6e48fSopenharmony_ci{
109732a6e48fSopenharmony_ci    GraphicTransformType transform = GraphicTransformType::GRAPHIC_ROTATE_NONE;
109832a6e48fSopenharmony_ci    GSError ret = surface_->SetTransform(transform);
109932a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
110032a6e48fSopenharmony_ci    ASSERT_EQ(surface_->GetTransform(), GraphicTransformType::GRAPHIC_ROTATE_BUTT);
110132a6e48fSopenharmony_ci}
110232a6e48fSopenharmony_ci
110332a6e48fSopenharmony_ci/*
110432a6e48fSopenharmony_ci* Function: SetScalingMode and GetScalingMode
110532a6e48fSopenharmony_ci* Type: Function
110632a6e48fSopenharmony_ci* Rank: Important(2)
110732a6e48fSopenharmony_ci* EnvConditions: N/A
110832a6e48fSopenharmony_ci* CaseDescription: 1. call SetScalingMode with abnormal parameters and check ret
110932a6e48fSopenharmony_ci */
111032a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, scalingMode001, Function | MediumTest | Level2)
111132a6e48fSopenharmony_ci{
111232a6e48fSopenharmony_ci    ScalingMode scalingMode = ScalingMode::SCALING_MODE_SCALE_TO_WINDOW;
111332a6e48fSopenharmony_ci    GSError ret = cs->SetScalingMode(-1, scalingMode);
111432a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_NO_ENTRY);
111532a6e48fSopenharmony_ci    ret = cs->GetScalingMode(-1, scalingMode);
111632a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_NO_ENTRY);
111732a6e48fSopenharmony_ci}
111832a6e48fSopenharmony_ci
111932a6e48fSopenharmony_ci/*
112032a6e48fSopenharmony_ci* Function: SetScalingMode and GetScalingMode
112132a6e48fSopenharmony_ci* Type: Function
112232a6e48fSopenharmony_ci* Rank: Important(1)
112332a6e48fSopenharmony_ci* EnvConditions: N/A
112432a6e48fSopenharmony_ci* CaseDescription: 1. call SetScalingMode with normal parameters and check ret
112532a6e48fSopenharmony_ci*                  2. call GetScalingMode and check ret
112632a6e48fSopenharmony_ci */
112732a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, scalingMode002, Function | MediumTest | Level1)
112832a6e48fSopenharmony_ci{
112932a6e48fSopenharmony_ci    ScalingMode scalingMode = ScalingMode::SCALING_MODE_SCALE_TO_WINDOW;
113032a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer;
113132a6e48fSopenharmony_ci    int releaseFence = -1;
113232a6e48fSopenharmony_ci    GSError ret = ps->RequestBuffer(buffer, releaseFence, requestConfig);
113332a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
113432a6e48fSopenharmony_ci    ASSERT_NE(buffer, nullptr);
113532a6e48fSopenharmony_ci
113632a6e48fSopenharmony_ci    uint32_t sequence = buffer->GetSeqNum();
113732a6e48fSopenharmony_ci    ret = cs->SetScalingMode(sequence, scalingMode);
113832a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
113932a6e48fSopenharmony_ci
114032a6e48fSopenharmony_ci    ScalingMode scalingModeGet = ScalingMode::SCALING_MODE_FREEZE;
114132a6e48fSopenharmony_ci    ret = cs->GetScalingMode(sequence, scalingModeGet);
114232a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
114332a6e48fSopenharmony_ci    ASSERT_EQ(scalingMode, scalingModeGet);
114432a6e48fSopenharmony_ci
114532a6e48fSopenharmony_ci    ret = ps->CancelBuffer(buffer);
114632a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
114732a6e48fSopenharmony_ci}
114832a6e48fSopenharmony_ci
114932a6e48fSopenharmony_ci/*
115032a6e48fSopenharmony_ci* Function: SetScalingMode003
115132a6e48fSopenharmony_ci* Type: Function
115232a6e48fSopenharmony_ci* Rank: Important(2)
115332a6e48fSopenharmony_ci* EnvConditions: N/A
115432a6e48fSopenharmony_ci* CaseDescription: 1. call SetScalingMode with abnormal parameters and check ret
115532a6e48fSopenharmony_ci */
115632a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, scalingMode003, Function | MediumTest | Level2)
115732a6e48fSopenharmony_ci{
115832a6e48fSopenharmony_ci    ScalingMode scalingMode = ScalingMode::SCALING_MODE_SCALE_TO_WINDOW;
115932a6e48fSopenharmony_ci    GSError ret = cs->SetScalingMode(scalingMode);
116032a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
116132a6e48fSopenharmony_ci}
116232a6e48fSopenharmony_ci
116332a6e48fSopenharmony_ci/*
116432a6e48fSopenharmony_ci* Function: SetScalingMode and GetScalingMode
116532a6e48fSopenharmony_ci* Type: Function
116632a6e48fSopenharmony_ci* Rank: Important(1)
116732a6e48fSopenharmony_ci* EnvConditions: N/A
116832a6e48fSopenharmony_ci* CaseDescription: 1. call SetScalingMode with nullptr and check ret
116932a6e48fSopenharmony_ci*                  2. call GetScalingMode with nullptr and check ret
117032a6e48fSopenharmony_ci */
117132a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, scalingMode004, Function | MediumTest | Level1)
117232a6e48fSopenharmony_ci{
117332a6e48fSopenharmony_ci    ScalingMode scalingMode = ScalingMode::SCALING_MODE_SCALE_TO_WINDOW;
117432a6e48fSopenharmony_ci    GSError ret = surface_->SetScalingMode(firstSeqnum, scalingMode);
117532a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
117632a6e48fSopenharmony_ci    ret = surface_->SetScalingMode(scalingMode);
117732a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
117832a6e48fSopenharmony_ci    ret = surface_->GetScalingMode(firstSeqnum, scalingMode);
117932a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
118032a6e48fSopenharmony_ci}
118132a6e48fSopenharmony_ci
118232a6e48fSopenharmony_ci/*
118332a6e48fSopenharmony_ci* Function: QueryMetaDataType
118432a6e48fSopenharmony_ci* Type: Function
118532a6e48fSopenharmony_ci* Rank: Important(1)
118632a6e48fSopenharmony_ci* EnvConditions: N/A
118732a6e48fSopenharmony_ci* CaseDescription: 1. call QueryMetaDataType and check ret
118832a6e48fSopenharmony_ci */
118932a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, QueryMetaDataType001, Function | MediumTest | Level1)
119032a6e48fSopenharmony_ci{
119132a6e48fSopenharmony_ci    HDRMetaDataType type = HDRMetaDataType::HDR_META_DATA;
119232a6e48fSopenharmony_ci    GSError ret = cs->QueryMetaDataType(firstSeqnum, type);
119332a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
119432a6e48fSopenharmony_ci    ASSERT_EQ(type, HDRMetaDataType::HDR_NOT_USED);
119532a6e48fSopenharmony_ci}
119632a6e48fSopenharmony_ci
119732a6e48fSopenharmony_ci/*
119832a6e48fSopenharmony_ci* Function: QueryMetaDataType
119932a6e48fSopenharmony_ci* Type: Function
120032a6e48fSopenharmony_ci* Rank: Important(1)
120132a6e48fSopenharmony_ci* EnvConditions: N/A
120232a6e48fSopenharmony_ci* CaseDescription: 1. call SetMetaData with normal parameters and check ret
120332a6e48fSopenharmony_ci*                  2. call QueryMetaDataType and check ret
120432a6e48fSopenharmony_ci */
120532a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, QueryMetaDataType002, Function | MediumTest | Level1)
120632a6e48fSopenharmony_ci{
120732a6e48fSopenharmony_ci    std::vector<GraphicHDRMetaData> metaData;
120832a6e48fSopenharmony_ci    GraphicHDRMetaData data = {
120932a6e48fSopenharmony_ci        .key = GraphicHDRMetadataKey::GRAPHIC_MATAKEY_RED_PRIMARY_X,
121032a6e48fSopenharmony_ci        .value = 1,
121132a6e48fSopenharmony_ci    };
121232a6e48fSopenharmony_ci    metaData.push_back(data);
121332a6e48fSopenharmony_ci    GSError ret = cs->SetMetaData(firstSeqnum, metaData);
121432a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
121532a6e48fSopenharmony_ci
121632a6e48fSopenharmony_ci    HDRMetaDataType type = HDRMetaDataType::HDR_NOT_USED;
121732a6e48fSopenharmony_ci    ret = cs->QueryMetaDataType(firstSeqnum, type);
121832a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
121932a6e48fSopenharmony_ci    ASSERT_EQ(type, HDRMetaDataType::HDR_META_DATA);
122032a6e48fSopenharmony_ci}
122132a6e48fSopenharmony_ci
122232a6e48fSopenharmony_ci/*
122332a6e48fSopenharmony_ci* Function: QueryMetaDataType
122432a6e48fSopenharmony_ci* Type: Function
122532a6e48fSopenharmony_ci* Rank: Important(1)
122632a6e48fSopenharmony_ci* EnvConditions: N/A
122732a6e48fSopenharmony_ci* CaseDescription: 1. call SetMetaDataSet with normal parameters and check ret
122832a6e48fSopenharmony_ci*                  2. call QueryMetaDataType and check ret
122932a6e48fSopenharmony_ci */
123032a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, QueryMetaDataType003, Function | MediumTest | Level1)
123132a6e48fSopenharmony_ci{
123232a6e48fSopenharmony_ci    GraphicHDRMetadataKey key = GraphicHDRMetadataKey::GRAPHIC_MATAKEY_HDR10_PLUS;
123332a6e48fSopenharmony_ci    std::vector<uint8_t> metaData;
123432a6e48fSopenharmony_ci    uint8_t data = 1;
123532a6e48fSopenharmony_ci    metaData.push_back(data);
123632a6e48fSopenharmony_ci    GSError ret = cs->SetMetaDataSet(firstSeqnum, key, metaData);
123732a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
123832a6e48fSopenharmony_ci
123932a6e48fSopenharmony_ci    HDRMetaDataType type = HDRMetaDataType::HDR_NOT_USED;
124032a6e48fSopenharmony_ci    ret = cs->QueryMetaDataType(firstSeqnum, type);
124132a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
124232a6e48fSopenharmony_ci    ASSERT_EQ(type, HDRMetaDataType::HDR_META_DATA_SET);
124332a6e48fSopenharmony_ci}
124432a6e48fSopenharmony_ci
124532a6e48fSopenharmony_ci/*
124632a6e48fSopenharmony_ci* Function: QueryMetaDataType
124732a6e48fSopenharmony_ci* Type: Function
124832a6e48fSopenharmony_ci* Rank: Important(1)
124932a6e48fSopenharmony_ci* EnvConditions: N/A
125032a6e48fSopenharmony_ci* CaseDescription: 1. call QueryMetaDataType with nullptr and check ret
125132a6e48fSopenharmony_ci */
125232a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, QueryMetaDataType004, Function | MediumTest | Level1)
125332a6e48fSopenharmony_ci{
125432a6e48fSopenharmony_ci    HDRMetaDataType type = HDRMetaDataType::HDR_META_DATA;
125532a6e48fSopenharmony_ci    GSError ret = surface_->QueryMetaDataType(firstSeqnum, type);
125632a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
125732a6e48fSopenharmony_ci}
125832a6e48fSopenharmony_ci
125932a6e48fSopenharmony_ci/*
126032a6e48fSopenharmony_ci* Function: SetMetaData and GetMetaData
126132a6e48fSopenharmony_ci* Type: Function
126232a6e48fSopenharmony_ci* Rank: Important(2)
126332a6e48fSopenharmony_ci* EnvConditions: N/A
126432a6e48fSopenharmony_ci* CaseDescription: 1. call SetMetaData with abnormal parameters and check ret
126532a6e48fSopenharmony_ci */
126632a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, metaData001, Function | MediumTest | Level2)
126732a6e48fSopenharmony_ci{
126832a6e48fSopenharmony_ci    std::vector<GraphicHDRMetaData> metaData;
126932a6e48fSopenharmony_ci    GSError ret = cs->SetMetaData(firstSeqnum, metaData);
127032a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
127132a6e48fSopenharmony_ci}
127232a6e48fSopenharmony_ci
127332a6e48fSopenharmony_ci/*
127432a6e48fSopenharmony_ci* Function: SetMetaData and GetMetaData
127532a6e48fSopenharmony_ci* Type: Function
127632a6e48fSopenharmony_ci* Rank: Important(1)
127732a6e48fSopenharmony_ci* EnvConditions: N/A
127832a6e48fSopenharmony_ci* CaseDescription: 1. call SetMetaData with normal parameters and check ret
127932a6e48fSopenharmony_ci */
128032a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, metaData002, Function | MediumTest | Level1)
128132a6e48fSopenharmony_ci{
128232a6e48fSopenharmony_ci    std::vector<GraphicHDRMetaData> metaData;
128332a6e48fSopenharmony_ci    GraphicHDRMetaData data = {
128432a6e48fSopenharmony_ci        .key = GraphicHDRMetadataKey::GRAPHIC_MATAKEY_RED_PRIMARY_X,
128532a6e48fSopenharmony_ci        .value = 100,  // for test
128632a6e48fSopenharmony_ci    };
128732a6e48fSopenharmony_ci    metaData.push_back(data);
128832a6e48fSopenharmony_ci    GSError ret = cs->SetMetaData(firstSeqnum, metaData);
128932a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
129032a6e48fSopenharmony_ci}
129132a6e48fSopenharmony_ci
129232a6e48fSopenharmony_ci/*
129332a6e48fSopenharmony_ci* Function: SetMetaData and GetMetaData
129432a6e48fSopenharmony_ci* Type: Function
129532a6e48fSopenharmony_ci* Rank: Important(1)
129632a6e48fSopenharmony_ci* EnvConditions: N/A
129732a6e48fSopenharmony_ci* CaseDescription: 1. call SetMetaData with normal parameters and check ret
129832a6e48fSopenharmony_ci*                  2. call GetMetaData and check ret
129932a6e48fSopenharmony_ci */
130032a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, metaData003, Function | MediumTest | Level1)
130132a6e48fSopenharmony_ci{
130232a6e48fSopenharmony_ci    std::vector<GraphicHDRMetaData> metaData;
130332a6e48fSopenharmony_ci    GraphicHDRMetaData data = {
130432a6e48fSopenharmony_ci        .key = GraphicHDRMetadataKey::GRAPHIC_MATAKEY_RED_PRIMARY_X,
130532a6e48fSopenharmony_ci        .value = 100,  // for test
130632a6e48fSopenharmony_ci    };
130732a6e48fSopenharmony_ci    metaData.push_back(data);
130832a6e48fSopenharmony_ci
130932a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer;
131032a6e48fSopenharmony_ci    int releaseFence = -1;
131132a6e48fSopenharmony_ci    GSError ret = ps->RequestBuffer(buffer, releaseFence, requestConfig);
131232a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
131332a6e48fSopenharmony_ci    ASSERT_NE(buffer, nullptr);
131432a6e48fSopenharmony_ci
131532a6e48fSopenharmony_ci    uint32_t sequence = buffer->GetSeqNum();
131632a6e48fSopenharmony_ci    ret = cs->SetMetaData(sequence, metaData);
131732a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
131832a6e48fSopenharmony_ci
131932a6e48fSopenharmony_ci    std::vector<GraphicHDRMetaData> metaDataGet;
132032a6e48fSopenharmony_ci    ret = cs->GetMetaData(sequence, metaDataGet);
132132a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
132232a6e48fSopenharmony_ci    ASSERT_EQ(metaData[0].key, metaDataGet[0].key);
132332a6e48fSopenharmony_ci    ASSERT_EQ(metaData[0].value, metaDataGet[0].value);
132432a6e48fSopenharmony_ci
132532a6e48fSopenharmony_ci    ret = cs->GetMetaData(sequence + 1, metaDataGet);
132632a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_NO_ENTRY);
132732a6e48fSopenharmony_ci
132832a6e48fSopenharmony_ci    ret = ps->CancelBuffer(buffer);
132932a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
133032a6e48fSopenharmony_ci}
133132a6e48fSopenharmony_ci
133232a6e48fSopenharmony_ci/*
133332a6e48fSopenharmony_ci* Function: SetMetaData and GetMetaData
133432a6e48fSopenharmony_ci* Type: Function
133532a6e48fSopenharmony_ci* Rank: Important(2)
133632a6e48fSopenharmony_ci* EnvConditions: N/A
133732a6e48fSopenharmony_ci* CaseDescription: 1. call SetMetaData and GetMetaData with nullptr and check ret
133832a6e48fSopenharmony_ci */
133932a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, metaData004, Function | MediumTest | Level2)
134032a6e48fSopenharmony_ci{
134132a6e48fSopenharmony_ci    std::vector<GraphicHDRMetaData> metaData;
134232a6e48fSopenharmony_ci    GSError ret = surface_->SetMetaData(firstSeqnum, metaData);
134332a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
134432a6e48fSopenharmony_ci    ret = surface_->GetMetaData(firstSeqnum, metaData);
134532a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
134632a6e48fSopenharmony_ci}
134732a6e48fSopenharmony_ci
134832a6e48fSopenharmony_ci/*
134932a6e48fSopenharmony_ci* Function: SetMetaDataSet and GetMetaDataSet
135032a6e48fSopenharmony_ci* Type: Function
135132a6e48fSopenharmony_ci* Rank: Important(2)
135232a6e48fSopenharmony_ci* EnvConditions: N/A
135332a6e48fSopenharmony_ci* CaseDescription: 1. call SetMetaDataSet with abnormal parameters and check ret
135432a6e48fSopenharmony_ci */
135532a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, metaDataSet001, Function | MediumTest | Level2)
135632a6e48fSopenharmony_ci{
135732a6e48fSopenharmony_ci    GraphicHDRMetadataKey key = GraphicHDRMetadataKey::GRAPHIC_MATAKEY_HDR10_PLUS;
135832a6e48fSopenharmony_ci    std::vector<uint8_t> metaData;
135932a6e48fSopenharmony_ci    GSError ret = cs->SetMetaDataSet(firstSeqnum, key, metaData);
136032a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
136132a6e48fSopenharmony_ci}
136232a6e48fSopenharmony_ci
136332a6e48fSopenharmony_ci/*
136432a6e48fSopenharmony_ci* Function: SetMetaDataSet and GetMetaDataSet
136532a6e48fSopenharmony_ci* Type: Function
136632a6e48fSopenharmony_ci* Rank: Important(1)
136732a6e48fSopenharmony_ci* EnvConditions: N/A
136832a6e48fSopenharmony_ci* CaseDescription: 1. call SetMetaDataSet with normal parameters and check ret
136932a6e48fSopenharmony_ci */
137032a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, metaDataSet002, Function | MediumTest | Level1)
137132a6e48fSopenharmony_ci{
137232a6e48fSopenharmony_ci    GraphicHDRMetadataKey key = GraphicHDRMetadataKey::GRAPHIC_MATAKEY_HDR10_PLUS;
137332a6e48fSopenharmony_ci    std::vector<uint8_t> metaData;
137432a6e48fSopenharmony_ci    uint8_t data = 10;  // for test
137532a6e48fSopenharmony_ci    metaData.push_back(data);
137632a6e48fSopenharmony_ci    GSError ret = cs->SetMetaDataSet(firstSeqnum, key, metaData);
137732a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
137832a6e48fSopenharmony_ci}
137932a6e48fSopenharmony_ci
138032a6e48fSopenharmony_ci/*
138132a6e48fSopenharmony_ci* Function: SetMetaDataSet and GetMetaDataSet
138232a6e48fSopenharmony_ci* Type: Function
138332a6e48fSopenharmony_ci* Rank: Important(1)
138432a6e48fSopenharmony_ci* EnvConditions: N/A
138532a6e48fSopenharmony_ci* CaseDescription: 1. call SetMetaDataSet with normal parameters and check ret
138632a6e48fSopenharmony_ci*                  2. call GetMetaDataSet and check ret
138732a6e48fSopenharmony_ci */
138832a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, metaDataSet003, Function | MediumTest | Level1)
138932a6e48fSopenharmony_ci{
139032a6e48fSopenharmony_ci    GraphicHDRMetadataKey key = GraphicHDRMetadataKey::GRAPHIC_MATAKEY_HDR10_PLUS;
139132a6e48fSopenharmony_ci    std::vector<uint8_t> metaData;
139232a6e48fSopenharmony_ci    uint8_t data = 10;  // for test
139332a6e48fSopenharmony_ci    metaData.push_back(data);
139432a6e48fSopenharmony_ci
139532a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer;
139632a6e48fSopenharmony_ci    int releaseFence = -1;
139732a6e48fSopenharmony_ci    GSError ret = ps->RequestBuffer(buffer, releaseFence, requestConfig);
139832a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
139932a6e48fSopenharmony_ci    ASSERT_NE(buffer, nullptr);
140032a6e48fSopenharmony_ci
140132a6e48fSopenharmony_ci    uint32_t sequence = buffer->GetSeqNum();
140232a6e48fSopenharmony_ci    ret = cs->SetMetaDataSet(sequence, key, metaData);
140332a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
140432a6e48fSopenharmony_ci
140532a6e48fSopenharmony_ci    GraphicHDRMetadataKey keyGet = GraphicHDRMetadataKey::GRAPHIC_MATAKEY_RED_PRIMARY_X;
140632a6e48fSopenharmony_ci    std::vector<uint8_t> metaDataGet;
140732a6e48fSopenharmony_ci    ret = cs->GetMetaDataSet(sequence, keyGet, metaDataGet);
140832a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
140932a6e48fSopenharmony_ci    ASSERT_EQ(key, keyGet);
141032a6e48fSopenharmony_ci    ASSERT_EQ(metaData[0], metaDataGet[0]);
141132a6e48fSopenharmony_ci
141232a6e48fSopenharmony_ci    ret = cs->GetMetaDataSet(sequence + 1, keyGet, metaDataGet);
141332a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_NO_ENTRY);
141432a6e48fSopenharmony_ci
141532a6e48fSopenharmony_ci    ret = ps->CancelBuffer(buffer);
141632a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
141732a6e48fSopenharmony_ci}
141832a6e48fSopenharmony_ci
141932a6e48fSopenharmony_ci/*
142032a6e48fSopenharmony_ci* Function: SetMetaDataSet and GetMetaDataSet
142132a6e48fSopenharmony_ci* Type: Function
142232a6e48fSopenharmony_ci* Rank: Important(2)
142332a6e48fSopenharmony_ci* EnvConditions: N/A
142432a6e48fSopenharmony_ci* CaseDescription: 1. call SetMetaDataSet and GetMetaDataSet with nullptr and check ret
142532a6e48fSopenharmony_ci */
142632a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, metaDataSet004, Function | MediumTest | Level2)
142732a6e48fSopenharmony_ci{
142832a6e48fSopenharmony_ci    GraphicHDRMetadataKey key = GraphicHDRMetadataKey::GRAPHIC_MATAKEY_HDR10_PLUS;
142932a6e48fSopenharmony_ci    std::vector<uint8_t> metaData;
143032a6e48fSopenharmony_ci    GSError ret = surface_->SetMetaDataSet(firstSeqnum, key, metaData);
143132a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
143232a6e48fSopenharmony_ci    ret = surface_->GetMetaDataSet(firstSeqnum, key, metaData);
143332a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
143432a6e48fSopenharmony_ci}
143532a6e48fSopenharmony_ci
143632a6e48fSopenharmony_ci/*
143732a6e48fSopenharmony_ci* Function: SetTunnelHandle and GetTunnelHandle
143832a6e48fSopenharmony_ci* Type: Function
143932a6e48fSopenharmony_ci* Rank: Important(2)
144032a6e48fSopenharmony_ci* EnvConditions: N/A
144132a6e48fSopenharmony_ci* CaseDescription: 1. call SetTunnelHandle with abnormal parameters and check ret
144232a6e48fSopenharmony_ci */
144332a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, TunnelHandle001, Function | MediumTest | Level2)
144432a6e48fSopenharmony_ci{
144532a6e48fSopenharmony_ci    GraphicExtDataHandle *handle = nullptr;
144632a6e48fSopenharmony_ci    GSError ret = cs->SetTunnelHandle(handle);
144732a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
144832a6e48fSopenharmony_ci}
144932a6e48fSopenharmony_ci
145032a6e48fSopenharmony_ci/*
145132a6e48fSopenharmony_ci* Function: SetTunnelHandle and GetTunnelHandle
145232a6e48fSopenharmony_ci* Type: Function
145332a6e48fSopenharmony_ci* Rank: Important(2)
145432a6e48fSopenharmony_ci* EnvConditions: N/A
145532a6e48fSopenharmony_ci* CaseDescription: 1. call SetTunnelHandle with abnormal parameters and check ret
145632a6e48fSopenharmony_ci */
145732a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, TunnelHandle002, Function | MediumTest | Level2)
145832a6e48fSopenharmony_ci{
145932a6e48fSopenharmony_ci    GraphicExtDataHandle *handle = nullptr;
146032a6e48fSopenharmony_ci    handle = new GraphicExtDataHandle();
146132a6e48fSopenharmony_ci    handle->fd = -1;
146232a6e48fSopenharmony_ci    handle->reserveInts = 0;
146332a6e48fSopenharmony_ci    GSError ret = cs->SetTunnelHandle(handle);
146432a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
146532a6e48fSopenharmony_ci}
146632a6e48fSopenharmony_ci
146732a6e48fSopenharmony_ci/*
146832a6e48fSopenharmony_ci* Function: SetTunnelHandle and GetTunnelHandle
146932a6e48fSopenharmony_ci* Type: Function
147032a6e48fSopenharmony_ci* Rank: Important(1)
147132a6e48fSopenharmony_ci* EnvConditions: N/A
147232a6e48fSopenharmony_ci* CaseDescription: 1. call SetTunnelHandle with normal parameters and check ret
147332a6e48fSopenharmony_ci*                  2. call GetTunnelHandle and check ret
147432a6e48fSopenharmony_ci* @tc.require: issueI5GMZN issueI5IWHW
147532a6e48fSopenharmony_ci */
147632a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, TunnelHandle003, Function | MediumTest | Level1)
147732a6e48fSopenharmony_ci{
147832a6e48fSopenharmony_ci    GraphicExtDataHandle *handle = static_cast<GraphicExtDataHandle *>(
147932a6e48fSopenharmony_ci        malloc(sizeof(GraphicExtDataHandle) + sizeof(int32_t)));
148032a6e48fSopenharmony_ci    handle->fd = -1;
148132a6e48fSopenharmony_ci    handle->reserveInts = 1;
148232a6e48fSopenharmony_ci    handle->reserve[0] = 0;
148332a6e48fSopenharmony_ci    GSError ret = cs->SetTunnelHandle(handle);
148432a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
148532a6e48fSopenharmony_ci
148632a6e48fSopenharmony_ci    ret = cs->SetTunnelHandle(handle);
148732a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_NO_ENTRY);
148832a6e48fSopenharmony_ci
148932a6e48fSopenharmony_ci    sptr<SurfaceTunnelHandle> handleGet = nullptr;
149032a6e48fSopenharmony_ci    handleGet = cs->GetTunnelHandle();
149132a6e48fSopenharmony_ci    ASSERT_NE(handleGet, nullptr);
149232a6e48fSopenharmony_ci    ASSERT_EQ(handle->fd, handleGet->GetHandle()->fd);
149332a6e48fSopenharmony_ci    ASSERT_EQ(handle->reserveInts, handleGet->GetHandle()->reserveInts);
149432a6e48fSopenharmony_ci    ASSERT_EQ(handle->reserve[0], handleGet->GetHandle()->reserve[0]);
149532a6e48fSopenharmony_ci    free(handle);
149632a6e48fSopenharmony_ci}
149732a6e48fSopenharmony_ci
149832a6e48fSopenharmony_ci/*
149932a6e48fSopenharmony_ci* Function: SetTunnelHandle and GetTunnelHandle
150032a6e48fSopenharmony_ci* Type: Function
150132a6e48fSopenharmony_ci* Rank: Important(2)
150232a6e48fSopenharmony_ci* EnvConditions: N/A
150332a6e48fSopenharmony_ci* CaseDescription: 1. call SetTunnelHandle and GetTunnelHandle with nullptr and check ret
150432a6e48fSopenharmony_ci */
150532a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, TunnelHandle004, Function | MediumTest | Level2)
150632a6e48fSopenharmony_ci{
150732a6e48fSopenharmony_ci    GraphicExtDataHandle *handle = nullptr;
150832a6e48fSopenharmony_ci    GSError ret = surface_->SetTunnelHandle(handle);
150932a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
151032a6e48fSopenharmony_ci    sptr<SurfaceTunnelHandle> tunnelHandle = surface_->GetTunnelHandle();
151132a6e48fSopenharmony_ci    ASSERT_EQ(tunnelHandle, nullptr);
151232a6e48fSopenharmony_ci}
151332a6e48fSopenharmony_ci
151432a6e48fSopenharmony_ci/*
151532a6e48fSopenharmony_ci* Function: SetPresentTimestamp and GetPresentTimestamp
151632a6e48fSopenharmony_ci* Type: Function
151732a6e48fSopenharmony_ci* Rank: Important(2)
151832a6e48fSopenharmony_ci* EnvConditions: N/A
151932a6e48fSopenharmony_ci* CaseDescription: 1. call SetPresentTimestamp with abnormal parameters and check ret
152032a6e48fSopenharmony_ci* @tc.require: issueI5I57K
152132a6e48fSopenharmony_ci */
152232a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, presentTimestamp002, Function | MediumTest | Level2)
152332a6e48fSopenharmony_ci{
152432a6e48fSopenharmony_ci    GraphicPresentTimestamp timestamp = {GRAPHIC_DISPLAY_PTS_UNSUPPORTED, 0};
152532a6e48fSopenharmony_ci    GSError ret = cs->SetPresentTimestamp(-1, timestamp);
152632a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
152732a6e48fSopenharmony_ci}
152832a6e48fSopenharmony_ci
152932a6e48fSopenharmony_ci/*
153032a6e48fSopenharmony_ci* Function: SetPresentTimestamp and GetPresentTimestamp
153132a6e48fSopenharmony_ci* Type: Function
153232a6e48fSopenharmony_ci* Rank: Important(2)
153332a6e48fSopenharmony_ci* EnvConditions: N/A
153432a6e48fSopenharmony_ci* CaseDescription: 1. call SetPresentTimestamp with abnormal parameters and check ret
153532a6e48fSopenharmony_ci* @tc.require: issueI5I57K
153632a6e48fSopenharmony_ci */
153732a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, presentTimestamp003, Function | MediumTest | Level2)
153832a6e48fSopenharmony_ci{
153932a6e48fSopenharmony_ci    GraphicPresentTimestamp timestamp = {GRAPHIC_DISPLAY_PTS_DELAY, 0};
154032a6e48fSopenharmony_ci    GSError ret = cs->SetPresentTimestamp(-1, timestamp);
154132a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_NO_ENTRY);
154232a6e48fSopenharmony_ci}
154332a6e48fSopenharmony_ci
154432a6e48fSopenharmony_ci/*
154532a6e48fSopenharmony_ci* Function: SetPresentTimestamp and GetPresentTimestamp
154632a6e48fSopenharmony_ci* Type: Function
154732a6e48fSopenharmony_ci* Rank: Important(1)
154832a6e48fSopenharmony_ci* EnvConditions: N/A
154932a6e48fSopenharmony_ci* CaseDescription: 1. call SetPresentTimestamp with normal parameters and check ret
155032a6e48fSopenharmony_ci* @tc.require: issueI5I57K
155132a6e48fSopenharmony_ci */
155232a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, presentTimestamp004, Function | MediumTest | Level1)
155332a6e48fSopenharmony_ci{
155432a6e48fSopenharmony_ci    GraphicPresentTimestamp timestamp = {GRAPHIC_DISPLAY_PTS_DELAY, 0};
155532a6e48fSopenharmony_ci    GSError ret = cs->SetPresentTimestamp(firstSeqnum, timestamp);
155632a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
155732a6e48fSopenharmony_ci}
155832a6e48fSopenharmony_ci
155932a6e48fSopenharmony_ci/*
156032a6e48fSopenharmony_ci* Function: SetPresentTimestamp and GetPresentTimestamp
156132a6e48fSopenharmony_ci* Type: Function
156232a6e48fSopenharmony_ci* Rank: Important(1)
156332a6e48fSopenharmony_ci* EnvConditions: N/A
156432a6e48fSopenharmony_ci* CaseDescription: 1. call SetPresentTimestamp with normal parameters and check ret
156532a6e48fSopenharmony_ci* @tc.require: issueI5I57K
156632a6e48fSopenharmony_ci */
156732a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, presentTimestamp005, Function | MediumTest | Level1)
156832a6e48fSopenharmony_ci{
156932a6e48fSopenharmony_ci    GraphicPresentTimestamp timestamp = {GRAPHIC_DISPLAY_PTS_TIMESTAMP, 0};
157032a6e48fSopenharmony_ci    GSError ret = cs->SetPresentTimestamp(firstSeqnum, timestamp);
157132a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
157232a6e48fSopenharmony_ci}
157332a6e48fSopenharmony_ci
157432a6e48fSopenharmony_ci/*
157532a6e48fSopenharmony_ci* Function: SetPresentTimestamp and GetPresentTimestamp
157632a6e48fSopenharmony_ci* Type: Function
157732a6e48fSopenharmony_ci* Rank: Important(1)
157832a6e48fSopenharmony_ci* EnvConditions: N/A
157932a6e48fSopenharmony_ci* CaseDescription: 1. call SetPresentTimestamp with nullptr and check ret
158032a6e48fSopenharmony_ci */
158132a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, presentTimestamp006, Function | MediumTest | Level1)
158232a6e48fSopenharmony_ci{
158332a6e48fSopenharmony_ci    GraphicPresentTimestamp timestamp = {GRAPHIC_DISPLAY_PTS_TIMESTAMP, 0};
158432a6e48fSopenharmony_ci    GSError ret = surface_->SetPresentTimestamp(firstSeqnum, timestamp);
158532a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
158632a6e48fSopenharmony_ci    int64_t time = 0;
158732a6e48fSopenharmony_ci    ret = surface_->GetPresentTimestamp(firstSeqnum, GraphicPresentTimestampType::GRAPHIC_DISPLAY_PTS_TIMESTAMP, time);
158832a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_NOT_SUPPORT);
158932a6e48fSopenharmony_ci}
159032a6e48fSopenharmony_ci
159132a6e48fSopenharmony_ci/*
159232a6e48fSopenharmony_ci* Function: AcquireBuffer and ReleaseBuffer
159332a6e48fSopenharmony_ci* Type: Function
159432a6e48fSopenharmony_ci* Rank: Important(2)
159532a6e48fSopenharmony_ci* EnvConditions: N/A
159632a6e48fSopenharmony_ci* CaseDescription: 1. call RequestBuffer and FlushBuffer
159732a6e48fSopenharmony_ci*                  2. call AcquireBuffer and ReleaseBuffer
159832a6e48fSopenharmony_ci*                  3. check ret
159932a6e48fSopenharmony_ci */
160032a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, ReqCanFluAcqRel005, Function | MediumTest | Level2)
160132a6e48fSopenharmony_ci{
160232a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer;
160332a6e48fSopenharmony_ci    int releaseFence = -1;
160432a6e48fSopenharmony_ci
160532a6e48fSopenharmony_ci    GSError ret = ps->RequestBuffer(buffer, releaseFence, requestConfig);
160632a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
160732a6e48fSopenharmony_ci    ASSERT_NE(buffer, nullptr);
160832a6e48fSopenharmony_ci
160932a6e48fSopenharmony_ci    ret = ps->FlushBuffer(buffer, SyncFence::INVALID_FENCE, flushConfigWithDamages);
161032a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
161132a6e48fSopenharmony_ci
161232a6e48fSopenharmony_ci    sptr<OHOS::SyncFence> flushFence;
161332a6e48fSopenharmony_ci    ret = cs->AcquireBuffer(buffer, flushFence, timestamp, damages);
161432a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
161532a6e48fSopenharmony_ci    ASSERT_NE(buffer, nullptr);
161632a6e48fSopenharmony_ci    ASSERT_EQ(damages.size(), flushConfigWithDamages.damages.size());
161732a6e48fSopenharmony_ci    for (decltype(damages.size()) i = 0; i < damages.size(); i++) {
161832a6e48fSopenharmony_ci        ASSERT_EQ(damages[i].x, flushConfigWithDamages.damages[i].x);
161932a6e48fSopenharmony_ci        ASSERT_EQ(damages[i].y, flushConfigWithDamages.damages[i].y);
162032a6e48fSopenharmony_ci        ASSERT_EQ(damages[i].w, flushConfigWithDamages.damages[i].w);
162132a6e48fSopenharmony_ci        ASSERT_EQ(damages[i].h, flushConfigWithDamages.damages[i].h);
162232a6e48fSopenharmony_ci    }
162332a6e48fSopenharmony_ci
162432a6e48fSopenharmony_ci    ASSERT_EQ(timestamp, flushConfigWithDamages.timestamp);
162532a6e48fSopenharmony_ci    ret = cs->ReleaseBuffer(buffer, -1);
162632a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
162732a6e48fSopenharmony_ci}
162832a6e48fSopenharmony_ci
162932a6e48fSopenharmony_ci/*
163032a6e48fSopenharmony_ci* Function: AttachBuffer001
163132a6e48fSopenharmony_ci* Type: Function
163232a6e48fSopenharmony_ci* Rank: Important(2)
163332a6e48fSopenharmony_ci* EnvConditions: N/A
163432a6e48fSopenharmony_ci* CaseDescription: 1. call AttachBuffer
163532a6e48fSopenharmony_ci*                  2. check ret
163632a6e48fSopenharmony_ci */
163732a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, AttachBuffer001, Function | MediumTest | Level2)
163832a6e48fSopenharmony_ci{
163932a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer = SurfaceBuffer::Create();
164032a6e48fSopenharmony_ci    ASSERT_NE(buffer, nullptr);
164132a6e48fSopenharmony_ci    GSError ret = cs->AttachBuffer(buffer);
164232a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
164332a6e48fSopenharmony_ci}
164432a6e48fSopenharmony_ci
164532a6e48fSopenharmony_ci/*
164632a6e48fSopenharmony_ci* Function: AttachBuffer002
164732a6e48fSopenharmony_ci* Type: Function
164832a6e48fSopenharmony_ci* Rank: Important(2)
164932a6e48fSopenharmony_ci* EnvConditions: N/A
165032a6e48fSopenharmony_ci* CaseDescription: 1. call AttachBuffer
165132a6e48fSopenharmony_ci*                  2. check ret
165232a6e48fSopenharmony_ci */
165332a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, AttachBuffer002, Function | MediumTest | Level2)
165432a6e48fSopenharmony_ci{
165532a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer = SurfaceBuffer::Create();
165632a6e48fSopenharmony_ci    ASSERT_NE(buffer, nullptr);
165732a6e48fSopenharmony_ci    int32_t timeOut = 1;
165832a6e48fSopenharmony_ci    GSError ret = cs->AttachBuffer(buffer, timeOut);
165932a6e48fSopenharmony_ci    ASSERT_NE(ret, OHOS::GSERROR_OK);
166032a6e48fSopenharmony_ci}
166132a6e48fSopenharmony_ci
166232a6e48fSopenharmony_ci/*
166332a6e48fSopenharmony_ci* Function: AttachBuffer003
166432a6e48fSopenharmony_ci* Type: Function
166532a6e48fSopenharmony_ci* Rank: Important(2)
166632a6e48fSopenharmony_ci* EnvConditions: N/A
166732a6e48fSopenharmony_ci* CaseDescription: 1. call AttachBuffer
166832a6e48fSopenharmony_ci*                  2. check ret
166932a6e48fSopenharmony_ci */
167032a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, AttachBuffer003, Function | MediumTest | Level2)
167132a6e48fSopenharmony_ci{
167232a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer = SurfaceBuffer::Create();
167332a6e48fSopenharmony_ci    ASSERT_NE(buffer, nullptr);
167432a6e48fSopenharmony_ci    int32_t timeOut = 1;
167532a6e48fSopenharmony_ci    GSError ret = cs->AttachBuffer(buffer, timeOut);
167632a6e48fSopenharmony_ci    ASSERT_NE(ret, GSERROR_OK);
167732a6e48fSopenharmony_ci}
167832a6e48fSopenharmony_ci
167932a6e48fSopenharmony_ci/*
168032a6e48fSopenharmony_ci* Function: AttachBuffer
168132a6e48fSopenharmony_ci* Type: Function
168232a6e48fSopenharmony_ci* Rank: Important(2)
168332a6e48fSopenharmony_ci* EnvConditions: N/A
168432a6e48fSopenharmony_ci* CaseDescription: 1. call AttachBuffer with nullptr params
168532a6e48fSopenharmony_ci*                  2. check ret
168632a6e48fSopenharmony_ci */
168732a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, AttachBuffer004, Function | MediumTest | Level2)
168832a6e48fSopenharmony_ci{
168932a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer = nullptr;
169032a6e48fSopenharmony_ci    GSError ret = surface_->AttachBuffer(buffer);
169132a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_INVALID_ARGUMENTS);
169232a6e48fSopenharmony_ci}
169332a6e48fSopenharmony_ci
169432a6e48fSopenharmony_ci/*
169532a6e48fSopenharmony_ci* Function: AttachBuffer
169632a6e48fSopenharmony_ci* Type: Function
169732a6e48fSopenharmony_ci* Rank: Important(2)
169832a6e48fSopenharmony_ci* EnvConditions: N/A
169932a6e48fSopenharmony_ci* CaseDescription: 1. call AttachBuffer with nullptr params
170032a6e48fSopenharmony_ci*                  2. check ret
170132a6e48fSopenharmony_ci */
170232a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, AttachBuffer005, Function | MediumTest | Level2)
170332a6e48fSopenharmony_ci{
170432a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer = nullptr;
170532a6e48fSopenharmony_ci    int32_t timeOut = 1;
170632a6e48fSopenharmony_ci    GSError ret = surface_->AttachBuffer(buffer, timeOut);
170732a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_INVALID_ARGUMENTS);
170832a6e48fSopenharmony_ci}
170932a6e48fSopenharmony_ci
171032a6e48fSopenharmony_ci/*
171132a6e48fSopenharmony_ci* Function: RegisterSurfaceDelegator
171232a6e48fSopenharmony_ci* Type: Function
171332a6e48fSopenharmony_ci* Rank: Important(2)
171432a6e48fSopenharmony_ci* EnvConditions: N/A
171532a6e48fSopenharmony_ci* CaseDescription: 1. call RegisterSurfaceDelegator
171632a6e48fSopenharmony_ci*                  2. check ret
171732a6e48fSopenharmony_ci */
171832a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, RegisterSurfaceDelegator001, Function | MediumTest | Level2)
171932a6e48fSopenharmony_ci{
172032a6e48fSopenharmony_ci    GSError ret = cs->RegisterSurfaceDelegator(surfaceDelegator->AsObject());
172132a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_OK);
172232a6e48fSopenharmony_ci}
172332a6e48fSopenharmony_ci
172432a6e48fSopenharmony_ci/*
172532a6e48fSopenharmony_ci* Function: RegisterSurfaceDelegator
172632a6e48fSopenharmony_ci* Type: Function
172732a6e48fSopenharmony_ci* Rank: Important(2)
172832a6e48fSopenharmony_ci* EnvConditions: N/A
172932a6e48fSopenharmony_ci* CaseDescription: 1. call RegisterSurfaceDelegator with nullptr params
173032a6e48fSopenharmony_ci*                  2. check ret
173132a6e48fSopenharmony_ci */
173232a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, RegisterSurfaceDelegator002, Function | MediumTest | Level2)
173332a6e48fSopenharmony_ci{
173432a6e48fSopenharmony_ci    GSError ret = surface_->RegisterSurfaceDelegator(nullptr);
173532a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_INVALID_ARGUMENTS);
173632a6e48fSopenharmony_ci    ASSERT_NE(surfaceDelegator, nullptr);
173732a6e48fSopenharmony_ci    sptr<IRemoteObject> client = surfaceDelegator->AsObject();
173832a6e48fSopenharmony_ci    ASSERT_NE(client, nullptr);
173932a6e48fSopenharmony_ci    ret = surface_->RegisterSurfaceDelegator(client);
174032a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_INVALID_ARGUMENTS);
174132a6e48fSopenharmony_ci}
174232a6e48fSopenharmony_ci
174332a6e48fSopenharmony_ci/*
174432a6e48fSopenharmony_ci* Function: ConsumerRequestCpuAccess
174532a6e48fSopenharmony_ci* Type: Function
174632a6e48fSopenharmony_ci* Rank: Important(2)
174732a6e48fSopenharmony_ci* EnvConditions: N/A
174832a6e48fSopenharmony_ci* CaseDescription: 1. usage does not contain BUFFER_USAGE_CPU_HW_BOTH
174932a6e48fSopenharmony_ci*                  2. call ConsumerRequestCpuAccess(fasle/true)
175032a6e48fSopenharmony_ci*                  3. check ret
175132a6e48fSopenharmony_ci */
175232a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, ConsumerRequestCpuAccess001, Function | MediumTest | Level2)
175332a6e48fSopenharmony_ci{
175432a6e48fSopenharmony_ci    using namespace HDI::Display::Graphic::Common;
175532a6e48fSopenharmony_ci    BufferRequestConfig config = {
175632a6e48fSopenharmony_ci        .width = 0x100,
175732a6e48fSopenharmony_ci        .height = 0x100,
175832a6e48fSopenharmony_ci        .strideAlignment = 0x8,
175932a6e48fSopenharmony_ci        .format = GRAPHIC_PIXEL_FMT_RGBA_8888,
176032a6e48fSopenharmony_ci        .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
176132a6e48fSopenharmony_ci        .timeout = 0,
176232a6e48fSopenharmony_ci    };
176332a6e48fSopenharmony_ci    auto cSurface = IConsumerSurface::Create();
176432a6e48fSopenharmony_ci    sptr<IBufferConsumerListener> cListener = new BufferConsumerListener();
176532a6e48fSopenharmony_ci    cSurface->RegisterConsumerListener(cListener);
176632a6e48fSopenharmony_ci    auto p = cSurface->GetProducer();
176732a6e48fSopenharmony_ci    auto pSurface = Surface::CreateSurfaceAsProducer(p);
176832a6e48fSopenharmony_ci
176932a6e48fSopenharmony_ci    // test default
177032a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer;
177132a6e48fSopenharmony_ci    int releaseFence = -1;
177232a6e48fSopenharmony_ci    GSError ret = pSurface->RequestBuffer(buffer, releaseFence, config);
177332a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_OK);
177432a6e48fSopenharmony_ci    ASSERT_NE(buffer, nullptr);
177532a6e48fSopenharmony_ci
177632a6e48fSopenharmony_ci    std::vector<uint8_t> values;
177732a6e48fSopenharmony_ci    buffer->GetMetadata(V1_1::BufferHandleAttrKey::ATTRKEY_REQUEST_ACCESS_TYPE, values);
177832a6e48fSopenharmony_ci    ASSERT_EQ(values.size(), 0);
177932a6e48fSopenharmony_ci
178032a6e48fSopenharmony_ci    ret = pSurface->CancelBuffer(buffer);
178132a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_OK);
178232a6e48fSopenharmony_ci
178332a6e48fSopenharmony_ci    // test true
178432a6e48fSopenharmony_ci    cSurface->ConsumerRequestCpuAccess(true);
178532a6e48fSopenharmony_ci    ret = pSurface->RequestBuffer(buffer, releaseFence, config);
178632a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_OK);
178732a6e48fSopenharmony_ci    ASSERT_NE(buffer, nullptr);
178832a6e48fSopenharmony_ci
178932a6e48fSopenharmony_ci    values.clear();
179032a6e48fSopenharmony_ci    buffer->GetMetadata(V1_1::BufferHandleAttrKey::ATTRKEY_REQUEST_ACCESS_TYPE, values);
179132a6e48fSopenharmony_ci    ASSERT_EQ(values.size(), 0);
179232a6e48fSopenharmony_ci
179332a6e48fSopenharmony_ci    ret = pSurface->CancelBuffer(buffer);
179432a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_OK);
179532a6e48fSopenharmony_ci
179632a6e48fSopenharmony_ci    // test false
179732a6e48fSopenharmony_ci    cSurface->ConsumerRequestCpuAccess(false);
179832a6e48fSopenharmony_ci    ret = pSurface->RequestBuffer(buffer, releaseFence, config);
179932a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_OK);
180032a6e48fSopenharmony_ci    ASSERT_NE(buffer, nullptr);
180132a6e48fSopenharmony_ci
180232a6e48fSopenharmony_ci    values.clear();
180332a6e48fSopenharmony_ci    buffer->GetMetadata(V1_1::BufferHandleAttrKey::ATTRKEY_REQUEST_ACCESS_TYPE, values);
180432a6e48fSopenharmony_ci    ASSERT_EQ(values.size(), 0);
180532a6e48fSopenharmony_ci
180632a6e48fSopenharmony_ci    ret = pSurface->CancelBuffer(buffer);
180732a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_OK);
180832a6e48fSopenharmony_ci}
180932a6e48fSopenharmony_ci
181032a6e48fSopenharmony_ci/*
181132a6e48fSopenharmony_ci* Function: ConsumerRequestCpuAccess
181232a6e48fSopenharmony_ci* Type: Function
181332a6e48fSopenharmony_ci* Rank: Important(2)
181432a6e48fSopenharmony_ci* EnvConditions: N/A
181532a6e48fSopenharmony_ci* CaseDescription: 1. usage contain BUFFER_USAGE_CPU_HW_BOTH
181632a6e48fSopenharmony_ci*                  2. call ConsumerRequestCpuAccess(true)
181732a6e48fSopenharmony_ci*                  3. check ret
181832a6e48fSopenharmony_ci */
181932a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, ConsumerRequestCpuAccess002, Function | MediumTest | Level2)
182032a6e48fSopenharmony_ci{
182132a6e48fSopenharmony_ci    using namespace HDI::Display::Graphic::Common;
182232a6e48fSopenharmony_ci    BufferRequestConfig config = {
182332a6e48fSopenharmony_ci        .width = 0x100,
182432a6e48fSopenharmony_ci        .height = 0x100,
182532a6e48fSopenharmony_ci        .strideAlignment = 0x8,
182632a6e48fSopenharmony_ci        .format = GRAPHIC_PIXEL_FMT_RGBA_8888,
182732a6e48fSopenharmony_ci        .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA | BUFFER_USAGE_CPU_HW_BOTH,
182832a6e48fSopenharmony_ci        .timeout = 0,
182932a6e48fSopenharmony_ci    };
183032a6e48fSopenharmony_ci    auto cSurface = IConsumerSurface::Create();
183132a6e48fSopenharmony_ci    sptr<IBufferConsumerListener> cListener = new BufferConsumerListener();
183232a6e48fSopenharmony_ci    cSurface->RegisterConsumerListener(cListener);
183332a6e48fSopenharmony_ci    auto p = cSurface->GetProducer();
183432a6e48fSopenharmony_ci    auto pSurface = Surface::CreateSurfaceAsProducer(p);
183532a6e48fSopenharmony_ci
183632a6e48fSopenharmony_ci    // test default
183732a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer;
183832a6e48fSopenharmony_ci    int releaseFence = -1;
183932a6e48fSopenharmony_ci    GSError ret = pSurface->RequestBuffer(buffer, releaseFence, config);
184032a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_OK);
184132a6e48fSopenharmony_ci    ASSERT_NE(buffer, nullptr);
184232a6e48fSopenharmony_ci
184332a6e48fSopenharmony_ci    std::vector<uint8_t> values;
184432a6e48fSopenharmony_ci    buffer->GetMetadata(V1_1::BufferHandleAttrKey::ATTRKEY_REQUEST_ACCESS_TYPE, values);
184532a6e48fSopenharmony_ci    if (values.size() == 1) {
184632a6e48fSopenharmony_ci        ASSERT_EQ(values[0], V1_1::HebcAccessType::HEBC_ACCESS_HW_ONLY);
184732a6e48fSopenharmony_ci    }
184832a6e48fSopenharmony_ci
184932a6e48fSopenharmony_ci    ret = pSurface->CancelBuffer(buffer);
185032a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_OK);
185132a6e48fSopenharmony_ci
185232a6e48fSopenharmony_ci    // test true
185332a6e48fSopenharmony_ci    cSurface->ConsumerRequestCpuAccess(true);
185432a6e48fSopenharmony_ci    ret = pSurface->RequestBuffer(buffer, releaseFence, config);
185532a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_OK);
185632a6e48fSopenharmony_ci    ASSERT_NE(buffer, nullptr);
185732a6e48fSopenharmony_ci
185832a6e48fSopenharmony_ci    values.clear();
185932a6e48fSopenharmony_ci    buffer->GetMetadata(V1_1::BufferHandleAttrKey::ATTRKEY_REQUEST_ACCESS_TYPE, values);
186032a6e48fSopenharmony_ci    if (values.size() == 1) {
186132a6e48fSopenharmony_ci        ASSERT_EQ(values[0], V1_1::HebcAccessType::HEBC_ACCESS_CPU_ACCESS);
186232a6e48fSopenharmony_ci    }
186332a6e48fSopenharmony_ci
186432a6e48fSopenharmony_ci    ret = pSurface->CancelBuffer(buffer);
186532a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_OK);
186632a6e48fSopenharmony_ci
186732a6e48fSopenharmony_ci    // test false
186832a6e48fSopenharmony_ci    cSurface->ConsumerRequestCpuAccess(false);
186932a6e48fSopenharmony_ci    ret = pSurface->RequestBuffer(buffer, releaseFence, config);
187032a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_OK);
187132a6e48fSopenharmony_ci    ASSERT_NE(buffer, nullptr);
187232a6e48fSopenharmony_ci
187332a6e48fSopenharmony_ci    values.clear();
187432a6e48fSopenharmony_ci    buffer->GetMetadata(V1_1::BufferHandleAttrKey::ATTRKEY_REQUEST_ACCESS_TYPE, values);
187532a6e48fSopenharmony_ci    if (values.size() == 1) {
187632a6e48fSopenharmony_ci        ASSERT_EQ(values[0], V1_1::HebcAccessType::HEBC_ACCESS_HW_ONLY);
187732a6e48fSopenharmony_ci    }
187832a6e48fSopenharmony_ci
187932a6e48fSopenharmony_ci    ret = pSurface->CancelBuffer(buffer);
188032a6e48fSopenharmony_ci    ASSERT_EQ(ret, GSERROR_OK);
188132a6e48fSopenharmony_ci}
188232a6e48fSopenharmony_ci
188332a6e48fSopenharmony_ci/*
188432a6e48fSopenharmony_ci* Function: ConsumerRequestCpuAccess
188532a6e48fSopenharmony_ci* Type: Function
188632a6e48fSopenharmony_ci* Rank: Important(2)
188732a6e48fSopenharmony_ci* EnvConditions: N/A
188832a6e48fSopenharmony_ci* CaseDescription: 1. call ConsumerRequestCpuAccess with nullptr
188932a6e48fSopenharmony_ci*                  2. check ret
189032a6e48fSopenharmony_ci */
189132a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, ConsumerRequestCpuAccess003, Function | MediumTest | Level2)
189232a6e48fSopenharmony_ci{
189332a6e48fSopenharmony_ci    ASSERT_NE(surface_, nullptr);
189432a6e48fSopenharmony_ci    surface_->ConsumerRequestCpuAccess(true);
189532a6e48fSopenharmony_ci}
189632a6e48fSopenharmony_ci
189732a6e48fSopenharmony_ci/*
189832a6e48fSopenharmony_ci* Function: SetTransformHint and GetTransformHint
189932a6e48fSopenharmony_ci* Type: Function
190032a6e48fSopenharmony_ci* Rank: Important(1)
190132a6e48fSopenharmony_ci* EnvConditions: N/A
190232a6e48fSopenharmony_ci* CaseDescription: 1. call SetTransformHint with nullptr and check ret
190332a6e48fSopenharmony_ci*                  2. call GetTransformHint with nullptr and check ret
190432a6e48fSopenharmony_ci */
190532a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, transformHint001, Function | MediumTest | Level1)
190632a6e48fSopenharmony_ci{
190732a6e48fSopenharmony_ci    GraphicTransformType typeSet = GraphicTransformType::GRAPHIC_ROTATE_BUTT;
190832a6e48fSopenharmony_ci    GSError ret = surface_->SetTransformHint(typeSet);
190932a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
191032a6e48fSopenharmony_ci    GraphicTransformType typeGet = surface_->GetTransformHint();
191132a6e48fSopenharmony_ci    ASSERT_EQ(typeGet, GraphicTransformType::GRAPHIC_ROTATE_BUTT);
191232a6e48fSopenharmony_ci}
191332a6e48fSopenharmony_ci
191432a6e48fSopenharmony_ci/*
191532a6e48fSopenharmony_ci* Function: SetSurfaceSourceType and GetSurfaceSourceType
191632a6e48fSopenharmony_ci* Type: Function
191732a6e48fSopenharmony_ci* Rank: Important(2)
191832a6e48fSopenharmony_ci* EnvConditions: N/A
191932a6e48fSopenharmony_ci* CaseDescription: 1. call SetSurfaceSourceType and check ret
192032a6e48fSopenharmony_ci*                  2. call GetSurfaceSourceType and check ret
192132a6e48fSopenharmony_ci*/
192232a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, SurfaceSourceType001, Function | MediumTest | Level2)
192332a6e48fSopenharmony_ci{
192432a6e48fSopenharmony_ci    OHSurfaceSource sourceType = OHSurfaceSource::OH_SURFACE_SOURCE_VIDEO;
192532a6e48fSopenharmony_ci    GSError ret = cs->SetSurfaceSourceType(sourceType);
192632a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
192732a6e48fSopenharmony_ci    ASSERT_EQ(cs->GetSurfaceSourceType(), OH_SURFACE_SOURCE_VIDEO);
192832a6e48fSopenharmony_ci}
192932a6e48fSopenharmony_ci
193032a6e48fSopenharmony_ci/*
193132a6e48fSopenharmony_ci* Function: SetSurfaceSourceType and GetSurfaceSourceType
193232a6e48fSopenharmony_ci* Type: Function
193332a6e48fSopenharmony_ci* Rank: Important(2)
193432a6e48fSopenharmony_ci* EnvConditions: N/A
193532a6e48fSopenharmony_ci* CaseDescription: 1. call SetSurfaceSourceType with nullptr and check ret
193632a6e48fSopenharmony_ci*                  2. call GetSurfaceSourceType with nullptr and check ret
193732a6e48fSopenharmony_ci*/
193832a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, SurfaceSourceType002, Function | MediumTest | Level2)
193932a6e48fSopenharmony_ci{
194032a6e48fSopenharmony_ci    OHSurfaceSource sourceTypeSet = OHSurfaceSource::OH_SURFACE_SOURCE_VIDEO;
194132a6e48fSopenharmony_ci    GSError ret = surface_->SetSurfaceSourceType(sourceTypeSet);
194232a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
194332a6e48fSopenharmony_ci    OHSurfaceSource sourceTypeGet = surface_->GetSurfaceSourceType();
194432a6e48fSopenharmony_ci    ASSERT_EQ(sourceTypeGet, OHSurfaceSource::OH_SURFACE_SOURCE_DEFAULT);
194532a6e48fSopenharmony_ci}
194632a6e48fSopenharmony_ci
194732a6e48fSopenharmony_ci/*
194832a6e48fSopenharmony_ci* Function: SetSurfaceAppFrameworkType and GetSurfaceAppFrameworkType
194932a6e48fSopenharmony_ci* Type: Function
195032a6e48fSopenharmony_ci* Rank: Important(2)
195132a6e48fSopenharmony_ci* EnvConditions: N/A
195232a6e48fSopenharmony_ci* CaseDescription: 1. call SetSurfaceAppFrameworkType and check ret
195332a6e48fSopenharmony_ci*                  2. call GetSurfaceAppFrameworkType and check ret
195432a6e48fSopenharmony_ci*/
195532a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, SurfaceAppFrameworkType001, Function | MediumTest | Level2)
195632a6e48fSopenharmony_ci{
195732a6e48fSopenharmony_ci    std::string type = "test";
195832a6e48fSopenharmony_ci    GSError ret = cs->SetSurfaceAppFrameworkType(type);
195932a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_OK);
196032a6e48fSopenharmony_ci    ASSERT_EQ(cs->GetSurfaceAppFrameworkType(), "test");
196132a6e48fSopenharmony_ci}
196232a6e48fSopenharmony_ci
196332a6e48fSopenharmony_ci/*
196432a6e48fSopenharmony_ci* Function: SetSurfaceAppFrameworkType and GetSurfaceAppFrameworkType
196532a6e48fSopenharmony_ci* Type: Function
196632a6e48fSopenharmony_ci* Rank: Important(2)
196732a6e48fSopenharmony_ci* EnvConditions: N/A
196832a6e48fSopenharmony_ci* CaseDescription: 1. call SetSurfaceAppFrameworkType with nullptr and check ret
196932a6e48fSopenharmony_ci*                  2. call GetSurfaceAppFrameworkType with nullptr and check ret
197032a6e48fSopenharmony_ci*/
197132a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, SurfaceAppFrameworkType002, Function | MediumTest | Level2)
197232a6e48fSopenharmony_ci{
197332a6e48fSopenharmony_ci    std::string type = "test";
197432a6e48fSopenharmony_ci    GSError ret = surface_->SetSurfaceAppFrameworkType(type);
197532a6e48fSopenharmony_ci    ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
197632a6e48fSopenharmony_ci    ASSERT_EQ(surface_->GetSurfaceAppFrameworkType(), "");
197732a6e48fSopenharmony_ci}
197832a6e48fSopenharmony_ci
197932a6e48fSopenharmony_ci/*
198032a6e48fSopenharmony_ci* Function: GetHdrWhitePointBrightness and GetSdrWhitePointBrightness
198132a6e48fSopenharmony_ci* Type: Function
198232a6e48fSopenharmony_ci* Rank: Important(2)
198332a6e48fSopenharmony_ci* EnvConditions: N/A
198432a6e48fSopenharmony_ci* CaseDescription: 1. call GetHdrWhitePointBrightness with nullptr and check ret
198532a6e48fSopenharmony_ci*                  2. call GetSdrWhitePointBrightness with nullptr and check ret
198632a6e48fSopenharmony_ci*/
198732a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, WhitePointBrightness001, Function | MediumTest | Level2)
198832a6e48fSopenharmony_ci{
198932a6e48fSopenharmony_ci    float ret = surface_->GetHdrWhitePointBrightness();
199032a6e48fSopenharmony_ci    ASSERT_EQ(static_cast<int32_t>(ret), 0);
199132a6e48fSopenharmony_ci    ret = surface_->GetSdrWhitePointBrightness();
199232a6e48fSopenharmony_ci    ASSERT_EQ(static_cast<int32_t>(ret), 0);
199332a6e48fSopenharmony_ci}
199432a6e48fSopenharmony_ci
199532a6e48fSopenharmony_ci/*
199632a6e48fSopenharmony_ci* Function: InvalidParameter
199732a6e48fSopenharmony_ci* Type: Function
199832a6e48fSopenharmony_ci* Rank: Important(2)
199932a6e48fSopenharmony_ci* EnvConditions: N/A
200032a6e48fSopenharmony_ci* CaseDescription: 1. call interface with invaild input nullptr and check ret
200132a6e48fSopenharmony_ci*/
200232a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, InvalidParameter001, Function | MediumTest | Level2)
200332a6e48fSopenharmony_ci{
200432a6e48fSopenharmony_ci    sptr<OHOS::SurfaceBuffer> sBuffer = nullptr;
200532a6e48fSopenharmony_ci    sptr<OHOS::SyncFence> fence = nullptr;
200632a6e48fSopenharmony_ci    ASSERT_EQ(surface_->AcquireLastFlushedBuffer(sBuffer, fence, nullptr, 0, false), GSERROR_NOT_SUPPORT);
200732a6e48fSopenharmony_ci    ASSERT_EQ(surface_->ReleaseLastFlushedBuffer(sBuffer), GSERROR_NOT_SUPPORT);
200832a6e48fSopenharmony_ci}
200932a6e48fSopenharmony_ci
201032a6e48fSopenharmony_ci/*
201132a6e48fSopenharmony_ci* Function: GetGlobalAlpha
201232a6e48fSopenharmony_ci* Type: Function
201332a6e48fSopenharmony_ci* Rank: Important(2)
201432a6e48fSopenharmony_ci* EnvConditions: N/A
201532a6e48fSopenharmony_ci* CaseDescription: 1. call GetGlobalAlpha and check ret
201632a6e48fSopenharmony_ci*/
201732a6e48fSopenharmony_ciHWTEST_F(ConsumerSurfaceTest, GetGlobalAlpha001, Function | MediumTest | Level2)
201832a6e48fSopenharmony_ci{
201932a6e48fSopenharmony_ci    int32_t alpha = -1;
202032a6e48fSopenharmony_ci    ASSERT_EQ(cs->SetGlobalAlpha(alpha), GSERROR_NOT_SUPPORT);
202132a6e48fSopenharmony_ci    ASSERT_EQ(cs->GetGlobalAlpha(alpha), GSERROR_OK);
202232a6e48fSopenharmony_ci}
202332a6e48fSopenharmony_ci}
2024