Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(171)

Side by Side Diff: content/browser/streams/stream_unittest.cc

Issue 12335087: Implement the Stream registry in content (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: nits + Unittest Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2013 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/message_loop.h"
6 #include "base/test/test_simple_task_runner.h"
7 #include "content/browser/streams/stream.h"
8 #include "content/browser/streams/stream_read_observer.h"
9 #include "content/browser/streams/stream_registry.h"
10 #include "content/browser/streams/stream_write_observer.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
kinuko 2013/03/08 07:04:19 Can we put this entire code in namespace content?
Zachary Kuznia 2013/03/08 07:18:13 Done.
13 class StreamTest : public testing::Test {
14 public:
15 StreamTest()
16 : producing_seed_key_(0) {
kinuko 2013/03/08 07:04:19 nit: looks like this can be in one line
Zachary Kuznia 2013/03/08 07:18:13 Done.
17 }
18
19 virtual void SetUp() OVERRIDE {
20 registry_.reset(new content::StreamRegistry());
21 }
22
23 // Create a new IO buffer of the given |buffer_size|. Details of the
24 // contents of the created buffer will be kept, and can be validated
25 // by ValidateIOBuffer.
kinuko 2013/03/08 07:04:19 This ValidateIOBuffer doesn't exist?
Zachary Kuznia 2013/03/08 07:18:13 Fixed the comment.
26 scoped_refptr<net::IOBuffer> NewIOBuffer(size_t buffer_size) {
27 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(buffer_size));
28 char *bufferp = buffer->data();
29 for (size_t i = 0; i < buffer_size; i++)
30 bufferp[i] = (i + producing_seed_key_) % (1 << sizeof(char));
31 pointer_queue_.push_back(bufferp);
32 length_queue_.push_back(buffer_size);
33 ++producing_seed_key_;
34 return buffer;
35 }
36
37 protected:
38 MessageLoop message_loop_;
39 scoped_ptr<content::StreamRegistry> registry_;
40
41 private:
42 int producing_seed_key_;
43 std::deque<char*> pointer_queue_;
44 std::deque<size_t> length_queue_;
45 };
46
47 class TestStreamReader : public content::StreamReadObserver {
48 public:
49 TestStreamReader() : buffer_(new net::GrowableIOBuffer()) {
50 }
51 virtual ~TestStreamReader() {}
52
53 void Read(content::Stream* stream) {
54 const size_t kBufferSize = 32768;
55 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize));
56
57 int bytes_read = 0;
58 while (stream->ReadRawData(buffer, kBufferSize, &bytes_read) ==
59 content::Stream::STREAM_HAS_DATA) {
60 size_t old_capacity = buffer_->capacity();
61 buffer_->SetCapacity(old_capacity + bytes_read);
62 memcpy(buffer_->data() + old_capacity, buffer->data(), bytes_read);
63 }
64 }
65
66 virtual void OnDataAvailable(content::Stream* stream) OVERRIDE {
67 Read(stream);
68 }
69
70 scoped_refptr<net::GrowableIOBuffer> buffer() { return buffer_; }
71
72 private:
73 scoped_refptr<net::GrowableIOBuffer> buffer_;
74 };
75
76 class TestStreamWriter : public content::StreamWriteObserver {
77 public:
78 TestStreamWriter() {}
79 virtual ~TestStreamWriter() {}
80
81 void Write(content::Stream* stream,
82 scoped_refptr<net::IOBuffer> buffer,
83 size_t buffer_size) {
84 stream->AddData(buffer, buffer_size);
85 }
86
87 virtual void OnSpaceAvailable(content::Stream* stream) OVERRIDE {
88 }
89 };
90
91 TEST_F(StreamTest, SetReadObserver) {
92 TestStreamReader reader;
93 TestStreamWriter writer;
94
95 GURL url("blob://stream");
96 scoped_refptr<content::Stream> stream(
97 new content::Stream(registry_.get(), &writer, GURL(), url));
98 EXPECT_TRUE(stream->SetReadObserver(&reader));
99 }
100
101 TEST_F(StreamTest, SetReadObserver_SecondFails) {
102 TestStreamReader reader1;
103 TestStreamReader reader2;
104 TestStreamWriter writer;
105
106 GURL url("blob://stream");
107 scoped_refptr<content::Stream> stream(
108 new content::Stream(registry_.get(), &writer, GURL(), url));
109 EXPECT_TRUE(stream->SetReadObserver(&reader1));
110 EXPECT_FALSE(stream->SetReadObserver(&reader2));
111 }
112
113 TEST_F(StreamTest, SetReadObserver_TwoReaders) {
114 TestStreamReader reader1;
115 TestStreamReader reader2;
116 TestStreamWriter writer;
117
118 GURL url("blob://stream");
119 scoped_refptr<content::Stream> stream(
120 new content::Stream(registry_.get(), &writer, GURL(), url));
121 EXPECT_TRUE(stream->SetReadObserver(&reader1));
122
123 // Once the first read observer is removed, a new one can be added.
124 stream->RemoveReadObserver(&reader1);
125 EXPECT_TRUE(stream->SetReadObserver(&reader2));
126 }
127
128 TEST_F(StreamTest, Stream) {
129 scoped_refptr<base::TestSimpleTaskRunner> task_runner(
130 new base::TestSimpleTaskRunner());
kinuko 2013/03/08 07:04:19 Not used? (Here and below)
Zachary Kuznia 2013/03/08 07:18:13 Done.
131
132 TestStreamReader reader;
133 TestStreamWriter writer;
134
135 GURL url("blob://stream");
136 scoped_refptr<content::Stream> stream(
137 new content::Stream(registry_.get(), &writer, GURL(), url));
138 EXPECT_TRUE(stream->SetReadObserver(&reader));
139
140 int buffer_size = 1000000;
141 scoped_refptr<net::IOBuffer> buffer(NewIOBuffer(buffer_size));
142 writer.Write(stream, buffer, buffer_size);
143 stream->Finalize();
144 reader.Read(stream);
145 MessageLoop::current()->RunUntilIdle();
146
147 ASSERT_EQ(reader.buffer()->capacity(), buffer_size);
148 ASSERT_EQ(0, memcmp(buffer->data(),
149 reader.buffer()->data(),
150 buffer_size));
151 }
152
153 TEST_F(StreamTest, GetStream) {
154 scoped_refptr<base::TestSimpleTaskRunner> task_runner(
155 new base::TestSimpleTaskRunner());
156
157 TestStreamWriter writer;
158
159 GURL url("blob://stream");
160 scoped_refptr<content::Stream> stream1(
161 new content::Stream(registry_.get(), &writer, GURL(), url));
162
163 scoped_refptr<content::Stream> stream2 = registry_->GetStream(url);
164 ASSERT_EQ(stream1, stream2);
165 }
166
167 TEST_F(StreamTest, GetStream_Missing) {
168 scoped_refptr<base::TestSimpleTaskRunner> task_runner(
169 new base::TestSimpleTaskRunner());
170
171 TestStreamWriter writer;
172
173 GURL url1("blob://stream");
174 scoped_refptr<content::Stream> stream1(
175 new content::Stream(registry_.get(), &writer, GURL(), url1));
176
177 GURL url2("blob://stream2");
178 scoped_refptr<content::Stream> stream2 = registry_->GetStream(url2);
179 ASSERT_FALSE(stream2);
180 }
181
182 TEST_F(StreamTest, CloneStream) {
183 scoped_refptr<base::TestSimpleTaskRunner> task_runner(
184 new base::TestSimpleTaskRunner());
185
186 TestStreamWriter writer;
187
188 GURL url1("blob://stream");
189 scoped_refptr<content::Stream> stream1(
190 new content::Stream(registry_.get(), &writer, GURL(), url1));
191
192 GURL url2("blob://stream2");
193 ASSERT_TRUE(registry_->CloneStream(url2, url1));
194 scoped_refptr<content::Stream> stream2 = registry_->GetStream(url2);
195 ASSERT_EQ(stream1, stream2);
196 }
197
198 TEST_F(StreamTest, CloneStream_Missing) {
199 scoped_refptr<base::TestSimpleTaskRunner> task_runner(
200 new base::TestSimpleTaskRunner());
201
202 TestStreamWriter writer;
203
204 GURL url1("blob://stream");
205 scoped_refptr<content::Stream> stream1(
206 new content::Stream(registry_.get(), &writer, GURL(), url1));
207
208 GURL url2("blob://stream2");
209 GURL url3("blob://stream3");
210 ASSERT_FALSE(registry_->CloneStream(url2, url3));
211 scoped_refptr<content::Stream> stream2 = registry_->GetStream(url2);
212 ASSERT_FALSE(stream2);
213 }
214
215 TEST_F(StreamTest, UnregisterStream) {
216 scoped_refptr<base::TestSimpleTaskRunner> task_runner(
217 new base::TestSimpleTaskRunner());
218
219 TestStreamWriter writer;
220
221 GURL url("blob://stream");
222 scoped_refptr<content::Stream> stream1(
223 new content::Stream(registry_.get(), &writer, GURL(), url));
224
225 registry_->UnregisterStream(url);
226 scoped_refptr<content::Stream> stream2 = registry_->GetStream(url);
227 ASSERT_FALSE(stream2);
228 }
229
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698