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

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

Issue 15937012: Land Recent QUIC changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Small bug fixes Created 7 years, 6 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 "net/quic/quic_connection.h" 5 #include "net/quic/quic_connection.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "net/base/net_errors.h" 9 #include "net/base/net_errors.h"
10 #include "net/quic/congestion_control/receive_algorithm_interface.h" 10 #include "net/quic/congestion_control/receive_algorithm_interface.h"
(...skipping 28 matching lines...) Expand all
39 39
40 namespace net { 40 namespace net {
41 namespace test { 41 namespace test {
42 namespace { 42 namespace {
43 43
44 const char data1[] = "foo"; 44 const char data1[] = "foo";
45 const char data2[] = "bar"; 45 const char data2[] = "bar";
46 46
47 const bool kFin = true; 47 const bool kFin = true;
48 const bool kEntropyFlag = true; 48 const bool kEntropyFlag = true;
49 const bool kFecEntropyFlag = true; 49
50 const QuicPacketEntropyHash kTestEntropyHash = 76; 50 const QuicPacketEntropyHash kTestEntropyHash = 76;
51 51
52 class TestReceiveAlgorithm : public ReceiveAlgorithmInterface { 52 class TestReceiveAlgorithm : public ReceiveAlgorithmInterface {
53 public: 53 public:
54 explicit TestReceiveAlgorithm(QuicCongestionFeedbackFrame* feedback) 54 explicit TestReceiveAlgorithm(QuicCongestionFeedbackFrame* feedback)
55 : feedback_(feedback) { 55 : feedback_(feedback) {
56 } 56 }
57 57
58 bool GenerateCongestionFeedback( 58 bool GenerateCongestionFeedback(
59 QuicCongestionFeedbackFrame* congestion_feedback) { 59 QuicCongestionFeedbackFrame* congestion_feedback) {
(...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 EXPECT_CALL(visitor_, OnPacket(_, _, _, _)).WillOnce(DoAll( 513 EXPECT_CALL(visitor_, OnPacket(_, _, _, _)).WillOnce(DoAll(
514 SaveArg<2>(&revived_header_), Return(accept_packet_))); 514 SaveArg<2>(&revived_header_), Return(accept_packet_)));
515 } 515 }
516 EXPECT_CALL(visitor_, OnPacket(_, _, _, _)).WillOnce(Return(accept_packet_)) 516 EXPECT_CALL(visitor_, OnPacket(_, _, _, _)).WillOnce(Return(accept_packet_))
517 .RetiresOnSaturation(); 517 .RetiresOnSaturation();
518 return ProcessDataPacket(number, 1, entropy_flag); 518 return ProcessDataPacket(number, 1, entropy_flag);
519 } 519 }
520 520
521 // Sends an FEC packet that covers the packets that would have been sent. 521 // Sends an FEC packet that covers the packets that would have been sent.
522 size_t ProcessFecPacket(QuicPacketSequenceNumber number, 522 size_t ProcessFecPacket(QuicPacketSequenceNumber number,
523 QuicPacketSequenceNumber min_protected_packet, 523 QuicPacketSequenceNumber min_protected_packet,
524 bool expect_revival, 524 bool expect_revival,
525 bool fec_entropy_flag) { 525 bool entropy_flag) {
526 if (expect_revival) { 526 if (expect_revival) {
527 EXPECT_CALL(visitor_, OnPacket(_, _, _, _)).WillOnce(DoAll( 527 EXPECT_CALL(visitor_, OnPacket(_, _, _, _)).WillOnce(DoAll(
528 SaveArg<2>(&revived_header_), Return(accept_packet_))); 528 SaveArg<2>(&revived_header_), Return(accept_packet_)));
529 } 529 }
530 530
531 // Construct the decrypted data packet so we can compute the correct 531 // Construct the decrypted data packet so we can compute the correct
532 // redundancy. 532 // redundancy.
533 scoped_ptr<QuicPacket> data_packet(ConstructDataPacket(number, 1, 533 scoped_ptr<QuicPacket> data_packet(ConstructDataPacket(number, 1,
534 !kEntropyFlag)); 534 !kEntropyFlag));
535 535
536 header_.public_header.guid = guid_; 536 header_.public_header.guid = guid_;
537 header_.public_header.reset_flag = false; 537 header_.public_header.reset_flag = false;
538 header_.public_header.version_flag = false; 538 header_.public_header.version_flag = false;
539 header_.entropy_flag = kEntropyFlag; 539 header_.entropy_flag = entropy_flag;
540 header_.fec_flag = true; 540 header_.fec_flag = true;
541 header_.fec_entropy_flag = fec_entropy_flag;
542 header_.packet_sequence_number = number; 541 header_.packet_sequence_number = number;
542 header_.is_in_fec_group = IN_FEC_GROUP;
543 header_.fec_group = min_protected_packet; 543 header_.fec_group = min_protected_packet;
544 QuicFecData fec_data; 544 QuicFecData fec_data;
545 fec_data.fec_group = header_.fec_group; 545 fec_data.fec_group = header_.fec_group;
546 // Since all data packets in this test have the same payload, the 546 // Since all data packets in this test have the same payload, the
547 // redundancy is either equal to that payload or the xor of that payload 547 // redundancy is either equal to that payload or the xor of that payload
548 // with itself, depending on the number of packets. 548 // with itself, depending on the number of packets.
549 if (((number - min_protected_packet) % 2) == 0) { 549 if (((number - min_protected_packet) % 2) == 0) {
550 for (size_t i = GetStartOfFecProtectedData( 550 for (size_t i = GetStartOfFecProtectedData(
551 header_.public_header.guid_length,
551 header_.public_header.version_flag); 552 header_.public_header.version_flag);
552 i < data_packet->length(); ++i) { 553 i < data_packet->length(); ++i) {
553 data_packet->mutable_data()[i] ^= data_packet->data()[i]; 554 data_packet->mutable_data()[i] ^= data_packet->data()[i];
554 } 555 }
555 } 556 }
556 fec_data.redundancy = data_packet->FecProtectedData(); 557 fec_data.redundancy = data_packet->FecProtectedData();
557 scoped_ptr<QuicPacket> fec_packet( 558 scoped_ptr<QuicPacket> fec_packet(
558 framer_.ConstructFecPacket(header_, fec_data).packet); 559 framer_.ConstructFecPacket(header_, fec_data).packet);
559 scoped_ptr<QuicEncryptedPacket> encrypted( 560 scoped_ptr<QuicEncryptedPacket> encrypted(
560 framer_.EncryptPacket(ENCRYPTION_NONE, number, *fec_packet)); 561 framer_.EncryptPacket(ENCRYPTION_NONE, number, *fec_packet));
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
597 } 598 }
598 599
599 QuicPacket* ConstructDataPacket(QuicPacketSequenceNumber number, 600 QuicPacket* ConstructDataPacket(QuicPacketSequenceNumber number,
600 QuicFecGroupNumber fec_group, 601 QuicFecGroupNumber fec_group,
601 bool entropy_flag) { 602 bool entropy_flag) {
602 header_.public_header.guid = guid_; 603 header_.public_header.guid = guid_;
603 header_.public_header.reset_flag = false; 604 header_.public_header.reset_flag = false;
604 header_.public_header.version_flag = false; 605 header_.public_header.version_flag = false;
605 header_.entropy_flag = entropy_flag; 606 header_.entropy_flag = entropy_flag;
606 header_.fec_flag = false; 607 header_.fec_flag = false;
607 header_.fec_entropy_flag = false;
608 header_.packet_sequence_number = number; 608 header_.packet_sequence_number = number;
609 header_.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP;
609 header_.fec_group = fec_group; 610 header_.fec_group = fec_group;
610 611
611 QuicFrames frames; 612 QuicFrames frames;
612 QuicFrame frame(&frame1_); 613 QuicFrame frame(&frame1_);
613 frames.push_back(frame); 614 frames.push_back(frame);
614 QuicPacket* packet = 615 QuicPacket* packet =
615 framer_.ConstructFrameDataPacket(header_, frames).packet; 616 framer_.ConstructFrameDataPacket(header_, frames).packet;
616 EXPECT_TRUE(packet != NULL); 617 EXPECT_TRUE(packet != NULL);
617 return packet; 618 return packet;
618 } 619 }
619 620
620 QuicPacket* ConstructClosePacket(QuicPacketSequenceNumber number, 621 QuicPacket* ConstructClosePacket(QuicPacketSequenceNumber number,
621 QuicFecGroupNumber fec_group) { 622 QuicFecGroupNumber fec_group) {
622 header_.public_header.guid = guid_; 623 header_.public_header.guid = guid_;
623 header_.packet_sequence_number = number; 624 header_.packet_sequence_number = number;
624 header_.public_header.reset_flag = false; 625 header_.public_header.reset_flag = false;
625 header_.public_header.version_flag = false; 626 header_.public_header.version_flag = false;
626 header_.entropy_flag = false; 627 header_.entropy_flag = false;
627 header_.fec_flag = false; 628 header_.fec_flag = false;
628 header_.fec_entropy_flag = false; 629 header_.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP;
629 header_.fec_group = fec_group; 630 header_.fec_group = fec_group;
630 631
631 QuicConnectionCloseFrame qccf; 632 QuicConnectionCloseFrame qccf;
632 qccf.error_code = QUIC_PEER_GOING_AWAY; 633 qccf.error_code = QUIC_PEER_GOING_AWAY;
633 qccf.ack_frame = QuicAckFrame(0, QuicTime::Zero(), 1); 634 qccf.ack_frame = QuicAckFrame(0, QuicTime::Zero(), 1);
634 635
635 QuicFrames frames; 636 QuicFrames frames;
636 QuicFrame frame(&qccf); 637 QuicFrame frame(&qccf);
637 frames.push_back(frame); 638 frames.push_back(frame);
638 QuicPacket* packet = 639 QuicPacket* packet =
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
930 SendStreamDataToPeer(1, "eep", 6, !kFin, &last_packet); // Packet 9 931 SendStreamDataToPeer(1, "eep", 6, !kFin, &last_packet); // Packet 9
931 EXPECT_EQ(9u, last_packet); 932 EXPECT_EQ(9u, last_packet);
932 SendAckPacketToPeer(); // Packet10 933 SendAckPacketToPeer(); // Packet10
933 EXPECT_EQ(9u, last_ack()->sent_info.least_unacked); 934 EXPECT_EQ(9u, last_ack()->sent_info.least_unacked);
934 } 935 }
935 936
936 TEST_F(QuicConnectionTest, FECSending) { 937 TEST_F(QuicConnectionTest, FECSending) {
937 // Limit to one byte per packet. 938 // Limit to one byte per packet.
938 // All packets carry version info till version is negotiated. 939 // All packets carry version info till version is negotiated.
939 connection_.options()->max_packet_length = 940 connection_.options()->max_packet_length =
940 GetPacketLengthForOneStream(kIncludeVersion, 4); 941 GetPacketLengthForOneStream(kIncludeVersion, IN_FEC_GROUP, 4);
941 // And send FEC every two packets. 942 // And send FEC every two packets.
942 connection_.options()->max_packets_per_fec_group = 2; 943 connection_.options()->max_packets_per_fec_group = 2;
943 944
944 // Send 4 data packets and 2 FEC packets. 945 // Send 4 data packets and 2 FEC packets.
945 EXPECT_CALL(*send_algorithm_, SentPacket(_, _, _, _)).Times(6); 946 EXPECT_CALL(*send_algorithm_, SentPacket(_, _, _, _)).Times(6);
946 connection_.SendStreamData(1, "foodfoodfoodfood", 0, !kFin); 947 connection_.SendStreamData(1, "foodfoodfoodfood", 0, !kFin);
947 // Expect the FEC group to be closed after SendStreamData. 948 // Expect the FEC group to be closed after SendStreamData.
948 EXPECT_FALSE(creator_.ShouldSendFec(true)); 949 EXPECT_FALSE(creator_.ShouldSendFec(true));
949 } 950 }
950 951
951 TEST_F(QuicConnectionTest, FECQueueing) { 952 TEST_F(QuicConnectionTest, FECQueueing) {
952 // Limit to one byte per packet. 953 // Limit to one byte per packet.
953 // All packets carry version info till version is negotiated. 954 // All packets carry version info till version is negotiated.
954 connection_.options()->max_packet_length = 955 connection_.options()->max_packet_length =
955 GetPacketLengthForOneStream(kIncludeVersion, 4); 956 GetPacketLengthForOneStream(kIncludeVersion, IN_FEC_GROUP, 4);
956 // And send FEC every two packets. 957 // And send FEC every two packets.
957 connection_.options()->max_packets_per_fec_group = 2; 958 connection_.options()->max_packets_per_fec_group = 2;
958 959
959 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 960 EXPECT_EQ(0u, connection_.NumQueuedPackets());
960 helper_->set_blocked(true); 961 helper_->set_blocked(true);
961 connection_.SendStreamData(1, "food", 0, !kFin); 962 connection_.SendStreamData(1, "food", 0, !kFin);
962 EXPECT_FALSE(creator_.ShouldSendFec(true)); 963 EXPECT_FALSE(creator_.ShouldSendFec(true));
963 // Expect the first data packet and the fec packet to be queued. 964 // Expect the first data packet and the fec packet to be queued.
964 EXPECT_EQ(2u, connection_.NumQueuedPackets()); 965 EXPECT_EQ(2u, connection_.NumQueuedPackets());
965 } 966 }
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
1271 EXPECT_EQ(3u, last_ack()->sent_info.least_unacked); 1272 EXPECT_EQ(3u, last_ack()->sent_info.least_unacked);
1272 1273
1273 SendStreamDataToPeer(1, "bar", 3, false, NULL); // Packet 4 1274 SendStreamDataToPeer(1, "bar", 3, false, NULL); // Packet 4
1274 EXPECT_EQ(4u, outgoing_ack()->sent_info.least_unacked); 1275 EXPECT_EQ(4u, outgoing_ack()->sent_info.least_unacked);
1275 SendAckPacketToPeer(); // Packet 5 1276 SendAckPacketToPeer(); // Packet 5
1276 EXPECT_EQ(4u, last_ack()->sent_info.least_unacked); 1277 EXPECT_EQ(4u, last_ack()->sent_info.least_unacked);
1277 } 1278 }
1278 1279
1279 TEST_F(QuicConnectionTest, ReviveMissingPacketAfterFecPacket) { 1280 TEST_F(QuicConnectionTest, ReviveMissingPacketAfterFecPacket) {
1280 // Don't send missing packet 1. 1281 // Don't send missing packet 1.
1281 ProcessFecPacket(2, 1, true, !kFecEntropyFlag); 1282 ProcessFecPacket(2, 1, true, !kEntropyFlag);
1282 EXPECT_FALSE(revived_header_.entropy_flag); 1283 EXPECT_FALSE(revived_header_.entropy_flag);
1283 } 1284 }
1284 1285
1285 TEST_F(QuicConnectionTest, ReviveMissingPacketAfterDataPacketThenFecPacket) { 1286 TEST_F(QuicConnectionTest, ReviveMissingPacketAfterDataPacketThenFecPacket) {
1286 ProcessFecProtectedPacket(1, false, kEntropyFlag); 1287 ProcessFecProtectedPacket(1, false, kEntropyFlag);
1287 // Don't send missing packet 2. 1288 // Don't send missing packet 2.
1288 ProcessFecPacket(3, 1, true, !kFecEntropyFlag); 1289 ProcessFecPacket(3, 1, true, !kEntropyFlag);
1289 EXPECT_TRUE(revived_header_.entropy_flag); 1290 EXPECT_TRUE(revived_header_.entropy_flag);
1290 } 1291 }
1291 1292
1292 TEST_F(QuicConnectionTest, ReviveMissingPacketAfterDataPacketsThenFecPacket) { 1293 TEST_F(QuicConnectionTest, ReviveMissingPacketAfterDataPacketsThenFecPacket) {
1293 ProcessFecProtectedPacket(1, false, !kEntropyFlag); 1294 ProcessFecProtectedPacket(1, false, !kEntropyFlag);
1294 // Don't send missing packet 2. 1295 // Don't send missing packet 2.
1295 ProcessFecProtectedPacket(3, false, !kEntropyFlag); 1296 ProcessFecProtectedPacket(3, false, !kEntropyFlag);
1296 ProcessFecPacket(4, 1, true, kFecEntropyFlag); 1297 ProcessFecPacket(4, 1, true, kEntropyFlag);
1297 EXPECT_TRUE(revived_header_.entropy_flag); 1298 EXPECT_TRUE(revived_header_.entropy_flag);
1298 } 1299 }
1299 1300
1300 TEST_F(QuicConnectionTest, ReviveMissingPacketAfterDataPacket) { 1301 TEST_F(QuicConnectionTest, ReviveMissingPacketAfterDataPacket) {
1301 // Don't send missing packet 1. 1302 // Don't send missing packet 1.
1302 ProcessFecPacket(3, 1, false, !kFecEntropyFlag); 1303 ProcessFecPacket(3, 1, false, !kEntropyFlag);
1303 // out of order 1304 // out of order
1304 ProcessFecProtectedPacket(2, true, !kEntropyFlag); 1305 ProcessFecProtectedPacket(2, true, !kEntropyFlag);
1305 EXPECT_FALSE(revived_header_.entropy_flag); 1306 EXPECT_FALSE(revived_header_.entropy_flag);
1306 } 1307 }
1307 1308
1308 TEST_F(QuicConnectionTest, ReviveMissingPacketAfterDataPackets) { 1309 TEST_F(QuicConnectionTest, ReviveMissingPacketAfterDataPackets) {
1309 ProcessFecProtectedPacket(1, false, !kEntropyFlag); 1310 ProcessFecProtectedPacket(1, false, !kEntropyFlag);
1310 // Don't send missing packet 2. 1311 // Don't send missing packet 2.
1311 ProcessFecPacket(6, 1, false, kFecEntropyFlag); 1312 ProcessFecPacket(6, 1, false, kEntropyFlag);
1312 ProcessFecProtectedPacket(3, false, kEntropyFlag); 1313 ProcessFecProtectedPacket(3, false, kEntropyFlag);
1313 ProcessFecProtectedPacket(4, false, kEntropyFlag); 1314 ProcessFecProtectedPacket(4, false, kEntropyFlag);
1314 ProcessFecProtectedPacket(5, true, !kEntropyFlag); 1315 ProcessFecProtectedPacket(5, true, !kEntropyFlag);
1315 EXPECT_TRUE(revived_header_.entropy_flag); 1316 EXPECT_TRUE(revived_header_.entropy_flag);
1316 } 1317 }
1317 1318
1318 TEST_F(QuicConnectionTest, TestRetransmit) { 1319 TEST_F(QuicConnectionTest, TestRetransmit) {
1319 const QuicTime::Delta kDefaultRetransmissionTime = 1320 const QuicTime::Delta kDefaultRetransmissionTime =
1320 QuicTime::Delta::FromMilliseconds(500); 1321 QuicTime::Delta::FromMilliseconds(500);
1321 1322
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after
1789 // OnCanWrite should not send the packet (because of the delay) 1790 // OnCanWrite should not send the packet (because of the delay)
1790 // but should still return true. 1791 // but should still return true.
1791 EXPECT_TRUE(connection_.OnCanWrite()); 1792 EXPECT_TRUE(connection_.OnCanWrite());
1792 EXPECT_EQ(1u, connection_.NumQueuedPackets()); 1793 EXPECT_EQ(1u, connection_.NumQueuedPackets());
1793 } 1794 }
1794 1795
1795 TEST_F(QuicConnectionTest, TestQueueLimitsOnSendStreamData) { 1796 TEST_F(QuicConnectionTest, TestQueueLimitsOnSendStreamData) {
1796 // Limit to one byte per packet. 1797 // Limit to one byte per packet.
1797 // All packets carry version info till version is negotiated. 1798 // All packets carry version info till version is negotiated.
1798 connection_.options()->max_packet_length = 1799 connection_.options()->max_packet_length =
1799 GetPacketLengthForOneStream(kIncludeVersion, 4); 1800 GetPacketLengthForOneStream(kIncludeVersion, NOT_IN_FEC_GROUP, 4);
1800 1801
1801 // Queue the first packet. 1802 // Queue the first packet.
1802 EXPECT_CALL(*send_algorithm_, 1803 EXPECT_CALL(*send_algorithm_,
1803 TimeUntilSend(_, NOT_RETRANSMISSION, _)).WillOnce( 1804 TimeUntilSend(_, NOT_RETRANSMISSION, _)).WillOnce(
1804 testing::Return(QuicTime::Delta::FromMicroseconds(10))); 1805 testing::Return(QuicTime::Delta::FromMicroseconds(10)));
1805 EXPECT_EQ(0u, connection_.SendStreamData( 1806 EXPECT_EQ(0u, connection_.SendStreamData(
1806 1, "EnoughDataToQueue", 0, !kFin).bytes_consumed); 1807 1, "EnoughDataToQueue", 0, !kFin).bytes_consumed);
1807 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 1808 EXPECT_EQ(0u, connection_.NumQueuedPackets());
1808 } 1809 }
1809 1810
1810 TEST_F(QuicConnectionTest, LoopThroughSendingPackets) { 1811 TEST_F(QuicConnectionTest, LoopThroughSendingPackets) {
1811 // Limit to 4 bytes per packet. 1812 // Limit to 4 bytes per packet.
1812 // All packets carry version info till version is negotiated. 1813 // All packets carry version info till version is negotiated.
1813 connection_.options()->max_packet_length = 1814 connection_.options()->max_packet_length =
1814 GetPacketLengthForOneStream(kIncludeVersion, 4); 1815 GetPacketLengthForOneStream(kIncludeVersion, NOT_IN_FEC_GROUP, 4);
1815 1816
1816 // Queue the first packet. 1817 // Queue the first packet.
1817 EXPECT_CALL(*send_algorithm_, SentPacket(_, _, _, _)).Times(7); 1818 EXPECT_CALL(*send_algorithm_, SentPacket(_, _, _, _)).Times(7);
1818 EXPECT_EQ(27u, connection_.SendStreamData( 1819 EXPECT_EQ(27u, connection_.SendStreamData(
1819 1, "EnoughDataToQueueStreamData", 0, !kFin).bytes_consumed); 1820 1, "EnoughDataToQueueStreamData", 0, !kFin).bytes_consumed);
1820 } 1821 }
1821 1822
1822 TEST_F(QuicConnectionTest, NoAckForClose) { 1823 TEST_F(QuicConnectionTest, NoAckForClose) {
1823 ProcessPacket(1); 1824 ProcessPacket(1);
1824 EXPECT_CALL(*send_algorithm_, OnIncomingAck(_, _, _)).Times(0); 1825 EXPECT_CALL(*send_algorithm_, OnIncomingAck(_, _, _)).Times(0);
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
1973 TEST_F(QuicConnectionTest, SendVersionNegotiationPacket) { 1974 TEST_F(QuicConnectionTest, SendVersionNegotiationPacket) {
1974 QuicTag kRandomVersion = 143; 1975 QuicTag kRandomVersion = 143;
1975 QuicFramerPeer::SetVersion(&framer_, kRandomVersion); 1976 QuicFramerPeer::SetVersion(&framer_, kRandomVersion);
1976 1977
1977 QuicPacketHeader header; 1978 QuicPacketHeader header;
1978 header.public_header.guid = guid_; 1979 header.public_header.guid = guid_;
1979 header.public_header.reset_flag = false; 1980 header.public_header.reset_flag = false;
1980 header.public_header.version_flag = true; 1981 header.public_header.version_flag = true;
1981 header.entropy_flag = false; 1982 header.entropy_flag = false;
1982 header.fec_flag = false; 1983 header.fec_flag = false;
1983 header.fec_entropy_flag = false;
1984 header.packet_sequence_number = 12; 1984 header.packet_sequence_number = 12;
1985 header.fec_group = 0; 1985 header.fec_group = 0;
1986 1986
1987 QuicFrames frames; 1987 QuicFrames frames;
1988 QuicFrame frame(&frame1_); 1988 QuicFrame frame(&frame1_);
1989 frames.push_back(frame); 1989 frames.push_back(frame);
1990 scoped_ptr<QuicPacket> packet( 1990 scoped_ptr<QuicPacket> packet(
1991 framer_.ConstructFrameDataPacket(header, frames).packet); 1991 framer_.ConstructFrameDataPacket(header, frames).packet);
1992 scoped_ptr<QuicEncryptedPacket> encrypted( 1992 scoped_ptr<QuicEncryptedPacket> encrypted(
1993 framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet)); 1993 framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet));
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
2098 } 2098 }
2099 2099
2100 TEST_F(QuicConnectionTest, DontProcessFramesIfPacketClosedConnection) { 2100 TEST_F(QuicConnectionTest, DontProcessFramesIfPacketClosedConnection) {
2101 // Construct a packet with stream frame and connection close frame. 2101 // Construct a packet with stream frame and connection close frame.
2102 header_.public_header.guid = guid_; 2102 header_.public_header.guid = guid_;
2103 header_.packet_sequence_number = 1; 2103 header_.packet_sequence_number = 1;
2104 header_.public_header.reset_flag = false; 2104 header_.public_header.reset_flag = false;
2105 header_.public_header.version_flag = false; 2105 header_.public_header.version_flag = false;
2106 header_.entropy_flag = false; 2106 header_.entropy_flag = false;
2107 header_.fec_flag = false; 2107 header_.fec_flag = false;
2108 header_.fec_entropy_flag = false;
2109 header_.fec_group = 0; 2108 header_.fec_group = 0;
2110 2109
2111 QuicConnectionCloseFrame qccf; 2110 QuicConnectionCloseFrame qccf;
2112 qccf.error_code = QUIC_PEER_GOING_AWAY; 2111 qccf.error_code = QUIC_PEER_GOING_AWAY;
2113 qccf.ack_frame = QuicAckFrame(0, QuicTime::Zero(), 1); 2112 qccf.ack_frame = QuicAckFrame(0, QuicTime::Zero(), 1);
2114 QuicFrame close_frame(&qccf); 2113 QuicFrame close_frame(&qccf);
2115 QuicFrame stream_frame(&frame1_); 2114 QuicFrame stream_frame(&frame1_);
2116 2115
2117 QuicFrames frames; 2116 QuicFrames frames;
2118 frames.push_back(stream_frame); 2117 frames.push_back(stream_frame);
2119 frames.push_back(close_frame); 2118 frames.push_back(close_frame);
2120 scoped_ptr<QuicPacket> packet( 2119 scoped_ptr<QuicPacket> packet(
2121 framer_.ConstructFrameDataPacket(header_, frames).packet); 2120 framer_.ConstructFrameDataPacket(header_, frames).packet);
2122 EXPECT_TRUE(NULL != packet.get()); 2121 EXPECT_TRUE(NULL != packet.get());
2123 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket( 2122 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket(
2124 ENCRYPTION_NONE, 1, *packet)); 2123 ENCRYPTION_NONE, 1, *packet));
2125 2124
2126 EXPECT_CALL(visitor_, ConnectionClose(QUIC_PEER_GOING_AWAY, true)); 2125 EXPECT_CALL(visitor_, ConnectionClose(QUIC_PEER_GOING_AWAY, true));
2127 EXPECT_CALL(visitor_, OnPacket(_, _, _, _)).Times(0); 2126 EXPECT_CALL(visitor_, OnPacket(_, _, _, _)).Times(0);
2128 2127
2129 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); 2128 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
2130 } 2129 }
2131 2130
2132 } // namespace 2131 } // namespace
2133 } // namespace test 2132 } // namespace test
2134 } // namespace net 2133 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698