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