Revert "[M120 Migration]Fix for crash during chrome exit"
[platform/framework/web/chromium-efl.git] / media / filters / blocking_url_protocol_unittest.cc
1 // Copyright 2012 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.
4
5 #include <stdint.h>
6
7 #include <memory>
8
9 #include "base/files/file_path.h"
10 #include "base/functional/bind.h"
11 #include "base/synchronization/waitable_event.h"
12 #include "media/base/test_data_util.h"
13 #include "media/ffmpeg/ffmpeg_common.h"
14 #include "media/filters/blocking_url_protocol.h"
15 #include "media/filters/file_data_source.h"
16 #include "testing/gmock/include/gmock/gmock.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18
19 namespace media {
20
21 class BlockingUrlProtocolTest : public testing::Test {
22  public:
23   BlockingUrlProtocolTest()
24       : url_protocol_(std::make_unique<BlockingUrlProtocol>(
25             &data_source_,
26             base::BindRepeating(&BlockingUrlProtocolTest::OnDataSourceError,
27                                 base::Unretained(this)))) {
28     CHECK(data_source_.Initialize(GetTestDataFilePath("bear-320x240.webm")));
29   }
30
31   BlockingUrlProtocolTest(const BlockingUrlProtocolTest&) = delete;
32   BlockingUrlProtocolTest& operator=(const BlockingUrlProtocolTest&) = delete;
33
34   ~BlockingUrlProtocolTest() override { data_source_.Stop(); }
35
36   MOCK_METHOD0(OnDataSourceError, void());
37
38   FileDataSource data_source_;
39   std::unique_ptr<BlockingUrlProtocol> url_protocol_;
40 };
41
42
43 TEST_F(BlockingUrlProtocolTest, Read) {
44   // Set read head to zero as Initialize() will have parsed a bit of the file.
45   int64_t position = 0;
46   EXPECT_TRUE(url_protocol_->SetPosition(0));
47   EXPECT_TRUE(url_protocol_->GetPosition(&position));
48   EXPECT_EQ(0, position);
49
50   // Read 32 bytes from offset zero and verify position.
51   uint8_t buffer[32];
52   EXPECT_EQ(32, url_protocol_->Read(32, buffer));
53   EXPECT_TRUE(url_protocol_->GetPosition(&position));
54   EXPECT_EQ(32, position);
55
56   // Read an additional 32 bytes and verify position.
57   EXPECT_EQ(32, url_protocol_->Read(32, buffer));
58   EXPECT_TRUE(url_protocol_->GetPosition(&position));
59   EXPECT_EQ(64, position);
60
61   // Seek to end and read until EOF.
62   int64_t size = 0;
63   EXPECT_TRUE(url_protocol_->GetSize(&size));
64   EXPECT_TRUE(url_protocol_->SetPosition(size - 48));
65   EXPECT_EQ(32, url_protocol_->Read(32, buffer));
66   EXPECT_TRUE(url_protocol_->GetPosition(&position));
67   EXPECT_EQ(size - 16, position);
68
69   EXPECT_EQ(16, url_protocol_->Read(32, buffer));
70   EXPECT_TRUE(url_protocol_->GetPosition(&position));
71   EXPECT_EQ(size, position);
72
73   EXPECT_EQ(AVERROR_EOF, url_protocol_->Read(32, buffer));
74   EXPECT_TRUE(url_protocol_->GetPosition(&position));
75   EXPECT_EQ(size, position);
76 }
77
78 TEST_F(BlockingUrlProtocolTest, ReadError) {
79   data_source_.force_read_errors_for_testing();
80
81   uint8_t buffer[32];
82   EXPECT_CALL(*this, OnDataSourceError());
83   EXPECT_EQ(AVERROR(EIO), url_protocol_->Read(32, buffer));
84 }
85
86 TEST_F(BlockingUrlProtocolTest, GetSetPosition) {
87   int64_t size;
88   int64_t position;
89   EXPECT_TRUE(url_protocol_->GetSize(&size));
90   EXPECT_TRUE(url_protocol_->GetPosition(&position));
91
92   EXPECT_TRUE(url_protocol_->SetPosition(512));
93   EXPECT_FALSE(url_protocol_->SetPosition(size + 1));
94   EXPECT_FALSE(url_protocol_->SetPosition(-1));
95   EXPECT_TRUE(url_protocol_->GetPosition(&position));
96   EXPECT_EQ(512, position);
97
98   EXPECT_TRUE(url_protocol_->SetPosition(size));
99   EXPECT_TRUE(url_protocol_->GetPosition(&position));
100   EXPECT_EQ(size, position);
101 }
102
103 TEST_F(BlockingUrlProtocolTest, GetSize) {
104   int64_t data_source_size = 0;
105   int64_t url_protocol_size = 0;
106   EXPECT_TRUE(data_source_.GetSize(&data_source_size));
107   EXPECT_TRUE(url_protocol_->GetSize(&url_protocol_size));
108   EXPECT_NE(0, data_source_size);
109   EXPECT_EQ(data_source_size, url_protocol_size);
110 }
111
112 TEST_F(BlockingUrlProtocolTest, IsStreaming) {
113   EXPECT_FALSE(data_source_.IsStreaming());
114   EXPECT_FALSE(url_protocol_->IsStreaming());
115
116   data_source_.force_streaming_for_testing();
117   url_protocol_ = std::make_unique<BlockingUrlProtocol>(
118       &data_source_,
119       base::BindRepeating(&BlockingUrlProtocolTest::OnDataSourceError,
120                           base::Unretained(this)));
121   EXPECT_TRUE(data_source_.IsStreaming());
122   EXPECT_TRUE(url_protocol_->IsStreaming());
123 }
124
125 }  // namespace media