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

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: Fixed unittest failures. 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 arbitrara data up to kInitialBufSize.
mmenke 2014/08/15 14:23:16 nit: arbitrary
byungchul 2014/08/15 17:12:17 Done.
49 std::string data_read(HttpConnection::ReadIOBuffer::kInitialBufSize, 'd');
mmenke 2014/08/15 14:23:16 Suggest something more interesting than a single c
byungchul 2014/08/15 17:12:17 Done.
50 memcpy(buffer->data(), data_read.data(), data_read.size());
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 arbitrara data up to kExpectedInitialBufSize.
119 std::string data_read(kExpectedInitialBufSize, 'd');
120 memcpy(buffer->data(), data_read.data(), data_read.size());
121 buffer->DidRead(data_read.size());
122 EXPECT_EQ(kExpectedInitialBufSize, buffer->GetCapacity());
123 EXPECT_EQ(kExpectedInitialBufSize - static_cast<int>(data_read.size()),
124 buffer->RemainingCapacity());
125 EXPECT_EQ(static_cast<int>(data_read.size()), buffer->GetSize());
126 EXPECT_EQ(data_read,
127 base::StringPiece(buffer->StartOfBuffer(), buffer->GetSize()));
128
129 // Increase capacity until it fails and check if read data in the buffer is
130 // same.
131 while (buffer->IncreaseCapacity());
132 EXPECT_FALSE(buffer->IncreaseCapacity());
133 EXPECT_EQ(HttpConnection::ReadIOBuffer::kDefaultMaxBufferSize + 0,
134 buffer->max_buffer_size());
135 EXPECT_EQ(HttpConnection::ReadIOBuffer::kDefaultMaxBufferSize + 0,
136 buffer->GetCapacity());
137 EXPECT_EQ(HttpConnection::ReadIOBuffer::kDefaultMaxBufferSize -
138 static_cast<int>(data_read.size()),
139 buffer->RemainingCapacity());
140 EXPECT_EQ(static_cast<int>(data_read.size()), buffer->GetSize());
141 EXPECT_EQ(data_read,
142 base::StringPiece(buffer->StartOfBuffer(), buffer->GetSize()));
143 }
144
145 TEST(HttpConnectionTest, ReadIOBuffer_DidRead_DidConsume) {
146 scoped_refptr<HttpConnection::ReadIOBuffer> buffer(
147 new HttpConnection::ReadIOBuffer);
148 const char* start_of_buffer = buffer->StartOfBuffer();
149 EXPECT_EQ(start_of_buffer, buffer->data());
150
151 // Read data.
152 const int kReadLength = 128;
153 const std::string kReadData(GetTestString(kReadLength));
154 memcpy(buffer->data(), kReadData.data(), kReadLength);
155 buffer->DidRead(kReadLength);
156 // No change in total capacity.
157 EXPECT_EQ(HttpConnection::ReadIOBuffer::kInitialBufSize + 0,
158 buffer->GetCapacity());
159 // Change in unused capacity because of read data.
160 EXPECT_EQ(HttpConnection::ReadIOBuffer::kInitialBufSize - kReadLength,
161 buffer->RemainingCapacity());
162 EXPECT_EQ(kReadLength, buffer->GetSize());
163 // No change in start pointers of read data.
164 EXPECT_EQ(start_of_buffer, buffer->StartOfBuffer());
165 // Change in start pointer of unused buffer.
166 EXPECT_EQ(start_of_buffer + kReadLength, buffer->data());
167 // Test read data.
168 EXPECT_EQ(kReadData, std::string(buffer->StartOfBuffer(), buffer->GetSize()));
169
170 // Consume data partially.
171 const int kConsumedLength = 32;
172 ASSERT_LT(kConsumedLength, kReadLength);
173 buffer->DidConsume(kConsumedLength);
174 // Capacity reduced because read data was too small comparing to capacity.
175 EXPECT_EQ(HttpConnection::ReadIOBuffer::kInitialBufSize /
176 HttpConnection::ReadIOBuffer::kCapacityIncreaseFactor,
177 buffer->GetCapacity());
178 // Change in unused capacity because of read data.
179 EXPECT_EQ(HttpConnection::ReadIOBuffer::kInitialBufSize /
180 HttpConnection::ReadIOBuffer::kCapacityIncreaseFactor -
181 kReadLength + kConsumedLength,
182 buffer->RemainingCapacity());
183 // Change in read size.
184 EXPECT_EQ(kReadLength - kConsumedLength, buffer->GetSize());
185 // Start data could be changed even when capacity is reduced.
186 start_of_buffer = buffer->StartOfBuffer();
187 // Change in start pointer of unused buffer.
188 EXPECT_EQ(start_of_buffer + kReadLength - kConsumedLength, buffer->data());
189 // Change in read data.
190 EXPECT_EQ(kReadData.substr(kConsumedLength),
191 std::string(buffer->StartOfBuffer(), buffer->GetSize()));
192
193 // Read more data.
194 const int kReadLength2 = 64;
195 buffer->DidRead(kReadLength2);
196 // No change in total capacity.
197 EXPECT_EQ(HttpConnection::ReadIOBuffer::kInitialBufSize /
198 HttpConnection::ReadIOBuffer::kCapacityIncreaseFactor,
199 buffer->GetCapacity());
200 // Change in unused capacity because of read data.
201 EXPECT_EQ(HttpConnection::ReadIOBuffer::kInitialBufSize /
202 HttpConnection::ReadIOBuffer::kCapacityIncreaseFactor -
203 kReadLength + kConsumedLength - kReadLength2,
204 buffer->RemainingCapacity());
205 // Change in read size
206 EXPECT_EQ(kReadLength - kConsumedLength + kReadLength2, buffer->GetSize());
207 // No change in start pointer of read part.
208 EXPECT_EQ(start_of_buffer, buffer->StartOfBuffer());
209 // Change in start pointer of unused buffer.
210 EXPECT_EQ(start_of_buffer + kReadLength - kConsumedLength + kReadLength2,
211 buffer->data());
212
213 // Consume data fully.
214 buffer->DidConsume(kReadLength - kConsumedLength + kReadLength2);
215 // Capacity reduced again because read data was too small.
216 EXPECT_EQ(HttpConnection::ReadIOBuffer::kInitialBufSize /
217 HttpConnection::ReadIOBuffer::kCapacityIncreaseFactor /
218 HttpConnection::ReadIOBuffer::kCapacityIncreaseFactor,
219 buffer->GetCapacity());
220 EXPECT_EQ(HttpConnection::ReadIOBuffer::kInitialBufSize /
221 HttpConnection::ReadIOBuffer::kCapacityIncreaseFactor /
222 HttpConnection::ReadIOBuffer::kCapacityIncreaseFactor,
223 buffer->RemainingCapacity());
224 // All reverts to initial because no data is left.
225 EXPECT_EQ(0, buffer->GetSize());
226 // Start data could be changed even when capacity is reduced.
227 start_of_buffer = buffer->StartOfBuffer();
228 EXPECT_EQ(start_of_buffer, buffer->data());
229 }
230
231 TEST(HttpConnectionTest, QueuedWriteIOBuffer_Append_DidConsume) {
232 scoped_refptr<HttpConnection::QueuedWriteIOBuffer> buffer(
233 new HttpConnection::QueuedWriteIOBuffer());
234 EXPECT_TRUE(buffer->IsEmpty());
235 EXPECT_EQ(0, buffer->GetSizeToWrite());
236 EXPECT_EQ(0, buffer->total_size());
237
238 const std::string kData("data to write");
239 EXPECT_TRUE(buffer->Append(kData));
240 EXPECT_FALSE(buffer->IsEmpty());
241 EXPECT_EQ(static_cast<int>(kData.size()), buffer->GetSizeToWrite());
242 EXPECT_EQ(static_cast<int>(kData.size()), buffer->total_size());
243
244 const std::string kData2("more data to write");
245 EXPECT_TRUE(buffer->Append(kData2));
246 EXPECT_FALSE(buffer->IsEmpty());
247 // No change in size to write.
248 EXPECT_EQ(static_cast<int>(kData.size()), buffer->GetSizeToWrite());
249 // Change in total size.
250 EXPECT_EQ(static_cast<int>(kData.size() + kData2.size()),
251 buffer->total_size());
252
253 // Consume data partially.
254 const int kConsumedLength = kData.length() - 1;
255 buffer->DidConsume(kConsumedLength);
256 EXPECT_FALSE(buffer->IsEmpty());
257 // Change in size to write.
258 EXPECT_EQ(static_cast<int>(kData.size()) - kConsumedLength,
259 buffer->GetSizeToWrite());
260 // Change in total size.
261 EXPECT_EQ(static_cast<int>(kData.size() + kData2.size()) - kConsumedLength,
262 buffer->total_size());
mmenke 2014/08/15 14:23:16 I mean partial consumption of a write buffer. You
byungchul 2014/08/15 17:12:17 This case does that. It writes kData and kData2, a
263
264 // Consume first data fully.
265 buffer->DidConsume(kData.size() - kConsumedLength);
266 EXPECT_FALSE(buffer->IsEmpty());
267 // Now, size to write is size of data added second.
268 EXPECT_EQ(static_cast<int>(kData2.size()), buffer->GetSizeToWrite());
269 // Change in total size.
270 EXPECT_EQ(static_cast<int>(kData2.size()), buffer->total_size());
271
272 // Consume second data fully.
273 buffer->DidConsume(kData2.size());
274 EXPECT_TRUE(buffer->IsEmpty());
275 EXPECT_EQ(0, buffer->GetSizeToWrite());
276 EXPECT_EQ(0, buffer->total_size());
277 }
278
279 TEST(HttpConnectionTest, QueuedWriteIOBuffer_TotalSizeLimit) {
280 scoped_refptr<HttpConnection::QueuedWriteIOBuffer> buffer(
281 new HttpConnection::QueuedWriteIOBuffer());
282 EXPECT_EQ(HttpConnection::QueuedWriteIOBuffer::kDefaultMaxBufferSize + 0,
283 buffer->max_buffer_size());
284
285 // Set total size limit very small.
286 buffer->set_max_buffer_size(10);
287
288 const int kDataLength = 4;
289 const std::string kData(kDataLength, 'd');
290 EXPECT_TRUE(buffer->Append(kData));
291 EXPECT_EQ(kDataLength, buffer->total_size());
292 EXPECT_TRUE(buffer->Append(kData));
293 EXPECT_EQ(kDataLength * 2, buffer->total_size());
294
295 // Cannot append more data because it exceeds the limit.
296 EXPECT_FALSE(buffer->Append(kData));
297 EXPECT_EQ(kDataLength * 2, buffer->total_size());
298
299 // Consume data partially.
300 const int kConsumedLength = 2;
301 buffer->DidConsume(kConsumedLength);
302 EXPECT_EQ(kDataLength * 2 - kConsumedLength, buffer->total_size());
303
304 // Can add more data.
305 EXPECT_TRUE(buffer->Append(kData));
306 EXPECT_EQ(kDataLength * 3 - kConsumedLength, buffer->total_size());
307
308 // Cannot append more data because it exceeds the limit.
309 EXPECT_FALSE(buffer->Append(kData));
310 EXPECT_EQ(kDataLength * 3 - kConsumedLength, buffer->total_size());
311
312 // Enlarge limit.
313 buffer->set_max_buffer_size(20);
314 // Can add more data.
315 EXPECT_TRUE(buffer->Append(kData));
316 EXPECT_EQ(kDataLength * 4 - kConsumedLength, buffer->total_size());
317 }
318
319 } // namespace
320 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698