1 /*
2  * Copyright (c) 2023 Shenzhen Kaihong Digital Industry Development Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 
17 #include <gtest/gtest.h>
18 #include <iostream>
19 #include <thread>
20 #include <memory>
21 #include <string>
22 #include <chrono>
23 #include <fcntl.h>
24 #include <cstdlib>
25 #include <cstring>
26 
27 
28 #include "common/sharing_log.h"
29 #include "media_controller.h"
30 #include "media_channel.h"
31 #include "common/event_comm.h"
32 #include "common/media_log.h"
33 #include "media_channel_def.h"
34 #include "media_channel.h"
35 #include "video_play_controller.h"
36 #include "buffer_dispatcher.h"
37 #include "protocol/frame/h264_frame.h"
38 #include "extend/magic_enum/magic_enum.hpp"
39 #include "surface.h"
40 #include "surface_utils.h"
41 #include "transaction/rs_transaction.h"
42 #include "ui/rs_surface_node.h"
43 #include "utils/utils.h"
44 #include "securec.h"
45 #include "window.h"
46 #include "window_option.h"
47 #include "ui/rs_surface_node.h"
48 #include "configuration/include/config.h"
49 #include "common/reflect_registration.h"
50 
51 using namespace testing::ext;
52 using namespace OHOS::Sharing;
53 
54 namespace OHOS {
55 namespace Sharing {
56 class MediaplayerTestConsumer final: public BaseConsumer {
57     void UpdateOperation(ProsumerStatusMsg::Ptr &statusMsg) override
58     {
59         (void)statusMsg;
60     }
61 
62     int32_t HandleEvent(SharingEvent &event) override
63     {
64         (void) event;
65         return 0;
66     }
67 
68     int32_t Release() override
69     {
70         return 0;
71     }
72 };
73 
74 REGISTER_CLASS_REFLECTOR(MediaplayerTestConsumer);
75 
76 class MediaControllerTestBaseImpl
77         : public Singleton<MediaControllerTestBaseImpl> {
78 private:
79     FILE *videoTestFp_;
80     std::string videoTestPath_ = "/data/mediaplayer_video_test.mp4";
81     DataBuffer::Ptr videoTestData_;
82     std::vector<DataBuffer::Ptr> videoFrames_;
83     MediaData::Ptr mediaData_;
84     size_t videoTestDataLen_;
85 
86     VideoTrack videoTrack_;
87     BufferDispatcher::Ptr dispatcher_ = nullptr;
88     MediaChannel::Ptr mediaChannel_ = nullptr;
89 
90     bool playbackRun_;
91     std::unique_ptr<std::thread> playbackThread_ = nullptr;
92 
93     sptr<Rosen::WindowOption> windowOption_ = nullptr;
94     sptr<Rosen::Window>  window_ = nullptr;
95     std::shared_ptr<Rosen::RSSurfaceNode>  surfaceNode_ = nullptr;
96     sptr<Surface>  surface_ = nullptr;
97     uint64_t surfaceId_ = 0;
98 
99     bool isFirstKeyFrame_ = false;
100     size_t frameNums_ = 0;
101     std::chrono::steady_clock::time_point gopInterval_;
102 public:
GetVideoTestData(void)103     DataBuffer::Ptr& GetVideoTestData(void)
104     {
105         return videoTestData_;
106     }
107 
GetVideoTestDataLength(void) const108     size_t GetVideoTestDataLength(void) const
109     {
110         return videoTestDataLen_;
111     }
112 
GetSurface(void)113     sptr<Surface>& GetSurface(void)
114     {
115         return surface_;
116     }
117 
GetBufferDispatcher(void)118     BufferDispatcher::Ptr& GetBufferDispatcher(void)
119     {
120         return dispatcher_;
121     }
122 
GetVideoTrack(void)123     VideoTrack& GetVideoTrack(void)
124     {
125         return videoTrack_;
126     }
127 
GetMediaChannel(void)128     MediaChannel::Ptr& GetMediaChannel(void)
129     {
130         return mediaChannel_;
131     }
132 
GetId(void)133     uint32_t GetId(void)
134     {
135         return mediaChannel_->GetId();
136     }
137 
VideoTrackReset(void)138     void VideoTrackReset(void)
139     {
140         videoTrack_.codecId = CodecId::CODEC_H264;
141         videoTrack_.width = defaultWidth;
142         videoTrack_.height = defaultHeight;
143         videoTrack_.frameRate = defaultFrameRate;
144     }
145 
IsPlaybackRunning(void) const146     bool IsPlaybackRunning(void) const
147     {
148         return playbackRun_;
149     }
150 
PlaybackStop(void)151     void PlaybackStop(void)
152     {
153         playbackRun_ = false;
154         playbackThread_->join();
155         playbackThread_ = nullptr;
156     }
157 
BufferDispatcherReset(void)158     void BufferDispatcherReset(void)
159     {
160         if (dispatcher_ != nullptr) {
161             dispatcher_->StopDispatch();
162             dispatcher_->FlushBuffer();
163             dispatcher_->ReleaseAllReceiver();
164         }
165     }
VideoPlayerPlaybackStart(void)166     void VideoPlayerPlaybackStart(void)
167     {
168         EXPECT_EQ(nullptr, playbackThread_);
169         EXPECT_EQ(false, playbackRun_);
170         constexpr uint32_t waitForThread = 100;
171 
172         playbackRun_ = true;
173         playbackThread_ = std::make_unique<std::thread>(
174             [this]() {
175                 constexpr uint32_t interval = 20;
176                 SHARING_LOGD("VideoPlayerPlayback test start\n");
177                 while (IsPlaybackRunning()) {
178                     SHARING_LOGD("VideoPlayerPlayback Writing\n");
179                     VideoDataPlayOnce();
180                     std::this_thread::sleep_for(std::chrono::milliseconds(interval));
181                 }
182                 SHARING_LOGD("VideoPlayerPlayback test complete\n");
183             }
184         );
185         pthread_setname_np(playbackThread_->native_handle(), "VideoPlayerPlayback");
186         std::this_thread::sleep_for(std::chrono::milliseconds(waitForThread));
187     }
188 
SpsDataSetup(const char *buf, size_t len)189     void SpsDataSetup(const char *buf, size_t len)
190     {
191         auto sps = std::make_shared<MediaData>();
192         sps->buff = std::make_shared<DataBuffer>();
193         sps->mediaType = MEDIA_TYPE_VIDEO;
194         sps->buff->Assign(const_cast<char *>(buf), len);
195         dispatcher_->SetSpsNalu(sps);
196     }
197 
PpsDataSetup(const char *buf, size_t len)198     void PpsDataSetup(const char *buf, size_t len)
199     {
200         auto pps = std::make_shared<MediaData>();
201         pps->buff = std::make_shared<DataBuffer>();
202         pps->mediaType = MEDIA_TYPE_VIDEO;
203         pps->buff->Assign(const_cast<char *>(buf), len);
204         dispatcher_->SetPpsNalu(pps);
205     }
206 
MediaDataSetup(const char *buf, size_t len, size_t prefix)207     void MediaDataSetup(const char *buf, size_t len, size_t prefix)
208     {
209         auto mediaData = std::make_shared<MediaData>();
210         mediaData->buff = std::make_shared<DataBuffer>();
211         mediaData->mediaType = MEDIA_TYPE_VIDEO;
212         mediaData->isRaw = false;
213         mediaData->keyFrame = (*(buf + prefix) & 0x1f) == 0x05 ? true : false;
214         if (mediaData->keyFrame) {
215             if (isFirstKeyFrame_) {
216                 MEDIA_LOGD("TEST STATISTICS Miracast:first, agent ID:%{public}d, get video frame.", GetId());
217                 isFirstKeyFrame_ = false;
218             } else {
219                 auto end = std::chrono::steady_clock::now();
220                 std::chrono::duration<double, std::milli> diff = end - gopInterval_;
221                 MEDIA_LOGD("TEST STATISTIC Miracast:interval:%{public}.0f ms, "
222                     "agent ID:%{public}d, get video frame, gop:%{public}d, "
223                     "average receiving frames time:%{public}.0f ms.",
224                     diff.count(), GetId(), frameNums_, diff.count() / frameNums_);
225             }
226             frameNums_ = 0;
227             gopInterval_ = std::chrono::steady_clock::now();
228         }
229         ++frameNums_;
230         mediaData->buff->ReplaceData((char *)buf, len);
231         mediaData->pts = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
232         dispatcher_->InputData(mediaData);
233     }
234 
VideoDataPlayOnce(void)235     void VideoDataPlayOnce(void)
236     {
237         SplitH264(reinterpret_cast<char *>(videoTestData_->Data()), videoTestData_->Size(), 0,
238             [&](const char *buf, size_t len, size_t prefix) {
239                 if ((*(buf + prefix) & 0x1f) == 0x06) {
240                     return;
241                 }
242                 if ((*(buf + prefix) & 0x1f) == 0x07) {
243                     auto spsOld = dispatcher_->GetSPS();
244                     if (spsOld != nullptr && spsOld->buff != nullptr) {
245                         return;
246                     }
247                     SpsDataSetup(buf, len);
248                     return;
249                 }
250                 if ((*(buf + prefix) & 0x1f) == 0x08) {
251                     auto ppsOld = dispatcher_->GetPPS();
252                     if (ppsOld != nullptr && ppsOld->buff != nullptr) {
253                         return;
254                     }
255                     PpsDataSetup(buf, len);
256                     return;
257                 }
258                 MediaDataSetup(buf, len, prefix);
259             });
260     }
261 
262 private:
VideoTestDataLoad(void)263     void VideoTestDataLoad(void)
264     {
265         videoTestFp_ = ::fopen(videoTestPath_.c_str(), "r");
266         EXPECT_NE(nullptr, videoTestFp_);
267 
268         bool ret = fseek(videoTestFp_, 0, SEEK_END);
269         EXPECT_EQ(false, ret < 0);
270 
271         size_t fileLen = ftell(videoTestFp_);
272         EXPECT_EQ(false, fileLen < 0);
273 
274         videoTestDataLen_ = fileLen + 1;
275         rewind(videoTestFp_);
276         char *videoTestDataTmp = new char[videoTestDataLen_];
277         EXPECT_NE(nullptr, videoTestDataTmp);
278 
279         memset_s(videoTestDataTmp, videoTestDataLen_, 0, videoTestDataLen_);
280 
281         ret = fread(videoTestDataTmp, 1, fileLen, videoTestFp_);
282         EXPECT_EQ(true, ret > 0);
283 
284         ::fclose(videoTestFp_);
285         videoTestData_ = std::make_shared<DataBuffer>(videoTestDataLen_);
286         videoTestData_->Assign(videoTestDataTmp, fileLen);
287         videoTestFp_ = nullptr;
288         delete[] videoTestDataTmp;
289     }
290 
VideoTestDataUnLoad(void)291     void VideoTestDataUnLoad(void)
292     {
293         if (nullptr != videoTestFp_) {
294             ::fclose(videoTestFp_);
295             videoTestFp_ = nullptr;
296         }
297         if (nullptr != videoTestData_) {
298             videoTestData_ = nullptr;
299         }
300         videoTestDataLen_ = 0;
301     }
302 
InitWindow(void)303     void InitWindow(void)
304     {
305         EXPECT_EQ(nullptr, windowOption_);
306         EXPECT_EQ(nullptr, window_);
307         EXPECT_EQ(nullptr, surfaceNode_);
308         EXPECT_EQ(nullptr, surface_);
309 
310         windowOption_ = new Rosen::WindowOption();
311         windowOption_->SetWindowRect({
312             defaultPositionX,
313             defaultPositionY,
314             defaultWidth,
315             defaultHeight});
316         windowOption_->SetWindowType(
317             Rosen::WindowType::WINDOW_TYPE_APP_LAUNCHING);
318         windowOption_->SetWindowMode(
319             Rosen::WindowMode::WINDOW_MODE_FULLSCREEN);
320         window_ = Rosen::Window::Create(
321             "Video Controller Test Window",
322             windowOption_);
323 
324         surfaceNode_ = window_->GetSurfaceNode();
325         surfaceNode_->SetFrameGravity(Rosen::Gravity::RESIZE);
326         Rosen::RSTransaction::FlushImplicitTransaction();
327 
328         surface_ = surfaceNode_->GetSurface();
329         window_->SetRequestedOrientation(Rosen::Orientation::HORIZONTAL);
330         window_->Show();
331         surfaceId_ = surface_->GetUniqueId();
332 
333         int32_t ret = SurfaceUtils::GetInstance()->Add(surfaceId_, surface_);
334         EXPECT_EQ(ret, 0);
335     }
336 
InitMediaChannel(void)337     void InitMediaChannel(void)
338     {
339         if (nullptr != mediaChannel_) {
340             EXPECT_EQ(nullptr, mediaChannel_);
341             return;
342         }
343         mediaChannel_ = std::make_shared<MediaChannel>();
344         EXPECT_NE(nullptr, mediaChannel_);
345 
346         std::string consumerClassName("MediaplayerTestConsumer");
347         mediaChannel_->CreateConsumer(consumerClassName);
348     }
349 
350 //Audio
351 private:
352     AudioTrack audioTrack_;
353 
354 public:
GetAudioTrack(void)355     AudioTrack& GetAudioTrack(void)
356     {
357         return audioTrack_;
358     }
359 
AudioTrackReset(void)360     void AudioTrackReset(void)
361     {
362         audioTrack_.codecId = CodecId::CODEC_AAC;
363         audioTrack_.sampleRate = defaultSampleRate;
364         audioTrack_.sampleBit = DEFAULT_SAMPLE_BIT;
365         audioTrack_.channels = defaultChannels;
366     }
367 
368 public:
MediaControllerTestBaseImpl()369     MediaControllerTestBaseImpl()
370     {
371         Config::GetInstance().Init();
372         dispatcher_ = std::make_shared<BufferDispatcher>(maxBufferCapacity, maxBufferCapacityIncrement);
373         VideoTestDataLoad();
374         VideoTrackReset();
375         AudioTrackReset();
376         InitWindow();
377     }
378 
379     ~MediaControllerTestBaseImpl() override
380     {
381         PlaybackStop();
382         VideoTestDataUnLoad();
383         BufferDispatcherReset();
384     }
385 
386 public:
387     static constexpr int32_t maxBufferCapacity = ::MAX_BUFFER_CAPACITY;
388     static constexpr int32_t maxBufferCapacityIncrement = ::BUFFER_CAPACITY_INCREMENT;
389     static constexpr int32_t stabilityLoops = 100;
390     static constexpr int32_t defaultPositionX = 0;
391     static constexpr int32_t defaultPositionY = 0;
392     static constexpr int32_t defaultHeight = 720;
393     static constexpr int32_t defaultWidth = 1280;
394     static constexpr int32_t defaultFrameRate = 30;
395     static constexpr int32_t defaultChannels = 2;
396     static constexpr int32_t defaultSampleRate = 48000;
397     static constexpr int32_t defaultBitsPerSample = 16;
398     static constexpr float defaultVolume = 1.0;
399 };
400 
401 class MediaControllerUnitTest : public testing::Test {};
402 
403 namespace {
404 MediaControllerTestBaseImpl& g_testBase =
405     MediaControllerTestBaseImpl::GetInstance();
406 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Create_01, Function | SmallTest | Level2)407 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Create_01,
408          Function | SmallTest | Level2)
409 {
410     SHARING_LOGD("trace");
411     std::shared_ptr<ContextEventMsg> cem = std::make_shared<ContextEventMsg>();
412     std::unique_ptr<MediaController> mediaController =
413         std::make_unique<MediaController>(g_testBase.GetId());
414     EXPECT_NE(nullptr, mediaController);
415 }
416 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_SetMediaChannel_01, Function | SmallTest | Level2)417 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_SetMediaChannel_01,
418          Function | SmallTest | Level2)
419 {
420     SHARING_LOGD("trace");
421     std::unique_ptr<MediaController> mediaController =
422         std::make_unique<MediaController>(g_testBase.GetId());
423     EXPECT_NE(nullptr, mediaController);
424 
425     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
426 }
427 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Init_01, Function | SmallTest | Level2)428 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Init_01,
429          Function | SmallTest | Level2)
430 {
431     SHARING_LOGD("trace");
432     bool ret = true;
433     std::unique_ptr<MediaController> mediaController =
434         std::make_unique<MediaController>(g_testBase.GetId());
435     EXPECT_NE(nullptr, mediaController);
436 
437     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
438     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
439     EXPECT_EQ(ret, false);
440 
441     g_testBase.VideoTrackReset();
442 }
443 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Init_02, Function | SmallTest | Level2)444 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Init_02,
445          Function | SmallTest | Level2)
446 {
447     SHARING_LOGD("trace");
448     bool ret = true;
449     std::unique_ptr<MediaController> mediaController =
450         std::make_unique<MediaController>(g_testBase.GetId());
451     EXPECT_NE(nullptr, mediaController);
452 
453     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
454     g_testBase.GetVideoTrack().codecId = CodecId::CODEC_NONE;
455     g_testBase.GetAudioTrack().codecId = CodecId::CODEC_NONE;
456     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
457     EXPECT_EQ(ret, false);
458 
459     g_testBase.VideoTrackReset();
460     g_testBase.AudioTrackReset();
461 }
462 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Init_03, Function | SmallTest | Level2)463 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Init_03,
464          Function | SmallTest | Level2)
465 {
466     SHARING_LOGD("trace");
467     bool ret = true;
468     std::unique_ptr<MediaController> mediaController =
469         std::make_unique<MediaController>(g_testBase.GetId());
470     EXPECT_NE(nullptr, mediaController);
471 
472     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
473     g_testBase.GetAudioTrack().codecId = CodecId::CODEC_H264;
474     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
475     EXPECT_EQ(ret, false);
476 
477     g_testBase.AudioTrackReset();
478 }
479 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Play_01, Function | SmallTest | Level2)480 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Play_01, Function | SmallTest | Level2)
481 {
482     SHARING_LOGD("trace");
483     bool ret = true;
484     std::unique_ptr<MediaController> mediaController =
485         std::make_unique<MediaController>(g_testBase.GetId());
486     EXPECT_NE(nullptr, mediaController);
487 
488     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
489     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
490     EXPECT_EQ(ret, true);
491 
492     mediaController->Start();
493     EXPECT_EQ(ret, true);
494 
495     ret = mediaController->AppendSurface(g_testBase.GetSurface(), SceneType::FOREGROUND);
496     EXPECT_EQ(ret, true);
497 
498     g_testBase.VideoDataPlayOnce();
499     mediaController->Stop();
500 }
501 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Start_01, Function | SmallTest | Level2)502 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Start_01, Function | SmallTest | Level2)
503 {
504     SHARING_LOGD("trace");
505     bool ret = true;
506     std::unique_ptr<MediaController> mediaController =
507         std::make_unique<MediaController>(g_testBase.GetId());
508     EXPECT_NE(nullptr, mediaController);
509 
510     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
511     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
512     EXPECT_EQ(ret, true);
513 
514     mediaController->Start();
515 }
516 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Start_02, Function | SmallTest | Level2)517 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Start_02, Function | SmallTest | Level2)
518 {
519     SHARING_LOGD("trace");
520     std::unique_ptr<MediaController> mediaController =
521         std::make_unique<MediaController>(g_testBase.GetId());
522     EXPECT_NE(nullptr, mediaController);
523 
524     mediaController->Start();
525 }
526 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Start_03, Function | SmallTest | Level2)527 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Start_03, Function | SmallTest | Level2)
528 {
529     SHARING_LOGD("trace");
530     bool ret = true;
531     std::unique_ptr<MediaController> mediaController =
532         std::make_unique<MediaController>(g_testBase.GetId());
533     EXPECT_NE(nullptr, mediaController);
534 
535     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
536     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
537     EXPECT_EQ(ret, true);
538 
539     mediaController->Release();
540     mediaController->Start();
541 }
542 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Start_04, Function | SmallTest | Level2)543 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Start_04, Function | SmallTest | Level2)
544 {
545     SHARING_LOGD("trace");
546     bool ret = true;
547     std::unique_ptr<MediaController> mediaController =
548         std::make_unique<MediaController>(g_testBase.GetId());
549     EXPECT_NE(nullptr, mediaController);
550 
551     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
552     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
553     EXPECT_EQ(ret, true);
554 
555     mediaController->Start();
556 
557     mediaController->Stop();
558     mediaController->Start();
559 }
560 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Start_05, Function | SmallTest | Level2)561 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Start_05, Function | SmallTest | Level2)
562 {
563     SHARING_LOGD("trace");
564     bool ret = true;
565     std::unique_ptr<MediaController> mediaController =
566         std::make_unique<MediaController>(g_testBase.GetId());
567     EXPECT_NE(nullptr, mediaController);
568 
569     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
570     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
571     EXPECT_EQ(ret, true);
572 
573     mediaController->Start();
574     mediaController->Start();
575     mediaController->Stop();
576 }
577 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Start_06, Function | SmallTest | Level2)578 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Start_06, Function | SmallTest | Level2)
579 {
580     SHARING_LOGD("trace");
581     std::unique_ptr<MediaController> mediaController =
582         std::make_unique<MediaController>(g_testBase.GetId());
583     EXPECT_NE(nullptr, mediaController);
584 
585     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
586     mediaController->Start();
587 }
588 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_AppendSurface_01, Function | SmallTest | Level2)589 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_AppendSurface_01, Function | SmallTest | Level2)
590 {
591     SHARING_LOGD("trace");
592     bool ret = true;
593     std::unique_ptr<MediaController> mediaController =
594         std::make_unique<MediaController>(g_testBase.GetId());
595     EXPECT_NE(nullptr, mediaController);
596 
597     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
598     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
599     EXPECT_EQ(ret, true);
600 
601     ret = mediaController->AppendSurface(g_testBase.GetSurface(), SceneType::FOREGROUND);
602     EXPECT_EQ(ret, true);
603 }
604 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_AppendSurface_02, Function | SmallTest | Level2)605 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_AppendSurface_02, Function | SmallTest | Level2)
606 {
607     SHARING_LOGD("trace");
608     bool ret = true;
609     std::unique_ptr<MediaController> mediaController =
610         std::make_unique<MediaController>(g_testBase.GetId());
611     EXPECT_NE(nullptr, mediaController);
612 
613     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
614     EXPECT_EQ(ret, true);
615 
616     ret = mediaController->AppendSurface(g_testBase.GetSurface(), SceneType::BACKGROUND);
617     EXPECT_EQ(ret, false);
618 }
619 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_AppendSurface_03, Function | SmallTest | Level2)620 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_AppendSurface_03, Function | SmallTest | Level2)
621 {
622     SHARING_LOGD("trace");
623     bool ret = true;
624     std::unique_ptr<MediaController> mediaController =
625         std::make_unique<MediaController>(g_testBase.GetId());
626     EXPECT_NE(nullptr, mediaController);
627 
628     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
629     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
630     EXPECT_EQ(ret, true);
631 
632     mediaController->videoTrack_.codecId = CodecId::CODEC_NONE;
633     ret = mediaController->AppendSurface(g_testBase.GetSurface(), SceneType::FOREGROUND);
634     EXPECT_EQ(ret, true);
635 
636     g_testBase.VideoTrackReset();
637 }
638 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_AppendSurface_04, Function | SmallTest | Level2)639 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_AppendSurface_04, Function | SmallTest | Level2)
640 {
641     SHARING_LOGD("trace");
642     bool ret = true;
643     std::unique_ptr<MediaController> mediaController =
644         std::make_unique<MediaController>(g_testBase.GetId());
645     EXPECT_NE(nullptr, mediaController);
646 
647     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
648     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
649     EXPECT_EQ(ret, true);
650 
651     ret = mediaController->AppendSurface(g_testBase.GetSurface(), SceneType::FOREGROUND);
652     EXPECT_EQ(ret, true);
653 
654     ret = mediaController->AppendSurface(g_testBase.GetSurface(), SceneType::FOREGROUND);
655     EXPECT_EQ(ret, false);
656 }
657 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_AppendSurface_05, Function | SmallTest | Level2)658 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_AppendSurface_05, Function | SmallTest | Level2)
659 {
660     SHARING_LOGD("trace");
661     bool ret = true;
662     std::unique_ptr<MediaController> mediaController =
663         std::make_unique<MediaController>(g_testBase.GetId());
664     EXPECT_NE(nullptr, mediaController);
665 
666     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
667     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
668     EXPECT_EQ(ret, true);
669 
670     mediaController->Start();
671 
672     ret = mediaController->AppendSurface(g_testBase.GetSurface(), SceneType::FOREGROUND);
673     EXPECT_EQ(ret, true);
674 }
675 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_AppendSurface_06, Function | SmallTest | Level2)676 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_AppendSurface_06, Function | SmallTest | Level2)
677 {
678     SHARING_LOGD("trace");
679     bool ret = true;
680     std::unique_ptr<MediaController> mediaController =
681         std::make_unique<MediaController>(g_testBase.GetId());
682     EXPECT_NE(nullptr, mediaController);
683 
684     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
685     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
686     EXPECT_EQ(ret, true);
687 
688     mediaController->videoTrack_.codecId = CodecId::CODEC_NONE;
689     ret = mediaController->AppendSurface(g_testBase.GetSurface(), SceneType::FOREGROUND);
690     EXPECT_EQ(ret, false);
691 }
692 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_RemoveSurface_01, Function | SmallTest | Level2)693 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_RemoveSurface_01, Function | SmallTest | Level2)
694 {
695     SHARING_LOGD("trace");
696     bool ret = true;
697     std::unique_ptr<MediaController> mediaController =
698         std::make_unique<MediaController>(g_testBase.GetId());
699     EXPECT_NE(nullptr, mediaController);
700 
701     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
702     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
703     EXPECT_EQ(ret, true);
704 
705     ret = mediaController->AppendSurface(g_testBase.GetSurface(), SceneType::FOREGROUND);
706     EXPECT_EQ(ret, true);
707 
708     mediaController->RemoveSurface(g_testBase.GetSurface()->GetUniqueId());
709 }
710 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_SetVolume_01, Function | SmallTest | Level2)711 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_SetVolume_01, Function | SmallTest | Level2)
712 {
713     SHARING_LOGD("trace");
714     bool ret = true;
715     std::unique_ptr<MediaController> mediaController =
716         std::make_unique<MediaController>(g_testBase.GetId());
717     EXPECT_NE(nullptr, mediaController);
718 
719     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
720     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
721     EXPECT_EQ(ret, true);
722 
723     mediaController->SetVolume(MediaControllerTestBaseImpl::defaultVolume);
724 }
725 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_SetKeyMode_01, Function | SmallTest | Level2)726 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_SetKeyMode_01, Function | SmallTest | Level2)
727 {
728     SHARING_LOGD("trace");
729     bool ret = true;
730     std::unique_ptr<MediaController> mediaController =
731         std::make_unique<MediaController>(g_testBase.GetId());
732     EXPECT_NE(nullptr, mediaController);
733 
734     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
735     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
736     EXPECT_EQ(ret, true);
737 
738     ret = mediaController->AppendSurface(g_testBase.GetSurface(), SceneType::FOREGROUND);
739     EXPECT_EQ(ret, true);
740 
741     mediaController->SetKeyMode(g_testBase.GetSurface()->GetUniqueId(), false);
742 }
743 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_SetKeyRedirect_01, Function | SmallTest | Level2)744 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_SetKeyRedirect_01, Function | SmallTest | Level2)
745 {
746     SHARING_LOGD("trace");
747     bool ret = true;
748     std::unique_ptr<MediaController> mediaController =
749         std::make_unique<MediaController>(g_testBase.GetId());
750     EXPECT_NE(nullptr, mediaController);
751 
752     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
753     EXPECT_EQ(ret, true);
754 
755     ret = mediaController->AppendSurface(g_testBase.GetSurface(), SceneType::FOREGROUND);
756     EXPECT_EQ(ret, true);
757 
758     mediaController->SetKeyRedirect(g_testBase.GetSurface()->GetUniqueId(), false);
759 }
760 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_OnPlayControllerNotify_01, Function | SmallTest | Level2)761 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_OnPlayControllerNotify_01, Function | SmallTest | Level2)
762 {
763     SHARING_LOGD("trace");
764     bool ret = true;
765     ProsumerStatusMsg::Ptr statusMsg = std::make_shared<ProsumerStatusMsg>();
766     std::unique_ptr<MediaController> mediaController =
767         std::make_unique<MediaController>(g_testBase.GetId());
768     EXPECT_NE(nullptr, mediaController);
769 
770     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
771     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
772     EXPECT_EQ(ret, true);
773 
774     ret = mediaController->AppendSurface(g_testBase.GetSurface(), SceneType::FOREGROUND);
775     EXPECT_EQ(ret, true);
776 
777     statusMsg->errorCode = ERR_OK;
778     statusMsg->prosumerId = g_testBase.GetId();
779     statusMsg->agentId = g_testBase.GetId();
780     mediaController->OnPlayControllerNotify(statusMsg);
781 }
782 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_OnPlayControllerNotify_02, Function | SmallTest | Level2)783 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_OnPlayControllerNotify_02, Function | SmallTest | Level2)
784 {
785     SHARING_LOGD("trace");
786     ProsumerStatusMsg::Ptr statusMsg = std::make_shared<ProsumerStatusMsg>();
787     std::unique_ptr<MediaController> mediaController =
788         std::make_unique<MediaController>(g_testBase.GetId());
789     EXPECT_NE(nullptr, mediaController);
790 
791     statusMsg->errorCode = ERR_OK;
792     statusMsg->prosumerId = g_testBase.GetId();
793     mediaController->OnPlayControllerNotify(statusMsg);
794 }
795 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Stop_01, Function | SmallTest | Level2)796 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Stop_01, Function | SmallTest | Level2)
797 {
798     SHARING_LOGD("trace");
799     bool ret = true;
800     std::unique_ptr<MediaController> mediaController =
801         std::make_unique<MediaController>(g_testBase.GetId());
802     EXPECT_NE(nullptr, mediaController);
803 
804     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
805     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
806     EXPECT_EQ(ret, true);
807 
808     mediaController->Start();
809     EXPECT_EQ(ret, true);
810 
811     mediaController->Stop();
812 }
813 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Stop_02, Function | SmallTest | Level2)814 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Stop_02, Function | SmallTest | Level2)
815 {
816     SHARING_LOGD("trace");
817     bool ret = true;
818     std::unique_ptr<MediaController> mediaController =
819         std::make_unique<MediaController>(g_testBase.GetId());
820     EXPECT_NE(nullptr, mediaController);
821 
822     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
823     EXPECT_EQ(ret, true);
824 
825     mediaController->Stop();
826 }
827 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Stop_03, Function | SmallTest | Level2)828 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Stop_03, Function | SmallTest | Level2)
829 {
830     SHARING_LOGD("trace");
831     std::unique_ptr<MediaController> mediaController =
832         std::make_unique<MediaController>(g_testBase.GetId());
833     EXPECT_NE(nullptr, mediaController);
834 
835     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
836     mediaController->Stop();
837 }
838 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Stop_04, Function | SmallTest | Level2)839 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Stop_04, Function | SmallTest | Level2)
840 {
841     SHARING_LOGD("trace");
842     bool ret = true;
843     std::unique_ptr<MediaController> mediaController =
844         std::make_unique<MediaController>(g_testBase.GetId());
845     EXPECT_NE(nullptr, mediaController);
846 
847     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
848     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
849     EXPECT_EQ(ret, true);
850 
851     mediaController->Release();
852 
853     mediaController->Stop();
854 }
855 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Stop_05, Function | SmallTest | Level2)856 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Stop_05, Function | SmallTest | Level2)
857 {
858     SHARING_LOGD("trace");
859     bool ret = true;
860     std::unique_ptr<MediaController> mediaController =
861         std::make_unique<MediaController>(g_testBase.GetId());
862     EXPECT_NE(nullptr, mediaController);
863 
864     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
865     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
866     EXPECT_EQ(ret, true);
867 
868     mediaController->Start();
869     mediaController->Stop();
870     mediaController->Start();
871     mediaController->Stop();
872 }
873 
HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Release_01, Function | SmallTest | Level2)874 HWTEST_F(MediaControllerUnitTest, Media_Controller_Test_Release_01, Function | SmallTest | Level2)
875 {
876     SHARING_LOGD("trace");
877     bool ret = true;
878     std::unique_ptr<MediaController> mediaController =
879         std::make_unique<MediaController>(g_testBase.GetId());
880     EXPECT_NE(nullptr, mediaController);
881 
882     mediaController->SetMediaChannel(g_testBase.GetMediaChannel());
883     ret = mediaController->Init(g_testBase.GetAudioTrack(), g_testBase.GetVideoTrack());
884     EXPECT_EQ(ret, true);
885 
886     mediaController->Release();
887 }
888 
889 } // namespace
890 } // namespace Sharing
891 } // namespace OHOS