• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }