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