| 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 |