- add sources.
[platform/framework/web/crosswalk.git] / src / media / filters / blocking_url_protocol_unittest.cc
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
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 "base/bind.h"
6 #include "base/files/file_path.h"
7 #include "base/synchronization/waitable_event.h"
8 #include "media/base/test_data_util.h"
9 #include "media/ffmpeg/ffmpeg_common.h"
10 #include "media/filters/blocking_url_protocol.h"
11 #include "media/filters/file_data_source.h"
12 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace media {
16
17 class BlockingUrlProtocolTest : public testing::Test {
18  public:
19   BlockingUrlProtocolTest()
20       : url_protocol_(&data_source_,
21                       base::Bind(&BlockingUrlProtocolTest::OnDataSourceError,
22                                  base::Unretained(this))) {
23     CHECK(data_source_.Initialize(GetTestDataFilePath("bear-320x240.webm")));
24   }
25
26   virtual ~BlockingUrlProtocolTest() {
27     base::WaitableEvent stop_event(false, false);
28     data_source_.Stop(base::Bind(
29         &base::WaitableEvent::Signal, base::Unretained(&stop_event)));
30     stop_event.Wait();
31   }
32
33   MOCK_METHOD0(OnDataSourceError, void());
34
35   FileDataSource data_source_;
36   BlockingUrlProtocol url_protocol_;
37
38  private:
39   DISALLOW_COPY_AND_ASSIGN(BlockingUrlProtocolTest);
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 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 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 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(0, 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 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 size;
88   int64 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 data_source_size = 0;
105   int64 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   EXPECT_TRUE(data_source_.IsStreaming());
118   EXPECT_TRUE(url_protocol_.IsStreaming());
119 }
120
121 }  // namespace media