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