diff options
Diffstat (limited to 'chromium/net/quic/test_tools/quic_test_utils.h')
-rw-r--r-- | chromium/net/quic/test_tools/quic_test_utils.h | 159 |
1 files changed, 114 insertions, 45 deletions
diff --git a/chromium/net/quic/test_tools/quic_test_utils.h b/chromium/net/quic/test_tools/quic_test_utils.h index 64a9d30ada2..06c343189b5 100644 --- a/chromium/net/quic/test_tools/quic_test_utils.h +++ b/chromium/net/quic/test_tools/quic_test_utils.h @@ -12,6 +12,7 @@ #include "base/strings/string_piece.h" #include "net/quic/congestion_control/send_algorithm_interface.h" +#include "net/quic/quic_ack_notifier.h" #include "net/quic/quic_connection.h" #include "net/quic/quic_framer.h" #include "net/quic/quic_session.h" @@ -25,12 +26,26 @@ namespace net { namespace test { +static const QuicGuid kTestGuid = 42; +static const int kTestPort = 123; + +// Upper limit on versions we support. +QuicVersion QuicVersionMax(); + +// Lower limit on versions we support. +QuicVersion QuicVersionMin(); + +// Returns an address for 127.0.0.1. +IPAddressNumber Loopback4(); + void CompareCharArraysWithHexError(const std::string& description, const char* actual, const int actual_len, const char* expected, const int expected_len); +bool DecodeHexString(const base::StringPiece& hex, std::string* bytes); + // Returns the length of a QuicPacket that is capable of holding either a // stream frame or a minimal ack frame. Sets |*payload_length| to the number // of bytes of stream data that will fit in such a packet. @@ -48,6 +63,25 @@ size_t GetMinStreamFrameSize(QuicVersion version); // Returns QuicConfig set to default values. QuicConfig DefaultQuicConfig(); +template<typename SaveType> +class ValueRestore { + public: + ValueRestore(SaveType* name, SaveType value) + : name_(name), + value_(*name) { + *name_ = value; + } + ~ValueRestore() { + *name_ = value_; + } + + private: + SaveType* name_; + SaveType value_; + + DISALLOW_COPY_AND_ASSIGN(ValueRestore); +}; + class MockFramerVisitor : public QuicFramerVisitorInterface { public: MockFramerVisitor(); @@ -62,6 +96,7 @@ class MockFramerVisitor : public QuicFramerVisitorInterface { void(const QuicVersionNegotiationPacket& packet)); MOCK_METHOD0(OnRevivedPacket, void()); // The constructor sets this up to return true by default. + MOCK_METHOD1(OnUnauthenticatedHeader, bool(const QuicPacketHeader& header)); MOCK_METHOD1(OnPacketHeader, bool(const QuicPacketHeader& header)); MOCK_METHOD1(OnFecProtectedPayload, void(base::StringPiece payload)); MOCK_METHOD1(OnStreamFrame, bool(const QuicStreamFrame& frame)); @@ -91,6 +126,7 @@ class NoOpFramerVisitor : public QuicFramerVisitorInterface { const QuicVersionNegotiationPacket& packet) OVERRIDE {} virtual void OnRevivedPacket() OVERRIDE {} virtual bool OnProtocolVersionMismatch(QuicVersion version) OVERRIDE; + virtual bool OnUnauthenticatedHeader(const QuicPacketHeader& header) OVERRIDE; virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE; virtual void OnFecProtectedPayload(base::StringPiece payload) OVERRIDE {} virtual bool OnStreamFrame(const QuicStreamFrame& frame) OVERRIDE; @@ -129,6 +165,9 @@ class FramerVisitorCapturingFrames : public NoOpFramerVisitor { FramerVisitorCapturingFrames(); virtual ~FramerVisitorCapturingFrames(); + // Reset the visitor to it's initial state. + void Reset(); + // NoOpFramerVisitor virtual void OnVersionNegotiationPacket( const QuicVersionNegotiationPacket& packet) OVERRIDE; @@ -147,6 +186,9 @@ class FramerVisitorCapturingFrames : public NoOpFramerVisitor { const std::vector<QuicStreamFrame>* stream_frames() const { return &stream_frames_; } + const std::vector<string*>& stream_data() const { + return stream_data_; + } QuicAckFrame* ack() { return ack_.get(); } QuicCongestionFeedbackFrame* feedback() { return feedback_.get(); } QuicRstStreamFrame* rst() { return rst_.get(); } @@ -160,6 +202,7 @@ class FramerVisitorCapturingFrames : public NoOpFramerVisitor { size_t frame_count_; QuicPacketHeader header_; std::vector<QuicStreamFrame> stream_frames_; + std::vector<std::string*> stream_data_; scoped_ptr<QuicAckFrame> ack_; scoped_ptr<QuicCongestionFeedbackFrame> feedback_; scoped_ptr<QuicRstStreamFrame> rst_; @@ -178,11 +221,12 @@ class MockConnectionVisitor : public QuicConnectionVisitorInterface { MOCK_METHOD1(OnStreamFrames, bool(const std::vector<QuicStreamFrame>& frame)); MOCK_METHOD1(OnRstStream, void(const QuicRstStreamFrame& frame)); MOCK_METHOD1(OnGoAway, void(const QuicGoAwayFrame& frame)); - MOCK_METHOD2(ConnectionClose, void(QuicErrorCode error, bool from_peer)); + MOCK_METHOD2(OnConnectionClosed, void(QuicErrorCode error, bool from_peer)); MOCK_METHOD0(OnCanWrite, bool()); MOCK_CONST_METHOD0(HasPendingHandshake, bool()); MOCK_METHOD1(OnSuccessfulVersionNegotiation, void(const QuicVersion& version)); + MOCK_METHOD0(OnConfigNegotiated, void()); private: DISALLOW_COPY_AND_ASSIGN(MockConnectionVisitor); @@ -197,10 +241,6 @@ class MockHelper : public QuicConnectionHelperInterface { const QuicClock* GetClock() const; QuicRandom* GetRandomGenerator(); void AdvanceTime(QuicTime::Delta delta); - MOCK_METHOD2(WritePacketToWire, int(const QuicEncryptedPacket& packet, - int* error)); - MOCK_METHOD0(IsWriteBlockedDataBuffered, bool()); - MOCK_METHOD1(IsWriteBlocked, bool(int stream_id)); virtual QuicAlarm* CreateAlarm(QuicAlarm::Delegate* delegate); private: @@ -210,12 +250,17 @@ class MockHelper : public QuicConnectionHelperInterface { class MockConnection : public QuicConnection { public: - // Uses a MockHelper. - MockConnection(QuicGuid guid, IPEndPoint address, bool is_server); + // Uses a MockHelper, GUID of 42, and 127.0.0.1:123. + explicit MockConnection(bool is_server); + + // Uses a MockHelper, GUID of 42. + MockConnection(IPEndPoint address, + bool is_server); + + // Uses a MockHelper, and 127.0.0.1:123 MockConnection(QuicGuid guid, - IPEndPoint address, - QuicConnectionHelperInterface* helper, bool is_server); + virtual ~MockConnection(); // If the constructor that uses a MockHelper has been used then this method @@ -247,23 +292,20 @@ class MockConnection : public QuicConnection { } private: - const bool has_mock_helper_; + scoped_ptr<QuicPacketWriter> writer_; + scoped_ptr<QuicConnectionHelperInterface> helper_; DISALLOW_COPY_AND_ASSIGN(MockConnection); }; class PacketSavingConnection : public MockConnection { public: - PacketSavingConnection(QuicGuid guid, IPEndPoint address, bool is_server); + explicit PacketSavingConnection(bool is_server); virtual ~PacketSavingConnection(); - virtual bool SendOrQueuePacket( - EncryptionLevel level, - QuicPacketSequenceNumber sequence_number, - QuicPacket* packet, - QuicPacketEntropyHash entropy_hash, - HasRetransmittableData has_retransmittable_data, - Force forced) OVERRIDE; + virtual bool SendOrQueuePacket(EncryptionLevel level, + const SerializedPacket& packet, + TransmissionType transmission_type) OVERRIDE; std::vector<QuicPacket*> packets_; std::vector<QuicEncryptedPacket*> encrypted_packets_; @@ -274,24 +316,26 @@ class PacketSavingConnection : public MockConnection { class MockSession : public QuicSession { public: - MockSession(QuicConnection* connection, bool is_server); + explicit MockSession(QuicConnection* connection); virtual ~MockSession(); MOCK_METHOD4(OnPacket, bool(const IPEndPoint& self_address, const IPEndPoint& peer_address, const QuicPacketHeader& header, const std::vector<QuicStreamFrame>& frame)); - MOCK_METHOD2(ConnectionClose, void(QuicErrorCode error, bool from_peer)); - MOCK_METHOD1(CreateIncomingReliableStream, - ReliableQuicStream*(QuicStreamId id)); + MOCK_METHOD2(OnConnectionClosed, void(QuicErrorCode error, bool from_peer)); + MOCK_METHOD1(CreateIncomingDataStream, QuicDataStream*(QuicStreamId id)); MOCK_METHOD0(GetCryptoStream, QuicCryptoStream*()); - MOCK_METHOD0(CreateOutgoingReliableStream, ReliableQuicStream*()); - MOCK_METHOD5(WritevData, QuicConsumedData(QuicStreamId id, - const struct iovec* iov, - int count, - QuicStreamOffset offset, - bool fin)); + MOCK_METHOD0(CreateOutgoingDataStream, QuicDataStream*()); + MOCK_METHOD6(WritevData, + QuicConsumedData(QuicStreamId id, + const struct iovec* iov, + int count, + QuicStreamOffset offset, + bool fin, + QuicAckNotifier::DelegateInterface*)); MOCK_METHOD0(IsHandshakeComplete, bool()); + MOCK_METHOD0(IsCryptoHandshakeConfirmed, bool()); private: DISALLOW_COPY_AND_ASSIGN(MockSession); @@ -299,14 +343,11 @@ class MockSession : public QuicSession { class TestSession : public QuicSession { public: - TestSession(QuicConnection* connection, - const QuicConfig& config, - bool is_server); + TestSession(QuicConnection* connection, const QuicConfig& config); virtual ~TestSession(); - MOCK_METHOD1(CreateIncomingReliableStream, - ReliableQuicStream*(QuicStreamId id)); - MOCK_METHOD0(CreateOutgoingReliableStream, ReliableQuicStream*()); + MOCK_METHOD1(CreateIncomingDataStream, QuicDataStream*(QuicStreamId id)); + MOCK_METHOD0(CreateOutgoingDataStream, QuicDataStream*()); void SetCryptoStream(QuicCryptoStream* stream); @@ -317,29 +358,47 @@ class TestSession : public QuicSession { DISALLOW_COPY_AND_ASSIGN(TestSession); }; +class MockPacketWriter : public QuicPacketWriter { + public: + MockPacketWriter(); + virtual ~MockPacketWriter(); + + MOCK_METHOD5(WritePacket, + WriteResult(const char* buffer, + size_t buf_len, + const IPAddressNumber& self_address, + const IPEndPoint& peer_address, + QuicBlockedWriterInterface* blocked_writer)); + MOCK_CONST_METHOD0(IsWriteBlockedDataBuffered, bool()); +}; + class MockSendAlgorithm : public SendAlgorithmInterface { public: MockSendAlgorithm(); virtual ~MockSendAlgorithm(); + MOCK_METHOD2(SetFromConfig, void(const QuicConfig& config, bool is_server)); + MOCK_METHOD1(SetMaxPacketSize, void(QuicByteCount max_packet_size)); MOCK_METHOD3(OnIncomingQuicCongestionFeedbackFrame, void(const QuicCongestionFeedbackFrame&, QuicTime feedback_receive_time, const SentPacketsMap&)); - MOCK_METHOD3(OnIncomingAck, + MOCK_METHOD3(OnPacketAcked, void(QuicPacketSequenceNumber, QuicByteCount, QuicTime::Delta)); - MOCK_METHOD1(OnIncomingLoss, void(QuicTime)); - MOCK_METHOD5(SentPacket, + MOCK_METHOD2(OnPacketLost, void(QuicPacketSequenceNumber, QuicTime)); + MOCK_METHOD5(OnPacketSent, bool(QuicTime sent_time, QuicPacketSequenceNumber, QuicByteCount, - Retransmission, HasRetransmittableData)); - MOCK_METHOD2(AbandoningPacket, void(QuicPacketSequenceNumber sequence_number, + TransmissionType, HasRetransmittableData)); + MOCK_METHOD0(OnRetransmissionTimeout, void()); + MOCK_METHOD2(OnPacketAbandoned, void(QuicPacketSequenceNumber sequence_number, QuicByteCount abandoned_bytes)); - MOCK_METHOD4(TimeUntilSend, QuicTime::Delta(QuicTime now, Retransmission, + MOCK_METHOD4(TimeUntilSend, QuicTime::Delta(QuicTime now, TransmissionType, HasRetransmittableData, IsHandshake)); - MOCK_METHOD0(BandwidthEstimate, QuicBandwidth(void)); - MOCK_METHOD0(SmoothedRtt, QuicTime::Delta(void)); - MOCK_METHOD0(RetransmissionDelay, QuicTime::Delta(void)); + MOCK_CONST_METHOD0(BandwidthEstimate, QuicBandwidth(void)); + MOCK_CONST_METHOD0(SmoothedRtt, QuicTime::Delta(void)); + MOCK_CONST_METHOD0(RetransmissionDelay, QuicTime::Delta(void)); + MOCK_CONST_METHOD0(GetCongestionWindow, QuicByteCount()); private: DISALLOW_COPY_AND_ASSIGN(MockSendAlgorithm); @@ -348,13 +407,23 @@ class MockSendAlgorithm : public SendAlgorithmInterface { class TestEntropyCalculator : public QuicReceivedEntropyHashCalculatorInterface { public: - TestEntropyCalculator() { } - virtual ~TestEntropyCalculator() { } + TestEntropyCalculator(); + virtual ~TestEntropyCalculator(); virtual QuicPacketEntropyHash EntropyHash( QuicPacketSequenceNumber sequence_number) const OVERRIDE; }; +class MockEntropyCalculator : public TestEntropyCalculator { + public: + MockEntropyCalculator(); + virtual ~MockEntropyCalculator(); + + MOCK_CONST_METHOD1( + EntropyHash, + QuicPacketEntropyHash(QuicPacketSequenceNumber sequence_number)); +}; + class TestDecompressorVisitor : public QuicSpdyDecompressor::Visitor { public: virtual ~TestDecompressorVisitor() {} |