1 /*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <buffer_extra_data_impl.h>
17 #include <gtest/gtest.h>
18 #include <message_option.h>
19 #include <message_parcel.h>
20 #include <native_window.h>
21 #include <securec.h>
22 #include <surface.h>
23
24 #include "buffer_queue_producer.h"
25 #include "consumer_surface.h"
26 #include "consumer_surface_delegator.h"
27 #include "sync_fence.h"
28
29 using namespace testing;
30 using namespace testing::ext;
31
32 namespace OHOS::Rosen {
33 class ConsumerSurfaceDelegatorTest : public testing::Test {
34 public:
35 static void SetUpTestCase();
36 static void TearDownTestCase();
37
38 static inline sptr<ConsumerSurfaceDelegator> consumerDelegator = nullptr;
39 static inline sptr<BufferExtraData> bedata = nullptr;
40 static inline sptr<SurfaceBuffer> buffer = nullptr;
41 static inline sptr<BufferQueue> bq = nullptr;
42
43 static inline BufferRequestConfig requestConfig = {
44 .width = 0x100,
45 .height = 0x100,
46 .strideAlignment = 0x8,
47 .format = GRAPHIC_PIXEL_FMT_RGBA_8888,
48 .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
49 .timeout = 0,
50 };
51 };
52
SetUpTestCase()53 void ConsumerSurfaceDelegatorTest::SetUpTestCase()
54 {
55 consumerDelegator = ConsumerSurfaceDelegator::Create();
56 bedata = new OHOS::BufferExtraDataImpl;
57 buffer = SurfaceBuffer::Create();
58 bq = new BufferQueue("test");
59 }
60
TearDownTestCase()61 void ConsumerSurfaceDelegatorTest::TearDownTestCase()
62 {
63 consumerDelegator = nullptr;
64 bedata = nullptr;
65 buffer = nullptr;
66 bq = nullptr;
67 }
68
69 /*
70 * Function: DequeueBuffer
71 * Type: Function
72 * Rank: Important(2)
73 * EnvConditions: N/A
74 * CaseDescription: 1. call DequeueBuffer
75 * 2. check ret
76 */
77 HWTEST_F(ConsumerSurfaceDelegatorTest, DequeueBuffer001, Function | MediumTest | Level2)
78 {
79 IBufferProducer::RequestBufferReturnValue retval;
80 GSError ret = consumerDelegator->DequeueBuffer(requestConfig, bedata, retval);
81 ASSERT_EQ(ret, GSERROR_OK);
82 }
83
84
85 /*
86 * Function: QueueBuffer
87 * Type: Function
88 * Rank: Important(2)
89 * EnvConditions: N/A
90 * CaseDescription: 1. call QueueBuffer
91 * 2. check ret
92 */
93 HWTEST_F(ConsumerSurfaceDelegatorTest, QueueBuffer001, Function | MediumTest | Level2)
94 {
95 int32_t fenceFd = 3;
96 GSError ret = consumerDelegator->QueueBuffer(buffer, fenceFd);
97 ASSERT_EQ(ret, GSERROR_OK);
98 }
99
100 /*
101 * Function: ReleaseBuffer
102 * Type: Function
103 * Rank: Important(2)
104 * EnvConditions: N/A
105 * CaseDescription: 1. call ReleaseBuffer
106 * 2. check ret
107 */
108 HWTEST_F(ConsumerSurfaceDelegatorTest, ReleaseBuffer001, Function | MediumTest | Level2)
109 {
110 int slot = 0;
111 int32_t releaseFenceFd = 3;
112 GSError ret = consumerDelegator->ReleaseBuffer(slot, releaseFenceFd);
113 ASSERT_EQ(ret, GSERROR_OK);
114 }
115
116 /*
117 * Function: CancelBuffer
118 * Type: Function
119 * Rank: Important(2)
120 * EnvConditions: N/A
121 * CaseDescription: 1. call CancelBuffer
122 * 2. check ret
123 */
124 HWTEST_F(ConsumerSurfaceDelegatorTest, CancelBuffer001, Function | MediumTest | Level2)
125 {
126 GSError ret = consumerDelegator->CancelBuffer(buffer);
127 ASSERT_EQ(ret, GSERROR_OK);
128 }
129
130 /*
131 * Function: DetachBuffer
132 * Type: Function
133 * Rank: Important(2)
134 * EnvConditions: N/A
135 * CaseDescription: 1. call DetachBuffer
136 * 2. check ret
137 */
138 HWTEST_F(ConsumerSurfaceDelegatorTest, DetachBuffer001, Function | MediumTest | Level2)
139 {
140 GSError ret = consumerDelegator->DetachBuffer(buffer);
141 ASSERT_EQ(ret, GSERROR_OK);
142 }
143
144 /*
145 * Function: SetBufferQueue
146 * Type: Function
147 * Rank: Important(2)
148 * EnvConditions: N/A
149 * CaseDescription: 1. call SetBufferQueue
150 * 2. check ret
151 */
152 HWTEST_F(ConsumerSurfaceDelegatorTest, SetBufferQueue001, Function | MediumTest | Level2)
153 {
154 bool ret = consumerDelegator->SetBufferQueue(bq);
155 ASSERT_EQ(ret, true);
156 }
157
158 /*
159 * Function: OnRemoteRequest
160 * Type: Function
161 * Rank: Important(2)
162 * EnvConditions: N/A
163 * CaseDescription: 1. call OnRemoteRequest
164 * 2. check ret
165 */
166 HWTEST_F(ConsumerSurfaceDelegatorTest, OnRemoteRequest001, Function | MediumTest | Level2)
167 {
168 uint32_t code = 1; // QUEUEBUFFER
169 MessageParcel reply;
170 MessageOption option;
171 MessageParcel dataQueue;
172 dataQueue.WriteInt32(10);
173 dataQueue.WriteFileDescriptor(20);
174 int ret = consumerDelegator->OnRemoteRequest(code, dataQueue, reply, option);
175 ASSERT_EQ(ret, ERR_NONE);
176 }
177 }
178