| 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 <algorithm> | 5 #include <algorithm> |
| 6 #include <map> | 6 #include <map> |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/hash_tables.h" | 10 #include "base/hash_tables.h" |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 272 QuicConnectionCloseFrame connection_close_frame_; | 272 QuicConnectionCloseFrame connection_close_frame_; |
| 273 QuicGoAwayFrame goaway_frame_; | 273 QuicGoAwayFrame goaway_frame_; |
| 274 }; | 274 }; |
| 275 | 275 |
| 276 class QuicFramerTest : public ::testing::Test { | 276 class QuicFramerTest : public ::testing::Test { |
| 277 public: | 277 public: |
| 278 QuicFramerTest() | 278 QuicFramerTest() |
| 279 : encrypter_(new test::TestEncrypter()), | 279 : encrypter_(new test::TestEncrypter()), |
| 280 decrypter_(new test::TestDecrypter()), | 280 decrypter_(new test::TestDecrypter()), |
| 281 start_(QuicTime::Zero().Add(QuicTime::Delta::FromMicroseconds(0x10))), | 281 start_(QuicTime::Zero().Add(QuicTime::Delta::FromMicroseconds(0x10))), |
| 282 framer_(kQuicVersion1, decrypter_, encrypter_, start_, true) { | 282 framer_(kQuicVersion1, start_, true) { |
| 283 framer_.SetDecrypter(decrypter_); |
| 284 framer_.SetEncrypter(ENCRYPTION_NONE, encrypter_); |
| 283 framer_.set_visitor(&visitor_); | 285 framer_.set_visitor(&visitor_); |
| 284 framer_.set_entropy_calculator(&entropy_calculator_); | 286 framer_.set_entropy_calculator(&entropy_calculator_); |
| 285 } | 287 } |
| 286 | 288 |
| 287 bool CheckEncryption(QuicPacketSequenceNumber sequence_number, | 289 bool CheckEncryption(QuicPacketSequenceNumber sequence_number, |
| 288 QuicPacket* packet) { | 290 QuicPacket* packet) { |
| 289 if (sequence_number != encrypter_->sequence_number_) { | 291 if (sequence_number != encrypter_->sequence_number_) { |
| 290 LOG(ERROR) << "Encrypted incorrect packet sequence number. expected " | 292 LOG(ERROR) << "Encrypted incorrect packet sequence number. expected " |
| 291 << sequence_number << " actual: " | 293 << sequence_number << " actual: " |
| 292 << encrypter_->sequence_number_; | 294 << encrypter_->sequence_number_; |
| (...skipping 2153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2446 'a', 'b', 'c', 'd', | 2448 'a', 'b', 'c', 'd', |
| 2447 'e', 'f', 'g', 'h', | 2449 'e', 'f', 'g', 'h', |
| 2448 'i', 'j', 'k', 'l', | 2450 'i', 'j', 'k', 'l', |
| 2449 'm', 'n', 'o', 'p', | 2451 'm', 'n', 'o', 'p', |
| 2450 }; | 2452 }; |
| 2451 | 2453 |
| 2452 scoped_ptr<QuicPacket> raw( | 2454 scoped_ptr<QuicPacket> raw( |
| 2453 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, | 2455 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, |
| 2454 !kIncludeVersion)); | 2456 !kIncludeVersion)); |
| 2455 scoped_ptr<QuicEncryptedPacket> encrypted( | 2457 scoped_ptr<QuicEncryptedPacket> encrypted( |
| 2456 framer_.EncryptPacket(sequence_number, *raw)); | 2458 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); |
| 2457 | 2459 |
| 2458 ASSERT_TRUE(encrypted.get() != NULL); | 2460 ASSERT_TRUE(encrypted.get() != NULL); |
| 2459 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); | 2461 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); |
| 2460 } | 2462 } |
| 2461 | 2463 |
| 2462 TEST_F(QuicFramerTest, EncryptPacketWithVersionFlag) { | 2464 TEST_F(QuicFramerTest, EncryptPacketWithVersionFlag) { |
| 2463 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); | 2465 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); |
| 2464 unsigned char packet[] = { | 2466 unsigned char packet[] = { |
| 2465 // guid | 2467 // guid |
| 2466 0x10, 0x32, 0x54, 0x76, | 2468 0x10, 0x32, 0x54, 0x76, |
| (...skipping 14 matching lines...) Expand all Loading... |
| 2481 'a', 'b', 'c', 'd', | 2483 'a', 'b', 'c', 'd', |
| 2482 'e', 'f', 'g', 'h', | 2484 'e', 'f', 'g', 'h', |
| 2483 'i', 'j', 'k', 'l', | 2485 'i', 'j', 'k', 'l', |
| 2484 'm', 'n', 'o', 'p', | 2486 'm', 'n', 'o', 'p', |
| 2485 }; | 2487 }; |
| 2486 | 2488 |
| 2487 scoped_ptr<QuicPacket> raw( | 2489 scoped_ptr<QuicPacket> raw( |
| 2488 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, | 2490 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, |
| 2489 kIncludeVersion)); | 2491 kIncludeVersion)); |
| 2490 scoped_ptr<QuicEncryptedPacket> encrypted( | 2492 scoped_ptr<QuicEncryptedPacket> encrypted( |
| 2491 framer_.EncryptPacket(sequence_number, *raw)); | 2493 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); |
| 2492 | 2494 |
| 2493 ASSERT_TRUE(encrypted.get() != NULL); | 2495 ASSERT_TRUE(encrypted.get() != NULL); |
| 2494 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); | 2496 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); |
| 2495 } | 2497 } |
| 2496 | 2498 |
| 2497 // TODO(rch): re-enable after https://codereview.chromium.org/11820005/ | 2499 // TODO(rch): re-enable after https://codereview.chromium.org/11820005/ |
| 2498 // lands. Currently this is causing valgrind problems, but it should be | 2500 // lands. Currently this is causing valgrind problems, but it should be |
| 2499 // fixed in the followup CL. | 2501 // fixed in the followup CL. |
| 2500 TEST_F(QuicFramerTest, DISABLED_CalculateLargestReceived) { | 2502 TEST_F(QuicFramerTest, DISABLED_CalculateLargestReceived) { |
| 2501 SequenceNumberSet missing; | 2503 SequenceNumberSet missing; |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2542 frame.type = ACK_FRAME; | 2544 frame.type = ACK_FRAME; |
| 2543 frame.ack_frame = ack_frame; | 2545 frame.ack_frame = ack_frame; |
| 2544 QuicFrames frames; | 2546 QuicFrames frames; |
| 2545 frames.push_back(frame); | 2547 frames.push_back(frame); |
| 2546 | 2548 |
| 2547 scoped_ptr<QuicPacket> raw_ack_packet( | 2549 scoped_ptr<QuicPacket> raw_ack_packet( |
| 2548 framer_.ConstructFrameDataPacket(header, frames).packet); | 2550 framer_.ConstructFrameDataPacket(header, frames).packet); |
| 2549 ASSERT_TRUE(raw_ack_packet != NULL); | 2551 ASSERT_TRUE(raw_ack_packet != NULL); |
| 2550 | 2552 |
| 2551 scoped_ptr<QuicEncryptedPacket> ack_packet( | 2553 scoped_ptr<QuicEncryptedPacket> ack_packet( |
| 2552 framer_.EncryptPacket(header.packet_sequence_number, *raw_ack_packet)); | 2554 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, |
| 2555 *raw_ack_packet)); |
| 2553 | 2556 |
| 2554 // Create a packet with just connection close. | 2557 // Create a packet with just connection close. |
| 2555 frames.clear(); | 2558 frames.clear(); |
| 2556 frame.type = CONNECTION_CLOSE_FRAME; | 2559 frame.type = CONNECTION_CLOSE_FRAME; |
| 2557 frame.connection_close_frame = &close_frame; | 2560 frame.connection_close_frame = &close_frame; |
| 2558 frames.push_back(frame); | 2561 frames.push_back(frame); |
| 2559 | 2562 |
| 2560 scoped_ptr<QuicPacket> raw_close_packet( | 2563 scoped_ptr<QuicPacket> raw_close_packet( |
| 2561 framer_.ConstructFrameDataPacket(header, frames).packet); | 2564 framer_.ConstructFrameDataPacket(header, frames).packet); |
| 2562 ASSERT_TRUE(raw_close_packet != NULL); | 2565 ASSERT_TRUE(raw_close_packet != NULL); |
| 2563 | 2566 |
| 2564 scoped_ptr<QuicEncryptedPacket> close_packet( | 2567 scoped_ptr<QuicEncryptedPacket> close_packet( |
| 2565 framer_.EncryptPacket(header.packet_sequence_number, *raw_close_packet)); | 2568 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, |
| 2569 *raw_close_packet)); |
| 2566 | 2570 |
| 2567 // Now make sure we can turn our ack packet back into an ack frame | 2571 // Now make sure we can turn our ack packet back into an ack frame |
| 2568 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); | 2572 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); |
| 2569 | 2573 |
| 2570 // And do the same for the close frame. | 2574 // And do the same for the close frame. |
| 2571 ASSERT_TRUE(framer_.ProcessPacket(*close_packet)); | 2575 ASSERT_TRUE(framer_.ProcessPacket(*close_packet)); |
| 2572 } | 2576 } |
| 2573 | 2577 |
| 2574 TEST_F(QuicFramerTest, CleanTruncation) { | 2578 TEST_F(QuicFramerTest, CleanTruncation) { |
| 2575 QuicPacketHeader header; | 2579 QuicPacketHeader header; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 2597 frame.type = ACK_FRAME; | 2601 frame.type = ACK_FRAME; |
| 2598 frame.ack_frame = ack_frame; | 2602 frame.ack_frame = ack_frame; |
| 2599 QuicFrames frames; | 2603 QuicFrames frames; |
| 2600 frames.push_back(frame); | 2604 frames.push_back(frame); |
| 2601 | 2605 |
| 2602 scoped_ptr<QuicPacket> raw_ack_packet( | 2606 scoped_ptr<QuicPacket> raw_ack_packet( |
| 2603 framer_.ConstructFrameDataPacket(header, frames).packet); | 2607 framer_.ConstructFrameDataPacket(header, frames).packet); |
| 2604 ASSERT_TRUE(raw_ack_packet != NULL); | 2608 ASSERT_TRUE(raw_ack_packet != NULL); |
| 2605 | 2609 |
| 2606 scoped_ptr<QuicEncryptedPacket> ack_packet( | 2610 scoped_ptr<QuicEncryptedPacket> ack_packet( |
| 2607 framer_.EncryptPacket(header.packet_sequence_number, *raw_ack_packet)); | 2611 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, |
| 2612 *raw_ack_packet)); |
| 2608 | 2613 |
| 2609 // Create a packet with just connection close. | 2614 // Create a packet with just connection close. |
| 2610 frames.clear(); | 2615 frames.clear(); |
| 2611 frame.type = CONNECTION_CLOSE_FRAME; | 2616 frame.type = CONNECTION_CLOSE_FRAME; |
| 2612 frame.connection_close_frame = &close_frame; | 2617 frame.connection_close_frame = &close_frame; |
| 2613 frames.push_back(frame); | 2618 frames.push_back(frame); |
| 2614 | 2619 |
| 2615 scoped_ptr<QuicPacket> raw_close_packet( | 2620 scoped_ptr<QuicPacket> raw_close_packet( |
| 2616 framer_.ConstructFrameDataPacket(header, frames).packet); | 2621 framer_.ConstructFrameDataPacket(header, frames).packet); |
| 2617 ASSERT_TRUE(raw_close_packet != NULL); | 2622 ASSERT_TRUE(raw_close_packet != NULL); |
| 2618 | 2623 |
| 2619 scoped_ptr<QuicEncryptedPacket> close_packet( | 2624 scoped_ptr<QuicEncryptedPacket> close_packet( |
| 2620 framer_.EncryptPacket(header.packet_sequence_number, *raw_close_packet)); | 2625 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, |
| 2626 *raw_close_packet)); |
| 2621 | 2627 |
| 2622 // Now make sure we can turn our ack packet back into an ack frame | 2628 // Now make sure we can turn our ack packet back into an ack frame |
| 2623 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); | 2629 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); |
| 2624 | 2630 |
| 2625 // And do the same for the close frame. | 2631 // And do the same for the close frame. |
| 2626 ASSERT_TRUE(framer_.ProcessPacket(*close_packet)); | 2632 ASSERT_TRUE(framer_.ProcessPacket(*close_packet)); |
| 2627 | 2633 |
| 2628 // Test for clean truncation of the ack by comparing the length of the | 2634 // Test for clean truncation of the ack by comparing the length of the |
| 2629 // original packets to the re-serialized packets. | 2635 // original packets to the re-serialized packets. |
| 2630 frames.clear(); | 2636 frames.clear(); |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2791 EXPECT_CALL(visitor, OnAckFrame(_)).Times(0); | 2797 EXPECT_CALL(visitor, OnAckFrame(_)).Times(0); |
| 2792 EXPECT_CALL(visitor, OnPacketComplete()); | 2798 EXPECT_CALL(visitor, OnPacketComplete()); |
| 2793 | 2799 |
| 2794 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2800 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 2795 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2801 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2796 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2802 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2797 } | 2803 } |
| 2798 | 2804 |
| 2799 } // namespace test | 2805 } // namespace test |
| 2800 } // namespace net | 2806 } // namespace net |
| OLD | NEW |