1 // Copyright 2023 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "media/filters/hls_data_source_provider.h"
6 #include "testing/gmock/include/gmock/gmock.h"
7 #include "testing/gtest/include/gtest/gtest.h"
11 class HlsDataSourceStreamUnittest : public testing::Test {
13 HlsDataSourceStreamUnittest() = default;
15 void OnReleaseInternal(HlsDataSourceStream::StreamId id) { OnRelease(id); }
17 MOCK_METHOD(void, OnRelease, (HlsDataSourceStream::StreamId), ());
20 std::unique_ptr<HlsDataSourceStream> CreateStream(
21 absl::optional<hls::types::ByteRange> range) {
22 auto stream_id = stream_id_generator_.GenerateNextId();
23 EXPECT_CALL(*this, OnRelease(stream_id));
24 return std::make_unique<HlsDataSourceStream>(
26 base::BindOnce(&HlsDataSourceStreamUnittest::OnReleaseInternal,
27 base::Unretained(this), stream_id),
31 HlsDataSourceStream::StreamId::Generator stream_id_generator_;
34 TEST_F(HlsDataSourceStreamUnittest, TestNewStreamHasProperties) {
35 auto stream = CreateStream(absl::nullopt);
37 ASSERT_EQ(stream->read_position(), static_cast<size_t>(0));
38 ASSERT_EQ(stream->buffer_size(), static_cast<size_t>(0));
39 ASSERT_EQ(stream->max_read_position(), absl::nullopt);
40 ASSERT_EQ(stream->CanReadMore(), true);
42 auto capped = CreateStream(hls::types::ByteRange::Validate(10, 20));
43 ASSERT_EQ(capped->read_position(), static_cast<size_t>(20));
44 ASSERT_EQ(capped->buffer_size(), static_cast<size_t>(0));
45 ASSERT_EQ(capped->max_read_position().value_or(0), static_cast<size_t>(30));
46 ASSERT_EQ(capped->CanReadMore(), true);
49 TEST_F(HlsDataSourceStreamUnittest, TestWritesAndClears) {
50 auto stream = CreateStream(absl::nullopt);
52 stream->LockStreamForWriting(10);
53 ASSERT_EQ(stream->read_position(), static_cast<size_t>(0));
54 ASSERT_EQ(stream->buffer_size(), static_cast<size_t>(10));
55 ASSERT_EQ(stream->max_read_position(), absl::nullopt);
56 ASSERT_EQ(stream->CanReadMore(), true);
58 // No changes, because no write.
59 stream->UnlockStreamPostWrite(0, false);
60 stream->LockStreamForWriting(10);
61 ASSERT_EQ(stream->read_position(), static_cast<size_t>(0));
62 ASSERT_EQ(stream->buffer_size(), static_cast<size_t>(10));
63 ASSERT_EQ(stream->max_read_position(), absl::nullopt);
64 ASSERT_EQ(stream->CanReadMore(), true);
66 stream->UnlockStreamPostWrite(10, false);
67 ASSERT_EQ(stream->read_position(), static_cast<size_t>(10));
68 ASSERT_EQ(stream->buffer_size(), static_cast<size_t>(10));
69 ASSERT_EQ(stream->max_read_position(), absl::nullopt);
70 ASSERT_EQ(stream->CanReadMore(), true);
72 stream->LockStreamForWriting(10);
73 ASSERT_EQ(stream->read_position(), static_cast<size_t>(10));
74 ASSERT_EQ(stream->buffer_size(), static_cast<size_t>(20));
75 ASSERT_EQ(stream->max_read_position(), absl::nullopt);
76 ASSERT_EQ(stream->CanReadMore(), true);
78 stream->UnlockStreamPostWrite(10, false);
80 ASSERT_EQ(stream->read_position(), static_cast<size_t>(20));
81 ASSERT_EQ(stream->buffer_size(), static_cast<size_t>(0));
82 ASSERT_EQ(stream->max_read_position(), absl::nullopt);
83 ASSERT_EQ(stream->CanReadMore(), true);