1 /*
2  * Copyright (c) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include <securec.h>
16 #include <gtest/gtest.h>
17 #include <surface.h>
18 #include <consumer_surface.h>
19 #include <producer_surface.h>
20 #include "buffer_consumer_listener.h"
21 #include <native_window.h>
22 #include "sync_fence.h"
23 #include "producer_surface_delegator.h"
24 
25 using namespace testing;
26 using namespace testing::ext;
27 
28 namespace OHOS::Rosen {
29 class ProducerSurfaceTest : public testing::Test {
30 public:
31     static void SetUpTestCase();
32     static void TearDownTestCase();
33     void SetUp() override;
34     void TearDown() override;
35 
36     static inline BufferRequestConfig requestConfig = {
37         .width = 0x100,
38         .height = 0x100,
39         .strideAlignment = 0x8,
40         .format = GRAPHIC_PIXEL_FMT_RGBA_8888,
41         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
42         .timeout = 0,
43     };
44     static inline BufferFlushConfig flushConfig = {
45         .damage = {
46             .w = 0x100,
47             .h = 0x100,
48         },
49     };
50     static inline int64_t timestamp = 0;
51     static inline Rect damage = {};
52     static inline sptr<IConsumerSurface> csurf = nullptr;
53     static inline sptr<IBufferProducer> producer = nullptr;
54     static inline sptr<Surface> pSurface = nullptr;
55     static inline sptr<ProducerSurfaceDelegator> surfaceDelegator = nullptr;
56     static inline uint32_t firstSeqnum = 0;
57 
OnBufferRelease(sptr<SurfaceBuffer> &buffer)58     static inline GSError OnBufferRelease(sptr<SurfaceBuffer> &buffer)
59     {
60         return GSERROR_OK;
61     }
62     sptr<ProducerSurface> surface_ = nullptr;
63 };
64 
SetUpTestCase()65 void ProducerSurfaceTest::SetUpTestCase()
66 {
67     csurf = IConsumerSurface::Create();
68     sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
69     csurf->RegisterConsumerListener(listener);
70     producer = csurf->GetProducer();
71     pSurface = Surface::CreateSurfaceAsProducer(producer);
72     pSurface->RegisterReleaseListener(OnBufferRelease);
73 }
74 
TearDownTestCase()75 void ProducerSurfaceTest::TearDownTestCase()
76 {
77     pSurface->UnRegisterReleaseListener();
78     csurf = nullptr;
79     producer = nullptr;
80     pSurface = nullptr;
81 }
82 
SetUp()83 void ProducerSurfaceTest::SetUp()
84 {
85     surface_ = new ProducerSurface(producer);
86     ASSERT_NE(surface_, nullptr);
87     surface_->producer_ = nullptr;
88 }
89 
TearDown()90 void ProducerSurfaceTest::TearDown()
91 {
92     surface_ = nullptr;
93 }
94 
95 /*
96 * Function: ProducerSurface
97 * Type: Function
98 * Rank: Important(2)
99 * EnvConditions: N/A
100 * CaseDescription: 1. check pSurface
101  */
HWTEST_F(ProducerSurfaceTest, ProducerSurface001, Function | MediumTest | Level2)102 HWTEST_F(ProducerSurfaceTest, ProducerSurface001, Function | MediumTest | Level2)
103 {
104     ASSERT_NE(pSurface, nullptr);
105 }
106 
107 /*
108 * Function: GetProducerInitInfo
109 * Type: Function
110 * Rank: Important(2)
111 * EnvConditions: N/A
112 * CaseDescription: 1. check pSurface
113  */
HWTEST_F(ProducerSurfaceTest, GetProducerInitInfo001, Function | MediumTest | Level2)114 HWTEST_F(ProducerSurfaceTest, GetProducerInitInfo001, Function | MediumTest | Level2)
115 {
116     ProducerInitInfo info;
117     GSError ret = surface_->GetProducerInitInfo(info);
118     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
119 }
120 
121 /*
122 * Function: RequestBuffer
123 * Type: Function
124 * Rank: Important(2)
125 * EnvConditions: N/A
126 * CaseDescription: 1. call RequestBuffer with producer_ is nullptr
127 *                  2. check ret
128  */
HWTEST_F(ProducerSurfaceTest, RequestBuffer001, Function | MediumTest | Level2)129 HWTEST_F(ProducerSurfaceTest, RequestBuffer001, Function | MediumTest | Level2)
130 {
131     sptr<SurfaceBuffer> buffer = SurfaceBuffer::Create();
132     int releaseFence = -1;
133     GSError ret = surface_->RequestBuffer(buffer, releaseFence, requestConfig);
134     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
135 }
136 
137 /*
138 * Function: RequestBuffer
139 * Type: Function
140 * Rank: Important(2)
141 * EnvConditions: N/A
142 * CaseDescription: 1. call RequestBuffer with nullptr params
143 *                  2. check ret
144  */
HWTEST_F(ProducerSurfaceTest, RequestBuffer002, Function | MediumTest | Level2)145 HWTEST_F(ProducerSurfaceTest, RequestBuffer002, Function | MediumTest | Level2)
146 {
147     sptr<SurfaceBuffer> buffer = nullptr;
148     int releaseFence = -1;
149     GSError ret = surface_->RequestBuffer(buffer, releaseFence, requestConfig);
150     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
151 }
152 
153 /*
154 * Function: RequestBuffer
155 * Type: Function
156 * Rank: Important(2)
157 * EnvConditions: N/A
158 * CaseDescription: 1. call RequestBuffer with nullptr params
159 *                  2. check ret
160  */
HWTEST_F(ProducerSurfaceTest, RequestBuffer003, Function | MediumTest | Level2)161 HWTEST_F(ProducerSurfaceTest, RequestBuffer003, Function | MediumTest | Level2)
162 {
163     sptr<SurfaceBuffer> buffer = SurfaceBuffer::Create();
164     sptr<SyncFence> releaseFence = nullptr;
165     GSError ret = surface_->RequestBuffer(buffer, releaseFence, requestConfig);
166     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
167 }
168 
169 /*
170 * Function: RequestBuffer
171 * Type: Function
172 * Rank: Important(2)
173 * EnvConditions: N/A
174 * CaseDescription: 1. call RequestBuffer with nullptr params
175 *                  2. check ret
176  */
HWTEST_F(ProducerSurfaceTest, RequestBuffer004, Function | MediumTest | Level2)177 HWTEST_F(ProducerSurfaceTest, RequestBuffer004, Function | MediumTest | Level2)
178 {
179     sptr<SurfaceBuffer> buffer = nullptr;
180     sptr<SyncFence> releaseFence = nullptr;
181     GSError ret = surface_->RequestBuffer(buffer, releaseFence, requestConfig);
182     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
183 }
184 
185 /*
186 * Function: RequestBuffers
187 * Type: Function
188 * Rank: Important(2)
189 * EnvConditions: N/A
190 * CaseDescription: 1. call RequestBuffers with producer_ is nullptr
191 *                  2. check ret
192  */
HWTEST_F(ProducerSurfaceTest, RequestBuffers001, Function | MediumTest | Level2)193 HWTEST_F(ProducerSurfaceTest, RequestBuffers001, Function | MediumTest | Level2)
194 {
195     std::vector<sptr<SurfaceBuffer>> sfbuffers;
196     std::vector<sptr<SyncFence>> releaseFences;
197     GSError ret = surface_->RequestBuffers(sfbuffers, releaseFences, requestConfig);
198     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
199 }
200 
201 /*
202 * Function: FlushBuffer
203 * Type: Function
204 * Rank: Important(2)
205 * EnvConditions: N/A
206 * CaseDescription: 1. call FlushBuffer with producer_ is nullptr
207 *                  2. check ret
208  */
HWTEST_F(ProducerSurfaceTest, FlushBuffer001, Function | MediumTest | Level2)209 HWTEST_F(ProducerSurfaceTest, FlushBuffer001, Function | MediumTest | Level2)
210 {
211     sptr<SurfaceBuffer> buffer = SurfaceBuffer::Create();
212     GSError ret = surface_->FlushBuffer(buffer, SyncFence::INVALID_FENCE, flushConfig);
213     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
214 }
215 
216 /*
217 * Function: FlushBuffer
218 * Type: Function
219 * Rank: Important(2)
220 * EnvConditions: N/A
221 * CaseDescription: 1. call FlushBuffer with nullptr params
222 *                  2. check ret
223  */
HWTEST_F(ProducerSurfaceTest, FlushBuffer002, Function | MediumTest | Level2)224 HWTEST_F(ProducerSurfaceTest, FlushBuffer002, Function | MediumTest | Level2)
225 {
226     sptr<SurfaceBuffer> buffer = SurfaceBuffer::Create();
227     GSError ret = surface_->FlushBuffer(buffer, nullptr, flushConfig);
228     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
229 }
230 
231 /*
232 * Function: FlushBuffer
233 * Type: Function
234 * Rank: Important(2)
235 * EnvConditions: N/A
236 * CaseDescription: 1. call FlushBuffer with nullptr params
237 *                  2. check ret
238  */
HWTEST_F(ProducerSurfaceTest, FlushBuffer003, Function | MediumTest | Level2)239 HWTEST_F(ProducerSurfaceTest, FlushBuffer003, Function | MediumTest | Level2)
240 {
241     sptr<SurfaceBuffer> buffer = nullptr;
242     GSError ret = surface_->FlushBuffer(buffer, SyncFence::INVALID_FENCE, flushConfig);
243     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
244 }
245 
246 /*
247 * Function: FlushBuffers
248 * Type: Function
249 * Rank: Important(2)
250 * EnvConditions: N/A
251 * CaseDescription: 1. call FlushBuffers with producer_ is nullptr
252 *                  2. check ret
253  */
HWTEST_F(ProducerSurfaceTest, FlushBuffers001, Function | MediumTest | Level2)254 HWTEST_F(ProducerSurfaceTest, FlushBuffers001, Function | MediumTest | Level2)
255 {
256     std::vector<sptr<SurfaceBuffer>> buffers;
257     buffers.push_back(SurfaceBuffer::Create());
258     std::vector<sptr<SyncFence>> flushFences;
259     std::vector<BufferFlushConfigWithDamages> configs;
260     GSError ret = surface_->FlushBuffers(buffers, flushFences, configs);
261     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
262 }
263 
264 /*
265 * Function: GetLastFlushedBuffer
266 * Type: Function
267 * Rank: Important(2)
268 * EnvConditions: N/A
269 * CaseDescription: 1. call GetLastFlushedBuffer with producer_ is nullptr
270 *                  2. check ret
271  */
HWTEST_F(ProducerSurfaceTest, GetLastFlushedBuffer001, Function | MediumTest | Level2)272 HWTEST_F(ProducerSurfaceTest, GetLastFlushedBuffer001, Function | MediumTest | Level2)
273 {
274     sptr<SurfaceBuffer> buffer = SurfaceBuffer::Create();
275     sptr<SyncFence> fence;
276     float matrix[16];
277     GSError ret = surface_->GetLastFlushedBuffer(buffer, fence, matrix, false);
278     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
279 }
280 
281 /*
282 * Function: CancelBuffer
283 * Type: Function
284 * Rank: Important(2)
285 * EnvConditions: N/A
286 * CaseDescription: 1. call CancelBuffer with producer_ is nullptr
287 *                  2. check ret
288  */
HWTEST_F(ProducerSurfaceTest, CancelBuffer001, Function | MediumTest | Level2)289 HWTEST_F(ProducerSurfaceTest, CancelBuffer001, Function | MediumTest | Level2)
290 {
291     sptr<SurfaceBuffer> buffer = SurfaceBuffer::Create();
292     GSError ret = surface_->CancelBuffer(buffer);
293     ASSERT_EQ(ret, OHOS::SURFACE_ERROR_UNKOWN);
294 }
295 
296 /*
297 * Function: AttachBufferToQueue
298 * Type: Function
299 * Rank: Important(2)
300 * EnvConditions: N/A
301 * CaseDescription: 1. call AttachBufferToQueue with producer_ is nullptr
302 *                  2. check ret
303  */
HWTEST_F(ProducerSurfaceTest, AttachBufferToQueue001, Function | MediumTest | Level2)304 HWTEST_F(ProducerSurfaceTest, AttachBufferToQueue001, Function | MediumTest | Level2)
305 {
306     sptr<SurfaceBuffer> buffer = SurfaceBuffer::Create();
307     GSError ret = surface_->AttachBufferToQueue(buffer);
308     ASSERT_EQ(ret, OHOS::SURFACE_ERROR_UNKOWN);
309 }
310 
311 /*
312 * Function: DetachBufferFromQueue
313 * Type: Function
314 * Rank: Important(2)
315 * EnvConditions: N/A
316 * CaseDescription: 1. call DetachBufferFromQueue with producer_ is nullptr
317 *                  2. check ret
318  */
HWTEST_F(ProducerSurfaceTest, DetachBufferFromQueue001, Function | MediumTest | Level2)319 HWTEST_F(ProducerSurfaceTest, DetachBufferFromQueue001, Function | MediumTest | Level2)
320 {
321     sptr<SurfaceBuffer> buffer = SurfaceBuffer::Create();
322     GSError ret = surface_->DetachBufferFromQueue(buffer);
323     ASSERT_EQ(ret, OHOS::SURFACE_ERROR_UNKOWN);
324 }
325 
326 /*
327 * Function: DetachBuffer
328 * Type: Function
329 * Rank: Important(2)
330 * EnvConditions: N/A
331 * CaseDescription: 1. call DetachBuffer with producer_ is nullptr
332 *                  2. check ret
333  */
HWTEST_F(ProducerSurfaceTest, DetachBuffer001, Function | MediumTest | Level2)334 HWTEST_F(ProducerSurfaceTest, DetachBuffer001, Function | MediumTest | Level2)
335 {
336     sptr<SurfaceBuffer> buffer = SurfaceBuffer::Create();
337     GSError ret = surface_->DetachBuffer(buffer);
338     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
339 }
340 
341 /*
342 * Function: SetQueueSize and GetQueueSize
343 * Type: Function
344 * Rank: Important(2)
345 * EnvConditions: N/A
346 * CaseDescription: 1. call GetQueueSize and get default value
347 *                  2. call SetQueueSize
348 *                  3. call SetQueueSize again with abnormal value
349 *                  4. call GetQueueSize
350 *                  5. check ret
351  */
HWTEST_F(ProducerSurfaceTest, QueueSize001, Function | MediumTest | Level2)352 HWTEST_F(ProducerSurfaceTest, QueueSize001, Function | MediumTest | Level2)
353 {
354     ASSERT_EQ(pSurface->GetQueueSize(), (uint32_t)SURFACE_DEFAULT_QUEUE_SIZE);
355     GSError ret = pSurface->SetQueueSize(2);
356     ASSERT_EQ(ret, OHOS::GSERROR_OK);
357 
358     ret = pSurface->SetQueueSize(SURFACE_MAX_QUEUE_SIZE + 1);
359     ASSERT_NE(ret, OHOS::GSERROR_OK);
360 
361     ASSERT_EQ(pSurface->GetQueueSize(), 2u);
362 }
363 
364 /*
365 * Function: SetQueueSize and GetQueueSize
366 * Type: Function
367 * Rank: Important(2)
368 * EnvConditions: N/A
369 * CaseDescription: 1. call GetQueueSize with producer_ is nullptr and check ret
370 *                  2. call SetQueueSize with producer_ is nullptr and check ret
371  */
HWTEST_F(ProducerSurfaceTest, QueueSize002, Function | MediumTest | Level2)372 HWTEST_F(ProducerSurfaceTest, QueueSize002, Function | MediumTest | Level2)
373 {
374     uint32_t queueSize = surface_->GetQueueSize();
375     ASSERT_EQ(queueSize, 0);
376     GSError ret = surface_->SetQueueSize(queueSize);
377     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
378 }
379 
380 /*
381 * Function: GetDefaultWidth, GetDefaultHeight and SetDefaultWidthAndHeight
382 * Type: Function
383 * Rank: Important(2)
384 * EnvConditions: N/A
385 * CaseDescription: 1. call SetDefaultWidthAndHeight with producer_ is nullptr and check ret
386 *                  2. call GetDefaultWidth with producer_ is nullptr and check ret
387 *                  3. call GetDefaultHeight with producer_ is nullptr and check ret
388  */
HWTEST_F(ProducerSurfaceTest, DefaultWidthAndHeight001, Function | MediumTest | Level2)389 HWTEST_F(ProducerSurfaceTest, DefaultWidthAndHeight001, Function | MediumTest | Level2)
390 {
391     GSError ret = surface_->SetDefaultWidthAndHeight(0, 0);
392     ASSERT_EQ(ret, OHOS::GSERROR_NOT_SUPPORT);
393     int32_t width = surface_->GetDefaultWidth();
394     ASSERT_EQ(width, -1);  // -1 is default width
395     int32_t height = surface_->GetDefaultHeight();
396     ASSERT_EQ(height, -1);  // -1 is default height
397 }
398 
399 /*
400 * Function: SetTransformHint and GetTransformHint
401 * Type: Function
402 * Rank: Important(2)
403 * EnvConditions: N/A
404 * CaseDescription: 1. call SetTransformHint with producer_ is nullptr and check ret
405 *                  2. call GetTransformHint with producer_ is nullptr and check ret
406  */
HWTEST_F(ProducerSurfaceTest, TransformHint001, Function | MediumTest | Level2)407 HWTEST_F(ProducerSurfaceTest, TransformHint001, Function | MediumTest | Level2)
408 {
409     GSError ret = surface_->SetTransformHint(GraphicTransformType::GRAPHIC_ROTATE_NONE);
410     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
411     GraphicTransformType type = surface_->GetTransformHint();
412     ASSERT_EQ(type, GraphicTransformType::GRAPHIC_ROTATE_NONE);
413 }
414 
415 /*
416 * Function: SetDefaultUsage and GetDefaultUsage
417 * Type: Function
418 * Rank: Important(2)
419 * EnvConditions: N/A
420 * CaseDescription: 1. call SetDefaultUsage with producer_ is nullptr and check ret
421 *                  2. call GetDefaultUsage with producer_ is nullptr and check ret
422  */
HWTEST_F(ProducerSurfaceTest, DefaultUsage001, Function | MediumTest | Level2)423 HWTEST_F(ProducerSurfaceTest, DefaultUsage001, Function | MediumTest | Level2)
424 {
425     GSError ret = surface_->SetDefaultUsage(0);
426     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
427     uint64_t usage = surface_->GetDefaultUsage();
428     ASSERT_EQ(usage, 0);
429 }
430 
431 /*
432 * Function: RequestBuffer and FlushBuffer
433 * Type: Function
434 * Rank: Important(2)
435 * EnvConditions: N/A
436 * CaseDescription: 1. call RequestBuffer
437 *                  2. call FlushBuffer
438 *                  3. check ret
439  */
HWTEST_F(ProducerSurfaceTest, ReqCanFluAcqRel001, Function | MediumTest | Level2)440 HWTEST_F(ProducerSurfaceTest, ReqCanFluAcqRel001, Function | MediumTest | Level2)
441 {
442     sptr<SurfaceBuffer> buffer;
443 
444     int releaseFence = -1;
445     GSError ret = pSurface->RequestBuffer(buffer, releaseFence, requestConfig);
446     ASSERT_EQ(ret, OHOS::GSERROR_OK);
447     ASSERT_NE(buffer, nullptr);
448     firstSeqnum = buffer->GetSeqNum();
449 
450     ret = pSurface->FlushBuffer(buffer, -1, flushConfig);
451     ASSERT_EQ(ret, OHOS::GSERROR_OK);
452 }
453 
454 /*
455 * Function: RequestBuffer and FlushBuffer
456 * Type: Function
457 * Rank: Important(2)
458 * EnvConditions: N/A
459 * CaseDescription: 1. call RequestBuffer
460 *                  2. call FlushBuffer 2 times
461 *                  3. check ret
462  */
HWTEST_F(ProducerSurfaceTest, ReqCanFluAcqRel002, Function | MediumTest | Level2)463 HWTEST_F(ProducerSurfaceTest, ReqCanFluAcqRel002, Function | MediumTest | Level2)
464 {
465     sptr<SurfaceBuffer> buffer;
466     int releaseFence = -1;
467 
468     GSError ret = pSurface->RequestBuffer(buffer, releaseFence, requestConfig);
469     ASSERT_EQ(ret, OHOS::GSERROR_OK);
470     ASSERT_NE(buffer, nullptr);
471 
472     ret = pSurface->FlushBuffer(buffer, -1, flushConfig);
473     ASSERT_EQ(ret, OHOS::GSERROR_OK);
474 
475     ret = pSurface->FlushBuffer(buffer, -1, flushConfig);
476     ASSERT_NE(ret, OHOS::GSERROR_OK);
477 }
478 
479 /*
480 * Function: AcquireBuffer and ReleaseBuffer
481 * Type: Function
482 * Rank: Important(2)
483 * EnvConditions: N/A
484 * CaseDescription: 1. call AcquireBuffer and ReleaseBuffer many times
485 *                  2. check ret
486  */
HWTEST_F(ProducerSurfaceTest, ReqCanFluAcqRel003, Function | MediumTest | Level2)487 HWTEST_F(ProducerSurfaceTest, ReqCanFluAcqRel003, Function | MediumTest | Level2)
488 {
489     sptr<SurfaceBuffer> buffer;
490     int32_t flushFence;
491 
492     GSError ret = csurf->AcquireBuffer(buffer, flushFence, timestamp, damage);
493     ASSERT_EQ(ret, OHOS::GSERROR_OK);
494 
495     ret = csurf->ReleaseBuffer(buffer, -1);
496     ASSERT_EQ(ret, OHOS::GSERROR_OK);
497 
498     ret = csurf->AcquireBuffer(buffer, flushFence, timestamp, damage);
499     ASSERT_EQ(ret, OHOS::GSERROR_OK);
500 
501     ret = csurf->ReleaseBuffer(buffer, -1);
502     ASSERT_EQ(ret, OHOS::GSERROR_OK);
503 }
504 
505 /*
506 * Function: RequestBuffer and CancelBuffer
507 * Type: Function
508 * Rank: Important(2)
509 * EnvConditions: N/A
510 * CaseDescription: 1. call RequestBuffer
511 *                  2. call CancelBuffer
512 *                  3. check ret
513  */
HWTEST_F(ProducerSurfaceTest, ReqCanFluAcqRel004, Function | MediumTest | Level2)514 HWTEST_F(ProducerSurfaceTest, ReqCanFluAcqRel004, Function | MediumTest | Level2)
515 {
516     sptr<SurfaceBuffer> buffer;
517 
518     int releaseFence = -1;
519     GSError ret = pSurface->RequestBuffer(buffer, releaseFence, requestConfig);
520     ASSERT_EQ(ret, OHOS::GSERROR_OK);
521 
522     ret = pSurface->CancelBuffer(buffer);
523     ASSERT_EQ(ret, OHOS::GSERROR_OK);
524 }
525 
526 /*
527 * Function: RequestBuffer and CancelBuffer
528 * Type: Function
529 * Rank: Important(2)
530 * EnvConditions: N/A
531 * CaseDescription: 1. call RequestBuffer
532 *                  2. call CancelBuffer 2 times
533 *                  3. check ret
534  */
HWTEST_F(ProducerSurfaceTest, ReqCanFluAcqRel005, Function | MediumTest | Level2)535 HWTEST_F(ProducerSurfaceTest, ReqCanFluAcqRel005, Function | MediumTest | Level2)
536 {
537     sptr<SurfaceBuffer> buffer;
538 
539     int releaseFence = -1;
540     GSError ret = pSurface->RequestBuffer(buffer, releaseFence, requestConfig);
541     ASSERT_EQ(ret, OHOS::GSERROR_OK);
542 
543     ret = pSurface->CancelBuffer(buffer);
544     ASSERT_EQ(ret, OHOS::GSERROR_OK);
545 
546     ret = pSurface->CancelBuffer(buffer);
547     ASSERT_NE(ret, OHOS::GSERROR_OK);
548 }
549 
550 /*
551 * Function: RequestBuffer and CancelBuffer
552 * Type: Function
553 * Rank: Important(2)
554 * EnvConditions: N/A
555 * CaseDescription: 1. call RequestBuffer and CancelBuffer many times
556 *                  2. check ret
557  */
HWTEST_F(ProducerSurfaceTest, ReqCanFluAcqRel006, Function | MediumTest | Level2)558 HWTEST_F(ProducerSurfaceTest, ReqCanFluAcqRel006, Function | MediumTest | Level2)
559 {
560     sptr<SurfaceBuffer> buffer;
561     sptr<SurfaceBuffer> buffer1;
562     sptr<SurfaceBuffer> buffer2;
563     int releaseFence = -1;
564 
565     GSError ret = pSurface->RequestBuffer(buffer, releaseFence, requestConfig);
566     ASSERT_EQ(ret, OHOS::GSERROR_OK);
567 
568     ret = pSurface->RequestBuffer(buffer1, releaseFence, requestConfig);
569     ASSERT_EQ(ret, OHOS::GSERROR_OK);
570 
571     ret = pSurface->RequestBuffer(buffer2, releaseFence, requestConfig);
572     ASSERT_NE(ret, OHOS::GSERROR_OK);
573 
574     ret = pSurface->CancelBuffer(buffer);
575     ASSERT_EQ(ret, OHOS::GSERROR_OK);
576 
577     ret = pSurface->CancelBuffer(buffer1);
578     ASSERT_EQ(ret, OHOS::GSERROR_OK);
579 
580     ret = pSurface->CancelBuffer(buffer2);
581     ASSERT_NE(ret, OHOS::GSERROR_OK);
582 }
583 
584 /*
585 * Function: GetQueueSize and SetQueueSize
586 * Type: Function
587 * Rank: Important(2)
588 * EnvConditions: N/A
589 * CaseDescription: 1. call GetQeueSize
590 *                  2. call SetQueueSize 2 times
591 *                  3. check ret
592  */
HWTEST_F(ProducerSurfaceTest, SetQueueSizeDeleting001, Function | MediumTest | Level2)593 HWTEST_F(ProducerSurfaceTest, SetQueueSizeDeleting001, Function | MediumTest | Level2)
594 {
595     sptr<ConsumerSurface> cs = static_cast<ConsumerSurface*>(csurf.GetRefPtr());
596     sptr<BufferQueueProducer> bqp = static_cast<BufferQueueProducer*>(cs->GetProducer().GetRefPtr());
597     ASSERT_EQ(bqp->GetQueueSize(), 2u);
598 
599     GSError ret = pSurface->SetQueueSize(1);
600     ASSERT_EQ(ret, OHOS::GSERROR_OK);
601 
602     ret = pSurface->SetQueueSize(2);
603     ASSERT_EQ(ret, OHOS::GSERROR_OK);
604 }
605 
606 /*
607 * Function: RequestBuffer, ReleaseBuffer and CancelBuffer
608 * Type: Function
609 * Rank: Important(2)
610 * EnvConditions: N/A
611 * CaseDescription: 1. call RequestBuffer
612 *                  2. call ReleaseBuffer
613 *                  3. call CancelBuffer
614 *                  4. check ret
615  */
HWTEST_F(ProducerSurfaceTest, ReqCanFluAcqRel007, Function | MediumTest | Level2)616 HWTEST_F(ProducerSurfaceTest, ReqCanFluAcqRel007, Function | MediumTest | Level2)
617 {
618     sptr<SurfaceBuffer> buffer;
619 
620     int releaseFence = -1;
621     GSError ret = pSurface->RequestBuffer(buffer, releaseFence, requestConfig);
622     ASSERT_EQ(ret, OHOS::GSERROR_OK);
623 
624     ret = pSurface->CancelBuffer(buffer);
625     ASSERT_EQ(ret, OHOS::GSERROR_OK);
626 }
627 
628 /*
629 * Function: SetUserData and GetUserData
630 * Type: Function
631 * Rank: Important(2)
632 * EnvConditions: N/A
633 * CaseDescription: 1. call SetUserData and GetUserData many times
634 *                  2. check ret
635  */
HWTEST_F(ProducerSurfaceTest, UserData001, Function | MediumTest | Level2)636 HWTEST_F(ProducerSurfaceTest, UserData001, Function | MediumTest | Level2)
637 {
638     GSError ret;
639 
640     std::string strs[SURFACE_MAX_USER_DATA_COUNT];
641     constexpr int32_t stringLengthMax = 32;
642     char str[stringLengthMax] = {};
643     for (int i = 0; i < SURFACE_MAX_USER_DATA_COUNT; i++) {
644         auto secRet = snprintf_s(str, sizeof(str), sizeof(str) - 1, "%d", i);
645         ASSERT_GT(secRet, 0);
646 
647         strs[i] = str;
648         ret = pSurface->SetUserData(strs[i], "magic");
649         ASSERT_EQ(ret, OHOS::GSERROR_OK);
650     }
651 
652     ret = pSurface->SetUserData("-1", "error");
653     ASSERT_NE(ret, OHOS::GSERROR_OK);
654 
655     std::string retStr;
656     for (int i = 0; i < SURFACE_MAX_USER_DATA_COUNT; i++) {
657         retStr = pSurface->GetUserData(strs[i]);
658         ASSERT_EQ(retStr, "magic");
659     }
660 }
661 
662 /*
663 * Function: UserDataChangeListen
664 * Type: Function
665 * Rank: Important(2)
666 * EnvConditions: N/A
667 * CaseDescription: 1. RegisterUserDataChangeListen
668 *                  2. SetUserData
669 *                  3. check ret
670  */
HWTEST_F(ProducerSurfaceTest, UserDataChangeListen001, Function | MediumTest | Level2)671 HWTEST_F(ProducerSurfaceTest, UserDataChangeListen001, Function | MediumTest | Level2)
672 {
673     sptr<IConsumerSurface> csurfTestUserData = IConsumerSurface::Create();
674     sptr<IBufferConsumerListener> listenerTestUserData = new BufferConsumerListener();
675     csurfTestUserData->RegisterConsumerListener(listenerTestUserData);
676     sptr<IBufferProducer> producerTestUserData = csurf->GetProducer();
677     sptr<Surface> pSurfaceTestUserData = Surface::CreateSurfaceAsProducer(producerTestUserData);
678 
679     GSError ret1 = OHOS::GSERROR_INVALID_ARGUMENTS;
680     GSError ret2 = OHOS::GSERROR_INVALID_ARGUMENTS;
681     auto func1 = [&ret1](const std::string& key, const std::string& value) {
682         ret1 = OHOS::GSERROR_OK;
683     };
684     auto func2 = [&ret2](const std::string& key, const std::string& value) {
685         ret2 = OHOS::GSERROR_OK;
686     };
687     pSurfaceTestUserData->RegisterUserDataChangeListener("func1", func1);
688     pSurfaceTestUserData->RegisterUserDataChangeListener("func2", func2);
689     pSurfaceTestUserData->RegisterUserDataChangeListener("func3", nullptr);
690     ASSERT_EQ(pSurfaceTestUserData->RegisterUserDataChangeListener("func2", func2), OHOS::GSERROR_INVALID_ARGUMENTS);
691 
692     if (pSurfaceTestUserData->SetUserData("Regist", "OK") == OHOS::GSERROR_OK) {
693         ASSERT_EQ(ret1, OHOS::GSERROR_OK);
694         ASSERT_EQ(ret2, OHOS::GSERROR_OK);
695     }
696 
697     ret1 = OHOS::GSERROR_INVALID_ARGUMENTS;
698     ret2 = OHOS::GSERROR_INVALID_ARGUMENTS;
699     pSurfaceTestUserData->UnRegisterUserDataChangeListener("func1");
700     ASSERT_EQ(pSurfaceTestUserData->UnRegisterUserDataChangeListener("func1"), OHOS::GSERROR_INVALID_ARGUMENTS);
701 
702     if (pSurfaceTestUserData->SetUserData("UnRegist", "INVALID") == OHOS::GSERROR_OK) {
703         ASSERT_EQ(ret1, OHOS::GSERROR_INVALID_ARGUMENTS);
704         ASSERT_EQ(ret2, OHOS::GSERROR_OK);
705     }
706 
707     ret1 = OHOS::GSERROR_INVALID_ARGUMENTS;
708     ret2 = OHOS::GSERROR_INVALID_ARGUMENTS;
709     pSurfaceTestUserData->ClearUserDataChangeListener();
710     pSurfaceTestUserData->RegisterUserDataChangeListener("func1", func1);
711     if (pSurfaceTestUserData->SetUserData("Clear", "OK") == OHOS::GSERROR_OK) {
712         ASSERT_EQ(ret1, OHOS::GSERROR_OK);
713         ASSERT_EQ(ret2, OHOS::GSERROR_INVALID_ARGUMENTS);
714     }
715 }
716 
717 /*
718 * Function: UserDataChangeListen
719 * Type: Function
720 * Rank: Important(2)
721 * EnvConditions: N/A
722 * CaseDescription: 1. RegisterUserDataChangeListen
723 *                  2. SetUserData
724 *                  3. check ret
725  */
HWTEST_F(ProducerSurfaceTest, UserDataChangeListen002, Function | MediumTest | Level2)726 HWTEST_F(ProducerSurfaceTest, UserDataChangeListen002, Function | MediumTest | Level2)
727 {
728     sptr<IConsumerSurface> csurfTestUserData = IConsumerSurface::Create();
729     sptr<IBufferConsumerListener> listenerTestUserData = new BufferConsumerListener();
730     csurfTestUserData->RegisterConsumerListener(listenerTestUserData);
731     sptr<IBufferProducer> producerTestUserData = csurf->GetProducer();
732     sptr<Surface> pSurfaceTestUserData = Surface::CreateSurfaceAsProducer(producerTestUserData);
733 
734     auto func = [&pSurfaceTestUserData](const std::string& FuncName) {
735         constexpr int32_t RegisterListenerNum = 1000;
736         std::vector<GSError> ret(RegisterListenerNum, OHOS::GSERROR_INVALID_ARGUMENTS);
737         std::string strs[RegisterListenerNum];
738         constexpr int32_t stringLengthMax = 32;
739         char str[stringLengthMax] = {};
740         for (int i = 0; i < RegisterListenerNum; i++) {
741             auto secRet = snprintf_s(str, sizeof(str), sizeof(str) - 1, "%s%d", FuncName.c_str(), i);
742             ASSERT_GT(secRet, 0);
743             strs[i] = str;
744             ASSERT_EQ(pSurfaceTestUserData->RegisterUserDataChangeListener(strs[i], [i, &ret]
745             (const std::string& key, const std::string& value) {
746                 ret[i] = OHOS::GSERROR_OK;
747             }), OHOS::GSERROR_OK);
748         }
749 
750         if (pSurfaceTestUserData->SetUserData("Regist", FuncName) == OHOS::GSERROR_OK) {
751             for (int i = 0; i < RegisterListenerNum; i++) {
752                 ASSERT_EQ(ret[i], OHOS::GSERROR_OK);
753             }
754         }
755 
756         for (int i = 0; i < RegisterListenerNum; i++) {
757             pSurfaceTestUserData->UnRegisterUserDataChangeListener(strs[i]);
758         }
759     };
760 
761     std::thread t1(func, "thread1");
762     std::thread t2(func, "thread2");
763     t1.join();
764     t2.join();
765 }
766 
767 /*
768 * Function: GetUniqueId
769 * Type: Function
770 * Rank: Important(2)
771 * EnvConditions: N/A
772 * CaseDescription: 1. call GetUniqueId
773 *                  2. check ret
774  */
HWTEST_F(ProducerSurfaceTest, UniqueId001, Function | MediumTest | Level2)775 HWTEST_F(ProducerSurfaceTest, UniqueId001, Function | MediumTest | Level2)
776 {
777     uint64_t uniqueId = pSurface->GetUniqueId();
778     ASSERT_NE(uniqueId, 0);
779 }
780 
781 /*
782 * Function: SetTransform and GetTransform
783 * Type: Function
784 * Rank: Important(2)
785 * EnvConditions: N/A
786 * CaseDescription: 1. call GetTransform with default and check ret
787  */
HWTEST_F(ProducerSurfaceTest, transform001, Function | MediumTest | Level2)788 HWTEST_F(ProducerSurfaceTest, transform001, Function | MediumTest | Level2)
789 {
790     GSError ret = pSurface->SetTransform(GraphicTransformType::GRAPHIC_ROTATE_NONE);
791     ASSERT_EQ(ret, OHOS::GSERROR_OK);
792 }
793 
794 /*
795 * Function: SetTransform and GetTransform
796 * Type: Function
797 * Rank: Important(1)
798 * EnvConditions: N/A
799 * CaseDescription: 1. call SetTransform with other parameters and check ret
800  */
HWTEST_F(ProducerSurfaceTest, transform002, Function | MediumTest | Level1)801 HWTEST_F(ProducerSurfaceTest, transform002, Function | MediumTest | Level1)
802 {
803     GSError ret = pSurface->SetTransform(GraphicTransformType::GRAPHIC_ROTATE_90);
804     ASSERT_EQ(ret, OHOS::GSERROR_OK);
805 }
806 
807 /*
808 * Function: SetTransform and GetTransform
809 * Type: Function
810 * Rank: Important(1)
811 * EnvConditions: N/A
812 * CaseDescription: 1. call SetTransform with other parameters and check ret
813  */
HWTEST_F(ProducerSurfaceTest, transform003, Function | MediumTest | Level1)814 HWTEST_F(ProducerSurfaceTest, transform003, Function | MediumTest | Level1)
815 {
816     GSError ret = pSurface->SetTransform(GraphicTransformType::GRAPHIC_ROTATE_180);
817     ASSERT_EQ(ret, OHOS::GSERROR_OK);
818 }
819 
820 /*
821 * Function: SetTransform and GetTransform
822 * Type: Function
823 * Rank: Important(1)
824 * EnvConditions: N/A
825 * CaseDescription: 1. call SetTransform with other parameters and check ret
826  */
HWTEST_F(ProducerSurfaceTest, transform004, Function | MediumTest | Level1)827 HWTEST_F(ProducerSurfaceTest, transform004, Function | MediumTest | Level1)
828 {
829     GSError ret = pSurface->SetTransform(GraphicTransformType::GRAPHIC_ROTATE_270);
830     ASSERT_EQ(ret, OHOS::GSERROR_OK);
831 }
832 
833 /*
834 * Function: SetTransform and GetTransform
835 * Type: Function
836 * Rank: Important(1)
837 * EnvConditions: N/A
838 * CaseDescription: 1. call SetTransform with producer_ is nullptr and check ret
839 *                  2. call GetTransform with producer_ is nullptr and check ret
840  */
HWTEST_F(ProducerSurfaceTest, transform005, Function | MediumTest | Level1)841 HWTEST_F(ProducerSurfaceTest, transform005, Function | MediumTest | Level1)
842 {
843     GSError ret = surface_->SetTransform(GraphicTransformType::GRAPHIC_ROTATE_270);
844     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
845     GraphicTransformType type = surface_->GetTransform();
846     ASSERT_EQ(type, GraphicTransformType::GRAPHIC_ROTATE_BUTT);
847 }
848 
849 /*
850 * Function: IsSupportedAlloc
851 * Type: Function
852 * Rank: Important(2)
853 * EnvConditions: N/A
854 * CaseDescription: 1. call IsSupportedAlloc with abnormal parameters and check ret
855  */
HWTEST_F(ProducerSurfaceTest, isSupportedAlloc001, Function | MediumTest | Level2)856 HWTEST_F(ProducerSurfaceTest, isSupportedAlloc001, Function | MediumTest | Level2)
857 {
858     std::vector<BufferVerifyAllocInfo> infos;
859     std::vector<bool> supporteds;
860     GSError ret = pSurface->IsSupportedAlloc(infos, supporteds);
861     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
862 }
863 
864 /*
865 * Function: IsSupportedAlloc
866 * Type: Function
867 * Rank: Important(2)
868 * EnvConditions: N/A
869 * CaseDescription: 1. call IsSupportedAlloc with abnormal parameters and check ret
870  */
HWTEST_F(ProducerSurfaceTest, isSupportedAlloc002, Function | MediumTest | Level2)871 HWTEST_F(ProducerSurfaceTest, isSupportedAlloc002, Function | MediumTest | Level2)
872 {
873     std::vector<BufferVerifyAllocInfo> infos;
874     std::vector<bool> supporteds;
875     GSError ret = pSurface->IsSupportedAlloc(infos, supporteds);
876     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
877 
878     BufferVerifyAllocInfo info = {
879         .width = 0x100,
880         .height = 0x100,
881         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
882         .format = GRAPHIC_PIXEL_FMT_RGBA_8888,
883     };
884     infos.push_back(info);
885     info.format = GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
886     infos.push_back(info);
887     info.format = GRAPHIC_PIXEL_FMT_YUV_422_I;
888     infos.push_back(info);
889 
890     ret = pSurface->IsSupportedAlloc(infos, supporteds);
891     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
892 }
893 
894 /*
895 * Function: IsSupportedAlloc
896 * Type: Function
897 * Rank: Important(1)
898 * EnvConditions: N/A
899 * CaseDescription: 1. call IsSupportedAlloc with normal parameters and check ret
900  */
HWTEST_F(ProducerSurfaceTest, isSupportedAlloc003, Function | MediumTest | Level1)901 HWTEST_F(ProducerSurfaceTest, isSupportedAlloc003, Function | MediumTest | Level1)
902 {
903     std::vector<BufferVerifyAllocInfo> infos;
904     std::vector<bool> supporteds;
905     BufferVerifyAllocInfo info = {
906         .width = 0x100,
907         .height = 0x100,
908         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
909         .format = GRAPHIC_PIXEL_FMT_RGBA_8888,
910     };
911     infos.push_back(info);
912     info.format = GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
913     infos.push_back(info);
914     info.format = GRAPHIC_PIXEL_FMT_YUV_422_I;
915     infos.push_back(info);
916 
917     supporteds.push_back(false);
918     supporteds.push_back(false);
919     supporteds.push_back(false);
920 
921     GSError ret = pSurface->IsSupportedAlloc(infos, supporteds);
922     ASSERT_EQ(ret, OHOS::GSERROR_OK);  // mock data result
923     ASSERT_EQ(supporteds[0], true);  // mock data result
924     ASSERT_EQ(supporteds[1], true);  // mock data result
925     ASSERT_EQ(supporteds[2], false);  // mock data result
926 }
927 
928 /*
929 * Function: IsSupportedAlloc
930 * Type: Function
931 * Rank: Important(2)
932 * EnvConditions: N/A
933 * CaseDescription: 1. call IsSupportedAlloc with producer_ is nullptr and check ret
934  */
HWTEST_F(ProducerSurfaceTest, isSupportedAlloc004, Function | MediumTest | Level2)935 HWTEST_F(ProducerSurfaceTest, isSupportedAlloc004, Function | MediumTest | Level2)
936 {
937     std::vector<BufferVerifyAllocInfo> infos;
938     std::vector<bool> supporteds;
939     GSError ret = surface_->IsSupportedAlloc(infos, supporteds);
940     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
941 }
942 
943 /*
944 * Function: SetScalingMode and GetScalingMode
945 * Type: Function
946 * Rank: Important(2)
947 * EnvConditions: N/A
948 * CaseDescription: 1. call SetScalingMode with abnormal parameters and check ret
949  */
HWTEST_F(ProducerSurfaceTest, scalingMode001, Function | MediumTest | Level2)950 HWTEST_F(ProducerSurfaceTest, scalingMode001, Function | MediumTest | Level2)
951 {
952     ScalingMode scalingMode = ScalingMode::SCALING_MODE_SCALE_TO_WINDOW;
953     GSError ret = pSurface->SetScalingMode(-1, scalingMode);
954     ASSERT_EQ(ret, OHOS::GSERROR_NO_ENTRY);
955 }
956 
957 /*
958 * Function: SetScalingMode and GetScalingMode
959 * Type: Function
960 * Rank: Important(1)
961 * EnvConditions: N/A
962 * CaseDescription: 1. call SetScalingMode with normal parameters and check ret
963 *                  2. call GetScalingMode and check ret
964  */
HWTEST_F(ProducerSurfaceTest, scalingMode002, Function | MediumTest | Level1)965 HWTEST_F(ProducerSurfaceTest, scalingMode002, Function | MediumTest | Level1)
966 {
967     ScalingMode scalingMode = ScalingMode::SCALING_MODE_SCALE_TO_WINDOW;
968     sptr<SurfaceBuffer> buffer;
969     int releaseFence = -1;
970     GSError ret = pSurface->RequestBuffer(buffer, releaseFence, requestConfig);
971     ASSERT_EQ(ret, OHOS::GSERROR_OK);
972     ASSERT_NE(buffer, nullptr);
973 
974     uint32_t sequence = buffer->GetSeqNum();
975     ret = pSurface->SetScalingMode(sequence, scalingMode);
976     ASSERT_EQ(ret, OHOS::GSERROR_OK);
977 
978     ret = pSurface->CancelBuffer(buffer);
979     ASSERT_EQ(ret, OHOS::GSERROR_OK);
980 }
981 
982 /*
983 * Function: SetScalingMode003
984 * Type: Function
985 * Rank: Important(2)
986 * EnvConditions: N/A
987 * CaseDescription: 1. call SetScalingMode with abnormal parameters and check ret
988  */
HWTEST_F(ProducerSurfaceTest, scalingMode003, Function | MediumTest | Level2)989 HWTEST_F(ProducerSurfaceTest, scalingMode003, Function | MediumTest | Level2)
990 {
991     ScalingMode scalingMode = ScalingMode::SCALING_MODE_SCALE_TO_WINDOW;
992     GSError ret = pSurface->SetScalingMode(scalingMode);
993     ASSERT_EQ(ret, OHOS::GSERROR_OK);
994 }
995 
996 /*
997 * Function: SetScalingMode and GetScalingMode
998 * Type: Function
999 * Rank: Important(2)
1000 * EnvConditions: N/A
1001 * CaseDescription: 1. call SetScalingMode with producer_ is nullptr and check ret
1002 *                  2. call GetScalingMode and check ret
1003  */
HWTEST_F(ProducerSurfaceTest, scalingMode004, Function | MediumTest | Level2)1004 HWTEST_F(ProducerSurfaceTest, scalingMode004, Function | MediumTest | Level2)
1005 {
1006     ScalingMode scalingMode = ScalingMode::SCALING_MODE_SCALE_TO_WINDOW;
1007     GSError ret = surface_->SetScalingMode(scalingMode);
1008     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1009     ret = surface_->SetScalingMode(0, scalingMode);
1010     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1011     ret = surface_->GetScalingMode(0, scalingMode);
1012     ASSERT_EQ(ret, OHOS::GSERROR_NOT_SUPPORT);
1013 }
1014 
1015 /*
1016 * Function: SetMetaData and GetMetaData
1017 * Type: Function
1018 * Rank: Important(2)
1019 * EnvConditions: N/A
1020 * CaseDescription: 1. call SetMetaData with abnormal parameters and check ret
1021  */
HWTEST_F(ProducerSurfaceTest, metaData001, Function | MediumTest | Level2)1022 HWTEST_F(ProducerSurfaceTest, metaData001, Function | MediumTest | Level2)
1023 {
1024     std::vector<GraphicHDRMetaData> metaData;
1025     GSError ret = pSurface->SetMetaData(firstSeqnum, metaData);
1026     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1027 }
1028 
1029 /*
1030 * Function: SetMetaData and GetMetaData
1031 * Type: Function
1032 * Rank: Important(2)
1033 * EnvConditions: N/A
1034 * CaseDescription: 1. call SetMetaData with abnormal parameters and check ret
1035  */
HWTEST_F(ProducerSurfaceTest, metaData002, Function | MediumTest | Level2)1036 HWTEST_F(ProducerSurfaceTest, metaData002, Function | MediumTest | Level2)
1037 {
1038     std::vector<GraphicHDRMetaData> metaData;
1039     GraphicHDRMetaData data = {
1040         .key = GraphicHDRMetadataKey::GRAPHIC_MATAKEY_RED_PRIMARY_X,
1041         .value = 100,  // for test
1042     };
1043     metaData.push_back(data);
1044     GSError ret = pSurface->SetMetaData(-1, metaData);
1045     ASSERT_EQ(ret, OHOS::GSERROR_NO_ENTRY);
1046 }
1047 
1048 /*
1049 * Function: SetMetaData and GetMetaData
1050 * Type: Function
1051 * Rank: Important(1)
1052 * EnvConditions: N/A
1053 * CaseDescription: 1. call SetMetaData with normal parameters and check ret
1054 *                  2. call GetMetaData and check ret
1055  */
HWTEST_F(ProducerSurfaceTest, metaData003, Function | MediumTest | Level1)1056 HWTEST_F(ProducerSurfaceTest, metaData003, Function | MediumTest | Level1)
1057 {
1058     std::vector<GraphicHDRMetaData> metaData;
1059     GraphicHDRMetaData data = {
1060         .key = GraphicHDRMetadataKey::GRAPHIC_MATAKEY_RED_PRIMARY_X,
1061         .value = 100,  // for test
1062     };
1063     metaData.push_back(data);
1064     sptr<SurfaceBuffer> buffer;
1065     int releaseFence = -1;
1066     GSError ret = pSurface->RequestBuffer(buffer, releaseFence, requestConfig);
1067     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1068     ASSERT_NE(buffer, nullptr);
1069 
1070     uint32_t sequence = buffer->GetSeqNum();
1071     ret = pSurface->SetMetaData(sequence, metaData);
1072     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1073 
1074     ret = pSurface->CancelBuffer(buffer);
1075     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1076 }
1077 
1078 /*
1079 * Function: SetMetaData and GetMetaData
1080 * Type: Function
1081 * Rank: Important(2)
1082 * EnvConditions: N/A
1083 * CaseDescription: 1. call SetMetaData with producer_ is nullptr and check ret
1084 *                  2. call GetMetaData and check ret
1085  */
HWTEST_F(ProducerSurfaceTest, metaData004, Function | MediumTest | Level2)1086 HWTEST_F(ProducerSurfaceTest, metaData004, Function | MediumTest | Level2)
1087 {
1088     std::vector<GraphicHDRMetaData> metaData;
1089     GSError ret = surface_->SetMetaData(0, metaData);
1090     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1091     GraphicHDRMetaData data = {
1092         .key = GraphicHDRMetadataKey::GRAPHIC_MATAKEY_RED_PRIMARY_X,
1093         .value = 100,  // 100 metaData value for test
1094     };
1095     metaData.push_back(data);
1096     ret = surface_->SetMetaData(0, metaData);
1097     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1098     ret = surface_->GetMetaData(0, metaData);
1099     ASSERT_EQ(ret, OHOS::GSERROR_NOT_SUPPORT);
1100 }
1101 
1102 /*
1103 * Function: SetMetaDataSet and GetMetaDataSet
1104 * Type: Function
1105 * Rank: Important(2)
1106 * EnvConditions: N/A
1107 * CaseDescription: 1. call SetMetaDataSet with abnormal parameters and check ret
1108  */
HWTEST_F(ProducerSurfaceTest, metaDataSet001, Function | MediumTest | Level2)1109 HWTEST_F(ProducerSurfaceTest, metaDataSet001, Function | MediumTest | Level2)
1110 {
1111     GraphicHDRMetadataKey key = GraphicHDRMetadataKey::GRAPHIC_MATAKEY_HDR10_PLUS;
1112     std::vector<uint8_t> metaData;
1113 
1114     GSError ret = pSurface->SetMetaDataSet(firstSeqnum, key, metaData);
1115     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1116 }
1117 
1118 /*
1119 * Function: SetMetaDataSet and GetMetaDataSet
1120 * Type: Function
1121 * Rank: Important(2)
1122 * EnvConditions: N/A
1123 * CaseDescription: 1. call SetMetaDataSet with abnormal parameters and check ret
1124  */
HWTEST_F(ProducerSurfaceTest, metaDataSet002, Function | MediumTest | Level2)1125 HWTEST_F(ProducerSurfaceTest, metaDataSet002, Function | MediumTest | Level2)
1126 {
1127     GraphicHDRMetadataKey key = GraphicHDRMetadataKey::GRAPHIC_MATAKEY_HDR10_PLUS;
1128     std::vector<uint8_t> metaData;
1129 
1130     uint8_t data = 10;  // for test
1131     metaData.push_back(data);
1132     GSError ret = pSurface->SetMetaDataSet(-1, key, metaData);
1133     ASSERT_EQ(ret, OHOS::GSERROR_NO_ENTRY);
1134 }
1135 
1136 /*
1137 * Function: SetMetaDataSet and GetMetaDataSet
1138 * Type: Function
1139 * Rank: Important(1)
1140 * EnvConditions: N/A
1141 * CaseDescription: 1. call SetMetaDataSet with normal parameters and check ret
1142 *                  2. call GetMetaDataSet and check ret
1143  */
HWTEST_F(ProducerSurfaceTest, metaDataSet003, Function | MediumTest | Level1)1144 HWTEST_F(ProducerSurfaceTest, metaDataSet003, Function | MediumTest | Level1)
1145 {
1146     GraphicHDRMetadataKey key = GraphicHDRMetadataKey::GRAPHIC_MATAKEY_HDR10_PLUS;
1147     std::vector<uint8_t> metaData;
1148     uint8_t data = 10;  // for test
1149     metaData.push_back(data);
1150 
1151     sptr<SurfaceBuffer> buffer;
1152     int releaseFence = -1;
1153     GSError ret = pSurface->RequestBuffer(buffer, releaseFence, requestConfig);
1154     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1155     ASSERT_NE(buffer, nullptr);
1156 
1157     uint32_t sequence = buffer->GetSeqNum();
1158     ret = pSurface->SetMetaDataSet(sequence, key, metaData);
1159     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1160 
1161     ret = pSurface->CancelBuffer(buffer);
1162     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1163 }
1164 
1165 /*
1166 * Function: SetMetaDataSet and GetMetaDataSet
1167 * Type: Function
1168 * Rank: Important(2)
1169 * EnvConditions: N/A
1170 * CaseDescription: 1. call SetMetaDataSet with producer_ is nullptr and check ret
1171 *                  2. call GetMetaDataSet and check ret
1172  */
HWTEST_F(ProducerSurfaceTest, metaDataSet004, Function | MediumTest | Level2)1173 HWTEST_F(ProducerSurfaceTest, metaDataSet004, Function | MediumTest | Level2)
1174 {
1175     GraphicHDRMetadataKey key = GraphicHDRMetadataKey::GRAPHIC_MATAKEY_HDR10_PLUS;
1176     std::vector<uint8_t> metaData;
1177 
1178     uint8_t data = 10;  // metaData value for test
1179     metaData.push_back(data);
1180     GSError ret = surface_->SetMetaDataSet(0, key, metaData);
1181     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1182     ret = surface_->GetMetaDataSet(0, key, metaData);
1183     ASSERT_EQ(ret, OHOS::GSERROR_NOT_SUPPORT);
1184 }
1185 
1186 /*
1187 * Function: SetTunnelHandle and GetTunnelHandle
1188 * Type: Function
1189 * Rank: Important(2)
1190 * EnvConditions: N/A
1191 * CaseDescription: 1. call SetTunnelhandle with producer_ is nullptr and check ret
1192  */
HWTEST_F(ProducerSurfaceTest, tunnelHandle001, Function | MediumTest | Level2)1193 HWTEST_F(ProducerSurfaceTest, tunnelHandle001, Function | MediumTest | Level2)
1194 {
1195     GraphicExtDataHandle *handle = nullptr;
1196     handle = static_cast<GraphicExtDataHandle *>(malloc(sizeof(GraphicExtDataHandle) + sizeof(int32_t) * 1));
1197     ASSERT_NE(handle, nullptr);
1198     handle->fd = -1;
1199     handle->reserveInts = 1;
1200     handle->reserve[0] = 0;
1201     GSError ret = surface_->SetTunnelHandle(handle);
1202     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1203 
1204     sptr<SurfaceTunnelHandle> handleGet = surface_->GetTunnelHandle();
1205     ASSERT_EQ(handleGet, nullptr);
1206     free(handle);
1207 }
1208 
1209 /*
1210 * Function: SetTunnelHandle and GetTunnelHandle
1211 * Type: Function
1212 * Rank: Important(2)
1213 * EnvConditions: N/A
1214 * CaseDescription: 1. call SetTunnelhandle with normal parameters and check ret
1215  */
HWTEST_F(ProducerSurfaceTest, tunnelHandle002, Function | MediumTest | Level2)1216 HWTEST_F(ProducerSurfaceTest, tunnelHandle002, Function | MediumTest | Level2)
1217 {
1218     GraphicExtDataHandle *handle = nullptr;
1219     handle = static_cast<GraphicExtDataHandle *>(malloc(sizeof(GraphicExtDataHandle) + sizeof(int32_t) * 1));
1220     ASSERT_NE(handle, nullptr);
1221     handle->fd = -1;
1222     handle->reserveInts = 1;
1223     handle->reserve[0] = 0;
1224     GSError ret = pSurface->SetTunnelHandle(handle);
1225     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1226 
1227     ret = pSurface->SetTunnelHandle(handle);
1228     ASSERT_EQ(ret, OHOS::GSERROR_NO_ENTRY);
1229     free(handle);
1230 }
1231 
1232 /*
1233 * Function: connect
1234 * Type: Function
1235 * Rank: Important(1)
1236 * EnvConditions: N/A
1237 * CaseDescription: 1. call connect and check ret
1238  */
HWTEST_F(ProducerSurfaceTest, connect001, Function | MediumTest | Level1)1239 HWTEST_F(ProducerSurfaceTest, connect001, Function | MediumTest | Level1)
1240 {
1241     GSError ret = pSurface->Connect();
1242     ASSERT_EQ(ret, OHOS::SURFACE_ERROR_CONSUMER_IS_CONNECTED);
1243 }
1244 
1245 /*
1246 * Function: disconnect
1247 * Type: Function
1248 * Rank: Important(1)
1249 * EnvConditions: N/A
1250 * CaseDescription: 1. call Disconnect and check ret
1251  */
HWTEST_F(ProducerSurfaceTest, disconnect001, Function | MediumTest | Level1)1252 HWTEST_F(ProducerSurfaceTest, disconnect001, Function | MediumTest | Level1)
1253 {
1254     GSError ret = pSurface->Disconnect();
1255     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1256 }
1257 
1258 /*
1259 * Function: connect
1260 * Type: Function
1261 * Rank: Important(1)
1262 * EnvConditions: N/A
1263 * CaseDescription: 1. call connect and check ret
1264  */
HWTEST_F(ProducerSurfaceTest, connect002, Function | MediumTest | Level1)1265 HWTEST_F(ProducerSurfaceTest, connect002, Function | MediumTest | Level1)
1266 {
1267     GSError ret = pSurface->Connect();
1268     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1269 }
1270 
1271 /*
1272 * Function: disconnect
1273 * Type: Function
1274 * Rank: Important(1)
1275 * EnvConditions: N/A
1276 * CaseDescription: 1. call Disconnect and check ret
1277  */
HWTEST_F(ProducerSurfaceTest, disconnect002, Function | MediumTest | Level1)1278 HWTEST_F(ProducerSurfaceTest, disconnect002, Function | MediumTest | Level1)
1279 {
1280     GSError ret = pSurface->Disconnect();
1281     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1282 }
1283 
1284 /*
1285 * Function: connect
1286 * Type: Function
1287 * Rank: Important(1)
1288 * EnvConditions: N/A
1289 * CaseDescription: 1. call connect with producer_ is nullptr and check ret
1290  */
HWTEST_F(ProducerSurfaceTest, connect003, Function | MediumTest | Level1)1291 HWTEST_F(ProducerSurfaceTest, connect003, Function | MediumTest | Level1)
1292 {
1293     GSError ret = surface_->Connect();
1294     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1295 }
1296 
1297 /*
1298 * Function: disconnect
1299 * Type: Function
1300 * Rank: Important(1)
1301 * EnvConditions: N/A
1302 * CaseDescription: 1. call Disconnect with producer_ is nullptr and check ret
1303  */
HWTEST_F(ProducerSurfaceTest, disconnect003, Function | MediumTest | Level1)1304 HWTEST_F(ProducerSurfaceTest, disconnect003, Function | MediumTest | Level1)
1305 {
1306     GSError ret = surface_->Disconnect();
1307     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1308 }
1309 
1310 /*
1311 * Function: SetPresentTimestamp and GetPresentTimestamp
1312 * Type: Function
1313 * Rank: Important(2)
1314 * EnvConditions: N/A
1315 * CaseDescription: 1. call GetPresentTimestamp with producer_ is nullptr and check ret
1316 *                  2. call SetPresentTimestamp and check ret
1317  */
HWTEST_F(ProducerSurfaceTest, presentTimestamp001, Function | MediumTest | Level2)1318 HWTEST_F(ProducerSurfaceTest, presentTimestamp001, Function | MediumTest | Level2)
1319 {
1320     GraphicPresentTimestampType type = GraphicPresentTimestampType::GRAPHIC_DISPLAY_PTS_UNSUPPORTED;
1321     int64_t time = 0;
1322 
1323     GSError ret = surface_->GetPresentTimestamp(firstSeqnum, type, time);
1324     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1325     GraphicPresentTimestamp timestamp;
1326     ret = surface_->SetPresentTimestamp(firstSeqnum, timestamp);
1327     ASSERT_EQ(ret, OHOS::GSERROR_NOT_SUPPORT);
1328 }
1329 
1330 /*
1331 * Function: SetPresentTimestamp and GetPresentTimestamp
1332 * Type: Function
1333 * Rank: Important(2)
1334 * EnvConditions: N/A
1335 * CaseDescription: 1. call GetPresentTimestamp with normal parameters and check ret
1336 * @tc.require: issueI5I57K
1337  */
HWTEST_F(ProducerSurfaceTest, presentTimestamp002, Function | MediumTest | Level2)1338 HWTEST_F(ProducerSurfaceTest, presentTimestamp002, Function | MediumTest | Level2)
1339 {
1340     GraphicPresentTimestampType type = GraphicPresentTimestampType::GRAPHIC_DISPLAY_PTS_UNSUPPORTED;
1341     int64_t time = 0;
1342 
1343     GSError ret = pSurface->GetPresentTimestamp(firstSeqnum, type, time);
1344     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1345 }
1346 
1347 /*
1348 * Function: SetPresentTimestamp and GetPresentTimestamp
1349 * Type: Function
1350 * Rank: Important(2)
1351 * EnvConditions: N/A
1352 * CaseDescription: 1. call SetPresentTimestamp with normal parameters and check ret
1353 * @tc.require: issueI5I57K
1354  */
HWTEST_F(ProducerSurfaceTest, presentTimestamp003, Function | MediumTest | Level2)1355 HWTEST_F(ProducerSurfaceTest, presentTimestamp003, Function | MediumTest | Level2)
1356 {
1357     GraphicPresentTimestampType type = GraphicPresentTimestampType::GRAPHIC_DISPLAY_PTS_DELAY;
1358     int64_t time = 0;
1359     GSError ret = pSurface->GetPresentTimestamp(-1, type, time);
1360     ASSERT_EQ(ret, OHOS::GSERROR_NO_ENTRY);
1361 }
1362 
1363 /*
1364 * Function: SetPresentTimestamp and GetPresentTimestamp
1365 * Type: Function
1366 * Rank: Important(1)
1367 * EnvConditions: N/A
1368 * CaseDescription: 1. call SetPresentTimestamp and check ret
1369 * @tc.require: issueI5I57K
1370  */
HWTEST_F(ProducerSurfaceTest, presentTimestamp004, Function | MediumTest | Level1)1371 HWTEST_F(ProducerSurfaceTest, presentTimestamp004, Function | MediumTest | Level1)
1372 {
1373     sptr<SurfaceBuffer> buffer;
1374     int releaseFence = -1;
1375     GSError ret = pSurface->RequestBuffer(buffer, releaseFence, requestConfig);
1376     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1377     ASSERT_NE(buffer, nullptr);
1378 
1379     uint32_t sequence = buffer->GetSeqNum();
1380     GraphicPresentTimestampType type = GraphicPresentTimestampType::GRAPHIC_DISPLAY_PTS_DELAY;
1381     int64_t time = 0;
1382     ret = pSurface->GetPresentTimestamp(sequence, type, time);
1383     ASSERT_EQ(ret, OHOS::GSERROR_NO_ENTRY);
1384 
1385     ret = pSurface->CancelBuffer(buffer);
1386     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1387 }
1388 
1389 /*
1390 * Function: SetWptrNativeWindowToPSurface
1391 * Type: Function
1392 * Rank: Important(1)
1393 * EnvConditions: N/A
1394 * CaseDescription: 1. SetWptrNativeWindowToPSurface and check ret
1395 * @tc.require: issueI7WYIY
1396  */
HWTEST_F(ProducerSurfaceTest, SetWptrNativeWindowToPSurface001, Function | MediumTest | Level1)1397 HWTEST_F(ProducerSurfaceTest, SetWptrNativeWindowToPSurface001, Function | MediumTest | Level1)
1398 {
1399     struct NativeWindow nativeWindow;
1400     GSError ret = pSurface->SetWptrNativeWindowToPSurface(&nativeWindow);
1401     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1402 }
1403 
1404 /*
1405  * Function: SetWptrNativeWindowToPSurface
1406  * Type: Function
1407  * Rank: Important(1)
1408  * EnvConditions: N/A
1409  * CaseDescription: 1. SetWptrNativeWindowToPSurface with nullptr param and check ret
1410  * @tc.require: issueIANSVH
1411  */
HWTEST_F(ProducerSurfaceTest, SetWptrNativeWindowToPSurface002, Function | MediumTest | Level1)1412 HWTEST_F(ProducerSurfaceTest, SetWptrNativeWindowToPSurface002, Function | MediumTest | Level1)
1413 {
1414     GSError ret = surface_->SetWptrNativeWindowToPSurface(nullptr);
1415     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1416 }
1417 
1418 /*
1419  * Function: SetWindowConfig and GetWindowConfig
1420  * Type: Function
1421  * Rank: Important(1)
1422  * EnvConditions: N/A
1423  * CaseDescription: 1. Call SetWindowConfig
1424  *                  2. Call GetWindowConfig and check ret
1425  * @tc.require: issueIANSVH
1426  */
HWTEST_F(ProducerSurfaceTest, WindowConfig001, Function | MediumTest | Level1)1427 HWTEST_F(ProducerSurfaceTest, WindowConfig001, Function | MediumTest | Level1)
1428 {
1429     surface_->SetWindowConfig(requestConfig);
1430     auto configGet = surface_->GetWindowConfig();
1431     ASSERT_EQ(requestConfig, configGet);
1432 }
1433 
1434 /*
1435  * Function: SetWindowConfigOpt
1436  * Type: Function
1437  * Rank: Important(1)
1438  * EnvConditions: N/A
1439  * CaseDescription: 1. Call SetWindowConfig with params
1440  *                  2. Call GetWindowConfig and check ret
1441  * @tc.require: issueIANSVH
1442  */
HWTEST_F(ProducerSurfaceTest, WindowConfig002, Function | MediumTest | Level1)1443 HWTEST_F(ProducerSurfaceTest, WindowConfig002, Function | MediumTest | Level1)
1444 {
1445     surface_->SetWindowConfigWidthAndHeight(requestConfig.width, requestConfig.height);
1446     surface_->SetWindowConfigStride(requestConfig.strideAlignment);
1447     surface_->SetWindowConfigFormat(requestConfig.format);
1448     surface_->SetWindowConfigUsage(requestConfig.usage);
1449     surface_->SetWindowConfigTimeout(requestConfig.timeout);
1450     surface_->SetWindowConfigColorGamut(requestConfig.colorGamut);
1451     surface_->SetWindowConfigTransform(requestConfig.transform);
1452     auto configGet = surface_->GetWindowConfig();
1453     ASSERT_EQ(requestConfig.width, configGet.width);
1454     ASSERT_EQ(requestConfig.height, configGet.height);
1455     ASSERT_EQ(requestConfig.strideAlignment, configGet.strideAlignment);
1456     ASSERT_EQ(requestConfig.format, configGet.format);
1457     ASSERT_EQ(requestConfig.usage, configGet.usage);
1458     ASSERT_EQ(requestConfig.timeout, configGet.timeout);
1459     ASSERT_EQ(requestConfig.colorGamut, configGet.colorGamut);
1460     ASSERT_EQ(requestConfig.transform, configGet.transform);
1461 }
1462 
1463 /*
1464 * Function: AttachBuffer
1465 * Type: Function
1466 * Rank: Important(1)
1467 * EnvConditions: N/A
1468 * CaseDescription: 1. AttachBuffer and check ret
1469 * @tc.require: issueI7WYIY
1470  */
HWTEST_F(ProducerSurfaceTest, AttachBuffer001, Function | MediumTest | Level1)1471 HWTEST_F(ProducerSurfaceTest, AttachBuffer001, Function | MediumTest | Level1)
1472 {
1473     GSError ret = pSurface->CleanCache();
1474     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1475     sptr<SurfaceBuffer> buffer = SurfaceBuffer::Create();
1476     ASSERT_NE(buffer, nullptr);
1477     sptr<SyncFence> fence = SyncFence::INVALID_FENCE;
1478     int32_t timeOut = 5;
1479     ret = pSurface->AttachBuffer(buffer, timeOut);
1480     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1481 }
1482 
1483 /*
1484 * Function: AttachBuffer
1485 * Type: Function
1486 * Rank: Important(2)
1487 * EnvConditions: N/A
1488 * CaseDescription: 1. call AttachBuffer with producer_ is nullptr
1489 *                  2. check ret
1490  */
HWTEST_F(ProducerSurfaceTest, AttachBuffer002, Function | MediumTest | Level2)1491 HWTEST_F(ProducerSurfaceTest, AttachBuffer002, Function | MediumTest | Level2)
1492 {
1493     sptr<SurfaceBuffer> buffer = SurfaceBuffer::Create();
1494     GSError ret = surface_->AttachBuffer(buffer);
1495     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1496     ret = surface_->AttachBuffer(buffer, 0);
1497     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1498 }
1499 
1500 /*
1501 * Function: RegisterSurfaceDelegator000
1502 * Type: Function
1503 * Rank: Important(1)
1504 * EnvConditions: N/A
1505 * CaseDescription: 1. RegisterSurfaceDelegator and check ret
1506 * @tc.require: issueI7WYIY
1507  */
HWTEST_F(ProducerSurfaceTest, RegisterSurfaceDelegator001, Function | MediumTest | Level1)1508 HWTEST_F(ProducerSurfaceTest, RegisterSurfaceDelegator001, Function | MediumTest | Level1)
1509 {
1510     GSError ret = pSurface->CleanCache();
1511     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1512     ret = pSurface->RegisterSurfaceDelegator(nullptr);
1513     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1514 }
1515 
1516 /*
1517 * Function: CleanCache001
1518 * Type: Function
1519 * Rank: Important(1)
1520 * EnvConditions: N/A
1521 * CaseDescription: 1. CleanCache and check ret
1522  */
HWTEST_F(ProducerSurfaceTest, CleanCache001, Function | MediumTest | Level2)1523 HWTEST_F(ProducerSurfaceTest, CleanCache001, Function | MediumTest | Level2)
1524 {
1525     GSError ret = pSurface->CleanCache(true);
1526     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1527 }
1528 
1529 /*
1530 * Function: CleanCache
1531 * Type: Function
1532 * Rank: Important(1)
1533 * EnvConditions: N/A
1534 * CaseDescription: 1. CleanCache with producer_ is nullptr and check ret
1535  */
HWTEST_F(ProducerSurfaceTest, CleanCache002, Function | MediumTest | Level2)1536 HWTEST_F(ProducerSurfaceTest, CleanCache002, Function | MediumTest | Level2)
1537 {
1538     GSError ret = surface_->CleanCache(true);
1539     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1540 }
1541 
1542 /*
1543 * Function: GoBackground
1544 * Type: Function
1545 * Rank: Important(1)
1546 * EnvConditions: N/A
1547 * CaseDescription: 1. GoBackground with producer_ is nullptr and check ret
1548  */
HWTEST_F(ProducerSurfaceTest, GoBackground001, Function | MediumTest | Level2)1549 HWTEST_F(ProducerSurfaceTest, GoBackground001, Function | MediumTest | Level2)
1550 {
1551     GSError ret = surface_->GoBackground();
1552     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1553 }
1554 
1555 /*
1556 * Function: SetSurfaceSourceType and GetSurfaceSourceType
1557 * Type: Function
1558 * Rank: Important(2)
1559 * EnvConditions: N/A
1560 * CaseDescription: 1. call SetSurfaceSourceType and check ret
1561 *                  2. call GetSurfaceSourceType and check ret
1562 */
HWTEST_F(ProducerSurfaceTest, SurfaceSourceType001, Function | MediumTest | Level2)1563 HWTEST_F(ProducerSurfaceTest, SurfaceSourceType001, Function | MediumTest | Level2)
1564 {
1565     OHSurfaceSource sourceType = OHSurfaceSource::OH_SURFACE_SOURCE_VIDEO;
1566     GSError ret = pSurface->SetSurfaceSourceType(sourceType);
1567     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1568     ASSERT_EQ(pSurface->GetSurfaceSourceType(), OH_SURFACE_SOURCE_VIDEO);
1569 }
1570 
1571 /*
1572 * Function: SetSurfaceSourceType and GetSurfaceSourceType
1573 * Type: Function
1574 * Rank: Important(2)
1575 * EnvConditions: N/A
1576 * CaseDescription: 1. call SetSurfaceSourceType with producer_ is nullptr and check ret
1577 *                  2. call GetSurfaceSourceType with producer_ is nullptr and check ret
1578 */
HWTEST_F(ProducerSurfaceTest, SurfaceSourceType002, Function | MediumTest | Level2)1579 HWTEST_F(ProducerSurfaceTest, SurfaceSourceType002, Function | MediumTest | Level2)
1580 {
1581     OHSurfaceSource sourceType = OHSurfaceSource::OH_SURFACE_SOURCE_VIDEO;
1582     GSError ret = surface_->SetSurfaceSourceType(sourceType);
1583     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1584     ASSERT_EQ(surface_->GetSurfaceSourceType(), OHSurfaceSource::OH_SURFACE_SOURCE_DEFAULT);
1585 }
1586 
1587 /*
1588 * Function: SetSurfaceAppFrameworkType and GetSurfaceAppFrameworkType
1589 * Type: Function
1590 * Rank: Important(2)
1591 * EnvConditions: N/A
1592 * CaseDescription: 1. call SetSurfaceAppFrameworkType and check ret
1593 *                  2. call GetSurfaceAppFrameworkType and check ret
1594 */
HWTEST_F(ProducerSurfaceTest, SurfaceAppFrameworkType001, Function | MediumTest | Level2)1595 HWTEST_F(ProducerSurfaceTest, SurfaceAppFrameworkType001, Function | MediumTest | Level2)
1596 {
1597     std::string type = "test";
1598     GSError ret = pSurface->SetSurfaceAppFrameworkType(type);
1599     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1600     ASSERT_EQ(pSurface->GetSurfaceAppFrameworkType(), "test");
1601 }
1602 
1603 /*
1604 * Function: SetSurfaceAppFrameworkType and GetSurfaceAppFrameworkType
1605 * Type: Function
1606 * Rank: Important(2)
1607 * EnvConditions: N/A
1608 * CaseDescription: 1. call SetSurfaceAppFrameworkType with producer_ is nullptr and check ret
1609 *                  2. call GetSurfaceAppFrameworkType with producer_ is nullptr and check ret
1610 */
HWTEST_F(ProducerSurfaceTest, SurfaceAppFrameworkType002, Function | MediumTest | Level2)1611 HWTEST_F(ProducerSurfaceTest, SurfaceAppFrameworkType002, Function | MediumTest | Level2)
1612 {
1613     std::string type = "test";
1614     GSError ret = surface_->SetSurfaceAppFrameworkType(type);
1615     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1616     ASSERT_EQ(surface_->GetSurfaceAppFrameworkType(), "");
1617 }
1618 
1619 /*
1620 * Function: RegisterReleaseListener and UnRegisterReleaseListener
1621 * Type: Function
1622 * Rank: Important(2)
1623 * EnvConditions: N/A
1624 * CaseDescription: 1. call RegisterReleaseListener with producer_ is nullptr and check ret
1625 *                  2. call UnRegisterReleaseListener with producer_ is nullptr and check ret
1626 */
HWTEST_F(ProducerSurfaceTest, ReleaseListener001, Function | MediumTest | Level2)1627 HWTEST_F(ProducerSurfaceTest, ReleaseListener001, Function | MediumTest | Level2)
1628 {
1629     GSError ret = surface_->RegisterReleaseListener(OnBufferRelease);
1630     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1631     OnReleaseFuncWithFence releaseFuncWithFence;
1632     ret = surface_->RegisterReleaseListener(releaseFuncWithFence);
1633     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1634     ret = surface_->UnRegisterReleaseListener();
1635     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1636 }
1637 
1638 /*
1639 * Function: RegisterUserDataChangeListener
1640 * Type: Function
1641 * Rank: Important(2)
1642 * EnvConditions: N/A
1643 * CaseDescription: 1. call RegisterUserDataChangeListener with nullptr param
1644 *                  2. check ret
1645 */
HWTEST_F(ProducerSurfaceTest, RegisterUserDataChangeListener001, Function | MediumTest | Level2)1646 HWTEST_F(ProducerSurfaceTest, RegisterUserDataChangeListener001, Function | MediumTest | Level2)
1647 {
1648     GSError ret = surface_->RegisterUserDataChangeListener("test", nullptr);
1649     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1650 }
1651 
1652 /*
1653 * Function: RequestBuffersAndFlushBuffers
1654 * Type: Function
1655 * Rank: Important(1)
1656 * EnvConditions: N/A
1657 * CaseDescription: 1. call RequestBuffers and FlushBuffers
1658 * @tc.require: issueI5GMZN issueI5IWHW
1659  */
HWTEST_F(ProducerSurfaceTest, RequestBuffersAndFlushBuffers, Function | MediumTest | Level1)1660 HWTEST_F(ProducerSurfaceTest, RequestBuffersAndFlushBuffers, Function | MediumTest | Level1)
1661 {
1662     pSurface->SetQueueSize(12);
1663     std::vector<sptr<SurfaceBuffer>> sfbuffers;
1664     std::vector<sptr<SyncFence>> releaseFences;
1665     EXPECT_EQ(OHOS::GSERROR_OK, pSurface->RequestBuffers(sfbuffers, releaseFences, requestConfig));
1666     for (size_t i = 0; i < sfbuffers.size(); ++i) {
1667         EXPECT_NE(nullptr, sfbuffers[i]);
1668     }
1669     std::cout << sfbuffers.size() << std::endl;
1670     uint32_t num = static_cast<uint32_t>(sfbuffers.size());
1671     std::vector<sptr<SyncFence>> flushFences;
1672     std::vector<BufferFlushConfigWithDamages> configs;
1673     flushFences.resize(num);
1674     configs.reserve(num);
1675     auto handleConfig = [](BufferFlushConfigWithDamages &config) -> void {
1676         config.damages.reserve(1);
1677         OHOS::Rect damage = {
1678             .x = 0,
1679             .y = 0,
1680             .w = 0x100,
1681             .h = 0x100
1682         };
1683         config.damages.emplace_back(damage);
1684         config.timestamp = 0;
1685     };
1686     for (uint32_t i = 0; i < num; ++i) {
1687         flushFences[i] = new SyncFence(-1);
1688         BufferFlushConfigWithDamages config;
1689         handleConfig(config);
1690         configs.emplace_back(config);
1691     }
1692     flushFences[0] = nullptr;
1693     EXPECT_EQ(OHOS::GSERROR_INVALID_ARGUMENTS, pSurface->FlushBuffers(sfbuffers, flushFences, configs));
1694     flushFences[0] = new SyncFence(-1);
1695     EXPECT_EQ(OHOS::GSERROR_OK, pSurface->FlushBuffers(sfbuffers, flushFences, configs));
1696     sptr<SurfaceBuffer> buffer;
1697     int32_t flushFence;
1698     for (uint32_t i = 0; i < num; ++i) {
1699         GSError ret = csurf->AcquireBuffer(buffer, flushFence, timestamp, damage);
1700         ASSERT_EQ(ret, OHOS::GSERROR_OK);
1701         ret = csurf->ReleaseBuffer(buffer, -1);
1702         ASSERT_EQ(ret, OHOS::GSERROR_OK);
1703     }
1704     EXPECT_EQ(OHOS::GSERROR_NO_BUFFER, csurf->AcquireBuffer(buffer, flushFence, timestamp, damage));
1705     pSurface->SetQueueSize(2);
1706 }
1707 
1708 /*
1709 * Function: AcquireLastFlushedBuffer and ReleaseLastFlushedBuffer
1710 * Type: Function
1711 * Rank: Important(1)
1712 * EnvConditions: N/A
1713 * CaseDescription: 1. call AcquireLastFlushedBuffer OK
1714 *                  2. call AcquireLastFlushedBuffer FAIL
1715 *                  3. call ReleaseLastFlushedBuffer
1716  */
HWTEST_F(ProducerSurfaceTest, AcquireLastFlushedBuffer001, Function | MediumTest | Level2)1717 HWTEST_F(ProducerSurfaceTest, AcquireLastFlushedBuffer001, Function | MediumTest | Level2)
1718 {
1719     sptr<SurfaceBuffer> buffer;
1720     int releaseFence = -1;
1721     EXPECT_EQ(producer->SetQueueSize(3), OHOS::GSERROR_OK);
1722     GSError ret = pSurface->RequestBuffer(buffer, releaseFence, requestConfig);
1723     EXPECT_EQ(ret, OHOS::GSERROR_OK);
1724 
1725     ret = pSurface->FlushBuffer(buffer, -1, flushConfig);
1726     EXPECT_EQ(ret, OHOS::GSERROR_OK);
1727 
1728     int32_t flushFence;
1729     ret = csurf->AcquireBuffer(buffer, flushFence, timestamp, damage);
1730     EXPECT_EQ(ret, OHOS::GSERROR_OK);
1731     ret = csurf->ReleaseBuffer(buffer, -1);
1732     EXPECT_EQ(ret, OHOS::GSERROR_OK);
1733 
1734     sptr<SurfaceBuffer> buffer1 = nullptr;
1735     sptr<SyncFence> fence = nullptr;
1736     float matrix[16];
1737 
1738     ret = pSurface->AcquireLastFlushedBuffer(buffer1, fence, matrix, 16, false);
1739     EXPECT_EQ(ret, OHOS::GSERROR_OK);
1740     EXPECT_EQ(buffer->GetSeqNum(), buffer1->GetSeqNum());
1741 
1742     ret = pSurface->AcquireLastFlushedBuffer(buffer1, fence, matrix, 16, false);
1743     EXPECT_EQ(ret, OHOS::SURFACE_ERROR_BUFFER_STATE_INVALID);
1744 
1745     sptr<SurfaceBuffer> buffer2;
1746     ret = pSurface->RequestBuffer(buffer2, releaseFence, requestConfig);
1747     EXPECT_EQ(ret, OHOS::GSERROR_OK);
1748 
1749     sptr<SurfaceBuffer> buffer3;
1750     ret = pSurface->RequestBuffer(buffer3, releaseFence, requestConfig);
1751     EXPECT_EQ(ret, OHOS::GSERROR_OK);
1752 
1753     sptr<SurfaceBuffer> buffer4;
1754     ret = pSurface->RequestBuffer(buffer4, releaseFence, requestConfig);
1755     EXPECT_EQ(ret, OHOS::GSERROR_NO_BUFFER);
1756 
1757     ret = pSurface->ReleaseLastFlushedBuffer(buffer1);
1758     EXPECT_EQ(ret, OHOS::GSERROR_OK);
1759 
1760     ret = pSurface->RequestBuffer(buffer4, releaseFence, requestConfig);
1761     EXPECT_EQ(ret, OHOS::GSERROR_OK);
1762 
1763     ret = pSurface->FlushBuffer(buffer2, -1, flushConfig);
1764     EXPECT_EQ(ret, OHOS::GSERROR_OK);
1765 
1766     ret = pSurface->FlushBuffer(buffer3, -1, flushConfig);
1767     EXPECT_EQ(ret, OHOS::GSERROR_OK);
1768 
1769     ret = pSurface->FlushBuffer(buffer4, -1, flushConfig);
1770     EXPECT_EQ(ret, OHOS::GSERROR_OK);
1771 
1772     ret = pSurface->ReleaseLastFlushedBuffer(buffer2);
1773     EXPECT_EQ(ret, OHOS::SURFACE_ERROR_BUFFER_STATE_INVALID);
1774 
1775     EXPECT_EQ(pSurface->CleanCache(), OHOS::GSERROR_OK);
1776 }
1777 
1778 /*
1779 * Function: AcquireLastFlushedBuffer and ReleaseLastFlushedBuffer
1780 * Type: Function
1781 * Rank: Important(1)
1782 * EnvConditions: N/A
1783 * CaseDescription: 1. call AcquireLastFlushedBuffer FAIL
1784 *                  3. call ReleaseLastFlushedBuffer FAIL
1785  */
HWTEST_F(ProducerSurfaceTest, AcquireLastFlushedBuffer002, Function | MediumTest | Level2)1786 HWTEST_F(ProducerSurfaceTest, AcquireLastFlushedBuffer002, Function | MediumTest | Level2)
1787 {
1788     sptr<SurfaceBuffer> buffer1 = nullptr;
1789     sptr<SyncFence> fence = nullptr;
1790     float matrix[16];
1791     GSError ret = surface_->AcquireLastFlushedBuffer(buffer1, fence, matrix, 16, false);
1792     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1793     ret = surface_->ReleaseLastFlushedBuffer(buffer1);
1794     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1795     ret = pSurface->ReleaseLastFlushedBuffer(nullptr);
1796     EXPECT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1797 }
1798 
1799 /*
1800 * Function: SetHdrWhitePointBrightness and SetSdrWhitePointBrightness
1801 * Type: Function
1802 * Rank: Important(2)
1803 * EnvConditions: N/A
1804 * CaseDescription: 1. call SetHdrWhitePointBrightness with producer_ is nullptr and check ret
1805 *                  2. call SetSdrWhitePointBrightness with producer_ is nullptr and check ret
1806 */
HWTEST_F(ProducerSurfaceTest, WhitePointBrightness001, Function | MediumTest | Level2)1807 HWTEST_F(ProducerSurfaceTest, WhitePointBrightness001, Function | MediumTest | Level2)
1808 {
1809     GSError ret = surface_->SetHdrWhitePointBrightness(0);
1810     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1811     ret = surface_->SetSdrWhitePointBrightness(0);
1812     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1813 }
1814 
1815 /*
1816 * Function: ReleaseLastFlushedBuffer
1817 * Type: Function
1818 * Rank: Important(2)
1819 * EnvConditions: N/A
1820 * CaseDescription: 1. call ReleaseLastFlushedBuffer with buffer is nullptr and check ret
1821 *                  2. call ReleaseLastFlushedBuffer with producer_ is nullptr and check ret
1822 */
HWTEST_F(ProducerSurfaceTest, ReleaseLastFlushedBuffer001, Function | MediumTest | Level2)1823 HWTEST_F(ProducerSurfaceTest, ReleaseLastFlushedBuffer001, Function | MediumTest | Level2)
1824 {
1825     sptr<SurfaceBuffer> buffer = nullptr;
1826     GSError ret = surface_->ReleaseLastFlushedBuffer(buffer);
1827     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1828     buffer = SurfaceBuffer::Create();
1829     ret = surface_->ReleaseLastFlushedBuffer(buffer);
1830     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1831 }
1832 
1833 /*
1834 * Function: SetGlobalAlpha
1835 * Type: Function
1836 * Rank: Important(2)
1837 * EnvConditions: N/A
1838 * CaseDescription: 1. call SetGlobalAlpha with abnormal parameters and check ret
1839 */
HWTEST_F(ProducerSurfaceTest, SetGlobalAlpha001, Function | MediumTest | Level2)1840 HWTEST_F(ProducerSurfaceTest, SetGlobalAlpha001, Function | MediumTest | Level2)
1841 {
1842     int32_t alpha = -255;
1843     GSError ret = pSurface->SetGlobalAlpha(alpha);
1844     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1845     alpha = 256;
1846     ret = pSurface->SetGlobalAlpha(alpha);
1847     ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
1848     alpha = 255;
1849     ret = pSurface->SetGlobalAlpha(alpha);
1850     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1851 }
1852 
1853 /*
1854 * Function: IsInHebcWhiletList
1855 * Type: Function
1856 * Rank: Important(2)
1857 * EnvConditions: N/A
1858 * CaseDescription: 1. call IsInHebcWhiletList and check ret
1859 */
HWTEST_F(ProducerSurfaceTest, IsInHebcWhiletList001, Function | MediumTest | Level2)1860 HWTEST_F(ProducerSurfaceTest, IsInHebcWhiletList001, Function | MediumTest | Level2)
1861 {
1862     bool isInHebcList = pSurface->IsInHebcList();
1863     ASSERT_EQ(isInHebcList, false);
1864 }
1865 
1866 /*
1867 * Function: RequestBufferNoConsumer
1868 * Type: Function
1869 * Rank: Important(2)
1870 * EnvConditions: N/A
1871 * CaseDescription: 1. call RequestBuffer and check ret
1872 */
HWTEST_F(ProducerSurfaceTest, RequestBufferNoConsumer, Function | MediumTest | Level2)1873 HWTEST_F(ProducerSurfaceTest, RequestBufferNoConsumer, Function | MediumTest | Level2)
1874 {
1875     sptr<IConsumerSurface> cSurfTmp = IConsumerSurface::Create();
1876     sptr<IBufferConsumerListener> listenerTmp = new BufferConsumerListener();
1877     cSurfTmp->RegisterConsumerListener(listenerTmp);
1878     sptr<IBufferProducer> producerTmp = cSurfTmp->GetProducer();
1879     sptr<Surface> pSurfaceTmp = Surface::CreateSurfaceAsProducer(producerTmp);
1880 
1881     BufferRequestConfig requestConfigTmp = {
1882         .width = 0x100,
1883         .height = 0x100,
1884         .strideAlignment = 0x8,
1885         .format = GRAPHIC_PIXEL_FMT_RGBA_8888,
1886         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1887         .timeout = 0,
1888     };
1889     sptr<SurfaceBuffer> buffer = nullptr;
1890     int releaseFence = -1;
1891     GSError ret = pSurfaceTmp->RequestBuffer(buffer, releaseFence, requestConfigTmp);
1892     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1893 
1894     cSurfTmp = nullptr;
1895     ret = pSurfaceTmp->RequestBuffer(buffer, releaseFence, requestConfigTmp);
1896     ASSERT_EQ(ret, OHOS::GSERROR_NO_CONSUMER);
1897 
1898     pSurfaceTmp = nullptr;
1899     producerTmp = nullptr;
1900 }
1901 
1902 /*
1903 * Function: RequestBufferNoListener
1904 * Type: Function
1905 * Rank: Important(2)
1906 * EnvConditions: N/A
1907 * CaseDescription: 1. call RequestBuffer and check ret
1908 */
HWTEST_F(ProducerSurfaceTest, RequestBufferNoListener, Function | MediumTest | Level2)1909 HWTEST_F(ProducerSurfaceTest, RequestBufferNoListener, Function | MediumTest | Level2)
1910 {
1911     sptr<IConsumerSurface> cSurfTmp = IConsumerSurface::Create();
1912     sptr<IBufferProducer> producerTmp = cSurfTmp->GetProducer();
1913     sptr<Surface> pSurfaceTmp = Surface::CreateSurfaceAsProducer(producerTmp);
1914 
1915     BufferRequestConfig requestConfigTmp = {
1916         .width = 0x100,
1917         .height = 0x100,
1918         .strideAlignment = 0x8,
1919         .format = GRAPHIC_PIXEL_FMT_RGBA_8888,
1920         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1921         .timeout = 0,
1922     };
1923     sptr<SurfaceBuffer> buffer = nullptr;
1924     int releaseFence = -1;
1925     GSError ret = pSurfaceTmp->RequestBuffer(buffer, releaseFence, requestConfigTmp);
1926     ASSERT_EQ(ret, OHOS::SURFACE_ERROR_CONSUMER_UNREGISTER_LISTENER);
1927 
1928     ret = pSurfaceTmp->Disconnect();
1929     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1930 
1931     ret = pSurfaceTmp->Connect();
1932     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1933 
1934     ret = pSurfaceTmp->Disconnect();
1935     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1936 
1937     pSurfaceTmp = nullptr;
1938     producerTmp = nullptr;
1939     cSurfTmp = nullptr;
1940 }
1941 
1942 /*
1943 * Function: RequestBuffersNoListener
1944 * Type: Function
1945 * Rank: Important(2)
1946 * EnvConditions: N/A
1947 * CaseDescription: 1. call RequestBuffer and check ret
1948 */
HWTEST_F(ProducerSurfaceTest, RequestBuffersNoListener, Function | MediumTest | Level2)1949 HWTEST_F(ProducerSurfaceTest, RequestBuffersNoListener, Function | MediumTest | Level2)
1950 {
1951     sptr<IConsumerSurface> cSurfTmp = IConsumerSurface::Create();
1952     sptr<IBufferProducer> producerTmp = cSurfTmp->GetProducer();
1953     sptr<Surface> pSurfaceTmp = Surface::CreateSurfaceAsProducer(producerTmp);
1954 
1955     BufferRequestConfig requestConfigTmp = {
1956         .width = 0x100,
1957         .height = 0x100,
1958         .strideAlignment = 0x8,
1959         .format = GRAPHIC_PIXEL_FMT_RGBA_8888,
1960         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1961         .timeout = 0,
1962         .transform = GraphicTransformType::GRAPHIC_ROTATE_BUTT,
1963     };
1964 
1965     std::vector<sptr<SurfaceBuffer>> sfbuffers;
1966     std::vector<sptr<SyncFence>> releaseFences;
1967     GSError ret = pSurfaceTmp->RequestBuffers(sfbuffers, releaseFences, requestConfigTmp);
1968     ASSERT_EQ(ret, OHOS::SURFACE_ERROR_UNKOWN);
1969 
1970     ret = pSurfaceTmp->Disconnect();
1971     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1972 
1973     ret = pSurfaceTmp->Connect();
1974     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1975 
1976     ret = pSurfaceTmp->Disconnect();
1977     ASSERT_EQ(ret, OHOS::GSERROR_OK);
1978 
1979     pSurfaceTmp = nullptr;
1980     producerTmp = nullptr;
1981     cSurfTmp = nullptr;
1982 }
1983 }
1984