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 "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 "base/stl_util.h" | 9 #include "base/stl_util.h" |
10 #include "net/base/net_errors.h" | 10 #include "net/base/net_errors.h" |
11 #include "net/quic/congestion_control/loss_detection_interface.h" | 11 #include "net/quic/congestion_control/loss_detection_interface.h" |
12 #include "net/quic/congestion_control/receive_algorithm_interface.h" | |
13 #include "net/quic/congestion_control/send_algorithm_interface.h" | 12 #include "net/quic/congestion_control/send_algorithm_interface.h" |
14 #include "net/quic/crypto/null_encrypter.h" | 13 #include "net/quic/crypto/null_encrypter.h" |
15 #include "net/quic/crypto/quic_decrypter.h" | 14 #include "net/quic/crypto/quic_decrypter.h" |
16 #include "net/quic/crypto/quic_encrypter.h" | 15 #include "net/quic/crypto/quic_encrypter.h" |
17 #include "net/quic/quic_ack_notifier.h" | 16 #include "net/quic/quic_ack_notifier.h" |
18 #include "net/quic/quic_flags.h" | 17 #include "net/quic/quic_flags.h" |
19 #include "net/quic/quic_protocol.h" | 18 #include "net/quic/quic_protocol.h" |
20 #include "net/quic/quic_utils.h" | 19 #include "net/quic/quic_utils.h" |
21 #include "net/quic/test_tools/mock_clock.h" | 20 #include "net/quic/test_tools/mock_clock.h" |
22 #include "net/quic/test_tools/mock_random.h" | 21 #include "net/quic/test_tools/mock_random.h" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 const char data1[] = "foo"; | 56 const char data1[] = "foo"; |
58 const char data2[] = "bar"; | 57 const char data2[] = "bar"; |
59 | 58 |
60 const bool kFin = true; | 59 const bool kFin = true; |
61 const bool kEntropyFlag = true; | 60 const bool kEntropyFlag = true; |
62 | 61 |
63 const QuicPacketEntropyHash kTestEntropyHash = 76; | 62 const QuicPacketEntropyHash kTestEntropyHash = 76; |
64 | 63 |
65 const int kDefaultRetransmissionTimeMs = 500; | 64 const int kDefaultRetransmissionTimeMs = 500; |
66 | 65 |
67 class TestReceiveAlgorithm : public ReceiveAlgorithmInterface { | |
68 public: | |
69 TestReceiveAlgorithm() {} | |
70 | |
71 MOCK_METHOD3(RecordIncomingPacket, | |
72 void(QuicByteCount, QuicPacketSequenceNumber, QuicTime)); | |
73 | |
74 private: | |
75 DISALLOW_COPY_AND_ASSIGN(TestReceiveAlgorithm); | |
76 }; | |
77 | |
78 // TaggingEncrypter appends kTagSize bytes of |tag| to the end of each message. | 66 // TaggingEncrypter appends kTagSize bytes of |tag| to the end of each message. |
79 class TaggingEncrypter : public QuicEncrypter { | 67 class TaggingEncrypter : public QuicEncrypter { |
80 public: | 68 public: |
81 explicit TaggingEncrypter(uint8 tag) | 69 explicit TaggingEncrypter(uint8 tag) |
82 : tag_(tag) { | 70 : tag_(tag) { |
83 } | 71 } |
84 | 72 |
85 ~TaggingEncrypter() override {} | 73 ~TaggingEncrypter() override {} |
86 | 74 |
87 // QuicEncrypter interface. | 75 // QuicEncrypter interface. |
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
401 // Disable tail loss probes for most tests. | 389 // Disable tail loss probes for most tests. |
402 QuicSentPacketManagerPeer::SetMaxTailLossProbes( | 390 QuicSentPacketManagerPeer::SetMaxTailLossProbes( |
403 QuicConnectionPeer::GetSentPacketManager(this), 0); | 391 QuicConnectionPeer::GetSentPacketManager(this), 0); |
404 writer()->set_is_server(is_server); | 392 writer()->set_is_server(is_server); |
405 } | 393 } |
406 | 394 |
407 void SendAck() { | 395 void SendAck() { |
408 QuicConnectionPeer::SendAck(this); | 396 QuicConnectionPeer::SendAck(this); |
409 } | 397 } |
410 | 398 |
411 void SetReceiveAlgorithm(TestReceiveAlgorithm* receive_algorithm) { | |
412 QuicConnectionPeer::SetReceiveAlgorithm(this, receive_algorithm); | |
413 } | |
414 | |
415 void SetSendAlgorithm(SendAlgorithmInterface* send_algorithm) { | 399 void SetSendAlgorithm(SendAlgorithmInterface* send_algorithm) { |
416 QuicConnectionPeer::SetSendAlgorithm(this, send_algorithm); | 400 QuicConnectionPeer::SetSendAlgorithm(this, send_algorithm); |
417 } | 401 } |
418 | 402 |
419 void SetLossAlgorithm(LossDetectionInterface* loss_algorithm) { | 403 void SetLossAlgorithm(LossDetectionInterface* loss_algorithm) { |
420 QuicSentPacketManagerPeer::SetLossAlgorithm( | 404 QuicSentPacketManagerPeer::SetLossAlgorithm( |
421 QuicConnectionPeer::GetSentPacketManager(this), loss_algorithm); | 405 QuicConnectionPeer::GetSentPacketManager(this), loss_algorithm); |
422 } | 406 } |
423 | 407 |
424 void SendPacket(EncryptionLevel level, | 408 void SendPacket(EncryptionLevel level, |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
596 }; | 580 }; |
597 | 581 |
598 class QuicConnectionTest : public ::testing::TestWithParam<QuicVersion> { | 582 class QuicConnectionTest : public ::testing::TestWithParam<QuicVersion> { |
599 protected: | 583 protected: |
600 QuicConnectionTest() | 584 QuicConnectionTest() |
601 : connection_id_(42), | 585 : connection_id_(42), |
602 framer_(SupportedVersions(version()), QuicTime::Zero(), false), | 586 framer_(SupportedVersions(version()), QuicTime::Zero(), false), |
603 peer_creator_(connection_id_, &framer_, &random_generator_), | 587 peer_creator_(connection_id_, &framer_, &random_generator_), |
604 send_algorithm_(new StrictMock<MockSendAlgorithm>), | 588 send_algorithm_(new StrictMock<MockSendAlgorithm>), |
605 loss_algorithm_(new MockLossAlgorithm()), | 589 loss_algorithm_(new MockLossAlgorithm()), |
606 receive_algorithm_(new TestReceiveAlgorithm), | |
607 helper_(new TestConnectionHelper(&clock_, &random_generator_)), | 590 helper_(new TestConnectionHelper(&clock_, &random_generator_)), |
608 writer_(new TestPacketWriter(version(), &clock_)), | 591 writer_(new TestPacketWriter(version(), &clock_)), |
609 factory_(writer_.get()), | 592 factory_(writer_.get()), |
610 connection_(connection_id_, | 593 connection_(connection_id_, |
611 IPEndPoint(), | 594 IPEndPoint(), |
612 helper_.get(), | 595 helper_.get(), |
613 factory_, | 596 factory_, |
614 false, | 597 false, |
615 version()), | 598 version()), |
616 creator_(QuicConnectionPeer::GetPacketCreator(&connection_)), | 599 creator_(QuicConnectionPeer::GetPacketCreator(&connection_)), |
617 generator_(QuicConnectionPeer::GetPacketGenerator(&connection_)), | 600 generator_(QuicConnectionPeer::GetPacketGenerator(&connection_)), |
618 manager_(QuicConnectionPeer::GetSentPacketManager(&connection_)), | 601 manager_(QuicConnectionPeer::GetSentPacketManager(&connection_)), |
619 frame1_(1, false, 0, MakeIOVector(data1)), | 602 frame1_(1, false, 0, MakeIOVector(data1)), |
620 frame2_(1, false, 3, MakeIOVector(data2)), | 603 frame2_(1, false, 3, MakeIOVector(data2)), |
621 sequence_number_length_(PACKET_6BYTE_SEQUENCE_NUMBER), | 604 sequence_number_length_(PACKET_6BYTE_SEQUENCE_NUMBER), |
622 connection_id_length_(PACKET_8BYTE_CONNECTION_ID) { | 605 connection_id_length_(PACKET_8BYTE_CONNECTION_ID) { |
623 connection_.set_visitor(&visitor_); | 606 connection_.set_visitor(&visitor_); |
624 connection_.SetSendAlgorithm(send_algorithm_); | 607 connection_.SetSendAlgorithm(send_algorithm_); |
625 connection_.SetLossAlgorithm(loss_algorithm_); | 608 connection_.SetLossAlgorithm(loss_algorithm_); |
626 framer_.set_received_entropy_calculator(&entropy_calculator_); | 609 framer_.set_received_entropy_calculator(&entropy_calculator_); |
627 connection_.SetReceiveAlgorithm(receive_algorithm_); | |
628 EXPECT_CALL( | 610 EXPECT_CALL( |
629 *send_algorithm_, TimeUntilSend(_, _, _)).WillRepeatedly(Return( | 611 *send_algorithm_, TimeUntilSend(_, _, _)).WillRepeatedly(Return( |
630 QuicTime::Delta::Zero())); | 612 QuicTime::Delta::Zero())); |
631 EXPECT_CALL(*receive_algorithm_, | |
632 RecordIncomingPacket(_, _, _)).Times(AnyNumber()); | |
633 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) | 613 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) |
634 .Times(AnyNumber()); | 614 .Times(AnyNumber()); |
635 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()).WillRepeatedly( | 615 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()).WillRepeatedly( |
636 Return(QuicTime::Delta::Zero())); | 616 Return(QuicTime::Delta::Zero())); |
637 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly( | 617 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly( |
638 Return(kMaxPacketSize)); | 618 Return(kMaxPacketSize)); |
639 ON_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) | 619 ON_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) |
640 .WillByDefault(Return(true)); | 620 .WillByDefault(Return(true)); |
641 EXPECT_CALL(*send_algorithm_, HasReliableBandwidthEstimate()) | 621 EXPECT_CALL(*send_algorithm_, HasReliableBandwidthEstimate()) |
642 .Times(AnyNumber()); | 622 .Times(AnyNumber()); |
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
983 testing::Return(QuicTime::Delta::Zero())); | 963 testing::Return(QuicTime::Delta::Zero())); |
984 } | 964 } |
985 | 965 |
986 QuicConnectionId connection_id_; | 966 QuicConnectionId connection_id_; |
987 QuicFramer framer_; | 967 QuicFramer framer_; |
988 QuicPacketCreator peer_creator_; | 968 QuicPacketCreator peer_creator_; |
989 MockEntropyCalculator entropy_calculator_; | 969 MockEntropyCalculator entropy_calculator_; |
990 | 970 |
991 MockSendAlgorithm* send_algorithm_; | 971 MockSendAlgorithm* send_algorithm_; |
992 MockLossAlgorithm* loss_algorithm_; | 972 MockLossAlgorithm* loss_algorithm_; |
993 TestReceiveAlgorithm* receive_algorithm_; | |
994 MockClock clock_; | 973 MockClock clock_; |
995 MockRandom random_generator_; | 974 MockRandom random_generator_; |
996 scoped_ptr<TestConnectionHelper> helper_; | 975 scoped_ptr<TestConnectionHelper> helper_; |
997 scoped_ptr<TestPacketWriter> writer_; | 976 scoped_ptr<TestPacketWriter> writer_; |
998 NiceMock<MockPacketWriterFactory> factory_; | 977 NiceMock<MockPacketWriterFactory> factory_; |
999 TestConnection connection_; | 978 TestConnection connection_; |
1000 QuicPacketCreator* creator_; | 979 QuicPacketCreator* creator_; |
1001 QuicPacketGenerator* generator_; | 980 QuicPacketGenerator* generator_; |
1002 QuicSentPacketManager* manager_; | 981 QuicSentPacketManager* manager_; |
1003 StrictMock<MockConnectionVisitor> visitor_; | 982 StrictMock<MockConnectionVisitor> visitor_; |
(...skipping 3416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4420 // Regression test for b/18594622 | 4399 // Regression test for b/18594622 |
4421 scoped_refptr<MockAckNotifierDelegate> delegate(new MockAckNotifierDelegate); | 4400 scoped_refptr<MockAckNotifierDelegate> delegate(new MockAckNotifierDelegate); |
4422 EXPECT_DFATAL( | 4401 EXPECT_DFATAL( |
4423 connection_.SendStreamDataWithString(3, "", 0, !kFin, delegate.get()), | 4402 connection_.SendStreamDataWithString(3, "", 0, !kFin, delegate.get()), |
4424 "Attempt to send empty stream frame"); | 4403 "Attempt to send empty stream frame"); |
4425 } | 4404 } |
4426 | 4405 |
4427 } // namespace | 4406 } // namespace |
4428 } // namespace test | 4407 } // namespace test |
4429 } // namespace net | 4408 } // namespace net |
OLD | NEW |