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]); |
Ryan Hamilton
2012/12/22 22:31:32
nit: missing space.
| |
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]); |
Ryan Hamilton
2012/12/22 22:31:32
nit: missing space.
| |
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]); |
Ryan Hamilton
2012/12/22 22:31:32
nit: missing space.
| |
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 |