Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(458)

Side by Side Diff: net/quic/quic_framer_test.cc

Issue 14083012: QUIC: retransmit packets with the correct encryption. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Moved HandshakeMode enum to MockCryptoClientStream Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698