123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- // Copyright (c) 2012 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include <stdint.h>
- #include <memory>
- #include "base/bind.h"
- #include "base/files/file_path.h"
- #include "base/synchronization/waitable_event.h"
- #include "media/base/test_data_util.h"
- #include "media/ffmpeg/ffmpeg_common.h"
- #include "media/filters/blocking_url_protocol.h"
- #include "media/filters/file_data_source.h"
- #include "testing/gmock/include/gmock/gmock.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace media {
- class BlockingUrlProtocolTest : public testing::Test {
- public:
- BlockingUrlProtocolTest()
- : url_protocol_(new BlockingUrlProtocol(
- &data_source_,
- base::BindRepeating(&BlockingUrlProtocolTest::OnDataSourceError,
- base::Unretained(this)))) {
- CHECK(data_source_.Initialize(GetTestDataFilePath("bear-320x240.webm")));
- }
- BlockingUrlProtocolTest(const BlockingUrlProtocolTest&) = delete;
- BlockingUrlProtocolTest& operator=(const BlockingUrlProtocolTest&) = delete;
- ~BlockingUrlProtocolTest() override { data_source_.Stop(); }
- MOCK_METHOD0(OnDataSourceError, void());
- FileDataSource data_source_;
- std::unique_ptr<BlockingUrlProtocol> url_protocol_;
- };
- TEST_F(BlockingUrlProtocolTest, Read) {
- // Set read head to zero as Initialize() will have parsed a bit of the file.
- int64_t position = 0;
- EXPECT_TRUE(url_protocol_->SetPosition(0));
- EXPECT_TRUE(url_protocol_->GetPosition(&position));
- EXPECT_EQ(0, position);
- // Read 32 bytes from offset zero and verify position.
- uint8_t buffer[32];
- EXPECT_EQ(32, url_protocol_->Read(32, buffer));
- EXPECT_TRUE(url_protocol_->GetPosition(&position));
- EXPECT_EQ(32, position);
- // Read an additional 32 bytes and verify position.
- EXPECT_EQ(32, url_protocol_->Read(32, buffer));
- EXPECT_TRUE(url_protocol_->GetPosition(&position));
- EXPECT_EQ(64, position);
- // Seek to end and read until EOF.
- int64_t size = 0;
- EXPECT_TRUE(url_protocol_->GetSize(&size));
- EXPECT_TRUE(url_protocol_->SetPosition(size - 48));
- EXPECT_EQ(32, url_protocol_->Read(32, buffer));
- EXPECT_TRUE(url_protocol_->GetPosition(&position));
- EXPECT_EQ(size - 16, position);
- EXPECT_EQ(16, url_protocol_->Read(32, buffer));
- EXPECT_TRUE(url_protocol_->GetPosition(&position));
- EXPECT_EQ(size, position);
- EXPECT_EQ(AVERROR_EOF, url_protocol_->Read(32, buffer));
- EXPECT_TRUE(url_protocol_->GetPosition(&position));
- EXPECT_EQ(size, position);
- }
- TEST_F(BlockingUrlProtocolTest, ReadError) {
- data_source_.force_read_errors_for_testing();
- uint8_t buffer[32];
- EXPECT_CALL(*this, OnDataSourceError());
- EXPECT_EQ(AVERROR(EIO), url_protocol_->Read(32, buffer));
- }
- TEST_F(BlockingUrlProtocolTest, GetSetPosition) {
- int64_t size;
- int64_t position;
- EXPECT_TRUE(url_protocol_->GetSize(&size));
- EXPECT_TRUE(url_protocol_->GetPosition(&position));
- EXPECT_TRUE(url_protocol_->SetPosition(512));
- EXPECT_FALSE(url_protocol_->SetPosition(size + 1));
- EXPECT_FALSE(url_protocol_->SetPosition(-1));
- EXPECT_TRUE(url_protocol_->GetPosition(&position));
- EXPECT_EQ(512, position);
- EXPECT_TRUE(url_protocol_->SetPosition(size));
- EXPECT_TRUE(url_protocol_->GetPosition(&position));
- EXPECT_EQ(size, position);
- }
- TEST_F(BlockingUrlProtocolTest, GetSize) {
- int64_t data_source_size = 0;
- int64_t url_protocol_size = 0;
- EXPECT_TRUE(data_source_.GetSize(&data_source_size));
- EXPECT_TRUE(url_protocol_->GetSize(&url_protocol_size));
- EXPECT_NE(0, data_source_size);
- EXPECT_EQ(data_source_size, url_protocol_size);
- }
- TEST_F(BlockingUrlProtocolTest, IsStreaming) {
- EXPECT_FALSE(data_source_.IsStreaming());
- EXPECT_FALSE(url_protocol_->IsStreaming());
- data_source_.force_streaming_for_testing();
- url_protocol_ = std::make_unique<BlockingUrlProtocol>(
- &data_source_,
- base::BindRepeating(&BlockingUrlProtocolTest::OnDataSourceError,
- base::Unretained(this)));
- EXPECT_TRUE(data_source_.IsStreaming());
- EXPECT_TRUE(url_protocol_->IsStreaming());
- }
- } // namespace media
|