OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/tools/balsa/balsa_headers.h" | 5 #include "net/tools/balsa/balsa_headers.h" |
6 | 6 |
7 #include <iterator> | 7 #include <iterator> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 13 matching lines...) Expand all Loading... |
24 anotherBuffer_.reset(new BalsaBuffer); | 24 anotherBuffer_.reset(new BalsaBuffer); |
25 } | 25 } |
26 | 26 |
27 protected: | 27 protected: |
28 scoped_ptr<BalsaBuffer> buffer_; | 28 scoped_ptr<BalsaBuffer> buffer_; |
29 scoped_ptr<BalsaBuffer> anotherBuffer_; | 29 scoped_ptr<BalsaBuffer> anotherBuffer_; |
30 }; | 30 }; |
31 | 31 |
32 namespace { | 32 namespace { |
33 | 33 |
34 class BalsaHeadersTest: public ::testing::Test { | 34 class BalsaHeadersTest : public ::testing::Test { |
35 public: | 35 public: |
36 virtual void SetUp() OVERRIDE { | 36 virtual void SetUp() OVERRIDE { headers_.reset(new BalsaHeaders); } |
37 headers_.reset(new BalsaHeaders); | |
38 } | |
39 | 37 |
40 protected: | 38 protected: |
41 scoped_ptr<BalsaHeaders> headers_; | 39 scoped_ptr<BalsaHeaders> headers_; |
42 }; | 40 }; |
43 | 41 |
44 class StringBuffer { | 42 class StringBuffer { |
45 public: | 43 public: |
46 void Write(const char* p, size_t size) { | 44 void Write(const char* p, size_t size) { string_ += std::string(p, size); } |
47 string_ += std::string(p, size); | 45 const std::string& string() { return string_; } |
48 } | |
49 const std::string& string() {return string_;} | |
50 | 46 |
51 private: | 47 private: |
52 std::string string_; | 48 std::string string_; |
53 }; | 49 }; |
54 | 50 |
55 TEST_F(BalsaBufferTest, EmptyBuffer) { | 51 TEST_F(BalsaBufferTest, EmptyBuffer) { |
56 ASSERT_EQ(1u, buffer_->num_blocks()); | 52 ASSERT_EQ(1u, buffer_->num_blocks()); |
57 } | 53 } |
58 | 54 |
59 TEST_F(BalsaBufferTest, Write) { | 55 TEST_F(BalsaBufferTest, Write) { |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 TEST_F(BalsaBufferTest, Swap) { | 126 TEST_F(BalsaBufferTest, Swap) { |
131 buffer_->Write("hello", NULL); | 127 buffer_->Write("hello", NULL); |
132 | 128 |
133 ASSERT_EQ(2u, buffer_->num_blocks()); | 129 ASSERT_EQ(2u, buffer_->num_blocks()); |
134 ASSERT_EQ(1u, anotherBuffer_->num_blocks()); | 130 ASSERT_EQ(1u, anotherBuffer_->num_blocks()); |
135 | 131 |
136 buffer_->Swap(anotherBuffer_.get()); | 132 buffer_->Swap(anotherBuffer_.get()); |
137 | 133 |
138 ASSERT_EQ(1u, buffer_->num_blocks()); | 134 ASSERT_EQ(1u, buffer_->num_blocks()); |
139 ASSERT_EQ(2u, anotherBuffer_->num_blocks()); | 135 ASSERT_EQ(2u, anotherBuffer_->num_blocks()); |
140 ASSERT_EQ("hello", | 136 ASSERT_EQ( |
141 StringPiece(anotherBuffer_->GetPtr(1), | 137 "hello", |
142 anotherBuffer_->bytes_used(1))); | 138 StringPiece(anotherBuffer_->GetPtr(1), anotherBuffer_->bytes_used(1))); |
143 } | 139 } |
144 | 140 |
145 TEST_F(BalsaBufferTest, CopyFrom) { | 141 TEST_F(BalsaBufferTest, CopyFrom) { |
146 buffer_->Write("hello", NULL); | 142 buffer_->Write("hello", NULL); |
147 | 143 |
148 ASSERT_EQ(2u, buffer_->num_blocks()); | 144 ASSERT_EQ(2u, buffer_->num_blocks()); |
149 ASSERT_EQ(1u, anotherBuffer_->num_blocks()); | 145 ASSERT_EQ(1u, anotherBuffer_->num_blocks()); |
150 | 146 |
151 anotherBuffer_->CopyFrom(*buffer_); | 147 anotherBuffer_->CopyFrom(*buffer_); |
152 | 148 |
153 ASSERT_EQ(2u, buffer_->num_blocks()); | 149 ASSERT_EQ(2u, buffer_->num_blocks()); |
154 ASSERT_EQ(2u, anotherBuffer_->num_blocks()); | 150 ASSERT_EQ(2u, anotherBuffer_->num_blocks()); |
155 ASSERT_EQ("hello", StringPiece(buffer_->GetPtr(1), buffer_->bytes_used(1))); | 151 ASSERT_EQ("hello", StringPiece(buffer_->GetPtr(1), buffer_->bytes_used(1))); |
156 ASSERT_EQ("hello", | 152 ASSERT_EQ( |
157 StringPiece(anotherBuffer_->GetPtr(1), | 153 "hello", |
158 anotherBuffer_->bytes_used(1))); | 154 StringPiece(anotherBuffer_->GetPtr(1), anotherBuffer_->bytes_used(1))); |
159 } | 155 } |
160 | 156 |
161 TEST_F(BalsaHeadersTest, AppendHeader) { | 157 TEST_F(BalsaHeadersTest, AppendHeader) { |
162 headers_->AppendHeader("key1", "value1"); | 158 headers_->AppendHeader("key1", "value1"); |
163 headers_->AppendHeader("key2", "value2"); | 159 headers_->AppendHeader("key2", "value2"); |
164 headers_->AppendHeader("key3", "value3"); | 160 headers_->AppendHeader("key3", "value3"); |
165 headers_->AppendHeader("key3", "value3.1"); | 161 headers_->AppendHeader("key3", "value3.1"); |
166 headers_->AppendHeader("key3", "value3.2"); | 162 headers_->AppendHeader("key3", "value3.2"); |
167 | 163 |
168 ASSERT_EQ(5, std::distance(headers_->header_lines_begin(), | 164 ASSERT_EQ(5, |
169 headers_->header_lines_end())); | 165 std::distance(headers_->header_lines_begin(), |
| 166 headers_->header_lines_end())); |
170 ASSERT_EQ("value1", headers_->GetHeader("key1")); | 167 ASSERT_EQ("value1", headers_->GetHeader("key1")); |
171 ASSERT_EQ("value2", headers_->GetHeader("key2")); | 168 ASSERT_EQ("value2", headers_->GetHeader("key2")); |
172 ASSERT_EQ("value3", headers_->GetHeader("key3")); | 169 ASSERT_EQ("value3", headers_->GetHeader("key3")); |
173 | 170 |
174 std::vector<base::StringPiece> v1, v2, v3; | 171 std::vector<base::StringPiece> v1, v2, v3; |
175 std::string s1, s2, s3; | 172 std::string s1, s2, s3; |
176 headers_->GetAllOfHeader("key1", &v1); | 173 headers_->GetAllOfHeader("key1", &v1); |
177 headers_->GetAllOfHeader("key2", &v2); | 174 headers_->GetAllOfHeader("key2", &v2); |
178 headers_->GetAllOfHeader("key3", &v3); | 175 headers_->GetAllOfHeader("key3", &v3); |
179 headers_->GetAllOfHeaderAsString("key1", &s1); | 176 headers_->GetAllOfHeaderAsString("key1", &s1); |
(...skipping 10 matching lines...) Expand all Loading... |
190 ASSERT_EQ("value3.2", v3[2]); | 187 ASSERT_EQ("value3.2", v3[2]); |
191 ASSERT_EQ("value1", s1); | 188 ASSERT_EQ("value1", s1); |
192 ASSERT_EQ("value2", s2); | 189 ASSERT_EQ("value2", s2); |
193 ASSERT_EQ("value3,value3.1,value3.2", s3); | 190 ASSERT_EQ("value3,value3.1,value3.2", s3); |
194 } | 191 } |
195 | 192 |
196 TEST_F(BalsaHeadersTest, ReplaceOrAppendHeader) { | 193 TEST_F(BalsaHeadersTest, ReplaceOrAppendHeader) { |
197 headers_->ReplaceOrAppendHeader("key1", "value1"); | 194 headers_->ReplaceOrAppendHeader("key1", "value1"); |
198 headers_->ReplaceOrAppendHeader("key1", "value2"); | 195 headers_->ReplaceOrAppendHeader("key1", "value2"); |
199 | 196 |
200 ASSERT_EQ(1, std::distance(headers_->header_lines_begin(), | 197 ASSERT_EQ(1, |
201 headers_->header_lines_end())); | 198 std::distance(headers_->header_lines_begin(), |
| 199 headers_->header_lines_end())); |
202 ASSERT_EQ("value2", headers_->GetHeader("key1")); | 200 ASSERT_EQ("value2", headers_->GetHeader("key1")); |
203 | 201 |
204 std::vector<base::StringPiece> v; | 202 std::vector<base::StringPiece> v; |
205 headers_->GetAllOfHeader("key1", &v); | 203 headers_->GetAllOfHeader("key1", &v); |
206 | 204 |
207 ASSERT_EQ(1u, v.size()); | 205 ASSERT_EQ(1u, v.size()); |
208 ASSERT_EQ("value2", v[0]); | 206 ASSERT_EQ("value2", v[0]); |
209 } | 207 } |
210 | 208 |
211 TEST_F(BalsaHeadersTest, AppendToHeader) { | 209 TEST_F(BalsaHeadersTest, AppendToHeader) { |
212 headers_->AppendToHeader("key1", "value1"); | 210 headers_->AppendToHeader("key1", "value1"); |
213 headers_->AppendToHeader("keY1", "value2"); | 211 headers_->AppendToHeader("keY1", "value2"); |
214 | 212 |
215 ASSERT_EQ(1, std::distance(headers_->header_lines_begin(), | 213 ASSERT_EQ(1, |
216 headers_->header_lines_end())); | 214 std::distance(headers_->header_lines_begin(), |
| 215 headers_->header_lines_end())); |
217 ASSERT_EQ("value1,value2", headers_->GetHeader("key1")); | 216 ASSERT_EQ("value1,value2", headers_->GetHeader("key1")); |
218 | 217 |
219 std::vector<base::StringPiece> v; | 218 std::vector<base::StringPiece> v; |
220 std::string s; | 219 std::string s; |
221 headers_->GetAllOfHeader("key1", &v); | 220 headers_->GetAllOfHeader("key1", &v); |
222 headers_->GetAllOfHeaderAsString("keY1", &s); | 221 headers_->GetAllOfHeaderAsString("keY1", &s); |
223 | 222 |
224 ASSERT_EQ(1u, v.size()); | 223 ASSERT_EQ(1u, v.size()); |
225 ASSERT_EQ("value1,value2", v[0]); | 224 ASSERT_EQ("value1,value2", v[0]); |
226 ASSERT_EQ("value1,value2", s); | 225 ASSERT_EQ("value1,value2", s); |
227 } | 226 } |
228 | 227 |
229 TEST_F(BalsaHeadersTest, PrepentToHeader) { | 228 TEST_F(BalsaHeadersTest, PrepentToHeader) { |
230 headers_->PrependToHeader("key1", "value1"); | 229 headers_->PrependToHeader("key1", "value1"); |
231 headers_->PrependToHeader("key1", "value2"); | 230 headers_->PrependToHeader("key1", "value2"); |
232 | 231 |
233 ASSERT_EQ(1, std::distance(headers_->header_lines_begin(), | 232 ASSERT_EQ(1, |
234 headers_->header_lines_end())); | 233 std::distance(headers_->header_lines_begin(), |
| 234 headers_->header_lines_end())); |
235 ASSERT_EQ("value2,value1", headers_->GetHeader("key1")); | 235 ASSERT_EQ("value2,value1", headers_->GetHeader("key1")); |
236 | 236 |
237 std::vector<base::StringPiece> v; | 237 std::vector<base::StringPiece> v; |
238 std::string s; | 238 std::string s; |
239 headers_->GetAllOfHeader("key1", &v); | 239 headers_->GetAllOfHeader("key1", &v); |
240 headers_->GetAllOfHeaderAsString("key1", &s); | 240 headers_->GetAllOfHeaderAsString("key1", &s); |
241 | 241 |
242 ASSERT_EQ(1u, v.size()); | 242 ASSERT_EQ(1u, v.size()); |
243 ASSERT_EQ("value2,value1", v[0]); | 243 ASSERT_EQ("value2,value1", v[0]); |
244 ASSERT_EQ("value2,value1", s); | 244 ASSERT_EQ("value2,value1", s); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
309 } | 309 } |
310 | 310 |
311 TEST_F(BalsaHeadersTest, RemoveAllOfHeader) { | 311 TEST_F(BalsaHeadersTest, RemoveAllOfHeader) { |
312 headers_->AppendHeader("key1", "value1"); | 312 headers_->AppendHeader("key1", "value1"); |
313 headers_->AppendHeader("key2", "value2"); | 313 headers_->AppendHeader("key2", "value2"); |
314 headers_->AppendHeader("key1", "value1.1"); | 314 headers_->AppendHeader("key1", "value1.1"); |
315 headers_->AppendHeader("key3", "value3"); | 315 headers_->AppendHeader("key3", "value3"); |
316 headers_->AppendHeader("key1", "value1.2"); | 316 headers_->AppendHeader("key1", "value1.2"); |
317 headers_->AppendHeader("kEY1", "value1.3"); | 317 headers_->AppendHeader("kEY1", "value1.3"); |
318 | 318 |
319 ASSERT_EQ(6, std::distance(headers_->header_lines_begin(), | 319 ASSERT_EQ(6, |
320 headers_->header_lines_end())); | 320 std::distance(headers_->header_lines_begin(), |
| 321 headers_->header_lines_end())); |
321 headers_->RemoveAllOfHeader("key1"); | 322 headers_->RemoveAllOfHeader("key1"); |
322 ASSERT_EQ(2, std::distance(headers_->header_lines_begin(), | 323 ASSERT_EQ(2, |
323 headers_->header_lines_end())); | 324 std::distance(headers_->header_lines_begin(), |
| 325 headers_->header_lines_end())); |
324 } | 326 } |
325 | 327 |
326 TEST_F(BalsaHeadersTest, RemoveAllHeadersWithPrefix) { | 328 TEST_F(BalsaHeadersTest, RemoveAllHeadersWithPrefix) { |
327 headers_->AppendHeader("1key", "value1"); | 329 headers_->AppendHeader("1key", "value1"); |
328 headers_->AppendHeader("2key", "value2"); | 330 headers_->AppendHeader("2key", "value2"); |
329 headers_->AppendHeader("1kEz", "value1.1"); | 331 headers_->AppendHeader("1kEz", "value1.1"); |
330 headers_->AppendHeader("key3", "value3"); | 332 headers_->AppendHeader("key3", "value3"); |
331 headers_->AppendHeader("1KEEjkladf", "value1.2"); | 333 headers_->AppendHeader("1KEEjkladf", "value1.2"); |
332 | 334 |
333 ASSERT_EQ(5, std::distance(headers_->header_lines_begin(), | 335 ASSERT_EQ(5, |
334 headers_->header_lines_end())); | 336 std::distance(headers_->header_lines_begin(), |
| 337 headers_->header_lines_end())); |
335 headers_->RemoveAllHeadersWithPrefix("1ke"); | 338 headers_->RemoveAllHeadersWithPrefix("1ke"); |
336 ASSERT_EQ(2, std::distance(headers_->header_lines_begin(), | 339 ASSERT_EQ(2, |
337 headers_->header_lines_end())); | 340 std::distance(headers_->header_lines_begin(), |
| 341 headers_->header_lines_end())); |
338 } | 342 } |
339 | 343 |
340 TEST_F(BalsaHeadersTest, WriteRequestHeaderAndEndingToBuffer) { | 344 TEST_F(BalsaHeadersTest, WriteRequestHeaderAndEndingToBuffer) { |
341 headers_->AppendHeader("key1", "value1"); | 345 headers_->AppendHeader("key1", "value1"); |
342 headers_->AppendHeader("key2", "value2"); | 346 headers_->AppendHeader("key2", "value2"); |
343 headers_->AppendHeader("key1", "value1.1"); | 347 headers_->AppendHeader("key1", "value1.1"); |
344 | 348 |
345 headers_->SetRequestFirstlineFromStringPieces("GET", "/", "HTTP/1.0"); | 349 headers_->SetRequestFirstlineFromStringPieces("GET", "/", "HTTP/1.0"); |
346 | 350 |
347 std::string expected = "GET / HTTP/1.0\r\n" | 351 std::string expected = |
| 352 "GET / HTTP/1.0\r\n" |
348 "key1: value1\r\n" | 353 "key1: value1\r\n" |
349 "key2: value2\r\n" | 354 "key2: value2\r\n" |
350 "key1: value1.1\r\n\r\n"; | 355 "key1: value1.1\r\n\r\n"; |
351 StringBuffer buffer; | 356 StringBuffer buffer; |
352 headers_->WriteHeaderAndEndingToBuffer(&buffer); | 357 headers_->WriteHeaderAndEndingToBuffer(&buffer); |
353 ASSERT_EQ(expected, buffer.string()); | 358 ASSERT_EQ(expected, buffer.string()); |
354 } | 359 } |
355 | 360 |
356 TEST_F(BalsaHeadersTest, WriteResponseHeaderAndEndingToBuffer) { | 361 TEST_F(BalsaHeadersTest, WriteResponseHeaderAndEndingToBuffer) { |
357 headers_->AppendHeader("key1", "value1"); | 362 headers_->AppendHeader("key1", "value1"); |
358 headers_->AppendHeader("key2", "value2"); | 363 headers_->AppendHeader("key2", "value2"); |
359 headers_->AppendHeader("key1", "value1.1"); | 364 headers_->AppendHeader("key1", "value1.1"); |
360 | 365 |
361 headers_->SetResponseFirstlineFromStringPieces("HTTP/1.0", "200", "OK"); | 366 headers_->SetResponseFirstlineFromStringPieces("HTTP/1.0", "200", "OK"); |
362 | 367 |
363 std::string expected = "HTTP/1.0 200 OK\r\n" | 368 std::string expected = |
| 369 "HTTP/1.0 200 OK\r\n" |
364 "key1: value1\r\n" | 370 "key1: value1\r\n" |
365 "key2: value2\r\n" | 371 "key2: value2\r\n" |
366 "key1: value1.1\r\n\r\n"; | 372 "key1: value1.1\r\n\r\n"; |
367 StringBuffer buffer; | 373 StringBuffer buffer; |
368 headers_->WriteHeaderAndEndingToBuffer(&buffer); | 374 headers_->WriteHeaderAndEndingToBuffer(&buffer); |
369 ASSERT_EQ(expected, buffer.string()); | 375 ASSERT_EQ(expected, buffer.string()); |
370 } | 376 } |
371 | 377 |
372 TEST_F(BalsaHeadersTest, RequestFirstLine) { | 378 TEST_F(BalsaHeadersTest, RequestFirstLine) { |
373 headers_->SetRequestFirstlineFromStringPieces("HEAD", "/path", "HTTP/1.1"); | 379 headers_->SetRequestFirstlineFromStringPieces("HEAD", "/path", "HTTP/1.1"); |
374 | 380 |
375 ASSERT_EQ("HEAD /path HTTP/1.1", headers_->first_line()); | 381 ASSERT_EQ("HEAD /path HTTP/1.1", headers_->first_line()); |
376 ASSERT_EQ("HEAD", headers_->request_method()); | 382 ASSERT_EQ("HEAD", headers_->request_method()); |
377 ASSERT_EQ("/path", headers_->request_uri()); | 383 ASSERT_EQ("/path", headers_->request_uri()); |
378 ASSERT_EQ("HTTP/1.1", headers_->request_version()); | 384 ASSERT_EQ("HTTP/1.1", headers_->request_version()); |
379 } | 385 } |
380 | 386 |
381 TEST_F(BalsaHeadersTest, ResponseFirstLine) { | 387 TEST_F(BalsaHeadersTest, ResponseFirstLine) { |
382 headers_->SetRequestFirstlineFromStringPieces("HTTP/1.0", "403", "FORBIDDEN"); | 388 headers_->SetRequestFirstlineFromStringPieces("HTTP/1.0", "403", "FORBIDDEN"); |
383 | 389 |
384 ASSERT_EQ("HTTP/1.0 403 FORBIDDEN", headers_->first_line()); | 390 ASSERT_EQ("HTTP/1.0 403 FORBIDDEN", headers_->first_line()); |
385 ASSERT_EQ("HTTP/1.0", headers_->response_version()); | 391 ASSERT_EQ("HTTP/1.0", headers_->response_version()); |
386 ASSERT_EQ("403", headers_->response_code()); | 392 ASSERT_EQ("403", headers_->response_code()); |
387 ASSERT_EQ("FORBIDDEN", headers_->response_reason_phrase()); | 393 ASSERT_EQ("FORBIDDEN", headers_->response_reason_phrase()); |
388 } | 394 } |
389 | 395 |
390 } // namespace | 396 } // namespace |
391 | 397 |
392 } // namespace net | 398 } // namespace net |
OLD | NEW |