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

Side by Side Diff: net/server/http_connection_unittest.cc

Issue 296053012: Replace StreamListenSocket with StreamSocket in HttpServer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased, and addressed comments. Created 6 years, 4 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 2014 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 "net/server/http_connection.h"
6
7 #include <string>
8
9 #include "base/memory/ref_counted.h"
10 #include "base/strings/string_piece.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace net {
14 namespace {
15
16 std::string GetTestString(int size) {
17 std::string test_string;
18 for (int i = 0; i < size; ++i) {
19 test_string.push_back('A' + (i % 26));
20 }
21 return test_string;
22 }
23
24 TEST(HttpConnectionTest, ReadIOBuffer_SetCapacity) {
25 scoped_refptr<HttpConnection::ReadIOBuffer> buffer(
26 new HttpConnection::ReadIOBuffer);
27 EXPECT_EQ(HttpConnection::ReadIOBuffer::kInitialBufSize + 0,
28 buffer->GetCapacity());
29 EXPECT_EQ(HttpConnection::ReadIOBuffer::kInitialBufSize + 0,
30 buffer->RemainingCapacity());
31 EXPECT_EQ(0, buffer->GetSize());
32
33 const int kNewCapacity = HttpConnection::ReadIOBuffer::kInitialBufSize + 128;
34 buffer->SetCapacity(kNewCapacity);
35 EXPECT_EQ(kNewCapacity, buffer->GetCapacity());
36 EXPECT_EQ(kNewCapacity, buffer->RemainingCapacity());
37 EXPECT_EQ(0, buffer->GetSize());
38 }
39
40 TEST(HttpConnectionTest, ReadIOBuffer_SetCapacity_WithData) {
41 scoped_refptr<HttpConnection::ReadIOBuffer> buffer(
42 new HttpConnection::ReadIOBuffer);
43 EXPECT_EQ(HttpConnection::ReadIOBuffer::kInitialBufSize + 0,
44 buffer->GetCapacity());
45 EXPECT_EQ(HttpConnection::ReadIOBuffer::kInitialBufSize + 0,
46 buffer->RemainingCapacity());
47
48 // Write arbitrary data up to kInitialBufSize.
49 std::string data_read(
50 GetTestString(HttpConnection::ReadIOBuffer::kInitialBufSize));
51 buffer->DidRead(data_read.size());
52 EXPECT_EQ(HttpConnection::ReadIOBuffer::kInitialBufSize + 0,
53 buffer->GetCapacity());
54 EXPECT_EQ(HttpConnection::ReadIOBuffer::kInitialBufSize -
55 static_cast<int>(data_read.size()),
56 buffer->RemainingCapacity());
57 EXPECT_EQ(static_cast<int>(data_read.size()), buffer->GetSize());
58 EXPECT_EQ(data_read,
59 base::StringPiece(buffer->StartOfBuffer(), buffer->GetSize()));
60
61 // Check if read data in the buffer is same after SetCapacity().
62 const int kNewCapacity = HttpConnection::ReadIOBuffer::kInitialBufSize + 128;
63 buffer->SetCapacity(kNewCapacity);
64 EXPECT_EQ(kNewCapacity, buffer->GetCapacity());
65 EXPECT_EQ(kNewCapacity - static_cast<int>(data_read.size()),
66 buffer->RemainingCapacity());
67 EXPECT_EQ(static_cast<int>(data_read.size()), buffer->GetSize());
68 EXPECT_EQ(data_read,
69 base::StringPiece(buffer->StartOfBuffer(), buffer->GetSize()));
70 }
71
72 TEST(HttpConnectionTest, ReadIOBuffer_IncreaseCapacity) {
73 scoped_refptr<HttpConnection::ReadIOBuffer> buffer(
74 new HttpConnection::ReadIOBuffer);
75 EXPECT_TRUE(buffer->IncreaseCapacity());
76 const int kExpectedInitialBufSize =
77 HttpConnection::ReadIOBuffer::kInitialBufSize *
78 HttpConnection::ReadIOBuffer::kCapacityIncreaseFactor;
79 EXPECT_EQ(kExpectedInitialBufSize, buffer->GetCapacity());
80 EXPECT_EQ(kExpectedInitialBufSize, buffer->RemainingCapacity());
81 EXPECT_EQ(0, buffer->GetSize());
82
83 // Increase capacity until it fails.
84 while (buffer->IncreaseCapacity());
85 EXPECT_FALSE(buffer->IncreaseCapacity());
86 EXPECT_EQ(HttpConnection::ReadIOBuffer::kDefaultMaxBufferSize + 0,
87 buffer->max_buffer_size());
88 EXPECT_EQ(HttpConnection::ReadIOBuffer::kDefaultMaxBufferSize + 0,
89 buffer->GetCapacity());
90
91 // Enlarge capacity limit.
92 buffer->set_max_buffer_size(buffer->max_buffer_size() * 2);
93 EXPECT_TRUE(buffer->IncreaseCapacity());
94 EXPECT_EQ(HttpConnection::ReadIOBuffer::kDefaultMaxBufferSize *
95 HttpConnection::ReadIOBuffer::kCapacityIncreaseFactor,
96 buffer->GetCapacity());
97
98 // Shrink capacity limit. It doesn't change capacity itself.
99 buffer->set_max_buffer_size(
100 HttpConnection::ReadIOBuffer::kDefaultMaxBufferSize / 2);
101 EXPECT_FALSE(buffer->IncreaseCapacity());
102 EXPECT_EQ(HttpConnection::ReadIOBuffer::kDefaultMaxBufferSize *
103 HttpConnection::ReadIOBuffer::kCapacityIncreaseFactor,
104 buffer->GetCapacity());
105 }
106
107 TEST(HttpConnectionTest, ReadIOBuffer_IncreaseCapacity_WithData) {
108 scoped_refptr<HttpConnection::ReadIOBuffer> buffer(
109 new HttpConnection::ReadIOBuffer);
110 EXPECT_TRUE(buffer->IncreaseCapacity());
111 const int kExpectedInitialBufSize =
112 HttpConnection::ReadIOBuffer::kInitialBufSize *
113 HttpConnection::ReadIOBuffer::kCapacityIncreaseFactor;
114 EXPECT_EQ(kExpectedInitialBufSize, buffer->GetCapacity());
115 EXPECT_EQ(kExpectedInitialBufSize, buffer->RemainingCapacity());
116 EXPECT_EQ(0, buffer->GetSize());
117
118 // Write arbitrary data up to kExpectedInitialBufSize.
119 std::string data_read(GetTestString(kExpectedInitialBufSize));
120 buffer->DidRead(data_read.size());
121 EXPECT_EQ(kExpectedInitialBufSize, buffer->GetCapacity());
122 EXPECT_EQ(kExpectedInitialBufSize - static_cast<int>(data_read.size()),
123 buffer->RemainingCapacity());
124 EXPECT_EQ(static_cast<int>(data_read.size()), buffer->GetSize());
125 EXPECT_EQ(data_read,
126 base::StringPiece(buffer->StartOfBuffer(), buffer->GetSize()));
127
128 // Increase capacity until it fails and check if read data in the buffer is
129 // same.
130 while (buffer->IncreaseCapacity());
131 EXPECT_FALSE(buffer->IncreaseCapacity());
132 EXPECT_EQ(HttpConnection::ReadIOBuffer::kDefaultMaxBufferSize + 0,
133 buffer->max_buffer_size());
134 EXPECT_EQ(HttpConnection::ReadIOBuffer::kDefaultMaxBufferSize + 0,
135 buffer->GetCapacity());
136 EXPECT_EQ(HttpConnection::ReadIOBuffer::kDefaultMaxBufferSize -
137 static_cast<int>(data_read.size()),
138 buffer->RemainingCapacity());
139 EXPECT_EQ(static_cast<int>(data_read.size()), buffer->GetSize());
140 EXPECT_EQ(data_read,
141 base::StringPiece(buffer->StartOfBuffer(), buffer->GetSize()));
142 }
143
144 TEST(HttpConnectionTest, ReadIOBuffer_DidRead_DidConsume) {
145 scoped_refptr<HttpConnection::ReadIOBuffer> buffer(
146 new HttpConnection::ReadIOBuffer);
147 const char* start_of_buffer = buffer->StartOfBuffer();
148 EXPECT_EQ(start_of_buffer, buffer->data());
149
150 // Read data.
151 const int kReadLength = 128;
152 const std::string kReadData(GetTestString(kReadLength));
153 memcpy(buffer->data(), kReadData.data(), kReadLength);
154 buffer->DidRead(kReadLength);
155 // No change in total capacity.
156 EXPECT_EQ(HttpConnection::ReadIOBuffer::kInitialBufSize + 0,
157 buffer->GetCapacity());
158 // Change in unused capacity because of read data.
159 EXPECT_EQ(HttpConnection::ReadIOBuffer::kInitialBufSize - kReadLength,
160 buffer->RemainingCapacity());
161 EXPECT_EQ(kReadLength, buffer->GetSize());
162 // No change in start pointers of read data.
163 EXPECT_EQ(start_of_buffer, buffer->StartOfBuffer());
164 // Change in start pointer of unused buffer.
165 EXPECT_EQ(start_of_buffer + kReadLength, buffer->data());
166 // Test read data.
167 EXPECT_EQ(kReadData, std::string(buffer->StartOfBuffer(), buffer->GetSize()));
168
169 // Consume data partially.
170 const int kConsumedLength = 32;
171 ASSERT_LT(kConsumedLength, kReadLength);
172 buffer->DidConsume(kConsumedLength);
173 // Capacity reduced because read data was too small comparing to capacity.
174 EXPECT_EQ(HttpConnection::ReadIOBuffer::kInitialBufSize /
175 HttpConnection::ReadIOBuffer::kCapacityIncreaseFactor,
176 buffer->GetCapacity());
177 // Change in unused capacity because of read data.
178 EXPECT_EQ(HttpConnection::ReadIOBuffer::kInitialBufSize /
179 HttpConnection::ReadIOBuffer::kCapacityIncreaseFactor -
180 kReadLength + kConsumedLength,
181 buffer->RemainingCapacity());
182 // Change in read size.
183 EXPECT_EQ(kReadLength - kConsumedLength, buffer->GetSize());
184 // Start data could be changed even when capacity is reduced.
185 start_of_buffer = buffer->StartOfBuffer();
186 // Change in start pointer of unused buffer.
187 EXPECT_EQ(start_of_buffer + kReadLength - kConsumedLength, buffer->data());
188 // Change in read data.
189 EXPECT_EQ(kReadData.substr(kConsumedLength),
190 std::string(buffer->StartOfBuffer(), buffer->GetSize()));
191
192 // Read more data.
193 const int kReadLength2 = 64;
194 buffer->DidRead(kReadLength2);
195 // No change in total capacity.
196 EXPECT_EQ(HttpConnection::ReadIOBuffer::kInitialBufSize /
197 HttpConnection::ReadIOBuffer::kCapacityIncreaseFactor,
198 buffer->GetCapacity());
199 // Change in unused capacity because of read data.
200 EXPECT_EQ(HttpConnection::ReadIOBuffer::kInitialBufSize /
201 HttpConnection::ReadIOBuffer::kCapacityIncreaseFactor -
202 kReadLength + kConsumedLength - kReadLength2,
203 buffer->RemainingCapacity());
204 // Change in read size
205 EXPECT_EQ(kReadLength - kConsumedLength + kReadLength2, buffer->GetSize());
206 // No change in start pointer of read part.
207 EXPECT_EQ(start_of_buffer, buffer->StartOfBuffer());
208 // Change in start pointer of unused buffer.
209 EXPECT_EQ(start_of_buffer + kReadLength - kConsumedLength + kReadLength2,
210 buffer->data());
211
212 // Consume data fully.
213 buffer->DidConsume(kReadLength - kConsumedLength + kReadLength2);
214 // Capacity reduced again because read data was too small.
215 EXPECT_EQ(HttpConnection::ReadIOBuffer::kInitialBufSize /
216 HttpConnection::ReadIOBuffer::kCapacityIncreaseFactor /
217 HttpConnection::ReadIOBuffer::kCapacityIncreaseFactor,
218 buffer->GetCapacity());
219 EXPECT_EQ(HttpConnection::ReadIOBuffer::kInitialBufSize /
220 HttpConnection::ReadIOBuffer::kCapacityIncreaseFactor /
221 HttpConnection::ReadIOBuffer::kCapacityIncreaseFactor,
222 buffer->RemainingCapacity());
223 // All reverts to initial because no data is left.
224 EXPECT_EQ(0, buffer->GetSize());
225 // Start data could be changed even when capacity is reduced.
226 start_of_buffer = buffer->StartOfBuffer();
227 EXPECT_EQ(start_of_buffer, buffer->data());
228 }
229
230 TEST(HttpConnectionTest, QueuedWriteIOBuffer_Append_DidConsume) {
231 scoped_refptr<HttpConnection::QueuedWriteIOBuffer> buffer(
232 new HttpConnection::QueuedWriteIOBuffer());
233 EXPECT_TRUE(buffer->IsEmpty());
234 EXPECT_EQ(0, buffer->GetSizeToWrite());
235 EXPECT_EQ(0, buffer->total_size());
236
237 const std::string kData("data to write");
238 EXPECT_TRUE(buffer->Append(kData));
239 EXPECT_FALSE(buffer->IsEmpty());
240 EXPECT_EQ(static_cast<int>(kData.size()), buffer->GetSizeToWrite());
241 EXPECT_EQ(static_cast<int>(kData.size()), buffer->total_size());
242 // First data to write is same to kData.
243 EXPECT_EQ(kData, base::StringPiece(buffer->data(), buffer->GetSizeToWrite()));
244
245 const std::string kData2("more data to write");
246 EXPECT_TRUE(buffer->Append(kData2));
247 EXPECT_FALSE(buffer->IsEmpty());
248 // No change in size to write.
249 EXPECT_EQ(static_cast<int>(kData.size()), buffer->GetSizeToWrite());
250 // Change in total size.
251 EXPECT_EQ(static_cast<int>(kData.size() + kData2.size()),
252 buffer->total_size());
253 // First data to write has not been changed. Same to kData.
254 EXPECT_EQ(kData, base::StringPiece(buffer->data(), buffer->GetSizeToWrite()));
255
256 // Consume data partially.
257 const int kConsumedLength = kData.length() - 1;
258 buffer->DidConsume(kConsumedLength);
259 EXPECT_FALSE(buffer->IsEmpty());
260 // Change in size to write.
261 EXPECT_EQ(static_cast<int>(kData.size()) - kConsumedLength,
262 buffer->GetSizeToWrite());
263 // Change in total size.
264 EXPECT_EQ(static_cast<int>(kData.size() + kData2.size()) - kConsumedLength,
265 buffer->total_size());
266 // First data to write has shrinked.
267 EXPECT_EQ(kData.substr(kConsumedLength),
268 base::StringPiece(buffer->data(), buffer->GetSizeToWrite()));
269
270 // Consume first data fully.
271 buffer->DidConsume(kData.size() - kConsumedLength);
272 EXPECT_FALSE(buffer->IsEmpty());
273 // Now, size to write is size of data added second.
274 EXPECT_EQ(static_cast<int>(kData2.size()), buffer->GetSizeToWrite());
275 // Change in total size.
276 EXPECT_EQ(static_cast<int>(kData2.size()), buffer->total_size());
277 // First data to write has changed to kData2.
278 EXPECT_EQ(kData2,
279 base::StringPiece(buffer->data(), buffer->GetSizeToWrite()));
280
281 // Consume second data fully.
282 buffer->DidConsume(kData2.size());
283 EXPECT_TRUE(buffer->IsEmpty());
284 EXPECT_EQ(0, buffer->GetSizeToWrite());
285 EXPECT_EQ(0, buffer->total_size());
286 }
287
288 TEST(HttpConnectionTest, QueuedWriteIOBuffer_TotalSizeLimit) {
289 scoped_refptr<HttpConnection::QueuedWriteIOBuffer> buffer(
290 new HttpConnection::QueuedWriteIOBuffer());
291 EXPECT_EQ(HttpConnection::QueuedWriteIOBuffer::kDefaultMaxBufferSize + 0,
292 buffer->max_buffer_size());
293
294 // Set total size limit very small.
295 buffer->set_max_buffer_size(10);
296
297 const int kDataLength = 4;
298 const std::string kData(kDataLength, 'd');
299 EXPECT_TRUE(buffer->Append(kData));
300 EXPECT_EQ(kDataLength, buffer->total_size());
301 EXPECT_TRUE(buffer->Append(kData));
302 EXPECT_EQ(kDataLength * 2, buffer->total_size());
303
304 // Cannot append more data because it exceeds the limit.
305 EXPECT_FALSE(buffer->Append(kData));
306 EXPECT_EQ(kDataLength * 2, buffer->total_size());
307
308 // Consume data partially.
309 const int kConsumedLength = 2;
310 buffer->DidConsume(kConsumedLength);
311 EXPECT_EQ(kDataLength * 2 - kConsumedLength, buffer->total_size());
312
313 // Can add more data.
314 EXPECT_TRUE(buffer->Append(kData));
315 EXPECT_EQ(kDataLength * 3 - kConsumedLength, buffer->total_size());
316
317 // Cannot append more data because it exceeds the limit.
318 EXPECT_FALSE(buffer->Append(kData));
319 EXPECT_EQ(kDataLength * 3 - kConsumedLength, buffer->total_size());
320
321 // Enlarge limit.
322 buffer->set_max_buffer_size(20);
323 // Can add more data.
324 EXPECT_TRUE(buffer->Append(kData));
325 EXPECT_EQ(kDataLength * 4 - kConsumedLength, buffer->total_size());
326 }
327
328 } // namespace
329 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698