1 /*
2  * Copyright (C) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include <queue>
16 #include "gtest/gtest.h"
17 #include "filter/filter.h"
18 #include "media_sync_manager.h"
19 
20 #include "video_sink.h"
21 #include "media_synchronous_sink.h"
22 
23 using namespace testing::ext;
24 
25 namespace OHOS {
26 namespace Media {
27 namespace Test {
28 using namespace Pipeline;
29 class TestSyncManager : public testing::Test {
30 public:
31     // SetUpTestCase: Called before all test cases
SetUpTestCase(void)32     static void SetUpTestCase(void) { }
33     // TearDownTestCase: Called after all test case
TearDownTestCase(void)34     static void TearDownTestCase(void) { }
35     // SetUp: Called before each test cases
SetUp(void)36     void SetUp(void)
37     {
38         syncManager_ = std::make_shared<MediaSyncManager>();
39         ASSERT_TRUE(syncManager_ != nullptr);
40     }
41     // TearDown: Called after each test cases
TearDown(void)42     void TearDown(void)
43     {
44         syncManager_ = nullptr;
45     }
46 public:
47     std::shared_ptr<MediaSyncManager> syncManager_ = nullptr;
48 };
49 
HWTEST_F(TestSyncManager, sync_manager_set, TestSize.Level1)50 HWTEST_F(TestSyncManager, sync_manager_set, TestSize.Level1)
51 {
52     float rate = 0;
53     auto setPlaybackRateStatus = syncManager_->SetPlaybackRate(rate);
54     ASSERT_EQ(setPlaybackRateStatus, Status::OK);
55 }
56 
HWTEST_F(TestSyncManager, sync_manager_get, TestSize.Level1)57 HWTEST_F(TestSyncManager, sync_manager_get, TestSize.Level1)
58 {
59     auto rateBack = syncManager_->GetPlaybackRate();
60     ASSERT_EQ(rateBack, 1);
61 }
62 
HWTEST_F(TestSyncManager, sync_manager_life_cycle, TestSize.Level1)63 HWTEST_F(TestSyncManager, sync_manager_life_cycle, TestSize.Level1)
64 {
65     // Resume
66     auto resumeStatus = syncManager_->Resume();
67     ASSERT_EQ(resumeStatus, Status::OK);
68 
69     // Pause
70     auto pauseStatus = syncManager_->Pause();
71     ASSERT_EQ(pauseStatus, Status::OK);
72 
73     // Seek
74     int64_t seekTime = 0;
75     auto seekStatus = syncManager_->Seek(seekTime);
76     ASSERT_NE(seekStatus, Status::OK);
77 
78     // Reset
79     auto resetStatus = syncManager_->Reset();
80     ASSERT_EQ(resetStatus, Status::OK);
81 
82     // IsSeeking
83     auto isSeeking = syncManager_->InSeeking();
84     ASSERT_EQ(isSeeking, false);
85 }
86 
HWTEST_F(TestSyncManager, sync_manager_update_time_without_synchronizer, TestSize.Level1)87 HWTEST_F(TestSyncManager, sync_manager_update_time_without_synchronizer, TestSize.Level1)
88 {
89     // AddSynchronizer
90     VideoSink sync;
91     syncManager_->AddSynchronizer(&sync);
92     // RemoveSynchronizer
93     syncManager_->RemoveSynchronizer(&sync);
94     // UpdateTimeAnchor
95     auto updateTimeStatus = syncManager_->UpdateTimeAnchor(-1, -1, {-1, -1, -1}, nullptr);
96     ASSERT_EQ(updateTimeStatus, true);
97     updateTimeStatus = syncManager_->UpdateTimeAnchor(1, -1, {-1, -1, -1}, nullptr);
98     ASSERT_EQ(updateTimeStatus, true);
99     updateTimeStatus = syncManager_->UpdateTimeAnchor(1, 1, {-1, -1, -1}, nullptr);
100     ASSERT_EQ(updateTimeStatus, true);
101     updateTimeStatus = syncManager_->UpdateTimeAnchor(1, 1, {1, -1, -1}, nullptr);
102     ASSERT_EQ(updateTimeStatus, true);
103     updateTimeStatus = syncManager_->UpdateTimeAnchor(1, 1, {1, 1, -1}, nullptr);
104     ASSERT_EQ(updateTimeStatus, true);
105     updateTimeStatus = syncManager_->UpdateTimeAnchor(1, 1, {1, 1, 1}, nullptr);
106     ASSERT_EQ(updateTimeStatus, true);
107     updateTimeStatus = syncManager_->UpdateTimeAnchor(1, 1, {1, 1, 1}, &sync);
108     ASSERT_EQ(updateTimeStatus, true);
109 }
110 
HWTEST_F(TestSyncManager, sync_manager_life_func, TestSize.Level1)111 HWTEST_F(TestSyncManager, sync_manager_life_func, TestSize.Level1)
112 {
113     // AddSynchronizer
114     VideoSink sync;
115     syncManager_->AddSynchronizer(&sync);
116     // UpdateTimeAnchor
117     auto updateTimeStatus = syncManager_->UpdateTimeAnchor(-1, -1, {-1, -1, -1}, nullptr);
118     ASSERT_EQ(updateTimeStatus, true);
119     updateTimeStatus = syncManager_->UpdateTimeAnchor(1, -1, {-1, -1, -1}, nullptr);
120     ASSERT_EQ(updateTimeStatus, true);
121     updateTimeStatus = syncManager_->UpdateTimeAnchor(1, 1, {-1, -1, -1}, nullptr);
122     ASSERT_EQ(updateTimeStatus, true);
123     updateTimeStatus = syncManager_->UpdateTimeAnchor(1, 1, {1, -1, -1}, nullptr);
124     ASSERT_EQ(updateTimeStatus, true);
125     updateTimeStatus = syncManager_->UpdateTimeAnchor(1, 1, {1, 1, -1}, nullptr);
126     ASSERT_EQ(updateTimeStatus, true);
127     updateTimeStatus = syncManager_->UpdateTimeAnchor(1, 1, {1, 1, 1}, nullptr);
128     ASSERT_EQ(updateTimeStatus, true);
129     updateTimeStatus = syncManager_->UpdateTimeAnchor(1, 1, {1, 1, 1}, &sync);
130     ASSERT_EQ(updateTimeStatus, true);
131 
132     // GetMediaTimeNow
133     auto mediaTimeNow = syncManager_->GetMediaTimeNow();
134     ASSERT_EQ(mediaTimeNow, 0);
135 
136     // GetClockTimeNow
137     auto clockTimeNow = syncManager_->GetMediaTimeNow();
138     ASSERT_EQ(clockTimeNow, 0);
139 
140     // GetClockTime
141     auto clockTime = syncManager_->GetClockTime(0);
142     ASSERT_NE(clockTime, 0);
143 
144     // Report
145     syncManager_->ReportPrerolled(&sync);
146     syncManager_->ReportEos(&sync);
147     syncManager_->SetMediaTimeRangeEnd(0, 0, &sync);
148     syncManager_->SetMediaTimeRangeStart(0, 0, &sync);
149 
150     // GetSeekTime
151     int64_t seekTime = syncManager_->GetSeekTime();
152     ASSERT_NE(seekTime, 0);
153 }
154 
155 // Scenario1: Test when allSyncerShouldPrerolled_ is true and alreadySetSyncersShouldWait_ is false.
HWTEST_F(TestSyncManager, SetAllSyncShouldWaitNoLock_001, TestSize.Level0)156 HWTEST_F(TestSyncManager, SetAllSyncShouldWaitNoLock_001, TestSize.Level0)
157 {
158     syncManager_->allSyncerShouldPrerolled_ = true;
159     syncManager_->alreadySetSyncersShouldWait_ = false;
160     syncManager_->SetAllSyncShouldWaitNoLock();
161     EXPECT_TRUE(syncManager_->prerolledSyncers_.empty());
162     EXPECT_TRUE(syncManager_->alreadySetSyncersShouldWait_);
163 }
164 
165 // Scenario2: Test when allSyncerShouldPrerolled_ is false.
HWTEST_F(TestSyncManager, SetAllSyncShouldWaitNoLock_002, TestSize.Level0)166 HWTEST_F(TestSyncManager, SetAllSyncShouldWaitNoLock_002, TestSize.Level0)
167 {
168     syncManager_->allSyncerShouldPrerolled_ = false;
169     syncManager_->alreadySetSyncersShouldWait_ = false;
170     syncManager_->SetAllSyncShouldWaitNoLock();
171     EXPECT_TRUE(syncManager_->prerolledSyncers_.empty());
172     EXPECT_FALSE(syncManager_->alreadySetSyncersShouldWait_);
173 }
174 
175 // Scenario3: Test when alreadySetSyncersShouldWait_ is true.
HWTEST_F(TestSyncManager, SetAllSyncShouldWaitNoLock_003, TestSize.Level0)176 HWTEST_F(TestSyncManager, SetAllSyncShouldWaitNoLock_003, TestSize.Level0)
177 {
178     syncManager_->allSyncerShouldPrerolled_ = true;
179     syncManager_->alreadySetSyncersShouldWait_ = true;
180     syncManager_->SetAllSyncShouldWaitNoLock();
181     EXPECT_TRUE(syncManager_->prerolledSyncers_.empty());
182     EXPECT_TRUE(syncManager_->alreadySetSyncersShouldWait_);
183 }
184 
185 // Scenario1: Test the normal flow of the Resume method
HWTEST_F(TestSyncManager, Resume_001, TestSize.Level0)186 HWTEST_F(TestSyncManager, Resume_001, TestSize.Level0)
187 {
188     syncManager_->clockState_ = MediaSyncManager::State::RESUMED;
189     EXPECT_EQ(syncManager_->Resume(), Status::OK);
190 }
191 
HWTEST_F(TestSyncManager, Resume_002, TestSize.Level0)192 HWTEST_F(TestSyncManager, Resume_002, TestSize.Level0)
193 {
194     syncManager_->clockState_ = MediaSyncManager::State::PAUSED;
195     syncManager_->pausedExactAbsMediaTime_ = 100;
196     syncManager_->pausedExactMediaTime_ = 100;
197     syncManager_->alreadySetSyncersShouldWait_ = true;
198     EXPECT_EQ(syncManager_->Resume(), Status::OK);
199     EXPECT_EQ(syncManager_->pausedMediaTime_, HST_TIME_NONE);
200     EXPECT_EQ(syncManager_->pausedExactMediaTime_, HST_TIME_NONE);
201     EXPECT_EQ(syncManager_->pausedClockTime_, HST_TIME_NONE);
202     EXPECT_EQ(syncManager_->pausedAbsMediaTime_, HST_TIME_NONE);
203     EXPECT_EQ(syncManager_->pausedExactAbsMediaTime_, HST_TIME_NONE);
204 }
205 
206 // Scenario3: Test the flow of the Resume method when clockState is not paused and not resumed
HWTEST_F(TestSyncManager, Resume_003, TestSize.Level0)207 HWTEST_F(TestSyncManager, Resume_003, TestSize.Level0)
208 {
209     syncManager_->clockState_ = MediaSyncManager::State::PAUSED;
210     EXPECT_EQ(syncManager_->Resume(), Status::OK);
211     EXPECT_EQ(syncManager_->clockState_, MediaSyncManager::State::RESUMED);
212 }
213 
HWTEST_F(TestSyncManager, Pause_001, TestSize.Level0)214 HWTEST_F(TestSyncManager, Pause_001, TestSize.Level0)
215 {
216     EXPECT_EQ(syncManager_->Pause(), Status::OK);
217 }
218 
HWTEST_F(TestSyncManager, Pause_002, TestSize.Level0)219 HWTEST_F(TestSyncManager, Pause_002, TestSize.Level0)
220 {
221     syncManager_->clockState_ = MediaSyncManager::State::RESUMED;
222     syncManager_->currentAnchorMediaTime_ = 100;
223     syncManager_->currentAnchorClockTime_ = 100;
224     EXPECT_EQ(syncManager_->Pause(), Status::OK);
225 }
226 
227 // Scenario1: Seek when minRangeStartOfMediaTime_ is HST_TIME_NONE
HWTEST_F(TestSyncManager, Seek_ShouldReturnErrorInvalidOperation_WhenMinRangeStartIsNone, TestSize.Level0)228 HWTEST_F(TestSyncManager, Seek_ShouldReturnErrorInvalidOperation_WhenMinRangeStartIsNone, TestSize.Level0)
229 {
230     syncManager_->minRangeStartOfMediaTime_ = HST_TIME_NONE;
231     syncManager_->maxRangeEndOfMediaTime_ = 100;
232     EXPECT_EQ(syncManager_->Seek(50, true), Status::ERROR_INVALID_OPERATION);
233 }
234 
235 // Scenario2: Seek when maxRangeEndOfMediaTime_ is HST_TIME_NONE
HWTEST_F(TestSyncManager, Seek_ShouldReturnErrorInvalidOperation_WhenMaxRangeEndIsNone, TestSize.Level0)236 HWTEST_F(TestSyncManager, Seek_ShouldReturnErrorInvalidOperation_WhenMaxRangeEndIsNone, TestSize.Level0)
237 {
238     syncManager_->minRangeStartOfMediaTime_ = 0;
239     syncManager_->maxRangeEndOfMediaTime_ = HST_TIME_NONE;
240     EXPECT_EQ(syncManager_->Seek(50, true), Status::ERROR_INVALID_OPERATION);
241 }
242 
243 // Scenario3: Seek when isClosest is true
HWTEST_F(TestSyncManager, Seek_ShouldSetFirstMediaTimeAfterSeek_WhenIsClosestIsTrue, TestSize.Level0)244 HWTEST_F(TestSyncManager, Seek_ShouldSetFirstMediaTimeAfterSeek_WhenIsClosestIsTrue, TestSize.Level0)
245 {
246     syncManager_->minRangeStartOfMediaTime_ = 0;
247     syncManager_->maxRangeEndOfMediaTime_ = 100;
248     EXPECT_EQ(syncManager_->Seek(50, true), Status::OK);
249     EXPECT_EQ(syncManager_->firstMediaTimeAfterSeek_, 50);
250 }
251 
252 // Scenario4: Seek when isClosest is false
HWTEST_F(TestSyncManager, Seek_ShouldSetFirstMediaTimeAfterSeekToNone_WhenIsClosestIsFalse, TestSize.Level0)253 HWTEST_F(TestSyncManager, Seek_ShouldSetFirstMediaTimeAfterSeekToNone_WhenIsClosestIsFalse, TestSize.Level0)
254 {
255     syncManager_->minRangeStartOfMediaTime_ = 0;
256     syncManager_->maxRangeEndOfMediaTime_ = 100;
257     EXPECT_EQ(syncManager_->Seek(50, false), Status::OK);
258     EXPECT_EQ(syncManager_->firstMediaTimeAfterSeek_, HST_TIME_NONE);
259 }
260 
261 // Scenario1: Test when syncer is nullptr then AddSynchronizer does nothing.
HWTEST_F(TestSyncManager, AddSynchronizer_ShouldDoNothing_WhenSyncerIsNull, TestSize.Level0)262 HWTEST_F(TestSyncManager, AddSynchronizer_ShouldDoNothing_WhenSyncerIsNull, TestSize.Level0)
263 {
264     IMediaSynchronizer* syncer = nullptr;
265     syncManager_->AddSynchronizer(syncer);
266     // No exception should be thrown and no action should be performed.
267 }
268 
269 // Scenario2: Test when syncer is not nullptr and not already in syncers_ then AddSynchronizer adds the syncer.
HWTEST_F(TestSyncManager, AddSynchronizer_ShouldAddSyncer_WhenSyncerIsNotNullAndNotInSyncers, TestSize.Level0)270 HWTEST_F(TestSyncManager, AddSynchronizer_ShouldAddSyncer_WhenSyncerIsNotNullAndNotInSyncers, TestSize.Level0)
271 {
272     IMediaSynchronizer* syncer = new VideoSink();
273     syncManager_->AddSynchronizer(syncer);
274     EXPECT_EQ(syncManager_->syncers_.size(), 1);
275     EXPECT_EQ(syncManager_->syncers_[0], syncer);
276     delete syncer;
277 }
278 
279 // Scenario3: Test when syncer is not nullptr and already in syncers_ then AddSynchronizer does nothing.
HWTEST_F(TestSyncManager, AddSynchronizer_ShouldDoNothing_WhenSyncerIsNotNullAndInSyncers, TestSize.Level0)280 HWTEST_F(TestSyncManager, AddSynchronizer_ShouldDoNothing_WhenSyncerIsNotNullAndInSyncers, TestSize.Level0)
281 {
282     IMediaSynchronizer* syncer = new VideoSink();
283     syncManager_->AddSynchronizer(syncer);
284     syncManager_->AddSynchronizer(syncer);
285     EXPECT_EQ(syncManager_->syncers_.size(), 1);
286     delete syncer;
287 }
288 
289 // Scenario1: Test when syncer is nullptr then RemoveSynchronizer does nothing.
HWTEST_F(TestSyncManager, RemoveSynchronizer_ShouldDoNothing_WhenSyncerIsNull, TestSize.Level0)290 HWTEST_F(TestSyncManager, RemoveSynchronizer_ShouldDoNothing_WhenSyncerIsNull, TestSize.Level0)
291 {
292     IMediaSynchronizer* syncer = nullptr;
293     syncManager_->RemoveSynchronizer(syncer);
294     // No exception should be thrown and nothing should change in syncManager
295 }
296 
297 // Scenario2: Test when syncer is not nullptr then RemoveSynchronizer removes the syncer from syncManager.
HWTEST_F(TestSyncManager, RemoveSynchronizer_ShouldRemoveSyncer_WhenSyncerIsNotNull, TestSize.Level0)298 HWTEST_F(TestSyncManager, RemoveSynchronizer_ShouldRemoveSyncer_WhenSyncerIsNotNull, TestSize.Level0)
299 {
300     IMediaSynchronizer* syncer = new VideoSink();
301     IMediaSynchronizer* syncerOne = new VideoSink();
302     syncManager_->AddSynchronizer(syncer);
303     syncManager_->RemoveSynchronizer(syncerOne);
304     EXPECT_EQ(syncManager_->syncers_.size(), 1);
305     syncManager_->RemoveSynchronizer(syncer);
306     EXPECT_EQ(syncManager_->syncers_.size(), 0);
307     delete syncer;
308     delete syncerOne;
309 }
310 
311 // Scenario1: Test case for rate less than 0
HWTEST_F(TestSyncManager, SetPlaybackRate_ShouldReturnError_WhenRateLessThan0, TestSize.Level0)312 HWTEST_F(TestSyncManager, SetPlaybackRate_ShouldReturnError_WhenRateLessThan0, TestSize.Level0) {
313     float rate = -1.0;
314     EXPECT_EQ(syncManager_->SetPlaybackRate(rate), Status::ERROR_INVALID_PARAMETER);
315 }
316 
317 // Scenario2: Test case for rate equal to 0
HWTEST_F(TestSyncManager, SetPlaybackRate_ShouldReturnOk_WhenRateEqualTo0, TestSize.Level0)318 HWTEST_F(TestSyncManager, SetPlaybackRate_ShouldReturnOk_WhenRateEqualTo0, TestSize.Level0) {
319     float rate = 0.0;
320     EXPECT_EQ(syncManager_->SetPlaybackRate(rate), Status::OK);
321 }
322 
323 // Scenario3: Test case for rate greater than 0 and currentAbsMediaTime_ is HST_TIME_NONE
HWTEST_F(TestSyncManager, SetPlaybackRate_ShouldReturnOk_WhenRateGreaterThan0AndCurrentAbsMediaTimeIsNone, TestSize.Level0)324 HWTEST_F(TestSyncManager,
325     SetPlaybackRate_ShouldReturnOk_WhenRateGreaterThan0AndCurrentAbsMediaTimeIsNone, TestSize.Level0) {
326     float rate = 1.0;
327     syncManager_->currentAbsMediaTime_ = HST_TIME_NONE;
328     EXPECT_EQ(syncManager_->SetPlaybackRate(rate), Status::OK);
329 }
330 
331 // Scenario4: Test case for rate greater than 0 and currentAbsMediaTime_ is not HST_TIME_NONE
HWTEST_F(TestSyncManager, SetPlaybackRate_ShouldReturnOk_WhenRateGreaterThan0AndCurrentAbsMediaTimeIsNotNone, TestSize.Level0)332 HWTEST_F(TestSyncManager,
333     SetPlaybackRate_ShouldReturnOk_WhenRateGreaterThan0AndCurrentAbsMediaTimeIsNotNone, TestSize.Level0) {
334     float rate = 1.0;
335     syncManager_->currentAbsMediaTime_ = 100;
336     EXPECT_EQ(syncManager_->SetPlaybackRate(rate), Status::OK);
337 }
338 
339 // Scenario1: Test when inTime is less than minRangeStartOfMediaTime_
HWTEST_F(TestSyncManager, ClipMediaTime_ShouldClipToMin_WhenInTimeLessThanMin, TestSize.Level0)340 HWTEST_F(TestSyncManager, ClipMediaTime_ShouldClipToMin_WhenInTimeLessThanMin, TestSize.Level0)
341 {
342     syncManager_->minRangeStartOfMediaTime_ = 100;
343     syncManager_->maxRangeEndOfMediaTime_ = 200;
344     int64_t inTime = 50;
345     int64_t expected = 100;
346     int64_t result = syncManager_->ClipMediaTime(inTime);
347     ASSERT_EQ(expected, result);
348 }
349 
350 // Scenario2: Test when inTime is more than maxRangeEndOfMediaTime_
HWTEST_F(TestSyncManager, ClipMediaTime_ShouldClipToMax_WhenInTimeMoreThanMax, TestSize.Level0)351 HWTEST_F(TestSyncManager, ClipMediaTime_ShouldClipToMax_WhenInTimeMoreThanMax, TestSize.Level0)
352 {
353     syncManager_->minRangeStartOfMediaTime_ = 100;
354     syncManager_->maxRangeEndOfMediaTime_ = 200;
355     int64_t inTime = 250;
356     int64_t expected = 200;
357     int64_t result = syncManager_->ClipMediaTime(inTime);
358     ASSERT_EQ(expected, result);
359 }
360 
361 // Scenario3: Test when inTime is between minRangeStartOfMediaTime_ and maxRangeEndOfMediaTime_
HWTEST_F(TestSyncManager, ClipMediaTime_ShouldNotClip_WhenInTimeBetweenMinAndMax, TestSize.Level0)362 HWTEST_F(TestSyncManager, ClipMediaTime_ShouldNotClip_WhenInTimeBetweenMinAndMax, TestSize.Level0)
363 {
364     syncManager_->minRangeStartOfMediaTime_ = 100;
365     syncManager_->maxRangeEndOfMediaTime_ = 200;
366     int64_t inTime = 150;
367     int64_t expected = 150;
368     int64_t result = syncManager_->ClipMediaTime(inTime);
369     ASSERT_EQ(expected, result);
370 }
371 
372 // Scenario4: Test when inTime is equal to minRangeStartOfMediaTime_
HWTEST_F(TestSyncManager, ClipMediaTime_ShouldNotClip_WhenInTimeEqualToMin, TestSize.Level0)373 HWTEST_F(TestSyncManager, ClipMediaTime_ShouldNotClip_WhenInTimeEqualToMin, TestSize.Level0)
374 {
375     syncManager_->minRangeStartOfMediaTime_ = 100;
376     syncManager_->maxRangeEndOfMediaTime_ = 200;
377     int64_t inTime = 100;
378     int64_t expected = 100;
379     int64_t result = syncManager_->ClipMediaTime(inTime);
380     ASSERT_EQ(expected, result);
381 }
382 
383 // Scenario5: Test when inTime is equal to maxRangeEndOfMediaTime_
HWTEST_F(TestSyncManager, ClipMediaTime_ShouldNotClip_WhenInTimeEqualToMax, TestSize.Level0)384 HWTEST_F(TestSyncManager, ClipMediaTime_ShouldNotClip_WhenInTimeEqualToMax, TestSize.Level0)
385 {
386     syncManager_->minRangeStartOfMediaTime_ = 100;
387     syncManager_->maxRangeEndOfMediaTime_ = 200;
388     int64_t inTime = 200;
389     int64_t expected = 200;
390     int64_t result = syncManager_->ClipMediaTime(inTime);
391     ASSERT_EQ(expected, result);
392 }
393 
HWTEST_F(TestSyncManager, UpdateFirstPtsAfterSeek_ShouldUpdateFirstPts_WhenFirstPtsIsNone, TestSize.Level0)394 HWTEST_F(TestSyncManager, UpdateFirstPtsAfterSeek_ShouldUpdateFirstPts_WhenFirstPtsIsNone, TestSize.Level0)
395 {
396     int64_t mediaTime = 100;
397     syncManager_->UpdateFirstPtsAfterSeek(mediaTime);
398     EXPECT_EQ(syncManager_->firstMediaTimeAfterSeek_, mediaTime);
399 }
400 
HWTEST_F(TestSyncManager, UpdateFirstPtsAfterSeek_ShouldUpdateFirstPts_WhenMediaTimeIsGreater, TestSize.Level0)401 HWTEST_F(TestSyncManager, UpdateFirstPtsAfterSeek_ShouldUpdateFirstPts_WhenMediaTimeIsGreater, TestSize.Level0)
402 {
403     int64_t firstMediaTimeAfterSeek = 50;
404     int64_t mediaTime = 100;
405     syncManager_->firstMediaTimeAfterSeek_ = firstMediaTimeAfterSeek;
406     syncManager_->UpdateFirstPtsAfterSeek(mediaTime);
407     EXPECT_EQ(syncManager_->firstMediaTimeAfterSeek_, mediaTime);
408 }
409 
HWTEST_F(TestSyncManager, UpdateFirstPtsAfterSeek_ShouldNotUpdateFirstPts_WhenMediaTimeIsLess, TestSize.Level0)410 HWTEST_F(TestSyncManager, UpdateFirstPtsAfterSeek_ShouldNotUpdateFirstPts_WhenMediaTimeIsLess, TestSize.Level0)
411 {
412     int64_t firstMediaTimeAfterSeek = 150;
413     int64_t mediaTime = 100;
414     syncManager_->firstMediaTimeAfterSeek_ = firstMediaTimeAfterSeek;
415     syncManager_->UpdateFirstPtsAfterSeek(mediaTime);
416     EXPECT_EQ(syncManager_->firstMediaTimeAfterSeek_, firstMediaTimeAfterSeek);
417 }
418 
419 // Scenario1: Test when playRate is 0 then return HST_TIME_NONE.
HWTEST_F(TestSyncManager, SimpleGetMediaTime_001, TestSize.Level0)420 HWTEST_F(TestSyncManager, SimpleGetMediaTime_001, TestSize.Level0)
421 {
422     int64_t anchorClockTime = 100;
423     int64_t delayTime = 50;
424     int64_t nowClockTime = 150;
425     int64_t anchorMediaTime = 200;
426     float playRate = 0;
427     int64_t result =
428         syncManager_->SimpleGetMediaTime(anchorClockTime, delayTime, nowClockTime, anchorMediaTime, playRate);
429     ASSERT_EQ(result, HST_TIME_NONE);
430 }
431 
432 // Scenario2: Test when any of the input parameters is HST_TIME_NONE then return HST_TIME_NONE.
HWTEST_F(TestSyncManager, SimpleGetMediaTime_002, TestSize.Level0)433 HWTEST_F(TestSyncManager, SimpleGetMediaTime_002, TestSize.Level0)
434 {
435     int64_t anchorClockTime = HST_TIME_NONE;
436     int64_t delayTime = 50;
437     int64_t nowClockTime = 150;
438     int64_t anchorMediaTime = 200;
439     float playRate = 1.0;
440     int64_t result =
441         syncManager_->SimpleGetMediaTime(anchorClockTime, delayTime, nowClockTime, anchorMediaTime, playRate);
442     ASSERT_EQ(result, HST_TIME_NONE);
443 }
444 
445 // Scenario3: Test when all parameters are valid then return anchorMediaTime.
HWTEST_F(TestSyncManager, SimpleGetMediaTime_003, TestSize.Level0)446 HWTEST_F(TestSyncManager, SimpleGetMediaTime_003, TestSize.Level0)
447 {
448     int64_t anchorClockTime = 100;
449     int64_t delayTime = 50;
450     int64_t nowClockTime = 150;
451     int64_t anchorMediaTime = 200;
452     float playRate = 1.0;
453     int64_t result =
454         syncManager_->SimpleGetMediaTime(anchorClockTime, delayTime, nowClockTime, anchorMediaTime, playRate);
455     ASSERT_EQ(result, anchorMediaTime);
456 }
457 
458 // Scenario1: audio priority and not seeked, do not go back
HWTEST_F(TestSyncManager, BoundMediaProgress_001, TestSize.Level0)459 HWTEST_F(TestSyncManager, BoundMediaProgress_001, TestSize.Level0)
460 {
461     MediaSyncManager mediaSyncManager;
462     int64_t newMediaProgressTime;
463     int64_t lastReportMediaTime = 90;
464     // pre-defined values
465     mediaSyncManager.lastAudioBufferDuration_ = 20;
466     mediaSyncManager.currentAnchorMediaTime_ = 100;
467     mediaSyncManager.lastReportMediaTime_ = lastReportMediaTime;
468     mediaSyncManager.frameAfterSeeked_ = false;
469     mediaSyncManager.currentSyncerPriority_ = IMediaSynchronizer::AUDIO_SINK;
470 
471     newMediaProgressTime = 50;
472     auto result = mediaSyncManager.BoundMediaProgress(newMediaProgressTime);
473     ASSERT_EQ(result, lastReportMediaTime);
474 }
475 
476 // Scenario2: audio priority and not seeked, do not go too far
HWTEST_F(TestSyncManager, BoundMediaProgress_002, TestSize.Level0)477 HWTEST_F(TestSyncManager, BoundMediaProgress_002, TestSize.Level0)
478 {
479     MediaSyncManager mediaSyncManager;
480     int64_t newMediaProgressTime;
481     // pre-defined values
482     mediaSyncManager.lastAudioBufferDuration_ = 20;
483     mediaSyncManager.currentAnchorMediaTime_ = 100;
484     mediaSyncManager.lastReportMediaTime_ = 90;
485     mediaSyncManager.frameAfterSeeked_ = false;
486     mediaSyncManager.currentSyncerPriority_ = IMediaSynchronizer::AUDIO_SINK;
487 
488     newMediaProgressTime = 250;
489     auto result = mediaSyncManager.BoundMediaProgress(newMediaProgressTime);
490     ASSERT_EQ(result, mediaSyncManager.currentAnchorMediaTime_ + mediaSyncManager.lastAudioBufferDuration_);
491 }
492 
493 // Scenario3: audio priority and not seeked, progress is valid
HWTEST_F(TestSyncManager, BoundMediaProgress_003, TestSize.Level0)494 HWTEST_F(TestSyncManager, BoundMediaProgress_003, TestSize.Level0)
495 {
496     MediaSyncManager mediaSyncManager;
497     int64_t newMediaProgressTime;
498     // pre-defined values
499     mediaSyncManager.lastAudioBufferDuration_ = 20;
500     mediaSyncManager.currentAnchorMediaTime_ = 100;
501     mediaSyncManager.lastReportMediaTime_ = 90;
502     mediaSyncManager.frameAfterSeeked_ = false;
503     mediaSyncManager.currentSyncerPriority_ = IMediaSynchronizer::AUDIO_SINK;
504 
505     newMediaProgressTime = 100;
506     auto result = mediaSyncManager.BoundMediaProgress(newMediaProgressTime);
507     ASSERT_EQ(result, newMediaProgressTime);
508 }
509 
510 // Scenario4: non-audio priority and seeked, go back after seek
HWTEST_F(TestSyncManager, BoundMediaProgress_004, TestSize.Level0)511 HWTEST_F(TestSyncManager, BoundMediaProgress_004, TestSize.Level0)
512 {
513     MediaSyncManager mediaSyncManager;
514     int64_t newMediaProgressTime;
515     // pre-defined values
516     mediaSyncManager.lastAudioBufferDuration_ = 100;
517     mediaSyncManager.currentAnchorMediaTime_ = 100;
518     mediaSyncManager.lastReportMediaTime_ = 150;
519     mediaSyncManager.frameAfterSeeked_ = true;
520     mediaSyncManager.currentSyncerPriority_ = IMediaSynchronizer::SUBTITLE_SINK;
521 
522     newMediaProgressTime = 50;
523     auto result = mediaSyncManager.BoundMediaProgress(newMediaProgressTime);
524     ASSERT_EQ(result, newMediaProgressTime);
525 }
526 
527 // Scenario5: non-audio priority and seeked, go forward after seek
HWTEST_F(TestSyncManager, BoundMediaProgress_005, TestSize.Level0)528 HWTEST_F(TestSyncManager, BoundMediaProgress_005, TestSize.Level0)
529 {
530     MediaSyncManager mediaSyncManager;
531     int64_t newMediaProgressTime;
532     // pre-defined values
533     mediaSyncManager.currentAnchorMediaTime_ = 200;
534     mediaSyncManager.lastReportMediaTime_ = 150;
535     mediaSyncManager.frameAfterSeeked_ = true;
536     mediaSyncManager.currentSyncerPriority_ = IMediaSynchronizer::SUBTITLE_SINK;
537 
538     newMediaProgressTime = 175;
539     auto result = mediaSyncManager.BoundMediaProgress(newMediaProgressTime);
540     ASSERT_EQ(result, newMediaProgressTime);
541 }
542 
543 // Scenario6: video audio priority and seeked, go forward after seek
HWTEST_F(TestSyncManager, BoundMediaProgress_006, TestSize.Level0)544 HWTEST_F(TestSyncManager, BoundMediaProgress_006, TestSize.Level0)
545 {
546     MediaSyncManager mediaSyncManager;
547     int64_t newMediaProgressTime;
548     // pre-defined values
549     mediaSyncManager.lastVideoBufferPts_ = 0;
550     mediaSyncManager.currentSyncerPriority_ = IMediaSynchronizer::VIDEO_SINK;
551     newMediaProgressTime = 175;
552     auto result = mediaSyncManager.BoundMediaProgress(newMediaProgressTime);
553     ASSERT_EQ(result, mediaSyncManager.lastVideoBufferPts_);
554 }
555 
556 // Scenario1: Test case when isSeeking_ is true
HWTEST_F(TestSyncManager, GetMediaTimeNow_001, TestSize.Level0)557 HWTEST_F(TestSyncManager, GetMediaTimeNow_001, TestSize.Level0)
558 {
559     MediaSyncManager mediaSyncManager;
560     int64_t seekingMediaTime = 100;
561     mediaSyncManager.isSeeking_ = true;
562     mediaSyncManager.seekingMediaTime_ = seekingMediaTime;
563     EXPECT_EQ(mediaSyncManager.GetMediaTimeNow(), seekingMediaTime);
564 }
565 
566 // Scenario2: Test case when paused
HWTEST_F(TestSyncManager, GetMediaTimeNow_002, TestSize.Level0)567 HWTEST_F(TestSyncManager, GetMediaTimeNow_002, TestSize.Level0)
568 {
569     MediaSyncManager mediaSyncManager;
570     mediaSyncManager.isSeeking_ = false;
571     mediaSyncManager.lastReportMediaTime_ = 100;
572     mediaSyncManager.pausedExactAbsMediaTime_ = 120;
573     mediaSyncManager.currentAnchorMediaTime_ = 150;
574     mediaSyncManager.frameAfterSeeked_ = false;
575     mediaSyncManager.firstMediaTimeAfterSeek_ = 50;
576     mediaSyncManager.clockState_ = MediaSyncManager::State::PAUSED;
577     mediaSyncManager.startPts_ = 0;
578     mediaSyncManager.currentSyncerPriority_ = IMediaSynchronizer::SUBTITLE_SINK;
579     int64_t result = mediaSyncManager.GetMediaTimeNow();
580     EXPECT_EQ(result, mediaSyncManager.pausedExactAbsMediaTime_);
581 }
582 
583 // Scenario3: Test case when invalid
HWTEST_F(TestSyncManager, GetMediaTimeNow_003, TestSize.Level0)584 HWTEST_F(TestSyncManager, GetMediaTimeNow_003, TestSize.Level0)
585 {
586     MediaSyncManager mediaSyncManager;
587     mediaSyncManager.isSeeking_ = false;
588     mediaSyncManager.clockState_ = MediaSyncManager::State::RESUMED;
589     mediaSyncManager.startPts_ = 0;
590     mediaSyncManager.currentAnchorClockTime_ = HST_TIME_NONE;
591     int64_t result = mediaSyncManager.GetMediaTimeNow();
592     EXPECT_EQ(result, 0);
593 }
594 
595 // Scenario4: Test for normal case1
HWTEST_F(TestSyncManager, GetMediaTimeNow_004, TestSize.Level0)596 HWTEST_F(TestSyncManager, GetMediaTimeNow_004, TestSize.Level0)
597 {
598     MediaSyncManager mediaSyncManager;
599     int64_t lastReportMediaTime_ = 110;
600     mediaSyncManager.isSeeking_ = false;
601     mediaSyncManager.clockState_ = MediaSyncManager::State::RESUMED;
602     mediaSyncManager.lastReportMediaTime_ = lastReportMediaTime_;
603     mediaSyncManager.currentAnchorMediaTime_ = 150;
604     mediaSyncManager.currentAbsMediaTime_ = 150;
605     mediaSyncManager.delayTime_ = 50;
606     mediaSyncManager.playRate_ = 1.0f;
607     mediaSyncManager.frameAfterSeeked_ = false;
608     mediaSyncManager.firstMediaTimeAfterSeek_ = 50; // firstMediaTimeAfterSeek_ < currentMediaTime
609     mediaSyncManager.startPts_ = 0;
610     mediaSyncManager.currentSyncerPriority_ = IMediaSynchronizer::SUBTITLE_SINK;
611     mediaSyncManager.currentAnchorClockTime_ = mediaSyncManager.GetSystemClock();
612     int64_t result = mediaSyncManager.GetMediaTimeNow();
613     EXPECT_EQ(result >= lastReportMediaTime_, true);
614     EXPECT_EQ(result <= mediaSyncManager.currentAnchorMediaTime_, true);
615 }
616 
617 // Scenario5: Test for normal case2
HWTEST_F(TestSyncManager, GetMediaTimeNow_005, TestSize.Level0)618 HWTEST_F(TestSyncManager, GetMediaTimeNow_005, TestSize.Level0)
619 {
620     MediaSyncManager mediaSyncManager;
621     int64_t lastReportMediaTime_ = 110;
622     mediaSyncManager.isSeeking_ = false;
623     mediaSyncManager.clockState_ = MediaSyncManager::State::RESUMED;
624     mediaSyncManager.lastReportMediaTime_ = lastReportMediaTime_;
625     mediaSyncManager.currentAnchorMediaTime_ = 150;
626     mediaSyncManager.currentAbsMediaTime_ = 150;
627     mediaSyncManager.delayTime_ = 50;
628     mediaSyncManager.playRate_ = 1.0f;
629     mediaSyncManager.frameAfterSeeked_ = false;
630     mediaSyncManager.firstMediaTimeAfterSeek_ = 150; // firstMediaTimeAfterSeek_ >= currentMediaTime
631     mediaSyncManager.startPts_ = 0;
632     mediaSyncManager.currentSyncerPriority_ = IMediaSynchronizer::SUBTITLE_SINK;
633     mediaSyncManager.currentAnchorClockTime_ = mediaSyncManager.GetSystemClock();
634     int64_t result = mediaSyncManager.GetMediaTimeNow();
635     EXPECT_EQ(result >= lastReportMediaTime_, true);
636     EXPECT_EQ(result <= mediaSyncManager.currentAnchorMediaTime_, true);
637 }
638 
639 // Scenario6: Test for normal case3
HWTEST_F(TestSyncManager, GetMediaTimeNow_006, TestSize.Level0)640 HWTEST_F(TestSyncManager, GetMediaTimeNow_006, TestSize.Level0)
641 {
642     MediaSyncManager mediaSyncManager;
643     int64_t lastReportMediaTime_ = 110;
644     mediaSyncManager.isSeeking_ = false;
645     mediaSyncManager.clockState_ = MediaSyncManager::State::RESUMED;
646     mediaSyncManager.lastReportMediaTime_ = lastReportMediaTime_;
647     mediaSyncManager.currentAnchorMediaTime_ = 150;
648     mediaSyncManager.currentAbsMediaTime_ = 150;
649     mediaSyncManager.delayTime_ = 50;
650     mediaSyncManager.playRate_ = 1.0f;
651     mediaSyncManager.frameAfterSeeked_ = false;
652     mediaSyncManager.firstMediaTimeAfterSeek_ = HST_TIME_NONE; // firstMediaTimeAfterSeek_ = HST_TIME_NONE
653     mediaSyncManager.startPts_ = 0;
654     mediaSyncManager.currentSyncerPriority_ = IMediaSynchronizer::SUBTITLE_SINK;
655     mediaSyncManager.currentAnchorClockTime_ = mediaSyncManager.GetSystemClock();
656     int64_t result = mediaSyncManager.GetMediaTimeNow();
657     EXPECT_EQ(result >= lastReportMediaTime_, true);
658     EXPECT_EQ(result <= mediaSyncManager.currentAnchorMediaTime_, true);
659 }
660 
HWTEST_F(TestSyncManager, GetMediaTimeNow_007, TestSize.Level0)661 HWTEST_F(TestSyncManager, GetMediaTimeNow_007, TestSize.Level0)
662 {
663     syncManager_->isSeeking_ = false;
664     syncManager_->clockState_ = MediaSyncManager::State::PAUSED;
665     syncManager_->pausedExactAbsMediaTime_ = 100;
666     syncManager_->firstMediaTimeAfterSeek_ = 150;
667     syncManager_->startPts_ = 50;
668     syncManager_->currentSyncerPriority_ = IMediaSynchronizer::SUBTITLE_SINK;
669     syncManager_->currentAnchorMediaTime_ = 50;
670     EXPECT_EQ(syncManager_->GetMediaTimeNow(), 50);
671 }
672 
HWTEST_F(TestSyncManager, GetMediaTimeNow_008, TestSize.Level0)673 HWTEST_F(TestSyncManager, GetMediaTimeNow_008, TestSize.Level0)
674 {
675     syncManager_->isSeeking_ = false;
676     syncManager_->clockState_ = MediaSyncManager::State::PAUSED;
677     syncManager_->pausedExactAbsMediaTime_ = 100;
678     syncManager_->firstMediaTimeAfterSeek_ = 150;
679     syncManager_->currentSyncerPriority_ = IMediaSynchronizer::SUBTITLE_SINK;
680     syncManager_->currentAnchorMediaTime_ = 50;
681     EXPECT_EQ(syncManager_->GetMediaTimeNow(), 50);
682 }
683 
HWTEST_F(TestSyncManager, SetLastAudioBufferDuration_001, TestSize.Level0)684 HWTEST_F(TestSyncManager, SetLastAudioBufferDuration_001, TestSize.Level0)
685 {
686     syncManager_->SetLastAudioBufferDuration(50);
687     EXPECT_EQ(syncManager_->lastAudioBufferDuration_, 50);
688     syncManager_->SetLastAudioBufferDuration(0);
689     EXPECT_EQ(syncManager_->lastAudioBufferDuration_, 0);
690 }
691 
692 // Scenario1: Test when startPts is less than startPts_ then startPts_ should be updated.
HWTEST_F(TestSyncManager, SetMediaStartPts_ShouldUpdateStartPts_WhenStartPtsIsLess, TestSize.Level0)693 HWTEST_F(TestSyncManager, SetMediaStartPts_ShouldUpdateStartPts_WhenStartPtsIsLess, TestSize.Level0)
694 {
695     syncManager_->SetMediaStartPts(100);
696     syncManager_->SetMediaStartPts(50);
697     EXPECT_EQ(syncManager_->startPts_, 50);
698 }
699 
700 // Scenario2: Test when startPts is equal to startPts_ then startPts_ should not be updated.
HWTEST_F(TestSyncManager, SetMediaStartPts_ShouldNotUpdateStartPts_WhenStartPtsIsEqual, TestSize.Level0)701 HWTEST_F(TestSyncManager, SetMediaStartPts_ShouldNotUpdateStartPts_WhenStartPtsIsEqual, TestSize.Level0)
702 {
703     syncManager_->SetMediaStartPts(100);
704     syncManager_->SetMediaStartPts(100);
705     EXPECT_EQ(syncManager_->startPts_, 100);
706 }
707 
708 // Scenario3: Test when startPts is HST_TIME_NONE then startPts_ should be updated.
HWTEST_F(TestSyncManager, SetMediaStartPts_ShouldUpdateStartPts_WhenStartPtsIsNone, TestSize.Level0)709 HWTEST_F(TestSyncManager, SetMediaStartPts_ShouldUpdateStartPts_WhenStartPtsIsNone, TestSize.Level0)
710 {
711     syncManager_->SetMediaStartPts(HST_TIME_NONE);
712     EXPECT_EQ(syncManager_->startPts_, HST_TIME_NONE);
713 }
714 
715 // Scenario1: Test case for when clockState_ is PAUSED
HWTEST_F(TestSyncManager, GetClockTimeNow_001, TestSize.Level0)716 HWTEST_F(TestSyncManager, GetClockTimeNow_001, TestSize.Level0)
717 {
718     MediaSyncManager mediaSyncManager;
719     mediaSyncManager.clockState_ = MediaSyncManager::State::PAUSED;
720     mediaSyncManager.GetClockTimeNow();
721     EXPECT_EQ(mediaSyncManager.clockState_, MediaSyncManager::State::PAUSED);
722 }
723 
724 // Scenario1: Test when playRate is 0, the function should return HST_TIME_NONE.
HWTEST_F(TestSyncManager, SimpleGetClockTime_001, TestSize.Level0)725 HWTEST_F(TestSyncManager, SimpleGetClockTime_001, TestSize.Level0)
726 {
727     MediaSyncManager mediaSyncManager;
728     int64_t anchorClockTime = 100;
729     int64_t nowMediaTime = 200;
730     int64_t anchorMediaTime = 150;
731     float playRate = 0;
732     int64_t result = mediaSyncManager.SimpleGetClockTime(anchorClockTime, nowMediaTime, anchorMediaTime, playRate);
733     EXPECT_EQ(result, HST_TIME_NONE);
734 }
735 
736 // Scenario2: Test when any of the input parameters is HST_TIME_NONE, the function should return HST_TIME_NONE.
HWTEST_F(TestSyncManager, SimpleGetClockTime_002, TestSize.Level0)737 HWTEST_F(TestSyncManager, SimpleGetClockTime_002, TestSize.Level0)
738 {
739     MediaSyncManager mediaSyncManager;
740     int64_t anchorClockTime = HST_TIME_NONE;
741     int64_t nowMediaTime = 200;
742     int64_t anchorMediaTime = 150;
743     float playRate = 1.0;
744     int64_t result = mediaSyncManager.SimpleGetClockTime(anchorClockTime, nowMediaTime, anchorMediaTime, playRate);
745     EXPECT_EQ(result, HST_TIME_NONE);
746 }
747 
748 // Scenario3: Test when all parameters are valid, the function should return the correct clock time.
HWTEST_F(TestSyncManager, SimpleGetClockTime_003, TestSize.Level0)749 HWTEST_F(TestSyncManager, SimpleGetClockTime_003, TestSize.Level0)
750 {
751     MediaSyncManager mediaSyncManager;
752     int64_t anchorClockTime = 100;
753     int64_t nowMediaTime = 200;
754     int64_t anchorMediaTime = 150;
755     float playRate = 1.0;
756     int64_t result = mediaSyncManager.SimpleGetClockTime(anchorClockTime, nowMediaTime, anchorMediaTime, playRate);
757     EXPECT_EQ(result, 150);
758 }
759 
HWTEST_F(TestSyncManager, GetClockTime_001, TestSize.Level0)760 HWTEST_F(TestSyncManager, GetClockTime_001, TestSize.Level0)
761 {
762     MediaSyncManager mediaSyncManager;
763     mediaSyncManager.minRangeStartOfMediaTime_ = 100;
764     mediaSyncManager.maxRangeEndOfMediaTime_ = 200;
765     int64_t mediaTime = 50;
766     int64_t result = mediaSyncManager.GetClockTime(mediaTime);
767     EXPECT_EQ(result, HST_TIME_NONE);
768 }
769 
770 // Scenario2: Test when mediaTime is greater than maxRangeEndOfMediaTime_
HWTEST_F(TestSyncManager, GetClockTime_002, TestSize.Level0)771 HWTEST_F(TestSyncManager, GetClockTime_002, TestSize.Level0)
772 {
773     MediaSyncManager mediaSyncManager;
774     mediaSyncManager.minRangeStartOfMediaTime_ = 100;
775     mediaSyncManager.maxRangeEndOfMediaTime_ = 200;
776     int64_t mediaTime = 250;
777     int64_t result = mediaSyncManager.GetClockTime(mediaTime);
778     EXPECT_EQ(result, HST_TIME_NONE);
779 }
780 
781 // Scenario3: Test when mediaTime is within the range
HWTEST_F(TestSyncManager, GetClockTime_003, TestSize.Level0)782 HWTEST_F(TestSyncManager, GetClockTime_003, TestSize.Level0)
783 {
784     MediaSyncManager mediaSyncManager;
785     mediaSyncManager.minRangeStartOfMediaTime_ = 100;
786     mediaSyncManager.maxRangeEndOfMediaTime_ = 200;
787     int64_t mediaTime = 150;
788     int64_t result = mediaSyncManager.GetClockTime(mediaTime);
789     EXPECT_EQ(result, HST_TIME_NONE);
790 }
791 
792 // Scenario1: Test when supplier is nullptr then ReportPrerolled returns immediately.
HWTEST_F(TestSyncManager, ReportPrerolled_001, TestSize.Level0)793 HWTEST_F(TestSyncManager, ReportPrerolled_001, TestSize.Level0)
794 {
795     syncManager_->ReportPrerolled(nullptr);
796     // No further action is expected, as the function should return immediately.
797 }
798 
799 // Scenario2: Test when allSyncerShouldPrerolled_ is false then ReportPrerolled returns immediately.
HWTEST_F(TestSyncManager, ReportPrerolled_002, TestSize.Level0)800 HWTEST_F(TestSyncManager, ReportPrerolled_002, TestSize.Level0)
801 {
802     IMediaSynchronizer* supplier = new VideoSink();
803     syncManager_->allSyncerShouldPrerolled_ = false;
804     syncManager_->ReportPrerolled(supplier);
805     // No further action is expected, as the function should return immediately.
806     delete supplier;
807 }
808 
809 // Scenario3: Test when supplier is already in prerolledSyncers_ then ReportPrerolled returns immediately.
HWTEST_F(TestSyncManager, ReportPrerolled_003, TestSize.Level0)810 HWTEST_F(TestSyncManager, ReportPrerolled_003, TestSize.Level0)
811 {
812     IMediaSynchronizer* supplier = new VideoSink();
813     syncManager_->allSyncerShouldPrerolled_ = true;
814     syncManager_->prerolledSyncers_.emplace_back(supplier);
815     syncManager_->ReportPrerolled(supplier);
816     // No further action is expected, as the function should return immediately.
817     delete supplier;
818 }
819 
HWTEST_F(TestSyncManager, ReportPrerolled_004, TestSize.Level0)820 HWTEST_F(TestSyncManager, ReportPrerolled_004, TestSize.Level0)
821 {
822     IMediaSynchronizer* supplier = new VideoSink();
823     syncManager_->allSyncerShouldPrerolled_ = true;
824     syncManager_->ReportPrerolled(supplier);
825     EXPECT_EQ(syncManager_->prerolledSyncers_.size(), 1);
826     EXPECT_EQ(syncManager_->prerolledSyncers_.front(), supplier);
827     delete supplier;
828 }
829 
830 // Scenario5: Test when all prerolledSyncers_ are equal to syncers_ then all prerolledSyncers_ are notified and cleared.
HWTEST_F(TestSyncManager, ReportPrerolled_005, TestSize.Level0)831 HWTEST_F(TestSyncManager, ReportPrerolled_005, TestSize.Level0)
832 {
833     IMediaSynchronizer* supplier = new VideoSink();
834     syncManager_->allSyncerShouldPrerolled_ = true;
835     syncManager_->syncers_.emplace_back(supplier);
836     syncManager_->ReportPrerolled(supplier);
837     EXPECT_EQ(syncManager_->prerolledSyncers_.size(), 0);
838     EXPECT_EQ(syncManager_->prerolledSyncers_.size(), 0);
839     delete supplier;
840 }
841 }  // namespace Test
842 }  // namespace Media
843 }  // namespace OHOS