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

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

Issue 12637006: Reland r187230: Implement the Stream registry in content (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rebase 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
13 namespace content {
14
15 class StreamTest : public testing::Test {
16 public:
17 StreamTest() : producing_seed_key_(0) {}
18
19 virtual void SetUp() OVERRIDE {
20 registry_.reset(new StreamRegistry());
21 }
22
23 // Create a new IO buffer of the given |buffer_size| and fill it with random
24 // data.
25 scoped_refptr<net::IOBuffer> NewIOBuffer(size_t buffer_size) {
26 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(buffer_size));
27 char *bufferp = buffer->data();
28 for (size_t i = 0; i < buffer_size; i++)
29 bufferp[i] = (i + producing_seed_key_) % (1 << sizeof(char));
30 ++producing_seed_key_;
31 return buffer;
32 }
33
34 protected:
35 MessageLoop message_loop_;
36 scoped_ptr<StreamRegistry> registry_;
37
38 private:
39 int producing_seed_key_;
40 };
41
42 class TestStreamReader : public StreamReadObserver {
43 public:
44 TestStreamReader() : buffer_(new net::GrowableIOBuffer()) {
45 }
46 virtual ~TestStreamReader() {}
47
48 void Read(Stream* stream) {
49 const size_t kBufferSize = 32768;
50 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize));
51
52 int bytes_read = 0;
53 while (stream->ReadRawData(buffer, kBufferSize, &bytes_read) ==
54 Stream::STREAM_HAS_DATA) {
55 size_t old_capacity = buffer_->capacity();
56 buffer_->SetCapacity(old_capacity + bytes_read);
57 memcpy(buffer_->StartOfBuffer() + old_capacity,
58 buffer->data(), bytes_read);
59 }
60 }
61
62 virtual void OnDataAvailable(Stream* stream) OVERRIDE {
63 Read(stream);
64 }
65
66 scoped_refptr<net::GrowableIOBuffer> buffer() { return buffer_; }
67
68 private:
69 scoped_refptr<net::GrowableIOBuffer> buffer_;
70 };
71
72 class TestStreamWriter : public StreamWriteObserver {
73 public:
74 TestStreamWriter() {}
75 virtual ~TestStreamWriter() {}
76
77 void Write(Stream* stream,
78 scoped_refptr<net::IOBuffer> buffer,
79 size_t buffer_size) {
80 stream->AddData(buffer, buffer_size);
81 }
82
83 virtual void OnSpaceAvailable(Stream* stream) OVERRIDE {
84 }
85 };
86
87 TEST_F(StreamTest, SetReadObserver) {
88 TestStreamReader reader;
89 TestStreamWriter writer;
90
91 GURL url("blob://stream");
92 scoped_refptr<Stream> stream(
93 new Stream(registry_.get(), &writer, GURL(), url));
94 EXPECT_TRUE(stream->SetReadObserver(&reader));
95 }
96
97 TEST_F(StreamTest, SetReadObserver_SecondFails) {
98 TestStreamReader reader1;
99 TestStreamReader reader2;
100 TestStreamWriter writer;
101
102 GURL url("blob://stream");
103 scoped_refptr<Stream> stream(
104 new Stream(registry_.get(), &writer, GURL(), url));
105 EXPECT_TRUE(stream->SetReadObserver(&reader1));
106 EXPECT_FALSE(stream->SetReadObserver(&reader2));
107 }
108
109 TEST_F(StreamTest, SetReadObserver_TwoReaders) {
110 TestStreamReader reader1;
111 TestStreamReader reader2;
112 TestStreamWriter writer;
113
114 GURL url("blob://stream");
115 scoped_refptr<Stream> stream(
116 new Stream(registry_.get(), &writer, GURL(), url));
117 EXPECT_TRUE(stream->SetReadObserver(&reader1));
118
119 // Once the first read observer is removed, a new one can be added.
120 stream->RemoveReadObserver(&reader1);
121 EXPECT_TRUE(stream->SetReadObserver(&reader2));
122 }
123
124 TEST_F(StreamTest, Stream) {
125 TestStreamReader reader;
126 TestStreamWriter writer;
127
128 GURL url("blob://stream");
129 scoped_refptr<Stream> stream(
130 new Stream(registry_.get(), &writer, GURL(), url));
131 EXPECT_TRUE(stream->SetReadObserver(&reader));
132
133 const int kBufferSize = 1000000;
134 scoped_refptr<net::IOBuffer> buffer(NewIOBuffer(kBufferSize));
135 writer.Write(stream, buffer, kBufferSize);
136 stream->Finalize();
137 reader.Read(stream);
138 MessageLoop::current()->RunUntilIdle();
139
140 ASSERT_EQ(reader.buffer()->capacity(), kBufferSize);
141 for (int i = 0; i < kBufferSize; i++)
142 EXPECT_EQ(buffer->data()[i], reader.buffer()->data()[i]);
143 }
144
145 TEST_F(StreamTest, GetStream) {
146 TestStreamWriter writer;
147
148 GURL url("blob://stream");
149 scoped_refptr<Stream> stream1(
150 new Stream(registry_.get(), &writer, GURL(), url));
151
152 scoped_refptr<Stream> stream2 = registry_->GetStream(url);
153 ASSERT_EQ(stream1, stream2);
154 }
155
156 TEST_F(StreamTest, GetStream_Missing) {
157 TestStreamWriter writer;
158
159 GURL url1("blob://stream");
160 scoped_refptr<Stream> stream1(
161 new Stream(registry_.get(), &writer, GURL(), url1));
162
163 GURL url2("blob://stream2");
164 scoped_refptr<Stream> stream2 = registry_->GetStream(url2);
165 ASSERT_FALSE(stream2);
166 }
167
168 TEST_F(StreamTest, CloneStream) {
169 TestStreamWriter writer;
170
171 GURL url1("blob://stream");
172 scoped_refptr<Stream> stream1(
173 new Stream(registry_.get(), &writer, GURL(), url1));
174
175 GURL url2("blob://stream2");
176 ASSERT_TRUE(registry_->CloneStream(url2, url1));
177 scoped_refptr<Stream> stream2 = registry_->GetStream(url2);
178 ASSERT_EQ(stream1, stream2);
179 }
180
181 TEST_F(StreamTest, CloneStream_Missing) {
182 TestStreamWriter writer;
183
184 GURL url1("blob://stream");
185 scoped_refptr<Stream> stream1(
186 new Stream(registry_.get(), &writer, GURL(), url1));
187
188 GURL url2("blob://stream2");
189 GURL url3("blob://stream3");
190 ASSERT_FALSE(registry_->CloneStream(url2, url3));
191 scoped_refptr<Stream> stream2 = registry_->GetStream(url2);
192 ASSERT_FALSE(stream2);
193 }
194
195 TEST_F(StreamTest, UnregisterStream) {
196 TestStreamWriter writer;
197
198 GURL url("blob://stream");
199 scoped_refptr<Stream> stream1(
200 new Stream(registry_.get(), &writer, GURL(), url));
201
202 registry_->UnregisterStream(url);
203 scoped_refptr<Stream> stream2 = registry_->GetStream(url);
204 ASSERT_FALSE(stream2);
205 }
206
207 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/streams/stream_registry.cc ('k') | content/browser/streams/stream_write_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698