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 static const std::string M3U8_PATH_X_MAP = "test_hls/testXMap.m3u8";
34 static const std::string M3U8_PATH_BYTE_RANGE = "test_hls/testByteRange.m3u8";
35 constexpr int MIN_WITDH = 480;
36 constexpr int SECOND_WITDH = 720;
37 constexpr int THIRD_WITDH = 1080;
38 constexpr int MAX_RECORD_COUNT = 10;
39 constexpr int BUFFER_SIZE = 10;
40 constexpr int MAX_TEN = 10 * 1024;
41
42 std::unique_ptr<MediaAVCodec::HttpServerDemo> g_server = nullptr;
43
SetUpTestCase(void)44 void HlsMediaDownloaderUnitTest::SetUpTestCase(void)
45 {
46 g_server = std::make_unique<MediaAVCodec::HttpServerDemo>();
47 g_server->StartServer();
48 }
49
TearDownTestCase(void)50 void HlsMediaDownloaderUnitTest::TearDownTestCase(void)
51 {
52 g_server->StopServer();
53 g_server = nullptr;
54 }
55
SetUp(void)56 void HlsMediaDownloaderUnitTest ::SetUp(void)
57 {
58 header_ = std::map<std::string, std::string>();
59 hlsMediaDownloader = new HlsMediaDownloader(MAX_CACHE_BUFFER_SIZE, true, header_, nullptr);
60 }
61
TearDown(void)62 void HlsMediaDownloaderUnitTest ::TearDown(void)
63 {
64 delete hlsMediaDownloader;
65 hlsMediaDownloader = nullptr;
66 }
67
68 HWTEST_F(HlsMediaDownloaderUnitTest, GetPlayable_1, TestSize.Level0)
69 {
70 hlsMediaDownloader->isBuffering_ = true;
71 EXPECT_FALSE(hlsMediaDownloader->GetPlayable());
72 hlsMediaDownloader->isBuffering_ = false;
73 hlsMediaDownloader->isFirstFrameArrived_ = false;
74 EXPECT_FALSE(hlsMediaDownloader->GetPlayable());
75 hlsMediaDownloader->GetReadTimeOut(false);
76 }
77
78 HWTEST_F(HlsMediaDownloaderUnitTest, GetPlayable_2, TestSize.Level0)
79 {
80 hlsMediaDownloader->isBuffering_ = false;
81 hlsMediaDownloader->isFirstFrameArrived_ = true;
82 hlsMediaDownloader->wantedReadLength_ = 0;
83 EXPECT_FALSE(hlsMediaDownloader->GetPlayable());
84 }
85
86 HWTEST_F(HlsMediaDownloaderUnitTest, GetPlayable_3, TestSize.Level1)
87 {
88 hlsMediaDownloader->isBuffering_ = false;
89 hlsMediaDownloader->isFirstFrameArrived_ = true;
90 hlsMediaDownloader->wantedReadLength_ = BUFFER_SIZE;
91 EXPECT_FALSE(hlsMediaDownloader->GetPlayable());
92
93 hlsMediaDownloader->wantedReadLength_ = MAX_TEN;
94 EXPECT_FALSE(hlsMediaDownloader->GetPlayable());
95 }
96
97 HWTEST_F(HlsMediaDownloaderUnitTest, GetDownloadInfo1, TestSize.Level1)
98 {
99 hlsMediaDownloader->recordSpeedCount_ = 0;
100 DownloadInfo downloadInfo;
101 hlsMediaDownloader->GetDownloadInfo(downloadInfo);
102 hlsMediaDownloader->GetDownloadInfo();
103 EXPECT_EQ(downloadInfo.avgDownloadRate, 0);
104 }
105
106 HWTEST_F(HlsMediaDownloaderUnitTest, GetDownloadInfo2, TestSize.Level1)
107 {
108 hlsMediaDownloader->recordSpeedCount_ = 5;
109 hlsMediaDownloader->avgSpeedSum_ = 25;
110 DownloadInfo downloadInfo;
111 hlsMediaDownloader->GetDownloadInfo(downloadInfo);
112 hlsMediaDownloader->GetDownloadInfo();
113 EXPECT_EQ(downloadInfo.avgDownloadRate, 5);
114 }
115
116 HWTEST_F(HlsMediaDownloaderUnitTest, GetDownloadInfo3, TestSize.Level1)
117 {
118 hlsMediaDownloader->avgDownloadSpeed_ = 10;
119 DownloadInfo downloadInfo;
120 hlsMediaDownloader->GetDownloadInfo(downloadInfo);
121 EXPECT_EQ(downloadInfo.avgDownloadSpeed, 10);
122 }
123
124 HWTEST_F(HlsMediaDownloaderUnitTest, GetDownloadInfo4, TestSize.Level1)
125 {
126 hlsMediaDownloader->totalBits_ = 50;
127 DownloadInfo downloadInfo;
128 hlsMediaDownloader->GetDownloadInfo(downloadInfo);
129 EXPECT_EQ(downloadInfo.totalDownLoadBits, 50);
130 }
131
132 HWTEST_F(HlsMediaDownloaderUnitTest, GetDownloadInfo5, TestSize.Level1)
133 {
134 hlsMediaDownloader->isTimeOut_ = true;
135 DownloadInfo downloadInfo;
136 hlsMediaDownloader->GetDownloadInfo(downloadInfo);
137 EXPECT_EQ(downloadInfo.isTimeOut, true);
138 }
139
140 HWTEST_F(HlsMediaDownloaderUnitTest, GetBufferSize, TestSize.Level1)
141 {
142 size_t actualSize = hlsMediaDownloader->GetBufferSize();
143 EXPECT_EQ(actualSize, 0);
144 }
145
146 HWTEST_F(HlsMediaDownloaderUnitTest, GetTotalBufferSize, TestSize.Level1)
147 {
148 hlsMediaDownloader->totalBufferSize_ = 1024;
149 EXPECT_EQ(hlsMediaDownloader->GetTotalBufferSize(), 1024);
150 }
151
152 HWTEST_F(HlsMediaDownloaderUnitTest, TransferSizeToBitRate1, TestSize.Level1)
153 {
154 int width = MIN_WITDH;
155 uint64_t expectedBitRate = RING_BUFFER_SIZE;
156 uint64_t actualBitRate = hlsMediaDownloader->TransferSizeToBitRate(width);
157 EXPECT_EQ(expectedBitRate, actualBitRate);
158 }
159
160 HWTEST_F(HlsMediaDownloaderUnitTest, TransferSizeToBitRate2, TestSize.Level1)
161 {
162 int width = SECOND_WITDH - 1;
163 uint64_t expectedBitRate = RING_BUFFER_SIZE + RING_BUFFER_SIZE;
164 uint64_t actualBitRate = hlsMediaDownloader->TransferSizeToBitRate(width);
165 EXPECT_EQ(expectedBitRate, actualBitRate);
166 }
167
168 HWTEST_F(HlsMediaDownloaderUnitTest, TransferSizeToBitRate3, TestSize.Level1)
169 {
170 int width = THIRD_WITDH - 1;
171 uint64_t expectedBitRate = RING_BUFFER_SIZE + RING_BUFFER_SIZE + RING_BUFFER_SIZE;
172 uint64_t actualBitRate = hlsMediaDownloader->TransferSizeToBitRate(width);
173 EXPECT_EQ(expectedBitRate, actualBitRate);
174 }
175
176 HWTEST_F(HlsMediaDownloaderUnitTest, TransferSizeToBitRate4, TestSize.Level1)
177 {
178 int width = THIRD_WITDH + 1;
179 uint64_t expectedBitRate = RING_BUFFER_SIZE + RING_BUFFER_SIZE + RING_BUFFER_SIZE + RING_BUFFER_SIZE;
180 uint64_t actualBitRate = hlsMediaDownloader->TransferSizeToBitRate(width);
181 EXPECT_EQ(expectedBitRate, actualBitRate);
182 }
183
184 HWTEST_F(HlsMediaDownloaderUnitTest, InActiveAutoBufferSize, TestSize.Level1)
185 {
186 hlsMediaDownloader->InActiveAutoBufferSize();
187 EXPECT_FALSE(hlsMediaDownloader->autoBufferSize_);
188 }
189
190 HWTEST_F(HlsMediaDownloaderUnitTest, ActiveAutoBufferSize1, TestSize.Level1)
191 {
192 hlsMediaDownloader->ActiveAutoBufferSize();
193 EXPECT_TRUE(hlsMediaDownloader->autoBufferSize_);
194 }
195
196 HWTEST_F(HlsMediaDownloaderUnitTest, ActiveAutoBufferSize2, TestSize.Level1)
197 {
198 hlsMediaDownloader->userDefinedBufferDuration_ = true;
199 bool oldAutoBufferSize = hlsMediaDownloader->autoBufferSize_;
200 hlsMediaDownloader->ActiveAutoBufferSize();
201 EXPECT_EQ(oldAutoBufferSize, hlsMediaDownloader->autoBufferSize_);
202 }
203
204 HWTEST_F(HlsMediaDownloaderUnitTest, OnReadRingBuffer1, TestSize.Level1)
205 {
206 uint32_t len = 100;
207 hlsMediaDownloader->bufferedDuration_ = 50;
208 hlsMediaDownloader->OnReadBuffer(len);
209 EXPECT_EQ(hlsMediaDownloader->bufferedDuration_, 0);
210 }
211
212 HWTEST_F(HlsMediaDownloaderUnitTest, OnReadRingBuffer2, TestSize.Level1)
213 {
214 uint32_t len = 50;
215 hlsMediaDownloader->bufferedDuration_ = 100;
216 hlsMediaDownloader->OnReadBuffer(len);
217 EXPECT_LT(hlsMediaDownloader->bufferedDuration_, 100);
218 }
219
220 HWTEST_F(HlsMediaDownloaderUnitTest, OnReadRingBuffer3, TestSize.Level1)
221 {
222 uint32_t len = 50;
223 hlsMediaDownloader->bufferedDuration_ = 0;
224 hlsMediaDownloader->lastReadTime_ = 0;
225 hlsMediaDownloader->OnReadBuffer(len);
226 EXPECT_NE(hlsMediaDownloader->bufferLeastRecord_, nullptr);
227 }
228
229 HWTEST_F(HlsMediaDownloaderUnitTest, OnReadRingBuffer4, TestSize.Level1)
230 {
231 uint32_t len = 50;
232 hlsMediaDownloader->bufferedDuration_ = 0;
233 hlsMediaDownloader->lastReadTime_ = 0;
234 for (int i = 0; i < MAX_RECORD_COUNT + 1; i++) {
235 hlsMediaDownloader->OnReadBuffer(len);
236 }
237 EXPECT_NE(hlsMediaDownloader->bufferLeastRecord_->next, nullptr);
238 }
239
240 HWTEST_F(HlsMediaDownloaderUnitTest, DownBufferSize1, TestSize.Level1)
241 {
242 hlsMediaDownloader->totalBufferSize_ = 10 * 1024 * 1024;
243 hlsMediaDownloader->DownBufferSize();
244 EXPECT_EQ(hlsMediaDownloader->totalBufferSize_, 9 * 1024 * 1024);
245 }
246
247 HWTEST_F(HlsMediaDownloaderUnitTest, DownBufferSize2, TestSize.Level1)
248 {
249 hlsMediaDownloader->totalBufferSize_ = RING_BUFFER_SIZE;
250 hlsMediaDownloader->DownBufferSize();
251 EXPECT_EQ(hlsMediaDownloader->totalBufferSize_, RING_BUFFER_SIZE);
252 }
253
254 HWTEST_F(HlsMediaDownloaderUnitTest, RiseBufferSize1, TestSize.Level1)
255 {
256 hlsMediaDownloader->totalBufferSize_ = 0;
257 hlsMediaDownloader->RiseBufferSize();
258 EXPECT_EQ(hlsMediaDownloader->totalBufferSize_, 1 * 1024 * 1024);
259 }
260
261 HWTEST_F(HlsMediaDownloaderUnitTest, RiseBufferSize2, TestSize.Level1)
262 {
263 hlsMediaDownloader->totalBufferSize_ = MAX_CACHE_BUFFER_SIZE;
264 hlsMediaDownloader->RiseBufferSize();
265 EXPECT_EQ(hlsMediaDownloader->totalBufferSize_, MAX_CACHE_BUFFER_SIZE);
266 }
267
268 HWTEST_F(HlsMediaDownloaderUnitTest, CheckPulldownBufferSize, TestSize.Level1)
269 {
270 hlsMediaDownloader->recordData_ = nullptr;
271 bool result = hlsMediaDownloader->CheckPulldownBufferSize();
272 EXPECT_FALSE(result);
273 }
274
275 HWTEST_F(HlsMediaDownloaderUnitTest, CheckRiseBufferSize, TestSize.Level1)
276 {
277 hlsMediaDownloader->recordData_ = nullptr;
278 bool result = hlsMediaDownloader->CheckRiseBufferSize();
279 EXPECT_FALSE(result);
280 }
281
282 HWTEST_F(HlsMediaDownloaderUnitTest, SetDownloadErrorState, TestSize.Level1)
283 {
284 hlsMediaDownloader->SetDownloadErrorState();
285 EXPECT_TRUE(hlsMediaDownloader->downloadErrorState_);
286 }
287
288 HWTEST_F(HlsMediaDownloaderUnitTest, SetDemuxerState, TestSize.Level1)
289 {
290 hlsMediaDownloader->SetDemuxerState(0);
291 EXPECT_TRUE(hlsMediaDownloader->isReadFrame_);
292 EXPECT_TRUE(hlsMediaDownloader->isFirstFrameArrived_);
293 }
294
295 HWTEST_F(HlsMediaDownloaderUnitTest, CheckBreakCondition, TestSize.Level1)
296 {
297 hlsMediaDownloader->downloadErrorState_ = true;
298 EXPECT_TRUE(hlsMediaDownloader->CheckBreakCondition());
299 }
300
301 HWTEST_F(HlsMediaDownloaderUnitTest, HandleBuffering, TestSize.Level1)
302 {
303 hlsMediaDownloader->isBuffering_ = false;
304 EXPECT_FALSE(hlsMediaDownloader->HandleBuffering());
305 }
306
307 HWTEST_F(HlsMediaDownloaderUnitTest, TestDefaultConstructor, TestSize.Level1)
308 {
309 hlsMediaDownloader->totalBufferSize_ = MAX_CACHE_BUFFER_SIZE;
310 EXPECT_EQ(hlsMediaDownloader->totalBufferSize_, MAX_CACHE_BUFFER_SIZE);
311 }
312
313 HWTEST_F(HlsMediaDownloaderUnitTest, SAVE_HEADER_001, TestSize.Level1)
314 {
315 hlsMediaDownloader->SaveHttpHeader(httpHeader);
316 EXPECT_EQ(hlsMediaDownloader->httpHeader_["User-Agent"], "ABC");
317 EXPECT_EQ(hlsMediaDownloader->httpHeader_["Referer"], "DEF");
318 }
319
320 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_OPEN_001, TestSize.Level1)
321 {
322 HlsMediaDownloader *downloader = new HlsMediaDownloader(1000, true, header_, nullptr);
323 EXPECT_EQ(downloader->expectDuration_, static_cast<uint64_t>(19));
324 delete downloader;
325 downloader = nullptr;
326 }
327
328 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_OPEN_002, TestSize.Level1)
329 {
330 bool userDefinedDuration = true;
331 const int expectBufDuration = 10; // 10s
332 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(expectBufDuration,
333 userDefinedDuration, header_, nullptr);
334 EXPECT_EQ(downloader->expectDuration_, static_cast<uint64_t>(expectBufDuration));
335 downloader = nullptr;
336
337 userDefinedDuration = false;
338 downloader = std::make_shared<HlsMediaDownloader>(expectBufDuration,
339 userDefinedDuration, header_, nullptr);
340 EXPECT_EQ(downloader->expectDuration_, 0);
341 downloader = nullptr;
342 }
343
344 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_PAUSE, TestSize.Level1)
345 {
346 HlsMediaDownloader *downloader = new HlsMediaDownloader(10, true, header_, nullptr);
347 std::string testUrl = TEST_URI_PATH + "test_hls/testHLSEncode.m3u8";
348 downloader->Open(testUrl, httpHeader);
349 EXPECT_TRUE(downloader);
350 downloader->isInterrupt_ = false;
351 downloader->Pause();
352 downloader->Resume();
353 downloader->Pause();
354 delete downloader;
355 downloader = nullptr;
356 }
357
358 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_SEEK_TO_TIME, TestSize.Level1)
359 {
360 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
361 true, header_, nullptr);
362 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
363 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8040102(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 364 std::shared_ptr<DownloadRequest>& request) {
365 };
366 downloader->SetStatusCallback(statusCallback);
367 downloader->Open(testUrl, httpHeader);
368 downloader->GetSeekable();
369 bool result = downloader->SeekToTime(1, SeekMode::SEEK_NEXT_SYNC);
370 downloader->Close(true);
371 downloader = nullptr;
372 EXPECT_TRUE(result);
373 }
374
375 HWTEST_F(HlsMediaDownloaderUnitTest, HandleFfmpegReadback_001, TestSize.Level1)
376 {
377 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
378 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
379 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8040202(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 380 std::shared_ptr<DownloadRequest>& request) {
381 };
382 downloader->SetStatusCallback(statusCallback);
383 downloader->Open(testUrl, httpHeader);
384 downloader->GetSeekable();
385 unsigned char buff[10];
386 ReadDataInfo readDataInfo;
387 readDataInfo.streamId_ = 0;
388 readDataInfo.wantReadLength_ = 10;
389 readDataInfo.isEos_ = true;
390
391 downloader->readTsIndex_ = 0;
392 downloader->HandleFfmpegReadback(1000);
393 downloader->Read(buff, readDataInfo);
394
395 downloader->readTsIndex_ = 0;
396 downloader->ffmpegOffset_ = 10000;
397 downloader->HandleFfmpegReadback(1000);
398
399 downloader->readTsIndex_ = 1;
400 downloader->ffmpegOffset_ = 10000;
401 downloader->HandleFfmpegReadback(1000);
402
403 downloader->readTsIndex_ = 10000;
404 downloader->ffmpegOffset_ = 10000;
405 downloader->HandleFfmpegReadback(1000);
406
407 downloader->Close(true);
408 downloader = nullptr;
409 EXPECT_GE(readDataInfo.realReadLength_, 0);
410 }
411
412 HWTEST_F(HlsMediaDownloaderUnitTest, CheckPlaylist_001, TestSize.Level1)
413 {
414 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
415 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
416 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8040302(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 417 std::shared_ptr<DownloadRequest>& request) {
418 };
419 downloader->SetStatusCallback(statusCallback);
420 downloader->Open(testUrl, httpHeader);
421 downloader->GetSeekable();
422 unsigned char buff[10];
423 ReadDataInfo readDataInfo;
424 readDataInfo.streamId_ = 0;
425 readDataInfo.wantReadLength_ = 10;
426 readDataInfo.isEos_ = true;
427
428 downloader->isStopped = true;
429 downloader->CheckPlaylist(buff, readDataInfo);
430 downloader->Read(buff, readDataInfo);
431
432 OSAL::SleepFor(1 * 1000);
433 downloader->isStopped = true;
434 downloader->CheckPlaylist(buff, readDataInfo);
435 downloader->Close(true);
436 downloader = nullptr;
437 EXPECT_GE(readDataInfo.realReadLength_, 0);
438 }
439
440 HWTEST_F(HlsMediaDownloaderUnitTest, SeekToTsForRead_001, TestSize.Level1)
441 {
442 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
443 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
444 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8040402(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 445 std::shared_ptr<DownloadRequest>& request) {
446 };
447 downloader->SetStatusCallback(statusCallback);
448 downloader->Open(testUrl, httpHeader);
449 downloader->GetSeekable();
450 unsigned char buff[10];
451 ReadDataInfo readDataInfo;
452 readDataInfo.streamId_ = 0;
453 readDataInfo.wantReadLength_ = 10;
454 readDataInfo.isEos_ = true;
455 downloader->Read(buff, readDataInfo);
456
457 OSAL::SleepFor(1 * 1000);
458 downloader->SeekToTsForRead(100);
459 downloader->SeekToTsForRead(0);
460 downloader->SetIsTriggerAutoMode(false);
461
462 downloader->Close(true);
463 downloader = nullptr;
464 EXPECT_GE(readDataInfo.realReadLength_, 0);
465 }
466
467 HWTEST_F(HlsMediaDownloaderUnitTest, ReportVideoSizeChange_001, TestSize.Level1)
468 {
469 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
470 downloader->ReportVideoSizeChange();
471 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
472 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8040502(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 473 std::shared_ptr<DownloadRequest>& request) {
474 };
475 downloader->SetStatusCallback(statusCallback);
476 Plugins::Callback* sourceCallback = new SourceCallback();
477 downloader->SetCallback(sourceCallback);
478 downloader->ReportVideoSizeChange();
479 downloader->Open(testUrl, httpHeader);
480 downloader->GetSeekable();
481 unsigned char buff[10];
482 ReadDataInfo readDataInfo;
483 readDataInfo.streamId_ = 0;
484 readDataInfo.wantReadLength_ = 10;
485 readDataInfo.isEos_ = true;
486 downloader->Read(buff, readDataInfo);
487
488 OSAL::SleepFor(1 * 1000);
489 downloader->ReportVideoSizeChange();
490 downloader->Close(true);
491 downloader = nullptr;
492 delete sourceCallback;
493 EXPECT_GE(readDataInfo.realReadLength_, 0);
494 }
495
496 HWTEST_F(HlsMediaDownloaderUnitTest, DownloadRecordHistory_001, TestSize.Level1)
497 {
498 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
499 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
500 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8040602(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 501 std::shared_ptr<DownloadRequest>& request) {
502 };
503 downloader->SetStatusCallback(statusCallback);
504 downloader->Open(testUrl, httpHeader);
505 downloader->GetSeekable();
506 unsigned char buff[10];
507 ReadDataInfo readDataInfo;
508 readDataInfo.streamId_ = 0;
509 readDataInfo.wantReadLength_ = 10;
510 readDataInfo.isEos_ = true;
511 downloader->Read(buff, readDataInfo);
512
513 OSAL::SleepFor(1 * 1000);
514 downloader->DownloadRecordHistory(2000);
515 downloader->Close(true);
516 downloader = nullptr;
517 EXPECT_GE(readDataInfo.realReadLength_, 0);
518 }
519
520 HWTEST_F(HlsMediaDownloaderUnitTest, CheckRiseBufferSize_001, TestSize.Level1)
521 {
522 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
523 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
524 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8040702(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 525 std::shared_ptr<DownloadRequest>& request) {
526 };
527 downloader->SetStatusCallback(statusCallback);
528 downloader->Open(testUrl, httpHeader);
529 downloader->GetSeekable();
530 unsigned char buff[10];
531 ReadDataInfo readDataInfo;
532 readDataInfo.streamId_ = 0;
533 readDataInfo.wantReadLength_ = 10;
534 readDataInfo.isEos_ = true;
535 downloader->Read(buff, readDataInfo);
536
537 OSAL::SleepFor(1 * 1000);
538 std::shared_ptr<HlsMediaDownloader::RecordData> recordBuff =
539 std::make_shared<HlsMediaDownloader::RecordData>();
540 recordBuff->bufferDuring = 10;
541 downloader->recordData_ = recordBuff;
542 downloader->CheckRiseBufferSize();
543 downloader->CheckPulldownBufferSize();
544
545 downloader->Close(true);
546 downloader = nullptr;
547 EXPECT_GE(readDataInfo.realReadLength_, 0);
548 }
549
550 HWTEST_F(HlsMediaDownloaderUnitTest, GetDownloadRateAndSpeed, TestSize.Level1)
551 {
552 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
553 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
554 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8040802(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 555 std::shared_ptr<DownloadRequest>& request) {
556 };
557 downloader->SetStatusCallback(statusCallback);
558 downloader->Open(testUrl, httpHeader);
559 downloader->GetSeekable();
560 unsigned char buff[10];
561 ReadDataInfo readDataInfo;
562 readDataInfo.streamId_ = 0;
563 readDataInfo.wantReadLength_ = 10;
564 readDataInfo.isEos_ = true;
565 downloader->Read(buff, readDataInfo);
566
567 downloader->recordSpeedCount_ = 0;
568 downloader->GetDownloadRateAndSpeed();
569 downloader->recordSpeedCount_ = 1;
570 downloader->GetDownloadRateAndSpeed();
571 downloader->Close(true);
572 downloader = nullptr;
573 EXPECT_GE(readDataInfo.realReadLength_, 0);
574 }
575
576 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_READ_001, TestSize.Level1)
577 {
578 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
579 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
580 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8040902(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 581 std::shared_ptr<DownloadRequest>& request) {
582 };
583 downloader->SetStatusCallback(statusCallback);
584 downloader->Open(testUrl, httpHeader);
585 downloader->GetSeekable();
586 unsigned char buff[10];
587 ReadDataInfo readDataInfo;
588 readDataInfo.streamId_ = 0;
589 readDataInfo.wantReadLength_ = 10;
590 readDataInfo.isEos_ = true;
591 downloader->Read(buff, readDataInfo);
592
593 OSAL::SleepFor(1 * 1000);
594 downloader->Close(true);
595 downloader = nullptr;
596 EXPECT_GE(readDataInfo.realReadLength_, 0);
597 }
598
599 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_CALLBACK, TestSize.Level1)
600 {
601 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
602 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
603 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8040a02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 604 std::shared_ptr<DownloadRequest>& request) {
605 };
606 downloader->SetStatusCallback(statusCallback);
607 Plugins::Callback* sourceCallback = new SourceCallback();
608 downloader->SetCallback(sourceCallback);
609 downloader->Open(testUrl, httpHeader);
610 downloader->GetSeekable();
611 unsigned char buff[10];
612 ReadDataInfo readDataInfo;
613 readDataInfo.streamId_ = 0;
614 readDataInfo.wantReadLength_ = 10;
615 readDataInfo.isEos_ = true;
616 downloader->Read(buff, readDataInfo);
617 EXPECT_GE(readDataInfo.realReadLength_, 0);
618 OSAL::SleepFor(1 * 1000);
619
620 downloader->SetCurrentBitRate(-1, 0);
621 downloader->UpdateWaterLineAbove();
622 downloader->SetCurrentBitRate(10, 0);
623 downloader->UpdateWaterLineAbove();
624 downloader->HandleCachedDuration();
625 downloader->SetInterruptState(true);
626 downloader->SetInterruptState(false);
627 downloader->GetContentLength();
628 downloader->GetDuration();
629 downloader->GetBitRates();
630 downloader->SetReadBlockingFlag(true);
631 downloader->SetReadBlockingFlag(false);
632 downloader->ReportBitrateStart(100);
633 downloader->CalculateBitRate(0, 0);
634 downloader->CalculateBitRate(1, 0);
635 std::multimap<std::string, std::vector<uint8_t>> drmInfos;
636 downloader->OnDrmInfoChanged(drmInfos);
637 downloader->Close(true);
638 downloader = nullptr;
639 }
640
641 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_CALLBACK1, TestSize.Level1)
642 {
643 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
644 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
645 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8040b02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 646 std::shared_ptr<DownloadRequest>& request) {
647 };
648 downloader->SetStatusCallback(statusCallback);
649 Plugins::Callback* sourceCallback = new SourceCallback();
650 downloader->SetCallback(sourceCallback);
651 downloader->Open(testUrl, httpHeader);
652 downloader->GetSeekable();
653 unsigned char buff[10];
654 ReadDataInfo readDataInfo;
655 readDataInfo.streamId_ = 0;
656 readDataInfo.wantReadLength_ = 10;
657 readDataInfo.isEos_ = true;
658 downloader->Read(buff, readDataInfo);
659 OSAL::SleepFor(1 * 1000);
660 downloader->HandleCache();
661 downloader->Close(true);
662 downloader = nullptr;
663 EXPECT_GE(readDataInfo.realReadLength_, 0);
664 }
665
666 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_DownloadReport, TestSize.Level1)
667 {
668 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
669 std::string testUrl = TEST_URI_PATH + "test_cbr/1080_3M/video_1080.m3u8";
670 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8040c02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 671 std::shared_ptr<DownloadRequest>& request) {
672 };
673 downloader->SetStatusCallback(statusCallback);
674 Plugins::Callback* sourceCallback = new SourceCallback();
675 downloader->SetCallback(sourceCallback);
676 downloader->Open(testUrl, httpHeader);
677 ReadDataInfo readDataInfo;
678 for (int i = 0; i < 80; i++) {
679 OSAL::SleepFor(100);
680 downloader->DownloadReport();
681
682 unsigned char buff[100 * 1024];
683 readDataInfo.streamId_ = 0;
684 readDataInfo.wantReadLength_ = 100 * 1024;
685 readDataInfo.isEos_ = false;
686 downloader->Read(buff, readDataInfo);
687 }
688 downloader->CheckBufferingOneSeconds();
689 downloader->Close(true);
690 downloader = nullptr;
691 EXPECT_GE(readDataInfo.realReadLength_, 0);
692 }
693
694 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_DownloadReport_5M, TestSize.Level1)
695 {
696 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
697 std::string testUrl = TEST_URI_PATH + "test_cbr/1080_3M/video_1080.m3u8";
698 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8040d02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 699 std::shared_ptr<DownloadRequest>& request) {
700 };
701 downloader->SetStatusCallback(statusCallback);
702 Plugins::Callback* sourceCallback = new SourceCallback();
703 downloader->SetCallback(sourceCallback);
704 downloader->Open(testUrl, httpHeader);
705 OSAL::SleepFor(6 * 1000);
706 downloader->DownloadReport();
707 downloader->GetSeekable();
708 unsigned char buff[5 * 1024 * 1024];
709 ReadDataInfo readDataInfo;
710 readDataInfo.streamId_ = 0;
711 readDataInfo.wantReadLength_ = 5 * 1024 * 1024;
712 readDataInfo.isEos_ = true;
713 downloader->Read(buff, readDataInfo);
714 OSAL::SleepFor(1 * 1000);
715 downloader->HandleCache();
716 downloader->CheckBufferingOneSeconds();
717 downloader->Close(true);
718 downloader = nullptr;
719 EXPECT_GE(readDataInfo.realReadLength_, 0);
720 }
721
722 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_DownloadReport_5M_default, TestSize.Level1)
723 {
724 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
725 true, header_, nullptr);
726 std::string testUrl = TEST_URI_PATH + "test_cbr/1080_3M/video_1080.m3u8";
727 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8040e02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 728 std::shared_ptr<DownloadRequest>& request) {
729 };
730 downloader->SetStatusCallback(statusCallback);
731 Plugins::Callback* sourceCallback = new SourceCallback();
732 downloader->SetCallback(sourceCallback);
733 downloader->Open(testUrl, httpHeader);
734 downloader->GetSeekable();
735 ReadDataInfo readDataInfo;
736 for (int i = 0; i < 80; i++) {
737 OSAL::SleepFor(10);
738 downloader->DownloadReport();
739
740 unsigned char buff[10 * 1024];
741 readDataInfo.streamId_ = 0;
742 readDataInfo.wantReadLength_ = 10 * 1024;
743 readDataInfo.isEos_ = false;
744 downloader->Read(buff, readDataInfo);
745 if (i == 3) {
746 downloader->SetDemuxerState(0);
747 }
748 }
749 downloader->CheckBufferingOneSeconds();
750 downloader->Close(true);
751 downloader = nullptr;
752 EXPECT_GE(readDataInfo.realReadLength_, 0);
753 }
754
755 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_read_all, TestSize.Level1)
756 {
757 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
758 true, header_, nullptr);
759 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
760 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8040f02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 761 std::shared_ptr<DownloadRequest>& request) {
762 };
763 downloader->SetStatusCallback(statusCallback);
764 Plugins::Callback* sourceCallback = new SourceCallback();
765 downloader->SetCallback(sourceCallback);
766 downloader->Open(testUrl, httpHeader);
767 downloader->GetSeekable();
768 ReadDataInfo readDataInfo;
769 for (int i = 0; i < 80; i++) {
770 OSAL::SleepFor(10);
771 unsigned char buff[10 * 1024];
772 readDataInfo.streamId_ = 0;
773 readDataInfo.wantReadLength_ = 10 * 1024;
774 readDataInfo.isEos_ = false;
775 downloader->Read(buff, readDataInfo);
776 }
777 downloader->Close(true);
778 downloader = nullptr;
779 EXPECT_GE(readDataInfo.realReadLength_, 0);
780 }
781
782 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_Read_Live, TestSize.Level1)
783 {
784 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
785 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720_live.m3u8";
786 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8041002(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 787 std::shared_ptr<DownloadRequest>& request) {
788 };
789 downloader->SetStatusCallback(statusCallback);
790 Plugins::Callback* sourceCallback = new SourceCallback();
791 downloader->SetCallback(sourceCallback);
792 downloader->Open(testUrl, httpHeader);
793 downloader->GetSeekable();
794 unsigned char buff[5 * 1024 * 1024];
795 ReadDataInfo readDataInfo;
796 readDataInfo.streamId_ = 0;
797 readDataInfo.wantReadLength_ = 5 * 1024 * 1024;
798 readDataInfo.isEos_ = true;
799 downloader->Read(buff, readDataInfo);
800 OSAL::SleepFor(1 * 1000);
801 downloader->HandleCache();
802 downloader->CheckBufferingOneSeconds();
803 downloader->Close(true);
804 downloader = nullptr;
805 EXPECT_GE(readDataInfo.realReadLength_, 0);
806 }
807
808 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_READ_Encrypted, TestSize.Level1)
809 {
810 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
811 std::string testUrl = TEST_URI_PATH + "test_hls/testHLSEncode.m3u8";
812 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8041102(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 813 std::shared_ptr<DownloadRequest>& request) {
814 };
815 downloader->SetStatusCallback(statusCallback);
816 downloader->Open(testUrl, httpHeader);
817 downloader->GetSeekable();
818 downloader->GetStartedStatus();
819 unsigned char buff[10];
820 ReadDataInfo readDataInfo;
821 readDataInfo.streamId_ = 0;
822 readDataInfo.wantReadLength_ = 10;
823 readDataInfo.isEos_ = true;
824 downloader->Read(buff, readDataInfo);
825
826 OSAL::SleepFor(2 * 1000);
827 downloader->Close(true);
828 downloader = nullptr;
829 EXPECT_GE(readDataInfo.realReadLength_, 0);
830 }
831
832 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_READ_Encrypted_session_key, TestSize.Level1)
833 {
834 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
835 std::string testUrl = TEST_URI_PATH + "test_hls/testHLSEncode_session_key.m3u8";
836 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8041202(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 837 std::shared_ptr<DownloadRequest>& request) {
838 };
839 downloader->SetStatusCallback(statusCallback);
840 downloader->Open(testUrl, httpHeader);
841 downloader->GetSeekable();
842 downloader->GetStartedStatus();
843 unsigned char buff[10];
844 ReadDataInfo readDataInfo;
845 readDataInfo.streamId_ = 0;
846 readDataInfo.wantReadLength_ = 10;
847 readDataInfo.isEos_ = true;
848 downloader->Read(buff, readDataInfo);
849
850 OSAL::SleepFor(2 * 1000);
851 downloader->Close(true);
852 downloader = nullptr;
853 EXPECT_GE(readDataInfo.realReadLength_, 0);
854 }
855
856 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_OPEN_URL, TestSize.Level1)
857 {
858 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>("application/m3u8");
859 std::string testUrl = "fd://1?offset=0&size=1024";
860 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8041302(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 861 std::shared_ptr<DownloadRequest>& request) {
862 };
863 downloader->SetStatusCallback(statusCallback);
864 downloader->Open(testUrl, httpHeader);
865 EXPECT_TRUE(downloader);
866 downloader->Close(true);
867 testUrl = "fd://-1?offset=0&size=1024";
868 downloader->Open(testUrl, httpHeader);
869 downloader->Close(true);
870 testUrl = "fd://1?offset=2048&size=1024";
871 downloader->Open(testUrl, httpHeader);
872 downloader->Close(true);
873 testUrl = "fd://1?offset=512&size=1024";
874 downloader->Open(testUrl, httpHeader);
875 downloader->Close(true);
876 downloader = nullptr;
877 }
878
GetFileSize(const string & fileName)879 int64_t GetFileSize(const string &fileName)
880 {
881 int64_t fileSize = 0;
882 if (!fileName.empty()) {
883 struct stat fileStatus {};
884 if (stat(fileName.c_str(), &fileStatus) == 0) {
885 fileSize = static_cast<int64_t>(fileStatus.st_size);
886 }
887 }
888 return fileSize;
889 }
890
891 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_READ_null, TestSize.Level1)
892 {
893 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>("application/m3u8");
894 std::string path = "/data/test/media/test_cbr/720_1M/video_720_native.m3u8";
895 int32_t fd = open(path.c_str(), O_RDONLY);
896 int64_t size = GetFileSize(path);
897 std::string testUrl = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(size);
898 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8041402(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 899 std::shared_ptr<DownloadRequest>& request) {
900 };
901 downloader->SetStatusCallback(statusCallback);
902 downloader->Open(testUrl, httpHeader);
903 downloader->GetSeekable();
904 downloader->GetStartedStatus();
905 unsigned char buff[10];
906 ReadDataInfo readDataInfo;
907 readDataInfo.streamId_ = 0;
908 readDataInfo.wantReadLength_ = 10;
909 readDataInfo.isEos_ = true;
910 downloader->Read(buff, readDataInfo);
911
912 OSAL::SleepFor(4 * 1000);
913 downloader->Close(true);
914 downloader = nullptr;
915 EXPECT_GE(readDataInfo.realReadLength_, 0);
916 }
917
918 HWTEST_F(HlsMediaDownloaderUnitTest, GetSegmentOffset, TestSize.Level1)
919 {
920 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>("test");
921 downloader->GetSegmentOffset();
922 downloader->GetHLSDiscontinuity();
923 downloader->WaitForBufferingEnd();
924 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720_5K.m3u8";
925 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8041502(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 926 std::shared_ptr<DownloadRequest>& request) {
927 };
928 downloader->SetStatusCallback(statusCallback);
929 downloader->Open(testUrl, httpHeader);
930 downloader->GetSeekable();
931 downloader->GetStartedStatus();
932 unsigned char buff[BUFFER_SIZE];
933 ReadDataInfo readDataInfo;
934 readDataInfo.streamId_ = 0;
935 readDataInfo.wantReadLength_ = BUFFER_SIZE;
936 readDataInfo.isEos_ = true;
937 downloader->Read(buff, readDataInfo);
938 downloader->GetSegmentOffset();
939 downloader->GetHLSDiscontinuity();
940 downloader->WaitForBufferingEnd();
941 downloader->Close(true);
942 downloader = nullptr;
943 EXPECT_GE(readDataInfo.realReadLength_, 0);
944 }
945
946 HWTEST_F(HlsMediaDownloaderUnitTest, StopBufferring, TestSize.Level1)
947 {
948 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>("test");
949 downloader->StopBufferring(true);
950 downloader->StopBufferring(false);
951 downloader->StopBufferring(true);
952 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720_5K.m3u8";
953 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8041602(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 954 std::shared_ptr<DownloadRequest>& request) {
955 };
956 downloader->SetStatusCallback(statusCallback);
957 downloader->Open(testUrl, httpHeader);
958 downloader->GetSeekable();
959 downloader->GetStartedStatus();
960 unsigned char buff[BUFFER_SIZE];
961 ReadDataInfo readDataInfo;
962 readDataInfo.streamId_ = 0;
963 readDataInfo.wantReadLength_ = BUFFER_SIZE;
964 readDataInfo.isEos_ = true;
965 downloader->Read(buff, readDataInfo);
966 downloader->StopBufferring(true);
967 downloader->StopBufferring(false);
968 downloader->StopBufferring(true);
969 downloader->StopBufferring(false);
970 downloader->Close(true);
971 downloader = nullptr;
972 EXPECT_GE(readDataInfo.realReadLength_, 0);
973 }
974
975 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_READ_MAX_M3U8, TestSize.Level1)
976 {
977 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
978 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720_5K.m3u8";
979 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8041702(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 980 std::shared_ptr<DownloadRequest>& request) {
981 };
982 downloader->SetStatusCallback(statusCallback);
983 downloader->Open(testUrl, httpHeader);
984 downloader->GetSeekable();
985 downloader->GetStartedStatus();
986 unsigned char buff[10];
987 ReadDataInfo readDataInfo;
988 readDataInfo.streamId_ = 0;
989 readDataInfo.wantReadLength_ = 10;
990 readDataInfo.isEos_ = true;
991 downloader->Read(buff, readDataInfo);
992
993 OSAL::SleepFor(4 * 1000);
994 downloader->Close(true);
995 downloader = nullptr;
996 EXPECT_GE(readDataInfo.realReadLength_, 0);
997 }
998
999 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_READ_SelectBR, TestSize.Level1)
1000 {
1001 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>("test");
1002 std::string testUrl = TEST_URI_PATH + "test_cbr/test_cbr.m3u8";
1003 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8041802(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1004 std::shared_ptr<DownloadRequest>& request) {
1005 };
1006 downloader->SetStatusCallback(statusCallback);
1007 downloader->Open(testUrl, httpHeader);
1008 downloader->GetSeekable();
1009 unsigned char buff[10];
1010 ReadDataInfo readDataInfo;
1011 readDataInfo.streamId_ = 0;
1012 readDataInfo.wantReadLength_ = 10;
1013 readDataInfo.isEos_ = true;
1014 downloader->Read(buff, readDataInfo);
1015 downloader->AutoSelectBitrate(1000000);
1016
1017 OSAL::SleepFor(4 * 1000);
1018 downloader->Close(true);
1019 downloader = nullptr;
1020 EXPECT_GE(readDataInfo.realReadLength_, 0);
1021 }
1022
1023 HWTEST_F(HlsMediaDownloaderUnitTest, TEST_WRITE_RINGBUFFER_001, TestSize.Level1)
1024 {
1025 HlsMediaDownloader *downloader = new HlsMediaDownloader(MAX_CACHE_BUFFER_SIZE, true, header_, nullptr);
1026 downloader->OnWriteCacheBuffer(0);
1027 downloader->OnWriteCacheBuffer(0);
1028 EXPECT_EQ(downloader->bufferedDuration_, 0);
1029 EXPECT_EQ(downloader->totalBits_, 0);
1030 EXPECT_EQ(downloader->lastWriteBit_, 0);
1031
1032 downloader->OnWriteCacheBuffer(1);
1033 downloader->OnWriteCacheBuffer(1);
1034 EXPECT_EQ(downloader->bufferedDuration_, 16);
1035 EXPECT_EQ(downloader->totalBits_, 16);
1036 EXPECT_EQ(downloader->lastWriteBit_, 16);
1037
1038 downloader->OnWriteCacheBuffer(1000);
1039 downloader->OnWriteCacheBuffer(1000);
1040 EXPECT_EQ(downloader->bufferedDuration_, 16016);
1041 EXPECT_EQ(downloader->totalBits_, 16016);
1042 EXPECT_EQ(downloader->lastWriteBit_, 16016);
1043 delete downloader;
1044 downloader = nullptr;
1045 }
1046
1047 HWTEST_F(HlsMediaDownloaderUnitTest, RISE_BUFFER_001, TestSize.Level1)
1048 {
1049 HlsMediaDownloader *downloader = new HlsMediaDownloader(MAX_CACHE_BUFFER_SIZE, true, header_, nullptr);
1050 downloader->totalBufferSize_ = MAX_CACHE_BUFFER_SIZE;
1051 downloader->RiseBufferSize();
1052 EXPECT_EQ(downloader->totalBufferSize_, MAX_CACHE_BUFFER_SIZE);
1053 delete downloader;
1054 downloader = nullptr;
1055 }
1056
1057 HWTEST_F(HlsMediaDownloaderUnitTest, RISE_BUFFER_002, TestSize.Level1)
1058 {
1059 HlsMediaDownloader *downloader = new HlsMediaDownloader(MAX_CACHE_BUFFER_SIZE, true, header_, nullptr);
1060 downloader->totalBufferSize_ = RING_BUFFER_SIZE;
1061 downloader->RiseBufferSize();
1062 EXPECT_EQ(downloader->totalBufferSize_, 6 * 1024 * 1024);
1063 delete downloader;
1064 downloader = nullptr;
1065 }
1066
1067 HWTEST_F(HlsMediaDownloaderUnitTest, DOWN_BUFFER_001, TestSize.Level1)
1068 {
1069 HlsMediaDownloader *downloader = new HlsMediaDownloader(MAX_CACHE_BUFFER_SIZE, false, header_, nullptr);
1070 downloader->totalBufferSize_ = 10 * 1024 * 1024;
1071 downloader->DownBufferSize();
1072 EXPECT_EQ(downloader->totalBufferSize_, 9 * 1024 * 1024);
1073 delete downloader;
1074 downloader = nullptr;
1075 }
1076
1077 HWTEST_F(HlsMediaDownloaderUnitTest, DOWN_BUFFER_002, TestSize.Level1)
1078 {
1079 HlsMediaDownloader *downloader = new HlsMediaDownloader(MAX_CACHE_BUFFER_SIZE, true, header_, nullptr);
1080 downloader->totalBufferSize_ = RING_BUFFER_SIZE;
1081 downloader->DownBufferSize();
1082 EXPECT_EQ(downloader->totalBufferSize_, RING_BUFFER_SIZE);
1083 delete downloader;
1084 downloader = nullptr;
1085 }
1086
1087 HWTEST_F(HlsMediaDownloaderUnitTest, GET_PLAYBACK_INFO_001, TestSize.Level1)
1088 {
1089 HlsMediaDownloader *downloader = new HlsMediaDownloader(10, true, header_, nullptr);
1090 std::string testUrl = TEST_URI_PATH + "test_hls/testHLSEncode.m3u8";
1091 downloader->Open(testUrl, httpHeader);
1092 PlaybackInfo playbackInfo;
1093 downloader->GetPlaybackInfo(playbackInfo);
1094 EXPECT_EQ(playbackInfo.serverIpAddress, "");
1095 EXPECT_EQ(playbackInfo.averageDownloadRate, 0);
1096 EXPECT_EQ(playbackInfo.isDownloading, true);
1097 EXPECT_EQ(playbackInfo.downloadRate, 0);
1098 EXPECT_EQ(playbackInfo.bufferDuration, 0);
1099 delete downloader;
1100 downloader = nullptr;
1101 }
1102
1103 HWTEST_F(HlsMediaDownloaderUnitTest, GET_PLAYBACK_INFO_002, TestSize.Level1)
1104 {
1105 HlsMediaDownloader *downloader = new HlsMediaDownloader(10, true, header_, nullptr);
1106 std::string testUrl = TEST_URI_PATH + "test_hls/testHLSEncode.m3u8";
1107 downloader->Open(testUrl, httpHeader);
1108 downloader->totalDownloadDuringTime_ = 1000;
1109 downloader->totalBits_ = 1000;
1110 downloader->isDownloadFinish_ = true;
1111 std::shared_ptr<HlsMediaDownloader::RecordData> recordBuff = std::make_shared<HlsMediaDownloader::RecordData>();
1112 recordBuff->downloadRate = 1000;
1113 recordBuff->bufferDuring = 1;
1114 downloader->recordData_ = recordBuff;
1115
1116 PlaybackInfo playbackInfo;
1117 downloader->GetPlaybackInfo(playbackInfo);
1118 EXPECT_EQ(playbackInfo.serverIpAddress, "");
1119 EXPECT_EQ(playbackInfo.averageDownloadRate, 1000);
1120 EXPECT_EQ(playbackInfo.isDownloading, false);
1121 EXPECT_EQ(playbackInfo.downloadRate, 1000);
1122 EXPECT_EQ(playbackInfo.bufferDuration, 0);
1123 delete downloader;
1124 downloader = nullptr;
1125 }
1126
1127 HWTEST_F(HlsMediaDownloaderUnitTest, SET_INITIAL_BUFFERSIZE_001, TestSize.Level1)
1128 {
1129 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
1130 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8041902(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1131 std::shared_ptr<DownloadRequest>& request) {};
1132 downloader->SetStatusCallback(statusCallback);
1133 Plugins::Callback* sourceCallback = new SourceCallback();
1134 downloader->callback_ = sourceCallback;
1135 std::string testUrl = TEST_URI_PATH + "test_hls/testHLSEncode.m3u8";
1136 PlayInfo playInfo;
1137 playInfo.url_ = testUrl;
1138 downloader->PutRequestIntoDownloader(playInfo);
1139 downloader->backPlayList_.push_back(playInfo);
1140 downloader->cacheMediaBuffer_ = std::make_shared<CacheMediaChunkBufferHlsImpl>();
1141 EXPECT_EQ(downloader->SetInitialBufferSize(0, 50000), false);
1142 downloader->cacheMediaBuffer_ = nullptr;
1143 downloader->isBuffering_ = false;
1144 EXPECT_EQ(downloader->SetInitialBufferSize(0, 20000000), true);
1145 }
1146
1147 HWTEST_F(HlsMediaDownloaderUnitTest, SET_PLAY_STRATEGY_001, TestSize.Level1)
1148 {
1149 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
1150 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8041a02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1151 std::shared_ptr<DownloadRequest>& request) {};
1152 downloader->SetStatusCallback(statusCallback);
1153 Plugins::Callback* sourceCallback = new SourceCallback();
1154 downloader->callback_ = sourceCallback;
1155 downloader->SetPlayStrategy(nullptr);
1156 EXPECT_EQ(downloader->waterlineForPlaying_, 0);
1157 std::shared_ptr<PlayStrategy> playStrategy = std::make_shared<PlayStrategy>();
1158 playStrategy->width = 1280;
1159 playStrategy->height = 720;
1160 playStrategy->bufferDurationForPlaying = 5;
1161 downloader->SetPlayStrategy(playStrategy);
1162 EXPECT_NE(downloader->waterlineForPlaying_, 0);
1163 }
1164
1165 HWTEST_F(HlsMediaDownloaderUnitTest, NOTIFY_INIT_SUCCESS_001, TestSize.Level1)
1166 {
1167 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
1168 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8041b02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1169 std::shared_ptr<DownloadRequest>& request) {};
1170 downloader->SetStatusCallback(statusCallback);
1171 Plugins::Callback* sourceCallback = new SourceCallback();
1172 downloader->callback_ = sourceCallback;
1173 downloader->bufferDurationForPlaying_ = 0;
1174 downloader->NotifyInitSuccess();
1175 EXPECT_EQ(downloader->waterlineForPlaying_, 0);
1176 downloader->bufferDurationForPlaying_ = 5;
1177 downloader->NotifyInitSuccess();
1178 EXPECT_EQ(downloader->waterlineForPlaying_, 0);
1179 EXPECT_EQ(downloader->isBuffering_, true);
1180 }
1181
1182 HWTEST_F(HlsMediaDownloaderUnitTest, IS_CACHED_INIT_SIZE_READY_001, TestSize.Level1)
1183 {
1184 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1185 true, header_, nullptr);
1186 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8041c02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1187 std::shared_ptr<DownloadRequest>& request) {};
1188 downloader->SetStatusCallback(statusCallback);
1189 Plugins::Callback* sourceCallback = new SourceCallback();
1190 downloader->cacheMediaBuffer_ = std::make_shared<CacheMediaChunkBufferHlsImpl>();
1191 downloader->cacheMediaBuffer_->Init(MAX_CACHE_BUFFER_SIZE, CHUNK_SIZE);
1192 downloader->callback_ = sourceCallback;
1193 EXPECT_EQ(downloader->IsCachedInitSizeReady(-1), false);
1194 PlayInfo playInfo;
1195 downloader->backPlayList_.push_back(playInfo);
1196 EXPECT_EQ(downloader->backPlayList_.size(), 1);
1197 EXPECT_EQ(downloader->IsCachedInitSizeReady(10), true);
1198 downloader->tsStorageInfo_[0].second = true;
1199 downloader->tsStorageInfo_[1].second = true;
1200 downloader->backPlayList_.push_back(playInfo);
1201 EXPECT_EQ(downloader->IsCachedInitSizeReady(10), true);
1202 downloader->cacheMediaBuffer_ = nullptr;
1203 EXPECT_EQ(downloader->IsCachedInitSizeReady(10), false);
1204 }
1205
1206 HWTEST_F(HlsMediaDownloaderUnitTest, HANDLE_WATER_LINE_001, TestSize.Level1)
1207 {
1208 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1209 true, header_, nullptr);
1210 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8041d02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1211 std::shared_ptr<DownloadRequest>& request) {};
1212 downloader->SetStatusCallback(statusCallback);
1213 Plugins::Callback* sourceCallback = new SourceCallback();
1214 downloader->callback_ = sourceCallback;
1215 downloader->waterLineAbove_ = 0;
1216 downloader->readOffset_ = 0;
1217 downloader->initCacheSize_ = 5000;
1218 downloader->isBuffering_ = true;
1219 downloader->tsStorageInfo_[downloader->readTsIndex_ + 1] = std::make_pair(0, true);
1220 downloader->HandleWaterLine();
1221 EXPECT_EQ(downloader->initCacheSize_, -1);
1222 EXPECT_EQ(downloader->isBuffering_, false);
1223 }
1224
1225 HWTEST_F(HlsMediaDownloaderUnitTest, CACHE_BUFFER_FULL_LOOP_001, TestSize.Level1)
1226 {
1227 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1228 true, header_, nullptr);
1229 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8041e02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1230 std::shared_ptr<DownloadRequest>& request) {};
1231 downloader->SetStatusCallback(statusCallback);
1232 Plugins::Callback* sourceCallback = new SourceCallback();
1233 downloader->callback_ = sourceCallback;
1234 PlayInfo playInfo;
1235 downloader->backPlayList_.push_back(playInfo);
1236 downloader->initCacheSize_ = 100;
1237 downloader->isSeekingFlag = true;
1238 downloader->cacheMediaBuffer_ = std::make_shared<CacheMediaChunkBufferHlsImpl>();
1239 downloader->cacheMediaBuffer_->Init(MAX_CACHE_BUFFER_SIZE, CHUNK_SIZE);
1240 EXPECT_EQ(downloader->CacheBufferFullLoop(), true);
1241 EXPECT_EQ(downloader->initCacheSize_, -1);
1242 downloader->isSeekingFlag = false;
1243 EXPECT_EQ(downloader->CacheBufferFullLoop(), false);
1244 }
1245
1246 HWTEST_F(HlsMediaDownloaderUnitTest, IS_NEED_BUFFER_FOR_PLAYING_001, TestSize.Level1)
1247 {
1248 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1249 false, header_, nullptr);
1250 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8041f02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1251 std::shared_ptr<DownloadRequest>& request) {};
1252 downloader->SetStatusCallback(statusCallback);
1253 Plugins::Callback* sourceCallback = new SourceCallback();
1254 downloader->callback_ = sourceCallback;
1255 EXPECT_EQ(downloader->IsNeedBufferForPlaying(), false);
1256 downloader->bufferDurationForPlaying_ = 5;
1257 downloader->isDemuxerInitSuccess_ = true;
1258 downloader->isBuffering_ = true;
1259 downloader->bufferingTime_ = static_cast<size_t>(downloader->
1260 steadyClock_.ElapsedMilliseconds()) - 100 * 1000;
1261 EXPECT_EQ(downloader->IsNeedBufferForPlaying(), false);
1262 downloader->bufferingTime_ = 0;
1263 downloader->waterlineForPlaying_ = 0;
1264 EXPECT_EQ(downloader->IsNeedBufferForPlaying(), false);
1265 }
1266
1267 HWTEST_F(HlsMediaDownloaderUnitTest, UpdateWaterLineAbove_001, TestSize.Level1)
1268 {
1269 hlsMediaDownloader->waterLineAbove_ = 0;
1270 hlsMediaDownloader->isFirstFrameArrived_ = false;
1271 hlsMediaDownloader->UpdateWaterLineAbove();
1272 EXPECT_EQ(hlsMediaDownloader->waterLineAbove_, 0);
1273 }
1274
1275 HWTEST_F(HlsMediaDownloaderUnitTest, UpdateWaterLineAbove_002, TestSize.Level1)
1276 {
1277 hlsMediaDownloader->waterLineAbove_ = 0;
1278 hlsMediaDownloader->currentBitRate_ = 0;
1279 hlsMediaDownloader->isFirstFrameArrived_ = true;
1280 hlsMediaDownloader->UpdateWaterLineAbove();
1281 EXPECT_GE(hlsMediaDownloader->waterLineAbove_, 0);
1282 }
1283
1284 HWTEST_F(HlsMediaDownloaderUnitTest, UpdateWaterLineAbove_003, TestSize.Level1)
1285 {
1286 hlsMediaDownloader->waterLineAbove_ = 0;
1287 hlsMediaDownloader->currentBitRate_ = BUFFER_SIZE;
1288 hlsMediaDownloader->isFirstFrameArrived_ = true;
1289 hlsMediaDownloader->UpdateWaterLineAbove();
1290 EXPECT_GE(hlsMediaDownloader->waterLineAbove_, 0);
1291 }
1292
1293 HWTEST_F(HlsMediaDownloaderUnitTest, read, TestSize.Level1)
1294 {
1295 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
1296 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
1297 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8042002(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1298 std::shared_ptr<DownloadRequest>& request) {
1299 };
1300 downloader->SetStatusCallback(statusCallback);
1301 downloader->Open(testUrl, httpHeader);
1302 downloader->GetSeekable();
1303 unsigned char buff[BUFFER_SIZE];
1304 ReadDataInfo readDataInfo;
1305 readDataInfo.streamId_ = 0;
1306 readDataInfo.wantReadLength_ = BUFFER_SIZE;
1307 readDataInfo.isEos_ = true;
1308
1309 downloader->isBuffering_ = true;
1310 downloader->canWrite_ = false;
1311 downloader->Read(buff, readDataInfo);
1312
1313 downloader->Close(true);
1314 downloader = nullptr;
1315 EXPECT_GE(readDataInfo.realReadLength_, 0);
1316 }
1317
1318 HWTEST_F(HlsMediaDownloaderUnitTest, CheckPlaylist, TestSize.Level1)
1319 {
1320 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
1321 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
1322 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8042102(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1323 std::shared_ptr<DownloadRequest>& request) {
1324 };
1325 downloader->SetStatusCallback(statusCallback);
1326 downloader->Open(testUrl, httpHeader);
1327 downloader->GetSeekable();
1328 unsigned char buff[BUFFER_SIZE];
1329 ReadDataInfo readDataInfo;
1330 readDataInfo.streamId_ = 0;
1331 readDataInfo.wantReadLength_ = BUFFER_SIZE;
1332 readDataInfo.isEos_ = true;
1333 downloader->Read(buff, readDataInfo);
1334
1335 OSAL::SleepFor(1 * 1000);
1336 downloader->isStopped = true;
1337 downloader->readOffset_ = 1;
1338 downloader->readTsIndex_ = BUFFER_SIZE + BUFFER_SIZE;
1339 downloader->isStopped = true;
1340 downloader->CheckPlaylist(buff, readDataInfo);
1341
1342 downloader->isStopped = false;
1343 downloader->CheckPlaylist(buff, readDataInfo);
1344
1345 downloader->Close(true);
1346 downloader = nullptr;
1347 EXPECT_GE(readDataInfo.realReadLength_, 0);
1348 }
1349
1350 HWTEST_F(HlsMediaDownloaderUnitTest, CheckPlaylist_1, TestSize.Level1)
1351 {
1352 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
1353 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
1354 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8042202(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1355 std::shared_ptr<DownloadRequest>& request) {
1356 };
1357 downloader->SetStatusCallback(statusCallback);
1358 downloader->Open(testUrl, httpHeader);
1359 downloader->GetSeekable();
1360 unsigned char buff[BUFFER_SIZE];
1361 ReadDataInfo readDataInfo;
1362 readDataInfo.streamId_ = 0;
1363 readDataInfo.wantReadLength_ = BUFFER_SIZE;
1364 readDataInfo.isEos_ = true;
1365
1366 downloader->readTsIndex_ = BUFFER_SIZE + BUFFER_SIZE;
1367 downloader->isStopped = false;
1368 downloader->CheckPlaylist(buff, readDataInfo);
1369
1370 downloader->isStopped = true;
1371 downloader->CheckPlaylist(buff, readDataInfo);
1372
1373 downloader->Read(buff, readDataInfo);
1374
1375 downloader->isStopped = true;
1376 downloader->readOffset_ = 1;
1377
1378 downloader->readTsIndex_ = BUFFER_SIZE + BUFFER_SIZE;
1379 downloader->isStopped = true;
1380 downloader->CheckPlaylist(buff, readDataInfo);
1381
1382 downloader->isStopped = false;
1383 downloader->CheckPlaylist(buff, readDataInfo);
1384
1385 downloader->Close(true);
1386 downloader = nullptr;
1387 EXPECT_GE(readDataInfo.realReadLength_, 0);
1388 }
1389
1390 HWTEST_F(HlsMediaDownloaderUnitTest, ReadDelegate, TestSize.Level1)
1391 {
1392 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
1393 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
1394 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8042302(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1395 std::shared_ptr<DownloadRequest>& request) {
1396 };
1397 downloader->SetStatusCallback(statusCallback);
1398 downloader->Open(testUrl, httpHeader);
1399 downloader->GetSeekable();
1400 unsigned char buff[BUFFER_SIZE];
1401 ReadDataInfo readDataInfo;
1402 readDataInfo.streamId_ = 0;
1403 readDataInfo.wantReadLength_ = BUFFER_SIZE;
1404 readDataInfo.isEos_ = true;
1405 downloader->readTsIndex_ = BUFFER_SIZE - 1;
1406
1407 downloader->ReadDelegate(buff, readDataInfo);
1408 downloader->Read(buff, readDataInfo);
1409 downloader->Close(true);
1410 downloader = nullptr;
1411 EXPECT_GE(readDataInfo.realReadLength_, 0);
1412 }
1413
1414 HWTEST_F(HlsMediaDownloaderUnitTest, SaveCacheBufferDataNotblock, TestSize.Level1)
1415 {
1416 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
1417 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
1418 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8042402(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1419 std::shared_ptr<DownloadRequest>& request) {
1420 };
1421 downloader->SetStatusCallback(statusCallback);
1422 downloader->Open(testUrl, httpHeader);
1423 downloader->GetSeekable();
1424 unsigned char buff[BUFFER_SIZE];
1425 ReadDataInfo readDataInfo;
1426 readDataInfo.streamId_ = 0;
1427 readDataInfo.wantReadLength_ = BUFFER_SIZE;
1428 readDataInfo.isEos_ = true;
1429 downloader->Read(buff, readDataInfo);
1430 uint8_t * data = new uint8_t[10];
1431 uint32_t len = BUFFER_SIZE;
1432 uint32_t res = downloader->SaveCacheBufferDataNotblock(data, len);
1433 delete[] data;
1434 EXPECT_GE(res, 0);
1435 }
1436
1437 HWTEST_F(HlsMediaDownloaderUnitTest, SaveCacheBufferDataNotblock_1, TestSize.Level1)
1438 {
1439 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
1440 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
1441 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8042502(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1442 std::shared_ptr<DownloadRequest>& request) {
1443 };
1444 downloader->SetStatusCallback(statusCallback);
1445 downloader->Open(testUrl, httpHeader);
1446 downloader->GetSeekable();
1447 unsigned char buff[BUFFER_SIZE];
1448 ReadDataInfo readDataInfo;
1449 readDataInfo.streamId_ = 0;
1450 readDataInfo.wantReadLength_ = BUFFER_SIZE;
1451 readDataInfo.isEos_ = true;
1452 downloader->Read(buff, readDataInfo);
1453 uint8_t * data = new uint8_t[BUFFER_SIZE];
1454 uint32_t len = BUFFER_SIZE;
1455 downloader->isNeedResume_.store(true);
1456 uint32_t res = downloader->SaveCacheBufferDataNotblock(data, len);
1457 delete[] data;
1458 EXPECT_GE(res, 0);
1459 }
1460
1461 HWTEST_F(HlsMediaDownloaderUnitTest, SaveCacheBufferDataNotblock_3, TestSize.Level1)
1462 {
1463 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
1464 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
1465 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8042602(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1466 std::shared_ptr<DownloadRequest>& request) {
1467 };
1468 downloader->SetStatusCallback(statusCallback);
1469 downloader->Open(testUrl, httpHeader);
1470 downloader->GetSeekable();
1471 unsigned char buff[BUFFER_SIZE];
1472 ReadDataInfo readDataInfo;
1473 readDataInfo.streamId_ = 0;
1474 readDataInfo.wantReadLength_ = BUFFER_SIZE;
1475 readDataInfo.isEos_ = true;
1476 downloader->Read(buff, readDataInfo);
1477 uint8_t * data = new uint8_t[BUFFER_SIZE];
1478 uint32_t len = BUFFER_SIZE;
1479 downloader->isNeedResume_.store(true);
1480 uint32_t res = downloader->SaveCacheBufferDataNotblock(data, len);
1481 delete[] data;
1482 EXPECT_GE(res, 0);
1483 }
1484
1485 HWTEST_F(HlsMediaDownloaderUnitTest, GET_STREAM_INFO_001, TestSize.Level1)
1486 {
1487 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1488 true, header_, nullptr);
1489 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8042702(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1490 std::shared_ptr<DownloadRequest>& request) {};
1491 downloader->SetStatusCallback(statusCallback);
1492 Plugins::Callback* sourceCallback = new SourceCallback();
1493 downloader->callback_ = sourceCallback;
1494 std::vector<StreamInfo> streams;
1495 EXPECT_EQ(downloader->GetStreamInfo(streams), Status::OK);
1496 downloader->isInterruptNeeded_ = true;
1497 EXPECT_EQ(downloader->GetStreamInfo(streams), Status::OK);
1498 downloader->isInterruptNeeded_ = false;
1499 std::string testUrl = TEST_URI_PATH + "test_hls/testXMap.m3u8";
1500 downloader->Open(testUrl, httpHeader);
1501 EXPECT_EQ(downloader->GetStreamInfo(streams), Status::OK);
1502 downloader->playlistDownloader_ = nullptr;
1503 EXPECT_EQ(downloader->GetStreamInfo(streams), Status::OK);
1504 std::shared_ptr<HlsPlayListDownloader> playlist = std::make_shared<HlsPlayListDownloader>();
1505 downloader->playlistDownloader_ = playlist;
1506 playlist->currentVariant_ = std::make_shared<M3U8VariantStream>("example_name", "example_uri", nullptr);
1507 playlist->master_ = std::make_shared<M3U8MasterPlaylist>("example_playlist", "example_uri", 0,
1508 std::map<std::string, std::string>(),
__anona87fe8042802(DownloadStatus status, std::shared_ptr<Downloader>& dl, std::shared_ptr<DownloadRequest>& req) 1509 [](DownloadStatus status, std::shared_ptr<Downloader>& dl, std::shared_ptr<DownloadRequest>& req) {});
1510 playlist->master_->isFmp4_ = false;
1511 EXPECT_EQ(downloader->GetStreamInfo(streams), Status::OK);
1512 playlist->currentVariant_ = nullptr;
1513 EXPECT_EQ(downloader->GetStreamInfo(streams), Status::OK);
1514 playlist->master_ = nullptr;
1515 EXPECT_EQ(downloader->GetStreamInfo(streams), Status::OK);
1516 downloader->playlistDownloader_ = nullptr;
1517 }
1518
1519 HWTEST_F(HlsMediaDownloaderUnitTest, IS_HLS_FMP4_001, TestSize.Level1)
1520 {
1521 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1522 true, header_, nullptr);
1523 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8042902(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1524 std::shared_ptr<DownloadRequest>& request) {};
1525 downloader->SetStatusCallback(statusCallback);
1526 Plugins::Callback* sourceCallback = new SourceCallback();
1527 downloader->callback_ = sourceCallback;
1528 EXPECT_EQ(downloader->IsHlsFmp4(), false);
1529 downloader->playlistDownloader_ = nullptr;
1530 EXPECT_EQ(downloader->IsHlsFmp4(), false);
1531 }
1532
1533 HWTEST_F(HlsMediaDownloaderUnitTest, HANDLE_SEEK_READY_001, TestSize.Level1)
1534 {
1535 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1536 true, header_, nullptr);
1537 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8042a02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1538 std::shared_ptr<DownloadRequest>& request) {};
1539 downloader->SetStatusCallback(statusCallback);
1540 Plugins::Callback* sourceCallback = new SourceCallback();
1541 downloader->callback_ = sourceCallback;
1542 downloader->HandleSeekReady(1, 1, 0);
1543 EXPECT_EQ(downloader->IsHlsFmp4(), false);
1544 std::string testUrl = TEST_URI_PATH + "test_hls/testXMap.m3u8";
1545 downloader->Open(testUrl, httpHeader);
1546 std::vector<StreamInfo> streams;
1547 downloader->GetStreamInfo(streams);
1548 downloader->HandleSeekReady(1, 1, 0);
1549 EXPECT_EQ(downloader->IsHlsFmp4(), true);
1550 downloader->callback_ = nullptr;
1551 downloader->HandleSeekReady(1, 1, 0);
1552 EXPECT_EQ(downloader->IsHlsFmp4(), true);
1553 downloader->playlistDownloader_ = nullptr;
1554 downloader->HandleSeekReady(1, 1, 0);
1555 EXPECT_EQ(downloader->IsHlsFmp4(), false);
1556 }
1557
1558 HWTEST_F(HlsMediaDownloaderUnitTest, REMOVE_FMP4_PADDING_DATA_001, TestSize.Level1)
1559 {
1560 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1561 true, header_, nullptr);
1562 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8042b02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1563 std::shared_ptr<DownloadRequest>& request) {};
1564 downloader->SetStatusCallback(statusCallback);
1565 Plugins::Callback* sourceCallback = new SourceCallback();
1566 downloader->callback_ = sourceCallback;
1567 std::string testUrl = TEST_URI_PATH + "test_hls/testXMap.m3u8";
1568 downloader->Open(testUrl, httpHeader);
1569 std::vector<StreamInfo> streams;
1570 downloader->GetStreamInfo(streams);
1571 uint8_t buffer[16] = {
1572 0x0d, 0x0C, 0x0C, 0x0C,
1573 0x0C, 0x0C, 0x0C, 0x0C,
1574 0x0C, 0x0C, 0x0C, 0x0C,
1575 0x0C, 0x0C, 0x0C, 0x0C
1576 };
1577 ReadDataInfo readDataInfo;
1578 readDataInfo.streamId_ = 1;
1579 readDataInfo.wantReadLength_ = 100;
1580 readDataInfo.realReadLength_ = 16;
1581 downloader->RemoveFmp4PaddingData(buffer, readDataInfo);
1582 EXPECT_EQ(readDataInfo.realReadLength_, 16);
1583 downloader->keyLen_ = 1;
1584 downloader->RemoveFmp4PaddingData(buffer, readDataInfo);
1585 EXPECT_NE(readDataInfo.realReadLength_, 16);
1586 readDataInfo.realReadLength_ = 0;
1587 downloader->RemoveFmp4PaddingData(buffer, readDataInfo);
1588 EXPECT_EQ(readDataInfo.realReadLength_, 0);
1589 readDataInfo.realReadLength_ = 5;
1590 downloader->RemoveFmp4PaddingData(buffer, readDataInfo);
1591 EXPECT_EQ(readDataInfo.realReadLength_, 5);
1592 }
1593
1594 HWTEST_F(HlsMediaDownloaderUnitTest, READ_HEADER_DATA_001, TestSize.Level1)
1595 {
1596 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1597 true, header_, nullptr);
1598 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8042c02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1599 std::shared_ptr<DownloadRequest>& request) {};
1600 downloader->SetStatusCallback(statusCallback);
1601 Plugins::Callback* sourceCallback = new SourceCallback();
1602 downloader->callback_ = sourceCallback;
1603 unsigned char * buffer = new unsigned char[1 * 1024 * 1024];
1604 ReadDataInfo readDataInfo;
1605 readDataInfo.streamId_ = 1;
1606 readDataInfo.wantReadLength_ = 1 * 1024 * 1024;
1607 readDataInfo.realReadLength_ = 16;
1608 EXPECT_EQ(downloader->IsHlsFmp4(), false);
1609 EXPECT_EQ(downloader->ReadHeaderData(buffer, readDataInfo), false);
1610 std::string testUrl = TEST_URI_PATH + "test_hls/testXMap.m3u8";
1611 downloader->Open(testUrl, httpHeader);
1612 std::vector<StreamInfo> streams;
1613 downloader->GetStreamInfo(streams);
1614 EXPECT_EQ(downloader->ReadHeaderData(buffer, readDataInfo), true);
1615 readDataInfo.streamId_ = 2;
1616 EXPECT_EQ(downloader->ReadHeaderData(buffer, readDataInfo), true);
1617 downloader->ReadCacheBuffer(buffer, readDataInfo);
1618 readDataInfo.streamId_ = 0;
1619 EXPECT_EQ(downloader->ReadHeaderData(buffer, readDataInfo), false);
1620 readDataInfo.streamId_ = 1;
1621 downloader->isNeedReadHeader_ = false;
1622 EXPECT_EQ(downloader->ReadHeaderData(buffer, readDataInfo), false);
1623 downloader->playlistDownloader_ = nullptr;
1624 EXPECT_EQ(downloader->ReadHeaderData(buffer, readDataInfo), false);
1625 delete[] buffer;
1626 }
1627
1628 HWTEST_F(HlsMediaDownloaderUnitTest, IS_PURE_BYTE_RANGE_001, TestSize.Level1)
1629 {
1630 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1631 true, header_, nullptr);
1632 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8042d02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1633 std::shared_ptr<DownloadRequest>& request) {};
1634 downloader->SetStatusCallback(statusCallback);
1635 Plugins::Callback* sourceCallback = new SourceCallback();
1636 downloader->callback_ = sourceCallback;
1637 EXPECT_EQ(downloader->IsPureByteRange(), false);
1638 std::string testUrl = TEST_URI_PATH + "test_hls/testByteRange.m3u8";
1639 downloader->Open(testUrl, httpHeader);
1640 std::vector<StreamInfo> streams;
1641 downloader->GetStreamInfo(streams);
1642 EXPECT_EQ(downloader->IsPureByteRange(), true);
1643 downloader->playlistDownloader_ = nullptr;
1644 EXPECT_EQ(downloader->IsPureByteRange(), false);
1645 }
1646
1647 HWTEST_F(HlsMediaDownloaderUnitTest, PUT_REQUEST_INTO_DOWNLOADER_001, TestSize.Level1)
1648 {
1649 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1650 true, header_, nullptr);
1651 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8042e02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1652 std::shared_ptr<DownloadRequest>& request) {};
1653 downloader->SetStatusCallback(statusCallback);
1654 Plugins::Callback* sourceCallback = new SourceCallback();
1655 downloader->callback_ = sourceCallback;
1656 PlayInfo playInfo;
1657 playInfo.url_ = TEST_URI_PATH + "test_hls/testByteRange.m3u8";
1658 playInfo.length_ = 1000;
1659 playInfo.offset_ = 0;
1660 playInfo.rangeUrl_ = TEST_URI_PATH + "test_hls/testByteRange.m3u8";
1661 downloader->fragmentDownloadStart[playInfo.url_] = true;
1662 downloader->writeTsIndex_ = 1;
1663 downloader->PutRequestIntoDownloader(playInfo);
1664 EXPECT_EQ(downloader->downloadRequest_, nullptr);
1665 downloader->writeTsIndex_ = 0;
1666 downloader->PutRequestIntoDownloader(playInfo);
1667 EXPECT_EQ(downloader->downloadRequest_, nullptr);
1668 downloader->fragmentDownloadStart[playInfo.url_] = false;
1669 downloader->PutRequestIntoDownloader(playInfo);
1670 EXPECT_NE(downloader->downloadRequest_, nullptr);
1671 }
1672
1673 HWTEST_F(HlsMediaDownloaderUnitTest, HANDLE_FFMPEG_READ_BACK_001, TestSize.Level1)
1674 {
1675 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1676 false, header_, nullptr);
1677 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8042f02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1678 std::shared_ptr<DownloadRequest>& request) {};
1679 downloader->SetStatusCallback(statusCallback);
1680 Plugins::Callback* sourceCallback = new SourceCallback();
1681 downloader->callback_ = sourceCallback;
1682 downloader->curStreamId_ = 1;
1683 downloader->isNeedResetOffset_ = true;
1684 downloader->HandleFfmpegReadback(100);
1685 EXPECT_EQ(downloader->ffmpegOffset_, 100);
1686 downloader->curStreamId_ = 0;
1687 downloader->HandleFfmpegReadback(100);
1688 EXPECT_EQ(downloader->ffmpegOffset_, 100);
1689 downloader->curStreamId_ = 1;
1690 downloader->isNeedResetOffset_ = false;
1691 downloader->HandleFfmpegReadback(100);
1692 EXPECT_EQ(downloader->ffmpegOffset_, 100);
1693 }
1694
1695 HWTEST_F(HlsMediaDownloaderUnitTest, READ_DELEGATE_001, TestSize.Level1)
1696 {
1697 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1698 true, header_, nullptr);
1699 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8043002(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1700 std::shared_ptr<DownloadRequest>& request) {};
1701 downloader->SetStatusCallback(statusCallback);
1702 Plugins::Callback* sourceCallback = new SourceCallback();
1703 downloader->callback_ = sourceCallback;
1704 std::string testUrl = TEST_URI_PATH + "test_hls/testByteRange.m3u8";
1705 downloader->Open(testUrl, httpHeader);
1706 std::vector<StreamInfo> streams;
1707 downloader->GetStreamInfo(streams);
1708 OSAL::SleepFor(3 * 1000);
1709 downloader->cacheMediaBuffer_->Clear();
1710 downloader->writeTsIndex_ = 0;
1711
1712 EXPECT_NE(downloader->GetDuration(), 0);
1713 EXPECT_EQ(downloader->CheckReadStatus(), true);
1714 EXPECT_EQ(downloader->GetBufferSize(), 0);
1715 unsigned char * buffer = new unsigned char[1 * 1024 * 1024];
1716 ReadDataInfo readDataInfo;
1717 downloader->isStopped = false;
1718 EXPECT_EQ(downloader->CheckPlaylist(buffer, readDataInfo), Status::ERROR_UNKNOWN);
1719 downloader->downloadErrorState_ = true;
1720 EXPECT_EQ(downloader->CheckBreakCondition(), true);
1721 EXPECT_EQ(downloader->HandleCache(), false);
1722 EXPECT_EQ(downloader->isBuffering_, false);
1723 readDataInfo.wantReadLength_ = 0;
1724 EXPECT_EQ(downloader->ReadDelegate(buffer, readDataInfo), Status::END_OF_STREAM);
1725 readDataInfo.wantReadLength_ = 4096;
1726 EXPECT_EQ(downloader->ReadDelegate(buffer, readDataInfo), Status::OK);
1727 EXPECT_EQ(downloader->writeTsIndex_, 0);
1728
1729 downloader->isBuffering_ = true;
1730 EXPECT_EQ(downloader->ReadDelegate(buffer, readDataInfo), Status::ERROR_AGAIN);
1731
1732 downloader->seekTime_ = 100000000000;
1733 EXPECT_EQ(downloader->backPlayList_.size(), 2);
1734 downloader->readTsIndex_ = 1;
1735 downloader->tsStorageInfo_[downloader->readTsIndex_] = std::make_pair(0, true);
1736 EXPECT_EQ(downloader->ReadDelegate(buffer, readDataInfo), Status::END_OF_STREAM);
1737
1738 downloader->isInterruptNeeded_ = true;
1739 EXPECT_EQ(downloader->ReadDelegate(buffer, readDataInfo), Status::END_OF_STREAM);
1740 downloader->cacheMediaBuffer_ = nullptr;
1741 EXPECT_EQ(downloader->ReadDelegate(buffer, readDataInfo), Status::END_OF_STREAM);
1742 }
1743
1744 HWTEST_F(HlsMediaDownloaderUnitTest, PREPARE_TO_SEEK_001, TestSize.Level1)
1745 {
1746 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1747 true, header_, nullptr);
1748 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8043102(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1749 std::shared_ptr<DownloadRequest>& request) {};
1750 downloader->SetStatusCallback(statusCallback);
1751 Plugins::Callback* sourceCallback = new SourceCallback();
1752 downloader->callback_ = sourceCallback;
1753 downloader->PrepareToSeek();
1754 EXPECT_EQ(downloader->playlistDownloader_->IsParseAndNotifyFinished(), false);
1755 downloader->isInterruptNeeded_ = true;
1756 downloader->PrepareToSeek();
1757 EXPECT_EQ(downloader->playlistDownloader_->IsParseAndNotifyFinished(), false);
1758 downloader->isInterruptNeeded_ = false;
1759 std::string testUrl = TEST_URI_PATH + "test_hls/testXMap.m3u8";
1760 downloader->Open(testUrl, httpHeader);
1761 std::vector<StreamInfo> streams;
1762 downloader->GetStreamInfo(streams);
1763 downloader->PrepareToSeek();
1764 EXPECT_EQ(downloader->playlistDownloader_->IsParseAndNotifyFinished(), true);
1765 EXPECT_EQ(downloader->IsHlsFmp4(), true);
1766 }
1767
1768 HWTEST_F(HlsMediaDownloaderUnitTest, SEEK_TO_TIME_001, TestSize.Level1)
1769 {
1770 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1771 true, header_, nullptr);
1772 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8043202(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1773 std::shared_ptr<DownloadRequest>& request) {};
1774 downloader->SetStatusCallback(statusCallback);
1775 Plugins::Callback* sourceCallback = new SourceCallback();
1776 downloader->callback_ = sourceCallback;
1777 downloader->SeekToTime(0, SeekMode::SEEK_NEXT_SYNC);
1778 EXPECT_EQ(downloader->GetBufferSize(), 0);
1779
1780 std::string testUrl = TEST_URI_PATH + "test_hls/testXMap.m3u8";
1781 downloader->Open(testUrl, httpHeader);
1782 std::vector<StreamInfo> streams;
1783 downloader->GetStreamInfo(streams);
1784 downloader->PrepareToSeek();
1785 downloader->SeekToTime(10000, SeekMode::SEEK_NEXT_SYNC);
1786 EXPECT_EQ(downloader->isNeedReadHeader_, true);
1787 downloader->SeekToTime(50000000000, SeekMode::SEEK_NEXT_SYNC);
1788 EXPECT_EQ(downloader->readTsIndex_, 0);
1789 downloader->backPlayList_.clear();
1790 downloader->SeekToTime(50000000000, SeekMode::SEEK_NEXT_SYNC);
1791 EXPECT_EQ(downloader->readTsIndex_, 0);
1792 }
1793
1794 HWTEST_F(HlsMediaDownloaderUnitTest, ON_PLAYLIST_CHANGED_001, TestSize.Level1)
1795 {
1796 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1797 false, header_, nullptr);
1798 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8043302(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1799 std::shared_ptr<DownloadRequest>& request) {};
1800 downloader->SetStatusCallback(statusCallback);
1801 Plugins::Callback* sourceCallback = new SourceCallback();
1802 downloader->callback_ = sourceCallback;
1803 std::string testUrl = TEST_URI_PATH + "test_hls/testXMap.m3u8";
1804 downloader->Open(testUrl, httpHeader);
1805 std::vector<StreamInfo> streams;
1806 downloader->GetStreamInfo(streams);
1807 downloader->PrepareToSeek();
1808
1809 std::vector<PlayInfo> playList;
1810 PlayInfo palyInfo;
1811 playList.push_back(palyInfo);
1812 downloader->isSelectingBitrate_ = true;
1813 downloader->writeTsIndex_ = 10;
1814 downloader->OnPlayListChanged(playList);
1815 EXPECT_EQ(downloader->isSelectingBitrate_, true);
1816
1817 downloader->isInterruptNeeded_ = true;
1818 downloader->OnPlayListChanged(playList);
1819 EXPECT_EQ(downloader->isInterruptNeeded_, true);
1820 }
1821
1822 HWTEST_F(HlsMediaDownloaderUnitTest, UPDATE_MASTER_PLAYLIST_001, TestSize.Level1)
1823 {
1824 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1825 true, header_, nullptr);
1826 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8043402(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1827 std::shared_ptr<DownloadRequest>& request) {};
1828 downloader->SetStatusCallback(statusCallback);
1829 Plugins::Callback* sourceCallback = new SourceCallback();
1830 downloader->callback_ = sourceCallback;
1831 std::string testUrl = TEST_URI_PATH + "test_hls/testMutiStream.m3u8";
1832 downloader->Open(testUrl, httpHeader);
1833 std::vector<StreamInfo> streams;
1834 downloader->GetStreamInfo(streams);
1835 EXPECT_EQ(streams.size(), 0);
1836 }
1837
1838 HWTEST_F(HlsMediaDownloaderUnitTest, PLAYLIST_DOWNLOADER_001, TestSize.Level1)
1839 {
1840 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1841 true, header_, nullptr);
1842 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8043502(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1843 std::shared_ptr<DownloadRequest>& request) {};
1844 downloader->SetStatusCallback(statusCallback);
1845 Plugins::Callback* sourceCallback = new SourceCallback();
1846 downloader->callback_ = sourceCallback;
1847 uint8_t data[1] = {1};
1848 EXPECT_EQ(downloader->playlistDownloader_->SaveData(data, 0, true), 0);
1849 EXPECT_EQ(downloader->playlistDownloader_->SaveData(nullptr, 0, true), 0);
1850 }
1851
1852 HWTEST_F(HlsMediaDownloaderUnitTest, PLAYLIST_DOWNLOADER_002, TestSize.Level1)
1853 {
1854 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1855 true, header_, nullptr);
1856 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8043602(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1857 std::shared_ptr<DownloadRequest>& request) {};
1858 downloader->SetStatusCallback(statusCallback);
1859 Plugins::Callback* sourceCallback = new SourceCallback();
1860 downloader->callback_ = sourceCallback;
1861 std::shared_ptr<Downloader> downloader1 = std::make_shared<Downloader>("hlsPlayList");
1862 std::shared_ptr<DownloadRequest> request = std::make_shared<DownloadRequest>("", nullptr, nullptr, false);
1863 downloader->playlistDownloader_->OnDownloadStatus(DownloadStatus::PARTTAL_DOWNLOAD, downloader1, request);
1864 request->clientError_ = 52;
1865 downloader->playlistDownloader_->OnDownloadStatus(DownloadStatus::PARTTAL_DOWNLOAD, downloader1, request);
1866 request->serverError_ = 403;
1867 downloader->playlistDownloader_->OnDownloadStatus(DownloadStatus::PARTTAL_DOWNLOAD, downloader1, request);
1868 request->serverError_ = 0;
1869 downloader->playlistDownloader_->OnDownloadStatus(DownloadStatus::PARTTAL_DOWNLOAD, downloader1, request);
1870 EXPECT_EQ(request->clientError_, 52);
1871 }
1872
1873 HWTEST_F(HlsMediaDownloaderUnitTest, PLAYLIST_DOWNLOADER_003, TestSize.Level1)
1874 {
1875 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1876 true, header_, nullptr);
1877 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8043702(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1878 std::shared_ptr<DownloadRequest>& request) {};
1879 downloader->SetStatusCallback(statusCallback);
1880 Plugins::Callback* sourceCallback = new SourceCallback();
1881 downloader->callback_ = sourceCallback;
1882 downloader->playlistDownloader_->downloader_ = nullptr;
1883 downloader->playlistDownloader_->GetHttpHeader();
1884 EXPECT_EQ(downloader->playlistDownloader_->IsLive(), false);
1885
1886 downloader->playlistDownloader_->StopBufferring(true);
1887 downloader->playlistDownloader_->Cancel();
1888 downloader->playlistDownloader_->Start();
1889 downloader->playlistDownloader_->Stop();
1890 downloader->playlistDownloader_->Pause();
1891 downloader->playlistDownloader_->SetInterruptState(true);
1892 downloader->playlistDownloader_->SetAppUid(1);
1893 EXPECT_EQ(downloader->playlistDownloader_->isAppBackground_, false);
1894 }
1895
1896 HWTEST_F(HlsMediaDownloaderUnitTest, PLAYLIST_DOWNLOADER_004, TestSize.Level1)
1897 {
1898 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1899 true, header_, nullptr);
1900 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8043802(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1901 std::shared_ptr<DownloadRequest>& request) {};
1902 downloader->SetStatusCallback(statusCallback);
1903 Plugins::Callback* sourceCallback = new SourceCallback();
1904 downloader->callback_ = sourceCallback;
1905 std::string testUrl = TEST_URI_PATH + "test_hls/testHlsLive.m3u8";
1906 downloader->Open(testUrl, httpHeader);
1907 downloader->GetSeekable();
1908 downloader->GetSeekable();
1909 downloader->playlistDownloader_->PlayListDownloaderInit();
1910 downloader->playlistDownloader_->Resume();
1911 downloader->playlistDownloader_->Pause(false);
1912 downloader->playlistDownloader_->Pause(true);
1913 EXPECT_EQ(downloader->playlistDownloader_->IsLive(), true);
1914 EXPECT_NE(downloader->playlistDownloader_->updateTask_, nullptr);
1915 }
1916
1917 HWTEST_F(HlsMediaDownloaderUnitTest, STOP_BUFFERING_001, TestSize.Level1)
1918 {
1919 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(10, true, header_, nullptr);
1920 std::string testUrl = TEST_URI_PATH + "test_cbr/720_1M/video_720.m3u8";
1921 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8043902(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1922 std::shared_ptr<DownloadRequest>& request) {
1923 };
1924 downloader->SetStatusCallback(statusCallback);
1925 downloader->Open(testUrl, httpHeader);
1926 downloader->GetSeekable();
1927 OSAL::SleepFor(2 * 1000);
1928 downloader->StopBufferring(true);
1929 EXPECT_EQ(downloader->isInterrupt_, true);
1930 downloader->StopBufferring(false);
1931 downloader->StopBufferring(false);
1932 EXPECT_EQ(downloader->isInterrupt_, false);
1933 }
1934
1935 HWTEST_F(HlsMediaDownloaderUnitTest, PLAYLIST_DOWNLOADER_005, TestSize.Level1)
1936 {
1937 std::shared_ptr<HlsMediaDownloader> downloader = std::make_shared<HlsMediaDownloader>(MAX_CACHE_BUFFER_SIZE,
1938 false, header_, nullptr);
1939 auto statusCallback = [] (DownloadStatus&& status, std::shared_ptr<Downloader>& downloader,
__anona87fe8043a02(DownloadStatus&& status, std::shared_ptr<Downloader>& downloader, std::shared_ptr<DownloadRequest>& request) 1940 std::shared_ptr<DownloadRequest>& request) {};
1941 downloader->SetStatusCallback(statusCallback);
1942 Plugins::Callback* sourceCallback = new SourceCallback();
1943 downloader->callback_ = sourceCallback;
1944 std::string testUrl = TEST_URI_PATH + "test_hls/testHlsLive.m3u8";
1945 downloader->Open(testUrl, httpHeader);
1946 downloader->GetSeekable();
1947 downloader->playlistDownloader_->PlayListDownloaderInit();
1948 downloader->playlistDownloader_->Resume();
1949 downloader->playlistDownloader_->Pause(false);
1950 downloader->playlistDownloader_->Pause(true);
1951 EXPECT_EQ(downloader->playlistDownloader_->IsLive(), true);
1952 EXPECT_NE(downloader->playlistDownloader_->updateTask_, nullptr);
1953
1954 downloader->playlistDownloader_->ReOpen();
1955 downloader->GetSeekable();
1956 EXPECT_EQ(downloader->playlistDownloader_->IsLive(), true);
1957 EXPECT_NE(downloader->playlistDownloader_->updateTask_, nullptr);
1958 downloader->Close(true);
1959 downloader = nullptr;
1960 delete sourceCallback;
1961 }
1962 }