1 /*
2 * Copyright (c) 2023 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 "hls_media_downloader_unit_test.h"
16 #include "http_server_demo.h"
17 #include "source_callback.h"
18
19 using namespace OHOS;
20 using namespace OHOS::Media;
21 namespace OHOS::Media::Plugins::HttpPlugin {
22 using namespace std;
23 using namespace testing::ext;
24
25
26 const std::map<std::string, std::string> httpHeader = {
27 {"User-Agent", "ABC"},
28 {"Referer", "DEF"},
29 };
30
31 static const std::string TEST_URI_PATH = "http://127.0.0.1:46666/";
32 static const std::string M3U8_PATH_1 = "test_hls/testHLSEncode.m3u8";
33 constexpr int MIN_WITDH = 480;
34 constexpr int SECOND_WITDH = 720;
35 constexpr int THIRD_WITDH = 1080;
36 constexpr int MAX_RECORD_COUNT = 10;
37 constexpr int BUFFER_SIZE = 10;
38 constexpr int MAX_TEN = 10 * 1024;
39
40 std::unique_ptr<MediaAVCodec::HttpServerDemo> g_server = nullptr;
41
SetUpTestCase(void)42 void HlsMediaDownloaderUnitTest::SetUpTestCase(void)
43 {
44 g_server = std::make_unique<MediaAVCodec::HttpServerDemo>();
45 g_server->StartServer();
46 }
47
TearDownTestCase(void)48 void HlsMediaDownloaderUnitTest::TearDownTestCase(void)
49 {
50 g_server->StopServer();
51 g_server = nullptr;
52 }
53
SetUp(void)54 void HlsMediaDownloaderUnitTest ::SetUp(void)
55 {
56 header_ = std::map<std::string, std::string>();
57 hlsMediaDownloader = new HlsMediaDownloader(MAX_CACHE_BUFFER_SIZE, header_, nullptr);
58 }
59
TearDown(void)60 void HlsMediaDownloaderUnitTest ::TearDown(void)
61 {
62 delete hlsMediaDownloader;
63 hlsMediaDownloader = nullptr;
64 }
65
66 HWTEST_F(HlsMediaDownloaderUnitTest, GetPlayable_1, TestSize.Level1)
67 {
68 hlsMediaDownloader->isBuffering_ = true;
69 EXPECT_FALSE(hlsMediaDownloader->GetPlayable());
70 hlsMediaDownloader->isBuffering_ = false;
71 hlsMediaDownloader->isFirstFrameArrived_ = false;
72 EXPECT_FALSE(hlsMediaDownloader->GetPlayable());
73 hlsMediaDownloader->GetReadTimeOut(false);
74 }
75
76 HWTEST_F(HlsMediaDownloaderUnitTest, GetPlayable_2, TestSize.Level1)
77 {
78 hlsMediaDownloader->isBuffering_ = false;
79 hlsMediaDownloader->isFirstFrameArrived_ = true;
80 hlsMediaDownloader->wantedReadLength_ = 0;
81 EXPECT_FALSE(hlsMediaDownloader->GetPlayable());
82 }
83
84 HWTEST_F(HlsMediaDownloaderUnitTest, GetPlayable_3, TestSize.Level1)
85 {
86 hlsMediaDownloader->isBuffering_ = false;
87 hlsMediaDownloader->isFirstFrameArrived_ = true;
88 hlsMediaDownloader->wantedReadLength_ = BUFFER_SIZE;
89 EXPECT_FALSE(hlsMediaDownloader->GetPlayable());
90
91 hlsMediaDownloader->wantedReadLength_ = MAX_TEN;
92 EXPECT_FALSE(hlsMediaDownloader->GetPlayable());
93 }
94
95 HWTEST_F(HlsMediaDownloaderUnitTest, GetDownloadInfo1, TestSize.Level1)
96 {
97 hlsMediaDownloader->recordSpeedCount_ = 0;
98 DownloadInfo downloadInfo;
99 hlsMediaDownloader->GetDownloadInfo(downloadInfo);
100 hlsMediaDownloader->GetDownloadInfo();
101 EXPECT_EQ(downloadInfo.avgDownloadRate, 0);
102 }
103
104 HWTEST_F(HlsMediaDownloaderUnitTest, GetDownloadInfo2, TestSize.Level1)
105 {
106 hlsMediaDownloader->recordSpeedCount_ = 5;
107 hlsMediaDownloader->avgSpeedSum_ = 25;
108 DownloadInfo downloadInfo;
109 hlsMediaDownloader->GetDownloadInfo(downloadInfo);
110 hlsMediaDownloader->GetDownloadInfo();
111 EXPECT_EQ(downloadInfo.avgDownloadRate, 5);
112 }
113
114 HWTEST_F(HlsMediaDownloaderUnitTest, GetDownloadInfo3, TestSize.Level1)
115 {
116 hlsMediaDownloader->avgDownloadSpeed_ = 10;
117 DownloadInfo downloadInfo;
118 hlsMediaDownloader->GetDownloadInfo(downloadInfo);
119 EXPECT_EQ(downloadInfo.avgDownloadSpeed, 10);
120 }
121
122 HWTEST_F(HlsMediaDownloaderUnitTest, GetDownloadInfo4, TestSize.Level1)
123 {
124 hlsMediaDownloader->totalBits_ = 50;
125 DownloadInfo downloadInfo;
126 hlsMediaDownloader->GetDownloadInfo(downloadInfo);
127 EXPECT_EQ(downloadInfo.totalDownLoadBits, 50);
128 }
129
130 HWTEST_F(HlsMediaDownloaderUnitTest, GetDownloadInfo5, TestSize.Level1)
131 {
132 hlsMediaDownloader->isTimeOut_ = true;
133 DownloadInfo downloadInfo;
134 hlsMediaDownloader->GetDownloadInfo(downloadInfo);
135 EXPECT_EQ(downloadInfo.isTimeOut, true);
136 }
137
138 HWTEST_F(HlsMediaDownloaderUnitTest, GetBufferSize, TestSize.Level1)
139 {
140 size_t actualSize = hlsMediaDownloader->GetBufferSize();
141 EXPECT_EQ(actualSize, 0);
142 }
143
144 HWTEST_F(HlsMediaDownloaderUnitTest, GetTotalBufferSize, TestSize.Level1)
145 {
146 hlsMediaDownloader->totalBufferSize_ = 1024;
147 EXPECT_EQ(hlsMediaDownloader->GetTotalBufferSize(), 1024);
148 }
149
150 HWTEST_F(HlsMediaDownloaderUnitTest, TransferSizeToBitRate1, TestSize.Level1)
151 {
152 int width = MIN_WITDH;
153 uint64_t expectedBitRate = RING_BUFFER_SIZE;
154 uint64_t actualBitRate = hlsMediaDownloader->TransferSizeToBitRate(width);
155 EXPECT_EQ(expectedBitRate, actualBitRate);
156 }
157
158 HWTEST_F(HlsMediaDownloaderUnitTest, TransferSizeToBitRate2, TestSize.Level1)
159 {
160 int width = SECOND_WITDH - 1;
161 uint64_t expectedBitRate = RING_BUFFER_SIZE + RING_BUFFER_SIZE;
162 uint64_t actualBitRate = hlsMediaDownloader->TransferSizeToBitRate(width);
163 EXPECT_EQ(expectedBitRate, actualBitRate);
164 }
165
166 HWTEST_F(HlsMediaDownloaderUnitTest, TransferSizeToBitRate3, TestSize.Level1)
167 {
168 int width = THIRD_WITDH - 1;
169 uint64_t expectedBitRate = RING_BUFFER_SIZE + RING_BUFFER_SIZE + RING_BUFFER_SIZE;
170 uint64_t actualBitRate = hlsMediaDownloader->TransferSizeToBitRate(width);
171 EXPECT_EQ(expectedBitRate, actualBitRate);
172 }
173
174 HWTEST_F(HlsMediaDownloaderUnitTest, TransferSizeToBitRate4, TestSize.Level1)
175 {
176 int width = THIRD_WITDH + 1;
177 uint64_t expectedBitRate = RING_BUFFER_SIZE + RING_BUFFER_SIZE + RING_BUFFER_SIZE + RING_BUFFER_SIZE;
178 uint64_t actualBitRate = hlsMediaDownloader->TransferSizeToBitRate(width);
179 EXPECT_EQ(expectedBitRate, actualBitRate);
180 }
181
182 HWTEST_F(HlsMediaDownloaderUnitTest, InActiveAutoBufferSize, TestSize.Level1)
183 {
184 hlsMediaDownloader->InActiveAutoBufferSize();
185 EXPECT_FALSE(hlsMediaDownloader->autoBufferSize_);
186 }
187
188 HWTEST_F(HlsMediaDownloaderUnitTest, ActiveAutoBufferSize1, TestSize.Level1)
189 {
190 hlsMediaDownloader->ActiveAutoBufferSize();
191 EXPECT_TRUE(hlsMediaDownloader->autoBufferSize_);
192 }
193
194 HWTEST_F(HlsMediaDownloaderUnitTest, ActiveAutoBufferSize2, TestSize.Level1)
195 {
196 hlsMediaDownloader->userDefinedBufferDuration_ = true;
197 bool oldAutoBufferSize = hlsMediaDownloader->autoBufferSize_;
198 hlsMediaDownloader->ActiveAutoBufferSize();
199 EXPECT_EQ(oldAutoBufferSize, hlsMediaDownloader->autoBufferSize_);
200 }
201
202 HWTEST_F(HlsMediaDownloaderUnitTest, OnReadRingBuffer1, TestSize.Level1)
203 {
204 uint32_t len = 100;
205 hlsMediaDownloader->bufferedDuration_ = 50;
206 hlsMediaDownloader->OnReadBuffer(len);
207 EXPECT_EQ(hlsMediaDownloader->bufferedDuration_, 0);
208 }
209
210 HWTEST_F(HlsMediaDownloaderUnitTest, OnReadRingBuffer2, TestSize.Level1)
211 {
212 uint32_t len = 50;
213 hlsMediaDownloader->bufferedDuration_ = 100;
214 hlsMediaDownloader->OnReadBuffer(len);
215 EXPECT_LT(hlsMediaDownloader->bufferedDuration_, 100);
216 }
217
218 HWTEST_F(HlsMediaDownloaderUnitTest, OnReadRingBuffer3, TestSize.Level1)
219 {
220 uint32_t len = 50;
221 hlsMediaDownloader->bufferedDuration_ = 0;
222 hlsMediaDownloader->lastReadTime_ = 0;
223 hlsMediaDownloader->OnReadBuffer(len);
224 EXPECT_NE(hlsMediaDownloader->bufferLeastRecord_, nullptr);
225 }
226
227 HWTEST_F(HlsMediaDownloaderUnitTest, OnReadRingBuffer4, TestSize.Level1)
228 {
229 uint32_t len = 50;
230 hlsMediaDownloader->bufferedDuration_ = 0;
231 hlsMediaDownloader->lastReadTime_ = 0;
232 for (int i = 0; i < MAX_RECORD_COUNT + 1; i++) {
233 hlsMediaDownloader->OnReadBuffer(len);
234 }
235 EXPECT_NE(hlsMediaDownloader->bufferLeastRecord_->next, nullptr);
236 }
237
238 HWTEST_F(HlsMediaDownloaderUnitTest, DownBufferSize1, TestSize.Level1)
239 {
240 hlsMediaDownloader->totalBufferSize_ = 10 * 1024 * 1024;
241 hlsMediaDownloader->DownBufferSize();
242 EXPECT_EQ(hlsMediaDownloader->totalBufferSize_, 9 * 1024 * 1024);
243 }
244
245 HWTEST_F(HlsMediaDownloaderUnitTest, DownBufferSize2, TestSize.Level1)
246 {
247 hlsMediaDownloader->totalBufferSize_ = RING_BUFFER_SIZE;
248 hlsMediaDownloader->DownBufferSize();
249 EXPECT_EQ(hlsMediaDownloader->totalBufferSize_, RING_BUFFER_SIZE);
250 }
251
252 HWTEST_F(HlsMediaDownloaderUnitTest, RiseBufferSize1, TestSize.Level1)
253 {
254 hlsMediaDownloader->totalBufferSize_ = 0;
255 hlsMediaDownloader->RiseBufferSize();
256 EXPECT_EQ(hlsMediaDownloader->totalBufferSize_, 1 * 1024 * 1024);
257 }
258
259 HWTEST_F(HlsMediaDownloaderUnitTest, RiseBufferSize2, TestSize.Level1)
260 {
261 hlsMediaDownloader->totalBufferSize_ = MAX_CACHE_BUFFER_SIZE;
262 hlsMediaDownloader->RiseBufferSize();
263 EXPECT_EQ(hlsMediaDownloader->totalBufferSize_, MAX_CACHE_BUFFER_SIZE);
264 }
265
266 HWTEST_F(HlsMediaDownloaderUnitTest, CheckPulldownBufferSize, TestSize.Level1)
267 {
268 hlsMediaDownloader->recordData_ = nullptr;
269 bool result = hlsMediaDownloader->CheckPulldownBufferSize();
270 EXPECT_FALSE(result);
271 }
272
273 HWTEST_F(HlsMediaDownloaderUnitTest, CheckRiseBufferSize, TestSize.Level1)
274 {
275 hlsMediaDownloader->recordData_ = nullptr;
276 bool result = hlsMediaDownloader->CheckRiseBufferSize();
277 EXPECT_FALSE(result);
278 }
279
280 HWTEST_F(HlsMediaDownloaderUnitTest, SetDownloadErrorState, TestSize.Level1)
281 {
282 hlsMediaDownloader->SetDownloadErrorState();
283 EXPECT_TRUE(hlsMediaDownloader->downloadErrorState_);
284 }
285
286 HWTEST_F(HlsMediaDownloaderUnitTest, SetDemuxerState, TestSize.Level1)
287 {
288 hlsMediaDownloader->SetDemuxerState(0);
289 EXPECT_TRUE(hlsMediaDownloader->isReadFrame_);
290 EXPECT_TRUE(hlsMediaDownloader->isFirstFrameArrived_);
291 }
292
293 HWTEST_F(HlsMediaDownloaderUnitTest, CheckBreakCondition, TestSize.Level1)
294 {
295 hlsMediaDownloader->downloadErrorState_ = true;
296 EXPECT_TRUE(hlsMediaDownloader->CheckBreakCondition());
297 }
298
299 HWTEST_F(HlsMediaDownloaderUnitTest, HandleBuffering, TestSize.Level1)
300 {
301 hlsMediaDownloader->isBuffering_ = false;
302 EXPECT_FALSE(hlsMediaDownloader->HandleBuffering());
303 }
304
305 HWTEST_F(HlsMediaDownloaderUnitTest, TestDefaultConstructor, TestSize.Level1)
306 {
307 hlsMediaDownloader->totalBufferSize_ = MAX_CACHE_BUFFER_SIZE;
308 EXPECT_EQ(hlsMediaDownloader->totalBufferSize_, MAX_CACHE_BUFFER_SIZE);
309 }
310
311 HWTEST_F(HlsMediaDownloaderUnitTest, SAVE_HEADER_001, TestSize.Level1)
312 {
313 hlsMediaDownloader->SaveHttpHeader(httpHeader);
314 EXPECT_EQ(hlsMediaDownloader->httpHeader_["User-Agent"], "ABC");
315 EXPECT_EQ(hlsMediaDownloader->httpHeader_["Referer"], "DEF");
316 }
317
318 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_OPEN_001, TestSize.Level1)
319 {
320 HlsMediaDownloader *downloader = new HlsMediaDownloader(1000, header_, nullptr);
321 EXPECT_EQ(downloader->expectDuration_, static_cast<uint64_t>(1000));
322 delete downloader;
323 downloader = nullptr;
324 }
325
326 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_OPEN_002, TestSize.Level1)
327 {
328 HlsMediaDownloader *downloader = new HlsMediaDownloader(10, header_, nullptr);
329 EXPECT_EQ(downloader->expectDuration_, static_cast<uint64_t>(10));
330 delete downloader;
331 downloader = nullptr;
332 }
333
334 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_PAUSE, TestSize.Level1)
335 {
336 HlsMediaDownloader *downloader = new HlsMediaDownloader(10, header_, nullptr);
337 std::string testUrl = TEST_URI_PATH + "test_hls/testHLSEncode.m3u8";
338 downloader->Open(testUrl, httpHeader);
339 EXPECT_TRUE(downloader);
340 downloader->isInterrupt_ = false;
341 downloader->Pause();
342 downloader->Resume();
343 downloader->Pause();
344 delete downloader;
345 downloader = nullptr;
346 }
347
348 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_SEEK_TO_TIME, TestSize.Level1)
349 {
350 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
351 header_, nullptr);
352 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
353 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1220102(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 354 std::shared_ptr<DownloadRequest>& request) {
355 };
356 downloader->SetStatusCallback(statusCallback);
357 downloader->Open(testUrl, httpHeader);
358 downloader->GetSeekable();
359 bool result = downloader->SeekToTime(1, SeekMode::SEEK_NEXT_SYNC);
360 downloader->Close(true);
361 downloader = nullptr;
362 EXPECT_TRUE(result);
363 }
364
365 HWTEST_F(HlsMediaDownloaderUnitTest, HandleFfmpegReadback_001, TestSize.Level1)
366 {
367 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, header_, nullptr);
368 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
369 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1220202(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 370 std::shared_ptr<DownloadRequest>& request) {
371 };
372 downloader->SetStatusCallback(statusCallback);
373 downloader->Open(testUrl, httpHeader);
374 downloader->GetSeekable();
375 unsigned char buff[10];
376 ReadDataInfo readDataInfo;
377 readDataInfo.streamId_ = 0;
378 readDataInfo.wantReadLength_ = 10;
379 readDataInfo.isEos_ = true;
380
381 downloader->readTsIndex_ = 0;
382 downloader->HandleFfmpegReadback(1000);
383 downloader->Read(buff, readDataInfo);
384
385 downloader->readTsIndex_ = 0;
386 downloader->ffmpegOffset_ = 10000;
387 downloader->HandleFfmpegReadback(1000);
388
389 downloader->readTsIndex_ = 1;
390 downloader->ffmpegOffset_ = 10000;
391 downloader->HandleFfmpegReadback(1000);
392
393 downloader->readTsIndex_ = 10000;
394 downloader->ffmpegOffset_ = 10000;
395 downloader->HandleFfmpegReadback(1000);
396
397 downloader->Close(true);
398 downloader = nullptr;
399 EXPECT_GE(readDataInfo.realReadLength_, 0);
400 }
401
402 HWTEST_F(HlsMediaDownloaderUnitTest, CheckPlaylist_001, TestSize.Level1)
403 {
404 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, header_, nullptr);
405 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
406 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1220302(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 407 std::shared_ptr<DownloadRequest>& request) {
408 };
409 downloader->SetStatusCallback(statusCallback);
410 downloader->Open(testUrl, httpHeader);
411 downloader->GetSeekable();
412 unsigned char buff[10];
413 ReadDataInfo readDataInfo;
414 readDataInfo.streamId_ = 0;
415 readDataInfo.wantReadLength_ = 10;
416 readDataInfo.isEos_ = true;
417
418 downloader->isStopped = true;
419 downloader->CheckPlaylist(buff, readDataInfo);
420 downloader->Read(buff, readDataInfo);
421
422 OSAL::SleepFor(1 * 1000);
423 downloader->isStopped = true;
424 downloader->CheckPlaylist(buff, readDataInfo);
425 downloader->Close(true);
426 downloader = nullptr;
427 EXPECT_GE(readDataInfo.realReadLength_, 0);
428 }
429
430 HWTEST_F(HlsMediaDownloaderUnitTest, SeekToTsForRead_001, TestSize.Level1)
431 {
432 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, header_, nullptr);
433 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
434 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1220402(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 435 std::shared_ptr<DownloadRequest>& request) {
436 };
437 downloader->SetStatusCallback(statusCallback);
438 downloader->Open(testUrl, httpHeader);
439 downloader->GetSeekable();
440 unsigned char buff[10];
441 ReadDataInfo readDataInfo;
442 readDataInfo.streamId_ = 0;
443 readDataInfo.wantReadLength_ = 10;
444 readDataInfo.isEos_ = true;
445 downloader->Read(buff, readDataInfo);
446
447 OSAL::SleepFor(1 * 1000);
448 downloader->SeekToTsForRead(100);
449 downloader->SeekToTsForRead(0);
450 downloader->SetIsTriggerAutoMode(false);
451
452 downloader->Close(true);
453 downloader = nullptr;
454 EXPECT_GE(readDataInfo.realReadLength_, 0);
455 }
456
457 HWTEST_F(HlsMediaDownloaderUnitTest, ReportVideoSizeChange_001, TestSize.Level1)
458 {
459 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, header_, nullptr);
460 downloader->ReportVideoSizeChange();
461 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
462 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1220502(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 463 std::shared_ptr<DownloadRequest>& request) {
464 };
465 downloader->SetStatusCallback(statusCallback);
466 Plugins::Callback* sourceCallback = new SourceCallback();
467 downloader->SetCallback(sourceCallback);
468 downloader->ReportVideoSizeChange();
469 downloader->Open(testUrl, httpHeader);
470 downloader->GetSeekable();
471 unsigned char buff[10];
472 ReadDataInfo readDataInfo;
473 readDataInfo.streamId_ = 0;
474 readDataInfo.wantReadLength_ = 10;
475 readDataInfo.isEos_ = true;
476 downloader->Read(buff, readDataInfo);
477
478 OSAL::SleepFor(1 * 1000);
479 downloader->ReportVideoSizeChange();
480 downloader->Close(true);
481 downloader = nullptr;
482 delete sourceCallback;
483 EXPECT_GE(readDataInfo.realReadLength_, 0);
484 }
485
486 HWTEST_F(HlsMediaDownloaderUnitTest, DownloadRecordHistory_001, TestSize.Level1)
487 {
488 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, header_, nullptr);
489 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
490 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1220602(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 491 std::shared_ptr<DownloadRequest>& request) {
492 };
493 downloader->SetStatusCallback(statusCallback);
494 downloader->Open(testUrl, httpHeader);
495 downloader->GetSeekable();
496 unsigned char buff[10];
497 ReadDataInfo readDataInfo;
498 readDataInfo.streamId_ = 0;
499 readDataInfo.wantReadLength_ = 10;
500 readDataInfo.isEos_ = true;
501 downloader->Read(buff, readDataInfo);
502
503 OSAL::SleepFor(1 * 1000);
504 downloader->DownloadRecordHistory(2000);
505 downloader->Close(true);
506 downloader = nullptr;
507 EXPECT_GE(readDataInfo.realReadLength_, 0);
508 }
509
510 HWTEST_F(HlsMediaDownloaderUnitTest, CheckRiseBufferSize_001, TestSize.Level1)
511 {
512 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, header_, nullptr);
513 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
514 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1220702(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 515 std::shared_ptr<DownloadRequest>& request) {
516 };
517 downloader->SetStatusCallback(statusCallback);
518 downloader->Open(testUrl, httpHeader);
519 downloader->GetSeekable();
520 unsigned char buff[10];
521 ReadDataInfo readDataInfo;
522 readDataInfo.streamId_ = 0;
523 readDataInfo.wantReadLength_ = 10;
524 readDataInfo.isEos_ = true;
525 downloader->Read(buff, readDataInfo);
526
527 OSAL::SleepFor(1 * 1000);
528 std::shared_ptr<HlsMediaDownloader::RecordData> recordBuff =
529 std::make_shared<HlsMediaDownloader::RecordData>();
530 recordBuff->bufferDuring = 10;
531 downloader->recordData_ = recordBuff;
532 downloader->CheckRiseBufferSize();
533 downloader->CheckPulldownBufferSize();
534
535 downloader->Close(true);
536 downloader = nullptr;
537 EXPECT_GE(readDataInfo.realReadLength_, 0);
538 }
539
540 HWTEST_F(HlsMediaDownloaderUnitTest, GetDownloadRateAndSpeed, TestSize.Level1)
541 {
542 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, header_, nullptr);
543 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
544 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1220802(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 545 std::shared_ptr<DownloadRequest>& request) {
546 };
547 downloader->SetStatusCallback(statusCallback);
548 downloader->Open(testUrl, httpHeader);
549 downloader->GetSeekable();
550 unsigned char buff[10];
551 ReadDataInfo readDataInfo;
552 readDataInfo.streamId_ = 0;
553 readDataInfo.wantReadLength_ = 10;
554 readDataInfo.isEos_ = true;
555 downloader->Read(buff, readDataInfo);
556
557 downloader->recordSpeedCount_ = 0;
558 downloader->GetDownloadRateAndSpeed();
559 downloader->recordSpeedCount_ = 1;
560 downloader->GetDownloadRateAndSpeed();
561 downloader->Close(true);
562 downloader = nullptr;
563 EXPECT_GE(readDataInfo.realReadLength_, 0);
564 }
565
566 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_READ_001, TestSize.Level1)
567 {
568 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, header_, nullptr);
569 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
570 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1220902(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 571 std::shared_ptr<DownloadRequest>& request) {
572 };
573 downloader->SetStatusCallback(statusCallback);
574 downloader->Open(testUrl, httpHeader);
575 downloader->GetSeekable();
576 unsigned char buff[10];
577 ReadDataInfo readDataInfo;
578 readDataInfo.streamId_ = 0;
579 readDataInfo.wantReadLength_ = 10;
580 readDataInfo.isEos_ = true;
581 downloader->Read(buff, readDataInfo);
582
583 OSAL::SleepFor(1 * 1000);
584 downloader->Close(true);
585 downloader = nullptr;
586 EXPECT_GE(readDataInfo.realReadLength_, 0);
587 }
588
589 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_CALLBACK, TestSize.Level1)
590 {
591 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, header_, nullptr);
592 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
593 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1220a02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 594 std::shared_ptr<DownloadRequest>& request) {
595 };
596 downloader->SetStatusCallback(statusCallback);
597 Plugins::Callback* sourceCallback = new SourceCallback();
598 downloader->SetCallback(sourceCallback);
599 downloader->Open(testUrl, httpHeader);
600 downloader->GetSeekable();
601 unsigned char buff[10];
602 ReadDataInfo readDataInfo;
603 readDataInfo.streamId_ = 0;
604 readDataInfo.wantReadLength_ = 10;
605 readDataInfo.isEos_ = true;
606 downloader->Read(buff, readDataInfo);
607 EXPECT_GE(readDataInfo.realReadLength_, 0);
608 OSAL::SleepFor(1 * 1000);
609
610 downloader->SetCurrentBitRate(-1, 0);
611 downloader->UpdateWaterLineAbove();
612 downloader->SetCurrentBitRate(10, 0);
613 downloader->UpdateWaterLineAbove();
614 downloader->HandleCachedDuration();
615 downloader->SetInterruptState(true);
616 downloader->SetInterruptState(false);
617 downloader->GetContentLength();
618 downloader->GetDuration();
619 downloader->GetBitRates();
620 downloader->SetReadBlockingFlag(true);
621 downloader->SetReadBlockingFlag(false);
622 downloader->ReportBitrateStart(100);
623 downloader->CalculateBitRate(0, 0);
624 downloader->CalculateBitRate(1, 0);
625 std::multimap<std::string, std::vector<uint8_t>> drmInfos;
626 downloader->OnDrmInfoChanged(drmInfos);
627 downloader->Close(true);
628 downloader = nullptr;
629 }
630
631 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_CALLBACK1, TestSize.Level1)
632 {
633 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, header_, nullptr);
634 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
635 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1220b02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 636 std::shared_ptr<DownloadRequest>& request) {
637 };
638 downloader->SetStatusCallback(statusCallback);
639 Plugins::Callback* sourceCallback = new SourceCallback();
640 downloader->SetCallback(sourceCallback);
641 downloader->Open(testUrl, httpHeader);
642 downloader->GetSeekable();
643 unsigned char buff[10];
644 ReadDataInfo readDataInfo;
645 readDataInfo.streamId_ = 0;
646 readDataInfo.wantReadLength_ = 10;
647 readDataInfo.isEos_ = true;
648 downloader->Read(buff, readDataInfo);
649 OSAL::SleepFor(1 * 1000);
650 downloader->HandleCache();
651 downloader->Close(true);
652 downloader = nullptr;
653 EXPECT_GE(readDataInfo.realReadLength_, 0);
654 }
655
656 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_DownloadReport, TestSize.Level1)
657 {
658 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, header_, nullptr);
659 std::string testUrl = TEST_URI_PATH + "test_cbr/1080_3M/video_1080.m3u8";
660 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1220c02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 661 std::shared_ptr<DownloadRequest>& request) {
662 };
663 downloader->SetStatusCallback(statusCallback);
664 Plugins::Callback* sourceCallback = new SourceCallback();
665 downloader->SetCallback(sourceCallback);
666 downloader->Open(testUrl, httpHeader);
667 ReadDataInfo readDataInfo;
668 for (int i = 0; i < 80; i++) {
669 OSAL::SleepFor(100);
670 downloader->DownloadReport();
671
672 unsigned char buff[100 * 1024];
673 readDataInfo.streamId_ = 0;
674 readDataInfo.wantReadLength_ = 100 * 1024;
675 readDataInfo.isEos_ = false;
676 downloader->Read(buff, readDataInfo);
677 }
678 downloader->CheckBufferingOneSeconds();
679 downloader->Close(true);
680 downloader = nullptr;
681 EXPECT_GE(readDataInfo.realReadLength_, 0);
682 }
683
684 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_DownloadReport_5M, TestSize.Level1)
685 {
686 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, header_, nullptr);
687 std::string testUrl = TEST_URI_PATH + "test_cbr/1080_3M/video_1080.m3u8";
688 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1220d02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 689 std::shared_ptr<DownloadRequest>& request) {
690 };
691 downloader->SetStatusCallback(statusCallback);
692 Plugins::Callback* sourceCallback = new SourceCallback();
693 downloader->SetCallback(sourceCallback);
694 downloader->Open(testUrl, httpHeader);
695 OSAL::SleepFor(6 * 1000);
696 downloader->DownloadReport();
697 downloader->GetSeekable();
698 unsigned char buff[5 * 1024 * 1024];
699 ReadDataInfo readDataInfo;
700 readDataInfo.streamId_ = 0;
701 readDataInfo.wantReadLength_ = 5 * 1024 * 1024;
702 readDataInfo.isEos_ = true;
703 downloader->Read(buff, readDataInfo);
704 OSAL::SleepFor(1 * 1000);
705 downloader->HandleCache();
706 downloader->CheckBufferingOneSeconds();
707 downloader->Close(true);
708 downloader = nullptr;
709 EXPECT_GE(readDataInfo.realReadLength_, 0);
710 }
711
712 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_DownloadReport_5M_default, TestSize.Level1)
713 {
714 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
715 header_, nullptr);
716 std::string testUrl = TEST_URI_PATH + "test_cbr/1080_3M/video_1080.m3u8";
717 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1220e02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 718 std::shared_ptr<DownloadRequest>& request) {
719 };
720 downloader->SetStatusCallback(statusCallback);
721 Plugins::Callback* sourceCallback = new SourceCallback();
722 downloader->SetCallback(sourceCallback);
723 downloader->Open(testUrl, httpHeader);
724 downloader->GetSeekable();
725 ReadDataInfo readDataInfo;
726 for (int i = 0; i < 80; i++) {
727 OSAL::SleepFor(10);
728 downloader->DownloadReport();
729
730 unsigned char buff[10 * 1024];
731 readDataInfo.streamId_ = 0;
732 readDataInfo.wantReadLength_ = 10 * 1024;
733 readDataInfo.isEos_ = false;
734 downloader->Read(buff, readDataInfo);
735 if (i == 3) {
736 downloader->SetDemuxerState(0);
737 }
738 }
739 downloader->CheckBufferingOneSeconds();
740 downloader->Close(true);
741 downloader = nullptr;
742 EXPECT_GE(readDataInfo.realReadLength_, 0);
743 }
744
745 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_read_all, TestSize.Level1)
746 {
747 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
748 header_, nullptr);
749 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
750 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1220f02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 751 std::shared_ptr<DownloadRequest>& request) {
752 };
753 downloader->SetStatusCallback(statusCallback);
754 Plugins::Callback* sourceCallback = new SourceCallback();
755 downloader->SetCallback(sourceCallback);
756 downloader->Open(testUrl, httpHeader);
757 downloader->GetSeekable();
758 ReadDataInfo readDataInfo;
759 for (int i = 0; i < 80; i++) {
760 OSAL::SleepFor(10);
761 unsigned char buff[10 * 1024];
762 readDataInfo.streamId_ = 0;
763 readDataInfo.wantReadLength_ = 10 * 1024;
764 readDataInfo.isEos_ = false;
765 downloader->Read(buff, readDataInfo);
766 }
767 downloader->Close(true);
768 downloader = nullptr;
769 EXPECT_GE(readDataInfo.realReadLength_, 0);
770 }
771
772 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_Read_Live, TestSize.Level1)
773 {
774 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, header_, nullptr);
775 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720_live.m3u8";
776 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1221002(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 777 std::shared_ptr<DownloadRequest>& request) {
778 };
779 downloader->SetStatusCallback(statusCallback);
780 Plugins::Callback* sourceCallback = new SourceCallback();
781 downloader->SetCallback(sourceCallback);
782 downloader->Open(testUrl, httpHeader);
783 downloader->GetSeekable();
784 unsigned char buff[5 * 1024 * 1024];
785 ReadDataInfo readDataInfo;
786 readDataInfo.streamId_ = 0;
787 readDataInfo.wantReadLength_ = 5 * 1024 * 1024;
788 readDataInfo.isEos_ = true;
789 downloader->Read(buff, readDataInfo);
790 OSAL::SleepFor(1 * 1000);
791 downloader->HandleCache();
792 downloader->CheckBufferingOneSeconds();
793 downloader->Close(true);
794 downloader = nullptr;
795 EXPECT_GE(readDataInfo.realReadLength_, 0);
796 }
797
798 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_READ_Encrypted, TestSize.Level1)
799 {
800 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, header_, nullptr);
801 std::string testUrl = TEST_URI_PATH + "test_hls/testHLSEncode.m3u8";
802 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1221102(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 803 std::shared_ptr<DownloadRequest>& request) {
804 };
805 downloader->SetStatusCallback(statusCallback);
806 downloader->Open(testUrl, httpHeader);
807 downloader->GetSeekable();
808 downloader->GetStartedStatus();
809 unsigned char buff[10];
810 ReadDataInfo readDataInfo;
811 readDataInfo.streamId_ = 0;
812 readDataInfo.wantReadLength_ = 10;
813 readDataInfo.isEos_ = true;
814 downloader->Read(buff, readDataInfo);
815
816 OSAL::SleepFor(2 * 1000);
817 downloader->Close(true);
818 downloader = nullptr;
819 EXPECT_GE(readDataInfo.realReadLength_, 0);
820 }
821
822 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_READ_Encrypted_session_key, TestSize.Level1)
823 {
824 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, header_, nullptr);
825 std::string testUrl = TEST_URI_PATH + "test_hls/testHLSEncode_session_key.m3u8";
826 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1221202(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 827 std::shared_ptr<DownloadRequest>& request) {
828 };
829 downloader->SetStatusCallback(statusCallback);
830 downloader->Open(testUrl, httpHeader);
831 downloader->GetSeekable();
832 downloader->GetStartedStatus();
833 unsigned char buff[10];
834 ReadDataInfo readDataInfo;
835 readDataInfo.streamId_ = 0;
836 readDataInfo.wantReadLength_ = 10;
837 readDataInfo.isEos_ = true;
838 downloader->Read(buff, readDataInfo);
839
840 OSAL::SleepFor(2 * 1000);
841 downloader->Close(true);
842 downloader = nullptr;
843 EXPECT_GE(readDataInfo.realReadLength_, 0);
844 }
845
846 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_OPEN_URL, TestSize.Level1)
847 {
848 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>("application/m3u8");
849 std::string testUrl = "fd://1?offset=0&size=1024";
850 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1221302(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 851 std::shared_ptr<DownloadRequest>& request) {
852 };
853 downloader->SetStatusCallback(statusCallback);
854 downloader->Open(testUrl, httpHeader);
855 EXPECT_TRUE(downloader);
856 downloader->Close(true);
857 testUrl = "fd://-1?offset=0&size=1024";
858 downloader->Open(testUrl, httpHeader);
859 downloader->Close(true);
860 testUrl = "fd://1?offset=2048&size=1024";
861 downloader->Open(testUrl, httpHeader);
862 downloader->Close(true);
863 testUrl = "fd://1?offset=512&size=1024";
864 downloader->Open(testUrl, httpHeader);
865 downloader->Close(true);
866 downloader = nullptr;
867 }
868
GetFileSize(const string & fileName)869 int64_t GetFileSize(const string &fileName)
870 {
871 int64_t fileSize = 0;
872 if (!fileName.empty()) {
873 struct stat fileStatus {};
874 if (stat(fileName.c_str(), &fileStatus) == 0) {
875 fileSize = static_cast<int64_t>(fileStatus.st_size);
876 }
877 }
878 return fileSize;
879 }
880
881 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_READ_null, TestSize.Level1)
882 {
883 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>("application/m3u8");
884 std::string path = "/data/test/media/test_cbr/720_1M/video_720_native.m3u8";
885 int32_t fd = open(path.c_str(), O_RDONLY);
886 int64_t size = GetFileSize(path);
887 std::string testUrl = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(size);
888 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1221402(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 889 std::shared_ptr<DownloadRequest>& request) {
890 };
891 downloader->SetStatusCallback(statusCallback);
892 downloader->Open(testUrl, httpHeader);
893 downloader->GetSeekable();
894 downloader->GetStartedStatus();
895 unsigned char buff[10];
896 ReadDataInfo readDataInfo;
897 readDataInfo.streamId_ = 0;
898 readDataInfo.wantReadLength_ = 10;
899 readDataInfo.isEos_ = true;
900 downloader->Read(buff, readDataInfo);
901
902 OSAL::SleepFor(4 * 1000);
903 downloader->Close(true);
904 downloader = nullptr;
905 EXPECT_GE(readDataInfo.realReadLength_, 0);
906 }
907
908 HWTEST_F(HlsMediaDownloaderUnitTest, GetSegmentOffset, TestSize.Level1)
909 {
910 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>("test");
911 downloader->GetSegmentOffset();
912 downloader->GetHLSDiscontinuity();
913 downloader->WaitForBufferingEnd();
914 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720_5K.m3u8";
915 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1221502(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 916 std::shared_ptr<DownloadRequest>& request) {
917 };
918 downloader->SetStatusCallback(statusCallback);
919 downloader->Open(testUrl, httpHeader);
920 downloader->GetSeekable();
921 downloader->GetStartedStatus();
922 unsigned char buff[BUFFER_SIZE];
923 ReadDataInfo readDataInfo;
924 readDataInfo.streamId_ = 0;
925 readDataInfo.wantReadLength_ = BUFFER_SIZE;
926 readDataInfo.isEos_ = true;
927 downloader->Read(buff, readDataInfo);
928 downloader->GetSegmentOffset();
929 downloader->GetHLSDiscontinuity();
930 downloader->WaitForBufferingEnd();
931 downloader->Close(true);
932 downloader = nullptr;
933 EXPECT_GE(readDataInfo.realReadLength_, 0);
934 }
935
936 HWTEST_F(HlsMediaDownloaderUnitTest, StopBufferring, TestSize.Level1)
937 {
938 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>("test");
939 downloader->StopBufferring(true);
940 downloader->StopBufferring(false);
941 downloader->StopBufferring(true);
942 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720_5K.m3u8";
943 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1221602(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 944 std::shared_ptr<DownloadRequest>& request) {
945 };
946 downloader->SetStatusCallback(statusCallback);
947 downloader->Open(testUrl, httpHeader);
948 downloader->GetSeekable();
949 downloader->GetStartedStatus();
950 unsigned char buff[BUFFER_SIZE];
951 ReadDataInfo readDataInfo;
952 readDataInfo.streamId_ = 0;
953 readDataInfo.wantReadLength_ = BUFFER_SIZE;
954 readDataInfo.isEos_ = true;
955 downloader->Read(buff, readDataInfo);
956 downloader->StopBufferring(true);
957 downloader->StopBufferring(false);
958 downloader->StopBufferring(true);
959 downloader->StopBufferring(false);
960 downloader->Close(true);
961 downloader = nullptr;
962 EXPECT_GE(readDataInfo.realReadLength_, 0);
963 }
964
965 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_READ_MAX_M3U8, TestSize.Level1)
966 {
967 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, header_, nullptr);
968 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720_5K.m3u8";
969 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1221702(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 970 std::shared_ptr<DownloadRequest>& request) {
971 };
972 downloader->SetStatusCallback(statusCallback);
973 downloader->Open(testUrl, httpHeader);
974 downloader->GetSeekable();
975 downloader->GetStartedStatus();
976 unsigned char buff[10];
977 ReadDataInfo readDataInfo;
978 readDataInfo.streamId_ = 0;
979 readDataInfo.wantReadLength_ = 10;
980 readDataInfo.isEos_ = true;
981 downloader->Read(buff, readDataInfo);
982
983 OSAL::SleepFor(4 * 1000);
984 downloader->Close(true);
985 downloader = nullptr;
986 EXPECT_GE(readDataInfo.realReadLength_, 0);
987 }
988
989 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_READ_SelectBR, TestSize.Level1)
990 {
991 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>("test");
992 std::string testUrl = TEST_URI_PATH + "test_cbr/test_cbr.m3u8";
993 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1221802(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 994 std::shared_ptr<DownloadRequest>& request) {
995 };
996 downloader->SetStatusCallback(statusCallback);
997 downloader->Open(testUrl, httpHeader);
998 downloader->GetSeekable();
999 unsigned char buff[10];
1000 ReadDataInfo readDataInfo;
1001 readDataInfo.streamId_ = 0;
1002 readDataInfo.wantReadLength_ = 10;
1003 readDataInfo.isEos_ = true;
1004 downloader->Read(buff, readDataInfo);
1005 downloader->AutoSelectBitrate(1000000);
1006
1007 OSAL::SleepFor(4 * 1000);
1008 downloader->Close(true);
1009 downloader = nullptr;
1010 EXPECT_GE(readDataInfo.realReadLength_, 0);
1011 }
1012
1013 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_WRITE_RINGBUFFER_001, TestSize.Level1)
1014 {
1015 HlsMediaDownloader *downloader = new HlsMediaDownloader(MAX_CACHE_BUFFER_SIZE, header_, nullptr);
1016 downloader->OnWriteCacheBuffer(0);
1017 downloader->OnWriteCacheBuffer(0);
1018 EXPECT_EQ(downloader->bufferedDuration_, 0);
1019 EXPECT_EQ(downloader->totalBits_, 0);
1020 EXPECT_EQ(downloader->lastWriteBit_, 0);
1021
1022 downloader->OnWriteCacheBuffer(1);
1023 downloader->OnWriteCacheBuffer(1);
1024 EXPECT_EQ(downloader->bufferedDuration_, 16);
1025 EXPECT_EQ(downloader->totalBits_, 16);
1026 EXPECT_EQ(downloader->lastWriteBit_, 16);
1027
1028 downloader->OnWriteCacheBuffer(1000);
1029 downloader->OnWriteCacheBuffer(1000);
1030 EXPECT_EQ(downloader->bufferedDuration_, 16016);
1031 EXPECT_EQ(downloader->totalBits_, 16016);
1032 EXPECT_EQ(downloader->lastWriteBit_, 16016);
1033 delete downloader;
1034 downloader = nullptr;
1035 }
1036
1037 HWTEST_F(HlsMediaDownloaderUnitTest, RISE_BUFFER_001, TestSize.Level1)
1038 {
1039 HlsMediaDownloader *downloader = new HlsMediaDownloader(MAX_CACHE_BUFFER_SIZE, header_, nullptr);
1040 downloader->totalBufferSize_ = MAX_CACHE_BUFFER_SIZE;
1041 downloader->RiseBufferSize();
1042 EXPECT_EQ(downloader->totalBufferSize_, MAX_CACHE_BUFFER_SIZE);
1043 delete downloader;
1044 downloader = nullptr;
1045 }
1046
1047 HWTEST_F(HlsMediaDownloaderUnitTest, RISE_BUFFER_002, TestSize.Level1)
1048 {
1049 HlsMediaDownloader *downloader = new HlsMediaDownloader(MAX_CACHE_BUFFER_SIZE, header_, nullptr);
1050 downloader->totalBufferSize_ = RING_BUFFER_SIZE;
1051 downloader->RiseBufferSize();
1052 EXPECT_EQ(downloader->totalBufferSize_, 6 * 1024 * 1024);
1053 delete downloader;
1054 downloader = nullptr;
1055 }
1056
1057 HWTEST_F(HlsMediaDownloaderUnitTest, DOWN_BUFFER_001, TestSize.Level1)
1058 {
1059 HlsMediaDownloader *downloader = new HlsMediaDownloader(MAX_CACHE_BUFFER_SIZE, header_, nullptr);
1060 downloader->totalBufferSize_ = 10 * 1024 * 1024;
1061 downloader->DownBufferSize();
1062 EXPECT_EQ(downloader->totalBufferSize_, 9 * 1024 * 1024);
1063 delete downloader;
1064 downloader = nullptr;
1065 }
1066
1067 HWTEST_F(HlsMediaDownloaderUnitTest, DOWN_BUFFER_002, TestSize.Level1)
1068 {
1069 HlsMediaDownloader *downloader = new HlsMediaDownloader(MAX_CACHE_BUFFER_SIZE, header_, nullptr);
1070 downloader->totalBufferSize_ = RING_BUFFER_SIZE;
1071 downloader->DownBufferSize();
1072 EXPECT_EQ(downloader->totalBufferSize_, RING_BUFFER_SIZE);
1073 delete downloader;
1074 downloader = nullptr;
1075 }
1076
1077 HWTEST_F(HlsMediaDownloaderUnitTest, GET_PLAYBACK_INFO_001, TestSize.Level1)
1078 {
1079 HlsMediaDownloader *downloader = new HlsMediaDownloader(10, header_, nullptr);
1080 std::string testUrl = TEST_URI_PATH + "test_hls/testHLSEncode.m3u8";
1081 downloader->Open(testUrl, httpHeader);
1082 PlaybackInfo playbackInfo;
1083 downloader->GetPlaybackInfo(playbackInfo);
1084 EXPECT_EQ(playbackInfo.serverIpAddress, "");
1085 EXPECT_EQ(playbackInfo.averageDownloadRate, 0);
1086 EXPECT_EQ(playbackInfo.isDownloading, true);
1087 EXPECT_EQ(playbackInfo.downloadRate, 0);
1088 EXPECT_EQ(playbackInfo.bufferDuration, 0);
1089 delete downloader;
1090 downloader = nullptr;
1091 }
1092
1093 HWTEST_F(HlsMediaDownloaderUnitTest, GET_PLAYBACK_INFO_002, TestSize.Level1)
1094 {
1095 HlsMediaDownloader *downloader = new HlsMediaDownloader(10, header_, nullptr);
1096 std::string testUrl = TEST_URI_PATH + "test_hls/testHLSEncode.m3u8";
1097 downloader->Open(testUrl, httpHeader);
1098 downloader->totalDownloadDuringTime_ = 1000;
1099 downloader->totalBits_ = 1000;
1100 downloader->isDownloadFinish_ = true;
1101 std::shared_ptr<HlsMediaDownloader::RecordData> recordBuff = std::make_shared<HlsMediaDownloader::RecordData>();
1102 recordBuff->downloadRate = 1000;
1103 recordBuff->bufferDuring = 1;
1104 downloader->recordData_ = recordBuff;
1105
1106 PlaybackInfo playbackInfo;
1107 downloader->GetPlaybackInfo(playbackInfo);
1108 EXPECT_EQ(playbackInfo.serverIpAddress, "");
1109 EXPECT_EQ(playbackInfo.averageDownloadRate, 1000);
1110 EXPECT_EQ(playbackInfo.isDownloading, false);
1111 EXPECT_EQ(playbackInfo.downloadRate, 1000);
1112 EXPECT_EQ(playbackInfo.bufferDuration, 0);
1113 delete downloader;
1114 downloader = nullptr;
1115 }
1116
1117 HWTEST_F(HlsMediaDownloaderUnitTest, SET_INITIAL_BUFFERSIZE_001, TestSize.Level1)
1118 {
1119 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, header_, nullptr);
1120 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1221902(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1121 std::shared_ptr<DownloadRequest>& request) {};
1122 downloader->SetStatusCallback(statusCallback);
1123 Plugins::Callback* sourceCallback = new SourceCallback();
1124 downloader->callback_ = sourceCallback;
1125 std::string testUrl = TEST_URI_PATH + "test_hls/testHLSEncode.m3u8";
1126 PlayInfo playInfo;
1127 playInfo.url_ = testUrl;
1128 downloader->PutRequestIntoDownloader(playInfo);
1129 EXPECT_EQ(downloader->SetInitialBufferSize(0, 0), false);
1130 downloader->isBuffering_ = false;
1131 EXPECT_EQ(downloader->SetInitialBufferSize(0, 20000000), true);
1132 }
1133
1134 HWTEST_F(HlsMediaDownloaderUnitTest, SET_PLAY_STRATEGY_001, TestSize.Level1)
1135 {
1136 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, header_, nullptr);
1137 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1221a02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1138 std::shared_ptr<DownloadRequest>& request) {};
1139 downloader->SetStatusCallback(statusCallback);
1140 Plugins::Callback* sourceCallback = new SourceCallback();
1141 downloader->callback_ = sourceCallback;
1142 downloader->SetPlayStrategy(nullptr);
1143 EXPECT_EQ(downloader->waterlineForPlaying_, 0);
1144 std::shared_ptr<PlayStrategy> playStrategy = std::make_shared<PlayStrategy>();
1145 playStrategy->width = 1280;
1146 playStrategy->height = 720;
1147 playStrategy->bufferDurationForPlaying = 5;
1148 downloader->SetPlayStrategy(playStrategy);
1149 EXPECT_NE(downloader->waterlineForPlaying_, 0);
1150 }
1151
1152 HWTEST_F(HlsMediaDownloaderUnitTest, NOTIFY_INIT_SUCCESS_001, TestSize.Level1)
1153 {
1154 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, header_, nullptr);
1155 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1221b02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1156 std::shared_ptr<DownloadRequest>& request) {};
1157 downloader->SetStatusCallback(statusCallback);
1158 Plugins::Callback* sourceCallback = new SourceCallback();
1159 downloader->callback_ = sourceCallback;
1160 downloader->bufferDurationForPlaying_ = 0;
1161 downloader->NotifyInitSuccess();
1162 EXPECT_EQ(downloader->waterlineForPlaying_, 0);
1163 downloader->bufferDurationForPlaying_ = 5;
1164 downloader->NotifyInitSuccess();
1165 EXPECT_EQ(downloader->waterlineForPlaying_, 0);
1166 EXPECT_EQ(downloader->isBuffering_, true);
1167 }
1168
1169 HWTEST_F(HlsMediaDownloaderUnitTest, IS_CACHED_INIT_SIZE_READY_001, TestSize.Level1)
1170 {
1171 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1172 header_, nullptr);
1173 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1221c02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1174 std::shared_ptr<DownloadRequest>& request) {};
1175 downloader->SetStatusCallback(statusCallback);
1176 Plugins::Callback* sourceCallback = new SourceCallback();
1177 downloader->cacheMediaBuffer_ = std::make_shared<CacheMediaChunkBufferHlsImpl>();
1178 downloader->cacheMediaBuffer_->Init(MAX_CACHE_BUFFER_SIZE, CHUNK_SIZE);
1179 downloader->callback_ = sourceCallback;
1180 EXPECT_EQ(downloader->IsCachedInitSizeReady(-1), false);
1181 PlayInfo playInfo;
1182 downloader->backPlayList_.push_back(playInfo);
1183 EXPECT_EQ(downloader->backPlayList_.size(), 1);
1184 EXPECT_EQ(downloader->IsCachedInitSizeReady(10), true);
1185 downloader->tsStorageInfo_[0].second = true;
1186 downloader->tsStorageInfo_[1].second = true;
1187 downloader->backPlayList_.push_back(playInfo);
1188 EXPECT_EQ(downloader->IsCachedInitSizeReady(10), true);
1189 downloader->cacheMediaBuffer_ = nullptr;
1190 EXPECT_EQ(downloader->IsCachedInitSizeReady(10), false);
1191 }
1192
1193 HWTEST_F(HlsMediaDownloaderUnitTest, HANDLE_WATER_LINE_001, TestSize.Level1)
1194 {
1195 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1196 header_, nullptr);
1197 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1221d02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1198 std::shared_ptr<DownloadRequest>& request) {};
1199 downloader->SetStatusCallback(statusCallback);
1200 Plugins::Callback* sourceCallback = new SourceCallback();
1201 downloader->callback_ = sourceCallback;
1202 downloader->waterLineAbove_ = 0;
1203 downloader->readOffset_ = 0;
1204 downloader->initCacheSize_ = 5000;
1205 downloader->isBuffering_ = true;
1206 downloader->tsStorageInfo_[downloader->readTsIndex_ + 1] = std::make_pair(0, true);
1207 downloader->HandleWaterLine();
1208 EXPECT_EQ(downloader->initCacheSize_, -1);
1209 EXPECT_EQ(downloader->isBuffering_, false);
1210 }
1211
1212 HWTEST_F(HlsMediaDownloaderUnitTest, CACHE_BUFFER_FULL_LOOP_001, TestSize.Level1)
1213 {
1214 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1215 header_, nullptr);
1216 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1221e02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1217 std::shared_ptr<DownloadRequest>& request) {};
1218 downloader->SetStatusCallback(statusCallback);
1219 Plugins::Callback* sourceCallback = new SourceCallback();
1220 downloader->callback_ = sourceCallback;
1221 PlayInfo playInfo;
1222 downloader->backPlayList_.push_back(playInfo);
1223 downloader->initCacheSize_ = 100;
1224 downloader->isSeekingFlag = true;
1225 downloader->cacheMediaBuffer_ = std::make_shared<CacheMediaChunkBufferHlsImpl>();
1226 downloader->cacheMediaBuffer_->Init(MAX_CACHE_BUFFER_SIZE, CHUNK_SIZE);
1227 EXPECT_EQ(downloader->CacheBufferFullLoop(), true);
1228 EXPECT_EQ(downloader->initCacheSize_, -1);
1229 downloader->isSeekingFlag = false;
1230 EXPECT_EQ(downloader->CacheBufferFullLoop(), false);
1231 }
1232
1233 HWTEST_F(HlsMediaDownloaderUnitTest, IS_NEED_BUFFER_FOR_PLAYING_001, TestSize.Level1)
1234 {
1235 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1236 header_, nullptr);
1237 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anon1ce5b1221f02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1238 std::shared_ptr<DownloadRequest>& request) {};
1239 downloader->SetStatusCallback(statusCallback);
1240 Plugins::Callback* sourceCallback = new SourceCallback();
1241 downloader->callback_ = sourceCallback;
1242 EXPECT_EQ(downloader->IsNeedBufferForPlaying(), false);
1243 downloader->bufferDurationForPlaying_ = 5;
1244 downloader->isDemuxerInitSuccess_ = true;
1245 downloader->isBuffering_ = true;
1246 downloader->bufferingTime_ = static_cast<size_t>(downloader->
1247 steadyClock_.ElapsedMilliseconds()) - 100 * 1000;
1248 EXPECT_EQ(downloader->IsNeedBufferForPlaying(), false);
1249 downloader->bufferingTime_ = 0;
1250 downloader->waterlineForPlaying_ = 0;
1251 EXPECT_EQ(downloader->IsNeedBufferForPlaying(), false);
1252 }
1253 }