| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <map> | 5 #include <map> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "net/quic/crypto/crypto_framer.h" | 10 #include "net/quic/crypto/crypto_framer.h" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 } // namespace | 27 } // namespace |
| 28 | 28 |
| 29 namespace test { | 29 namespace test { |
| 30 | 30 |
| 31 class TestCryptoVisitor : public ::net::CryptoFramerVisitorInterface { | 31 class TestCryptoVisitor : public ::net::CryptoFramerVisitorInterface { |
| 32 public: | 32 public: |
| 33 TestCryptoVisitor() | 33 TestCryptoVisitor() |
| 34 : error_count_(0) { | 34 : error_count_(0) { |
| 35 } | 35 } |
| 36 | 36 |
| 37 ~TestCryptoVisitor() {} | |
| 38 | |
| 39 virtual void OnError(CryptoFramer* framer) { | 37 virtual void OnError(CryptoFramer* framer) { |
| 40 LOG(ERROR) << "CryptoFramer Error: " << framer->error(); | 38 DLOG(ERROR) << "CryptoFramer Error: " << framer->error(); |
| 41 error_count_++; | 39 ++error_count_; |
| 42 } | 40 } |
| 43 | 41 |
| 44 virtual void OnHandshakeMessage(const CryptoHandshakeMessage& message) { | 42 virtual void OnHandshakeMessage(const CryptoHandshakeMessage& message) { |
| 45 message_tags_.push_back(message.tag); | 43 messages_.push_back(message); |
| 46 message_maps_.push_back(map<CryptoTag, string>()); | |
| 47 CryptoTagValueMap::const_iterator it = message.tag_value_map.begin(); | |
| 48 while (it != message.tag_value_map.end()) { | |
| 49 message_maps_.back()[it->first] = it->second.as_string(); | |
| 50 ++it; | |
| 51 } | |
| 52 } | 44 } |
| 53 | 45 |
| 54 // Counters from the visitor callbacks. | 46 // Counters from the visitor callbacks. |
| 55 int error_count_; | 47 int error_count_; |
| 56 | 48 |
| 57 CryptoTagVector message_tags_; | 49 vector<CryptoHandshakeMessage> messages_; |
| 58 vector<map<CryptoTag, string> > message_maps_; | |
| 59 }; | 50 }; |
| 60 | 51 |
| 61 } // namespace test | 52 } // namespace test |
| 62 | 53 |
| 63 TEST(CryptoFramerTest, MakeCryptoTag) { | 54 TEST(CryptoFramerTest, MakeCryptoTag) { |
| 64 CryptoTag tag = MAKE_TAG('A', 'B', 'C', 'D'); | 55 CryptoTag tag = MAKE_TAG('A', 'B', 'C', 'D'); |
| 65 char bytes[4]; | 56 char bytes[4]; |
| 66 memcpy(bytes, &tag, 4); | 57 memcpy(bytes, &tag, 4); |
| 67 EXPECT_EQ('A', bytes[0]); | 58 EXPECT_EQ('A', bytes[0]); |
| 68 EXPECT_EQ('B', bytes[1]); | 59 EXPECT_EQ('B', bytes[1]); |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 'a', 'b', 'c', 'd', | 203 'a', 'b', 'c', 'd', |
| 213 'e', 'f', | 204 'e', 'f', |
| 214 // value 2 | 205 // value 2 |
| 215 'g', 'h', 'i', 'j', | 206 'g', 'h', 'i', 'j', |
| 216 'k', | 207 'k', |
| 217 }; | 208 }; |
| 218 | 209 |
| 219 EXPECT_TRUE(framer.ProcessInput(StringPiece(AsChars(input), | 210 EXPECT_TRUE(framer.ProcessInput(StringPiece(AsChars(input), |
| 220 arraysize(input)))); | 211 arraysize(input)))); |
| 221 EXPECT_EQ(0u, framer.InputBytesRemaining()); | 212 EXPECT_EQ(0u, framer.InputBytesRemaining()); |
| 222 ASSERT_EQ(1u, visitor.message_tags_.size()); | 213 ASSERT_EQ(1u, visitor.messages_.size()); |
| 223 EXPECT_EQ(0xFFAA7733, visitor.message_tags_[0]); | 214 EXPECT_EQ(0xFFAA7733, visitor.messages_[0].tag); |
| 224 ASSERT_EQ(1u, visitor.message_maps_.size()); | 215 EXPECT_EQ(2u, visitor.messages_[0].tag_value_map.size()); |
| 225 EXPECT_EQ(2u, visitor.message_maps_[0].size()); | 216 EXPECT_EQ("abcdef",visitor.messages_[0].tag_value_map[0x12345678]); |
| 226 EXPECT_EQ("abcdef",visitor.message_maps_[0][0x12345678]); | 217 EXPECT_EQ("ghijk", visitor.messages_[0].tag_value_map[0x12345679]); |
| 227 EXPECT_EQ("ghijk", visitor.message_maps_[0][0x12345679]); | |
| 228 } | 218 } |
| 229 | 219 |
| 230 TEST(CryptoFramerTest, ProcessInputWithThreeKeys) { | 220 TEST(CryptoFramerTest, ProcessInputWithThreeKeys) { |
| 231 test::TestCryptoVisitor visitor; | 221 test::TestCryptoVisitor visitor; |
| 232 CryptoFramer framer; | 222 CryptoFramer framer; |
| 233 framer.set_visitor(&visitor); | 223 framer.set_visitor(&visitor); |
| 234 | 224 |
| 235 unsigned char input[] = { | 225 unsigned char input[] = { |
| 236 // tag | 226 // tag |
| 237 0x33, 0x77, 0xAA, 0xFF, | 227 0x33, 0x77, 0xAA, 0xFF, |
| (...skipping 20 matching lines...) Expand all Loading... |
| 258 'g', 'h', 'i', 'j', | 248 'g', 'h', 'i', 'j', |
| 259 'k', | 249 'k', |
| 260 // value 3 | 250 // value 3 |
| 261 'l', 'm', 'n', 'o', | 251 'l', 'm', 'n', 'o', |
| 262 'p', 'q', 'r', | 252 'p', 'q', 'r', |
| 263 }; | 253 }; |
| 264 | 254 |
| 265 EXPECT_TRUE(framer.ProcessInput(StringPiece(AsChars(input), | 255 EXPECT_TRUE(framer.ProcessInput(StringPiece(AsChars(input), |
| 266 arraysize(input)))); | 256 arraysize(input)))); |
| 267 EXPECT_EQ(0u, framer.InputBytesRemaining()); | 257 EXPECT_EQ(0u, framer.InputBytesRemaining()); |
| 268 ASSERT_EQ(1u, visitor.message_tags_.size()); | 258 ASSERT_EQ(1u, visitor.messages_.size()); |
| 269 EXPECT_EQ(0xFFAA7733, visitor.message_tags_[0]); | 259 EXPECT_EQ(0xFFAA7733, visitor.messages_[0].tag); |
| 270 ASSERT_EQ(1u, visitor.message_maps_.size()); | 260 EXPECT_EQ(3u, visitor.messages_[0].tag_value_map.size()); |
| 271 EXPECT_EQ(3u, visitor.message_maps_[0].size()); | 261 EXPECT_EQ("abcdef",visitor.messages_[0].tag_value_map[0x12345678]); |
| 272 EXPECT_EQ("abcdef",visitor.message_maps_[0][0x12345678]); | 262 EXPECT_EQ("ghijk", visitor.messages_[0].tag_value_map[0x12345679]); |
| 273 EXPECT_EQ("ghijk", visitor.message_maps_[0][0x12345679]); | 263 EXPECT_EQ("lmnopqr", visitor.messages_[0].tag_value_map[0x1234567A]); |
| 274 EXPECT_EQ("lmnopqr", visitor.message_maps_[0][0x1234567A]); | |
| 275 } | 264 } |
| 276 | 265 |
| 277 TEST(CryptoFramerTest, ProcessInputIncrementally) { | 266 TEST(CryptoFramerTest, ProcessInputIncrementally) { |
| 278 test::TestCryptoVisitor visitor; | 267 test::TestCryptoVisitor visitor; |
| 279 CryptoFramer framer; | 268 CryptoFramer framer; |
| 280 framer.set_visitor(&visitor); | 269 framer.set_visitor(&visitor); |
| 281 | 270 |
| 282 unsigned char input[] = { | 271 unsigned char input[] = { |
| 283 // tag | 272 // tag |
| 284 0x33, 0x77, 0xAA, 0xFF, | 273 0x33, 0x77, 0xAA, 0xFF, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 297 'e', 'f', | 286 'e', 'f', |
| 298 // value 2 | 287 // value 2 |
| 299 'g', 'h', 'i', 'j', | 288 'g', 'h', 'i', 'j', |
| 300 'k', | 289 'k', |
| 301 }; | 290 }; |
| 302 | 291 |
| 303 for (size_t i = 0; i < arraysize(input); i++) { | 292 for (size_t i = 0; i < arraysize(input); i++) { |
| 304 EXPECT_TRUE(framer.ProcessInput(StringPiece(AsChars(input)+ i, 1))); | 293 EXPECT_TRUE(framer.ProcessInput(StringPiece(AsChars(input)+ i, 1))); |
| 305 } | 294 } |
| 306 EXPECT_EQ(0u, framer.InputBytesRemaining()); | 295 EXPECT_EQ(0u, framer.InputBytesRemaining()); |
| 307 ASSERT_EQ(1u, visitor.message_tags_.size()); | 296 ASSERT_EQ(1u, visitor.messages_.size()); |
| 308 EXPECT_EQ(0xFFAA7733, visitor.message_tags_[0]); | 297 EXPECT_EQ(0xFFAA7733, visitor.messages_[0].tag); |
| 309 ASSERT_EQ(1u, visitor.message_maps_.size()); | 298 EXPECT_EQ(2u, visitor.messages_[0].tag_value_map.size()); |
| 310 EXPECT_EQ(2u, visitor.message_maps_[0].size()); | 299 EXPECT_EQ("abcdef",visitor.messages_[0].tag_value_map[0x12345678]); |
| 311 EXPECT_EQ("abcdef",visitor.message_maps_[0][0x12345678]); | 300 EXPECT_EQ("ghijk", visitor.messages_[0].tag_value_map[0x12345679]); |
| 312 EXPECT_EQ("ghijk", visitor.message_maps_[0][0x12345679]); | |
| 313 } | 301 } |
| 314 | 302 |
| 315 TEST(CryptoFramerTest, ProcessInputTagsOutOfOrder) { | 303 TEST(CryptoFramerTest, ProcessInputTagsOutOfOrder) { |
| 316 test::TestCryptoVisitor visitor; | 304 test::TestCryptoVisitor visitor; |
| 317 CryptoFramer framer; | 305 CryptoFramer framer; |
| 318 framer.set_visitor(&visitor); | 306 framer.set_visitor(&visitor); |
| 319 | 307 |
| 320 unsigned char input[] = { | 308 unsigned char input[] = { |
| 321 // tag | 309 // tag |
| 322 0x33, 0x77, 0xAA, 0xFF, | 310 0x33, 0x77, 0xAA, 0xFF, |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 391 // padding | 379 // padding |
| 392 0x05, 0x00, | 380 0x05, 0x00, |
| 393 }; | 381 }; |
| 394 | 382 |
| 395 EXPECT_FALSE(framer.ProcessInput(StringPiece(AsChars(input), | 383 EXPECT_FALSE(framer.ProcessInput(StringPiece(AsChars(input), |
| 396 arraysize(input)))); | 384 arraysize(input)))); |
| 397 EXPECT_EQ(QUIC_CRYPTO_INVALID_VALUE_LENGTH, framer.error()); | 385 EXPECT_EQ(QUIC_CRYPTO_INVALID_VALUE_LENGTH, framer.error()); |
| 398 } | 386 } |
| 399 | 387 |
| 400 } // namespace net | 388 } // namespace net |
| OLD | NEW |