diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-01-20 13:40:20 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-01-22 12:41:23 +0000 |
commit | 7961cea6d1041e3e454dae6a1da660b453efd238 (patch) | |
tree | c0eeb4a9ff9ba32986289c1653d9608e53ccb444 /chromium/net/third_party/quiche/src/quic/test_tools | |
parent | b7034d0803538058e5c9d904ef03cf5eab34f6ef (diff) | |
download | qtwebengine-chromium-7961cea6d1041e3e454dae6a1da660b453efd238.tar.gz |
BASELINE: Update Chromium to 78.0.3904.130
Change-Id: If185e0c0061b3437531c97c9c8c78f239352a68b
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/net/third_party/quiche/src/quic/test_tools')
27 files changed, 312 insertions, 47 deletions
diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/crypto_test_utils.cc b/chromium/net/third_party/quiche/src/quic/test_tools/crypto_test_utils.cc index 095472a7b99..27e47b2172f 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/crypto_test_utils.cc +++ b/chromium/net/third_party/quiche/src/quic/test_tools/crypto_test_utils.cc @@ -232,9 +232,6 @@ int HandshakeWithFakeServer(QuicConfig* server_quic_config, CanAcceptClientHello(testing::_, testing::_, testing::_, testing::_, testing::_)) .Times(testing::AnyNumber()); - EXPECT_CALL(*server_session.helper(), - GenerateConnectionIdForReject(testing::_, testing::_)) - .Times(testing::AnyNumber()); EXPECT_CALL(*server_conn, OnCanWrite()).Times(testing::AnyNumber()); EXPECT_CALL(*client_conn, OnCanWrite()).Times(testing::AnyNumber()); @@ -679,9 +676,13 @@ void MovePackets(PacketSavingConnection* source_conn, PacketSavingConnection* dest_conn, Perspective dest_perspective) { SimpleQuicFramer framer(source_conn->supported_versions(), dest_perspective); + QuicFramerPeer::SetLastSerializedServerConnectionId(framer.framer(), + TestConnectionId()); SimpleQuicFramer null_encryption_framer(source_conn->supported_versions(), dest_perspective); + QuicFramerPeer::SetLastSerializedServerConnectionId( + null_encryption_framer.framer(), TestConnectionId()); size_t index = *inout_packet_index; for (; index < source_conn->encrypted_packets_.size(); index++) { @@ -691,6 +692,8 @@ void MovePackets(PacketSavingConnection* source_conn, // them into |framer|, perform the decryption with them, and then swap ther // back. QuicConnectionPeer::SwapCrypters(dest_conn, framer.framer()); + QuicConnectionPeer::AddBytesReceived( + dest_conn, source_conn->encrypted_packets_[index]->length()); if (!framer.ProcessPacket(*source_conn->encrypted_packets_[index])) { // The framer will be unable to decrypt forward-secure packets sent after // the handshake is complete. Don't treat them as handshake packets. @@ -721,7 +724,11 @@ void MovePackets(PacketSavingConnection* source_conn, QuicConnectionPeer::SetCurrentPacket( dest_conn, source_conn->encrypted_packets_[index]->AsStringPiece()); for (const auto& stream_frame : framer.stream_frames()) { - dest_stream->OnStreamFrame(*stream_frame); + // Ignore stream frames that are sent on other streams in the crypto + // event. + if (stream_frame->stream_id == dest_stream->id()) { + dest_stream->OnStreamFrame(*stream_frame); + } } for (const auto& crypto_frame : framer.crypto_frames()) { dest_stream->OnCryptoFrame(*crypto_frame); diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/mock_quic_session_visitor.h b/chromium/net/third_party/quiche/src/quic/test_tools/mock_quic_session_visitor.h index 11dc24a724c..0954bb71390 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/mock_quic_session_visitor.h +++ b/chromium/net/third_party/quiche/src/quic/test_tools/mock_quic_session_visitor.h @@ -39,9 +39,6 @@ class MockQuicCryptoServerStreamHelper : public QuicCryptoServerStream::Helper { MockQuicCryptoServerStreamHelper& operator=( const MockQuicCryptoServerStreamHelper&) = delete; ~MockQuicCryptoServerStreamHelper() override; - MOCK_CONST_METHOD2(GenerateConnectionIdForReject, - QuicConnectionId(QuicTransportVersion version, - QuicConnectionId connection_id)); MOCK_CONST_METHOD5(CanAcceptClientHello, bool(const CryptoHandshakeMessage& message, const QuicSocketAddress& client_address, diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/mock_quic_time_wait_list_manager.h b/chromium/net/third_party/quiche/src/quic/test_tools/mock_quic_time_wait_list_manager.h index b46e68b1d49..6b2b6d0968f 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/mock_quic_time_wait_list_manager.h +++ b/chromium/net/third_party/quiche/src/quic/test_tools/mock_quic_time_wait_list_manager.h @@ -45,10 +45,11 @@ class MockTimeWaitListManager : public QuicTimeWaitListManager { PacketHeaderFormat header_format, std::unique_ptr<QuicPerPacketContext> packet_context)); - MOCK_METHOD7(SendVersionNegotiationPacket, + MOCK_METHOD8(SendVersionNegotiationPacket, void(QuicConnectionId server_connection_id, QuicConnectionId client_connection_id, bool ietf_quic, + bool has_length_prefix, const ParsedQuicVersionVector& supported_versions, const QuicSocketAddress& server_address, const QuicSocketAddress& client_address, diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/packet_dropping_test_writer.h b/chromium/net/third_party/quiche/src/quic/test_tools/packet_dropping_test_writer.h index 92c895627ff..4b3e8af28ea 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/packet_dropping_test_writer.h +++ b/chromium/net/third_party/quiche/src/quic/test_tools/packet_dropping_test_writer.h @@ -161,14 +161,14 @@ class PacketDroppingTestWriter : public QuicPacketWriterWrapper { uint64_t num_calls_to_write_; QuicMutex config_mutex_; - int32_t fake_packet_loss_percentage_ GUARDED_BY(config_mutex_); - int32_t fake_drop_first_n_packets_ GUARDED_BY(config_mutex_); - int32_t fake_blocked_socket_percentage_ GUARDED_BY(config_mutex_); - int32_t fake_packet_reorder_percentage_ GUARDED_BY(config_mutex_); - QuicTime::Delta fake_packet_delay_ GUARDED_BY(config_mutex_); - QuicBandwidth fake_bandwidth_ GUARDED_BY(config_mutex_); - QuicByteCount buffer_size_ GUARDED_BY(config_mutex_); - int32_t num_consecutive_packet_lost_ GUARDED_BY(config_mutex_); + int32_t fake_packet_loss_percentage_ QUIC_GUARDED_BY(config_mutex_); + int32_t fake_drop_first_n_packets_ QUIC_GUARDED_BY(config_mutex_); + int32_t fake_blocked_socket_percentage_ QUIC_GUARDED_BY(config_mutex_); + int32_t fake_packet_reorder_percentage_ QUIC_GUARDED_BY(config_mutex_); + QuicTime::Delta fake_packet_delay_ QUIC_GUARDED_BY(config_mutex_); + QuicBandwidth fake_bandwidth_ QUIC_GUARDED_BY(config_mutex_); + QuicByteCount buffer_size_ QUIC_GUARDED_BY(config_mutex_); + int32_t num_consecutive_packet_lost_ QUIC_GUARDED_BY(config_mutex_); }; } // namespace test diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/qpack_encoder_peer.cc b/chromium/net/third_party/quiche/src/quic/test_tools/qpack_encoder_peer.cc new file mode 100644 index 00000000000..9719bdb9b7a --- /dev/null +++ b/chromium/net/third_party/quiche/src/quic/test_tools/qpack_encoder_peer.cc @@ -0,0 +1,30 @@ +// Copyright (c) 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/third_party/quiche/src/quic/test_tools/qpack_encoder_peer.h" + +#include "net/third_party/quiche/src/quic/core/qpack/qpack_encoder.h" + +namespace quic { +namespace test { + +// static +QpackHeaderTable* QpackEncoderPeer::header_table(QpackEncoder* encoder) { + return &encoder->header_table_; +} + +// static +uint64_t QpackEncoderPeer::maximum_blocked_streams( + const QpackEncoder* encoder) { + return encoder->maximum_blocked_streams_; +} + +// static +uint64_t QpackEncoderPeer::smallest_blocking_index( + const QpackEncoder* encoder) { + return encoder->blocking_manager_.smallest_blocking_index(); +} + +} // namespace test +} // namespace quic diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/qpack_encoder_peer.h b/chromium/net/third_party/quiche/src/quic/test_tools/qpack_encoder_peer.h new file mode 100644 index 00000000000..2edf4274611 --- /dev/null +++ b/chromium/net/third_party/quiche/src/quic/test_tools/qpack_encoder_peer.h @@ -0,0 +1,30 @@ +// Copyright (c) 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef QUICHE_QUIC_TEST_TOOLS_QPACK_ENCODER_PEER_H_ +#define QUICHE_QUIC_TEST_TOOLS_QPACK_ENCODER_PEER_H_ + +#include <cstdint> + +namespace quic { + +class QpackEncoder; +class QpackHeaderTable; + +namespace test { + +class QpackEncoderPeer { + public: + QpackEncoderPeer() = delete; + + static QpackHeaderTable* header_table(QpackEncoder* encoder); + static uint64_t maximum_blocked_streams(const QpackEncoder* encoder); + static uint64_t smallest_blocking_index(const QpackEncoder* encoder); +}; + +} // namespace test + +} // namespace quic + +#endif // QUICHE_QUIC_TEST_TOOLS_QPACK_ENCODER_PEER_H_ diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/qpack_header_table_peer.cc b/chromium/net/third_party/quiche/src/quic/test_tools/qpack_header_table_peer.cc new file mode 100644 index 00000000000..bb18731dae7 --- /dev/null +++ b/chromium/net/third_party/quiche/src/quic/test_tools/qpack_header_table_peer.cc @@ -0,0 +1,25 @@ +// Copyright (c) 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/third_party/quiche/src/quic/test_tools/qpack_header_table_peer.h" + +#include "net/third_party/quiche/src/quic/core/qpack/qpack_header_table.h" + +namespace quic { +namespace test { + +// static +uint64_t QpackHeaderTablePeer::dynamic_table_capacity( + const QpackHeaderTable* header_table) { + return header_table->dynamic_table_capacity_; +} + +// static +uint64_t QpackHeaderTablePeer::maximum_dynamic_table_capacity( + const QpackHeaderTable* header_table) { + return header_table->maximum_dynamic_table_capacity_; +} + +} // namespace test +} // namespace quic diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/qpack_header_table_peer.h b/chromium/net/third_party/quiche/src/quic/test_tools/qpack_header_table_peer.h new file mode 100644 index 00000000000..cbf3f448a28 --- /dev/null +++ b/chromium/net/third_party/quiche/src/quic/test_tools/qpack_header_table_peer.h @@ -0,0 +1,29 @@ +// Copyright (c) 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef QUICHE_QUIC_TEST_TOOLS_QPACK_HEADER_TABLE_PEER_H_ +#define QUICHE_QUIC_TEST_TOOLS_QPACK_HEADER_TABLE_PEER_H_ + +#include <cstdint> + +namespace quic { + +class QpackHeaderTable; + +namespace test { + +class QpackHeaderTablePeer { + public: + QpackHeaderTablePeer() = delete; + + static uint64_t dynamic_table_capacity(const QpackHeaderTable* header_table); + static uint64_t maximum_dynamic_table_capacity( + const QpackHeaderTable* header_table); +}; + +} // namespace test + +} // namespace quic + +#endif // QUICHE_QUIC_TEST_TOOLS_QPACK_HEADER_TABLE_PEER_H_ diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/quic_connection_peer.cc b/chromium/net/third_party/quiche/src/quic/test_tools/quic_connection_peer.cc index 66d1a51434e..ef2ffb39c02 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/quic_connection_peer.cc +++ b/chromium/net/third_party/quiche/src/quic/test_tools/quic_connection_peer.cc @@ -332,5 +332,18 @@ void QuicConnectionPeer::SetLastHeaderFormat(QuicConnection* connection, connection->last_header_.form = format; } +// static +void QuicConnectionPeer::AddBytesReceived(QuicConnection* connection, + size_t length) { + if (connection->EnforceAntiAmplificationLimit()) { + connection->bytes_received_before_address_validation_ += length; + } +} + +// static +void QuicConnectionPeer::SetAddressValidated(QuicConnection* connection) { + connection->address_validated_ = true; +} + } // namespace test } // namespace quic diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/quic_connection_peer.h b/chromium/net/third_party/quiche/src/quic/test_tools/quic_connection_peer.h index d0797f52adf..f329a1cb833 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/quic_connection_peer.h +++ b/chromium/net/third_party/quiche/src/quic/test_tools/quic_connection_peer.h @@ -133,6 +133,8 @@ class QuicConnectionPeer { QuicConnection* connection); static void SetLastHeaderFormat(QuicConnection* connection, PacketHeaderFormat format); + static void AddBytesReceived(QuicConnection* connection, size_t length); + static void SetAddressValidated(QuicConnection* connection); }; } // namespace test diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/quic_crypto_server_config_peer.h b/chromium/net/third_party/quiche/src/quic/test_tools/quic_crypto_server_config_peer.h index 3f5a9840a33..baaa9b8bffb 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/quic_crypto_server_config_peer.h +++ b/chromium/net/third_party/quiche/src/quic/test_tools/quic_crypto_server_config_peer.h @@ -73,7 +73,7 @@ class QuicCryptoServerConfigPeer { // ConfigsDebug returns a std::string that contains debugging information // about the set of Configs loaded in |server_config_| and their status. std::string ConfigsDebug() - SHARED_LOCKS_REQUIRED(server_config_->configs_lock_); + QUIC_SHARED_LOCKS_REQUIRED(server_config_->configs_lock_); void SelectNewPrimaryConfig(int seconds); diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/quic_framer_peer.h b/chromium/net/third_party/quiche/src/quic/test_tools/quic_framer_peer.h index 8496718fc29..24b8818a804 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/quic_framer_peer.h +++ b/chromium/net/third_party/quiche/src/quic/test_tools/quic_framer_peer.h @@ -179,6 +179,12 @@ class QuicFramerPeer { uint8_t* destination_connection_id_length, uint8_t* source_connection_id_length, std::string* detailed_error); + + static void set_current_received_frame_type( + QuicFramer* framer, + uint64_t current_received_frame_type) { + framer->current_received_frame_type_ = current_received_frame_type; + } }; } // namespace test diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/quic_session_peer.cc b/chromium/net/third_party/quiche/src/quic/test_tools/quic_session_peer.cc index e78b0597284..ab4e5af1ebc 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/quic_session_peer.cc +++ b/chromium/net/third_party/quiche/src/quic/test_tools/quic_session_peer.cc @@ -161,8 +161,7 @@ void QuicSessionPeer::ActivateStream(QuicSession* session, // static void QuicSessionPeer::RegisterStaticStream(QuicSession* session, std::unique_ptr<QuicStream> stream) { - return session->RegisterStaticStream(std::move(stream), - /*stream_already_counted = */ false); + return session->RegisterStaticStream(std::move(stream)); } // static @@ -243,5 +242,12 @@ void QuicSessionPeer::SendRstStreamInner(QuicSession* session, session->SendRstStreamInner(id, error, bytes_written, close_write_side_only); } +// static +PendingStream* QuicSessionPeer::GetPendingStream(QuicSession* session, + QuicStreamId stream_id) { + auto it = session->pending_stream_map_.find(stream_id); + return it == session->pending_stream_map_.end() ? nullptr : it->second.get(); +} + } // namespace test } // namespace quic diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/quic_session_peer.h b/chromium/net/third_party/quiche/src/quic/test_tools/quic_session_peer.h index f027eb564a6..decc4b93f45 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/quic_session_peer.h +++ b/chromium/net/third_party/quiche/src/quic/test_tools/quic_session_peer.h @@ -86,6 +86,8 @@ class QuicSessionPeer { QuicRstStreamErrorCode error, QuicStreamOffset bytes_written, bool close_write_side_only); + static PendingStream* GetPendingStream(QuicSession* session, + QuicStreamId stream_id); }; } // namespace test diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/quic_spdy_session_peer.cc b/chromium/net/third_party/quiche/src/quic/test_tools/quic_spdy_session_peer.cc index 68552a83a0f..85237c454e1 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/quic_spdy_session_peer.cc +++ b/chromium/net/third_party/quiche/src/quic/test_tools/quic_spdy_session_peer.cc @@ -5,6 +5,7 @@ #include "net/third_party/quiche/src/quic/test_tools/quic_spdy_session_peer.h" #include "net/third_party/quiche/src/quic/core/http/quic_spdy_session.h" +#include "net/third_party/quiche/src/quic/core/qpack/qpack_receive_stream.h" #include "net/third_party/quiche/src/quic/core/quic_utils.h" namespace quic { @@ -13,11 +14,13 @@ namespace test { // static QuicHeadersStream* QuicSpdySessionPeer::GetHeadersStream( QuicSpdySession* session) { + DCHECK(!VersionUsesQpack(session->connection()->transport_version())); return session->headers_stream(); } void QuicSpdySessionPeer::SetHeadersStream(QuicSpdySession* session, QuicHeadersStream* headers_stream) { + DCHECK(!VersionUsesQpack(session->connection()->transport_version())); for (auto& it : session->stream_map()) { if (it.first == QuicUtils::GetHeadersStreamId( session->connection()->transport_version())) { @@ -58,10 +61,10 @@ size_t QuicSpdySessionPeer::WriteHeadersOnHeadersStream( QuicStreamId id, spdy::SpdyHeaderBlock headers, bool fin, - spdy::SpdyPriority priority, + const spdy::SpdyStreamPrecedence& precedence, QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener) { return session->WriteHeadersOnHeadersStream( - id, std::move(headers), fin, priority, std::move(ack_listener)); + id, std::move(headers), fin, precedence, std::move(ack_listener)); } // static @@ -82,5 +85,29 @@ QuicSendControlStream* QuicSpdySessionPeer::GetSendControlStream( return session->send_control_stream_; } +// static +QpackSendStream* QuicSpdySessionPeer::GetQpackDecoderSendStream( + QuicSpdySession* session) { + return session->qpack_decoder_send_stream_; +} + +// static +QpackSendStream* QuicSpdySessionPeer::GetQpackEncoderSendStream( + QuicSpdySession* session) { + return session->qpack_encoder_send_stream_; +} + +// static +QpackReceiveStream* QuicSpdySessionPeer::GetQpackDecoderReceiveStream( + QuicSpdySession* session) { + return session->qpack_decoder_receive_stream_; +} + +// static +QpackReceiveStream* QuicSpdySessionPeer::GetQpackEncoderReceiveStream( + QuicSpdySession* session) { + return session->qpack_encoder_receive_stream_; +} + } // namespace test } // namespace quic diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/quic_spdy_session_peer.h b/chromium/net/third_party/quiche/src/quic/test_tools/quic_spdy_session_peer.h index aacf712ae2f..1cfd45f252c 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/quic_spdy_session_peer.h +++ b/chromium/net/third_party/quiche/src/quic/test_tools/quic_spdy_session_peer.h @@ -7,6 +7,8 @@ #include "net/third_party/quiche/src/quic/core/http/quic_receive_control_stream.h" #include "net/third_party/quiche/src/quic/core/http/quic_send_control_stream.h" +#include "net/third_party/quiche/src/quic/core/qpack/qpack_receive_stream.h" +#include "net/third_party/quiche/src/quic/core/qpack/qpack_send_stream.h" #include "net/third_party/quiche/src/quic/core/quic_packets.h" #include "net/third_party/quiche/src/quic/core/quic_write_blocked_list.h" #include "net/third_party/quiche/src/spdy/core/spdy_framer.h" @@ -41,7 +43,7 @@ class QuicSpdySessionPeer { QuicStreamId id, spdy::SpdyHeaderBlock headers, bool fin, - spdy::SpdyPriority priority, + const spdy::SpdyStreamPrecedence& precedence, QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener); // |session| can't be nullptr. static QuicStreamId GetNextOutgoingUnidirectionalStreamId( @@ -49,6 +51,12 @@ class QuicSpdySessionPeer { static QuicReceiveControlStream* GetReceiveControlStream( QuicSpdySession* session); static QuicSendControlStream* GetSendControlStream(QuicSpdySession* session); + static QpackSendStream* GetQpackDecoderSendStream(QuicSpdySession* session); + static QpackSendStream* GetQpackEncoderSendStream(QuicSpdySession* session); + static QpackReceiveStream* GetQpackDecoderReceiveStream( + QuicSpdySession* session); + static QpackReceiveStream* GetQpackEncoderReceiveStream( + QuicSpdySession* session); }; } // namespace test diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/quic_test_client.cc b/chromium/net/third_party/quiche/src/quic/test_tools/quic_test_client.cc index e2e33c7a3bf..402a2311882 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/quic_test_client.cc +++ b/chromium/net/third_party/quiche/src/quic/test_tools/quic_test_client.cc @@ -233,9 +233,14 @@ MockableQuicClient::mockable_network_helper() const { } QuicConnectionId MockableQuicClient::GenerateNewConnectionId() { - return server_connection_id_overridden_ - ? override_server_connection_id_ - : QuicClient::GenerateNewConnectionId(); + if (server_connection_id_overridden_) { + return override_server_connection_id_; + } + if (override_server_connection_id_length_ >= 0) { + return QuicUtils::CreateRandomConnectionId( + override_server_connection_id_length_); + } + return QuicClient::GenerateNewConnectionId(); } void MockableQuicClient::UseConnectionId( @@ -244,9 +249,20 @@ void MockableQuicClient::UseConnectionId( override_server_connection_id_ = server_connection_id; } +void MockableQuicClient::UseConnectionIdLength( + int server_connection_id_length) { + override_server_connection_id_length_ = server_connection_id_length; +} + QuicConnectionId MockableQuicClient::GetClientConnectionId() { - return client_connection_id_overridden_ ? override_client_connection_id_ - : QuicClient::GetClientConnectionId(); + if (client_connection_id_overridden_) { + return override_client_connection_id_; + } + if (override_client_connection_id_length_ >= 0) { + return QuicUtils::CreateRandomConnectionId( + override_client_connection_id_length_); + } + return QuicClient::GetClientConnectionId(); } void MockableQuicClient::UseClientConnectionId( @@ -255,6 +271,11 @@ void MockableQuicClient::UseClientConnectionId( override_client_connection_id_ = client_connection_id; } +void MockableQuicClient::UseClientConnectionIdLength( + int client_connection_id_length) { + override_client_connection_id_length_ = client_connection_id_length; +} + void MockableQuicClient::UseWriter(QuicPacketWriterWrapper* writer) { mockable_network_helper()->UseWriter(writer); } @@ -526,7 +547,8 @@ QuicSpdyClientStream* QuicTestClient::GetOrCreateStream() { if (!latest_created_stream_) { SetLatestCreatedStream(client_->CreateClientStream()); if (latest_created_stream_) { - latest_created_stream_->SetPriority(priority_); + latest_created_stream_->SetPriority( + spdy::SpdyStreamPrecedence(priority_)); } } @@ -769,12 +791,23 @@ void QuicTestClient::UseConnectionId(QuicConnectionId server_connection_id) { client_->UseConnectionId(server_connection_id); } +void QuicTestClient::UseConnectionIdLength(int server_connection_id_length) { + DCHECK(!connected()); + client_->UseConnectionIdLength(server_connection_id_length); +} + void QuicTestClient::UseClientConnectionId( QuicConnectionId client_connection_id) { DCHECK(!connected()); client_->UseClientConnectionId(client_connection_id); } +void QuicTestClient::UseClientConnectionIdLength( + int client_connection_id_length) { + DCHECK(!connected()); + client_->UseClientConnectionIdLength(client_connection_id_length); +} + bool QuicTestClient::MigrateSocket(const QuicIpAddress& new_host) { return client_->MigrateSocket(new_host); } diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/quic_test_client.h b/chromium/net/third_party/quiche/src/quic/test_tools/quic_test_client.h index 7b835620557..cd5b09f7d77 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/quic_test_client.h +++ b/chromium/net/third_party/quiche/src/quic/test_tools/quic_test_client.h @@ -56,8 +56,10 @@ class MockableQuicClient : public QuicClient { QuicConnectionId GenerateNewConnectionId() override; void UseConnectionId(QuicConnectionId server_connection_id); + void UseConnectionIdLength(int server_connection_id_length); QuicConnectionId GetClientConnectionId() override; void UseClientConnectionId(QuicConnectionId client_connection_id); + void UseClientConnectionIdLength(int client_connection_id_length); void UseWriter(QuicPacketWriterWrapper* writer); void set_peer_address(const QuicSocketAddress& address); @@ -74,9 +76,11 @@ class MockableQuicClient : public QuicClient { // Server connection ID to use, if server_connection_id_overridden_ QuicConnectionId override_server_connection_id_; bool server_connection_id_overridden_; + int override_server_connection_id_length_ = -1; // Client connection ID to use, if client_connection_id_overridden_ QuicConnectionId override_client_connection_id_; bool client_connection_id_overridden_; + int override_client_connection_id_length_ = -1; CachedNetworkParameters cached_network_paramaters_; }; @@ -227,9 +231,15 @@ class QuicTestClient : public QuicSpdyStream::Visitor, // Configures client_ to use a specific server connection ID instead of a // random one. void UseConnectionId(QuicConnectionId server_connection_id); + // Configures client_ to use a specific server connection ID length instead + // of the default of kQuicDefaultConnectionIdLength. + void UseConnectionIdLength(int server_connection_id_length); // Configures client_ to use a specific client connection ID instead of an // empty one. void UseClientConnectionId(QuicConnectionId client_connection_id); + // Configures client_ to use a specific client connection ID length instead + // of the default of zero. + void UseClientConnectionIdLength(int client_connection_id_length); // Returns nullptr if the maximum number of streams have already been created. QuicSpdyClientStream* GetOrCreateStream(); diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/quic_test_server.cc b/chromium/net/third_party/quiche/src/quic/test_tools/quic_test_server.cc index 68c500e67b7..19b986e8dba 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/quic_test_server.cc +++ b/chromium/net/third_party/quiche/src/quic/test_tools/quic_test_server.cc @@ -184,7 +184,7 @@ QuicDispatcher* QuicTestServer::CreateQuicDispatcher() { QuicMakeUnique<QuicEpollConnectionHelper>(epoll_server(), QuicAllocator::BUFFER_POOL), std::unique_ptr<QuicCryptoServerStream::Helper>( - new QuicSimpleCryptoServerStreamHelper(QuicRandom::GetInstance())), + new QuicSimpleCryptoServerStreamHelper()), QuicMakeUnique<QuicEpollAlarmFactory>(epoll_server()), server_backend(), expected_server_connection_id_length()); } diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/quic_test_utils.cc b/chromium/net/third_party/quiche/src/quic/test_tools/quic_test_utils.cc index 99c7511daee..5ff5e05a9b0 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/quic_test_utils.cc +++ b/chromium/net/third_party/quiche/src/quic/test_tools/quic_test_utils.cc @@ -259,6 +259,11 @@ bool NoOpFramerVisitor::OnPacketHeader(const QuicPacketHeader& /*header*/) { void NoOpFramerVisitor::OnCoalescedPacket( const QuicEncryptedPacket& /*packet*/) {} +void NoOpFramerVisitor::OnUndecryptablePacket( + const QuicEncryptedPacket& /*packet*/, + EncryptionLevel /*decryption_level*/, + bool /*has_decryption_key*/) {} + bool NoOpFramerVisitor::OnStreamFrame(const QuicStreamFrame& /*frame*/) { return true; } @@ -524,7 +529,8 @@ MockQuicSession::MockQuicSession(QuicConnection* connection, : QuicSession(connection, nullptr, DefaultQuicConfig(), - connection->supported_versions()) { + connection->supported_versions(), + /*num_expected_unidirectional_static_streams = */ 0) { if (create_mock_crypto_stream) { crypto_stream_ = QuicMakeUnique<MockQuicCryptoStream>(this); } @@ -633,9 +639,6 @@ TestQuicSpdyServerSession::TestQuicSpdyServerSession( crypto_config, compressed_certs_cache) { Initialize(); - ON_CALL(helper_, GenerateConnectionIdForReject(_, _)) - .WillByDefault(testing::Return( - QuicUtils::CreateRandomConnectionId(connection->random_generator()))); ON_CALL(helper_, CanAcceptClientHello(_, _, _, _, _)) .WillByDefault(testing::Return(true)); } @@ -1158,8 +1161,8 @@ QuicStreamId GetNthClientInitiatedBidirectionalStreamId( QuicTransportVersion version, int n) { int num = n; - if (!VersionLacksHeadersStream(version)) { - num++; // + 1 because spdy_session contains headers stream. + if (!VersionUsesQpack(version)) { + num++; } return QuicUtils::GetFirstBidirectionalStreamId(version, Perspective::IS_CLIENT) + diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/quic_test_utils.h b/chromium/net/third_party/quiche/src/quic/test_tools/quic_test_utils.h index 20494d7f3f0..5750b9bc61d 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/quic_test_utils.h +++ b/chromium/net/third_party/quiche/src/quic/test_tools/quic_test_utils.h @@ -261,6 +261,10 @@ class MockFramerVisitor : public QuicFramerVisitorInterface { MOCK_METHOD1(OnDecryptedPacket, void(EncryptionLevel level)); MOCK_METHOD1(OnPacketHeader, bool(const QuicPacketHeader& header)); MOCK_METHOD1(OnCoalescedPacket, void(const QuicEncryptedPacket& packet)); + MOCK_METHOD3(OnUndecryptablePacket, + void(const QuicEncryptedPacket& packet, + EncryptionLevel decryption_level, + bool has_decryption_key)); MOCK_METHOD1(OnStreamFrame, bool(const QuicStreamFrame& frame)); MOCK_METHOD1(OnCryptoFrame, bool(const QuicCryptoFrame& frame)); MOCK_METHOD2(OnAckFrameStart, bool(QuicPacketNumber, QuicTime::Delta)); @@ -314,6 +318,9 @@ class NoOpFramerVisitor : public QuicFramerVisitorInterface { void OnDecryptedPacket(EncryptionLevel /*level*/) override {} bool OnPacketHeader(const QuicPacketHeader& header) override; void OnCoalescedPacket(const QuicEncryptedPacket& packet) override; + void OnUndecryptablePacket(const QuicEncryptedPacket& packet, + EncryptionLevel decryption_level, + bool has_decryption_key) override; bool OnStreamFrame(const QuicStreamFrame& frame) override; bool OnCryptoFrame(const QuicCryptoFrame& frame) override; bool OnAckFrameStart(QuicPacketNumber largest_acked, @@ -375,9 +382,10 @@ class MockQuicConnectionVisitor : public QuicConnectionVisitorInterface { MOCK_CONST_METHOD0(ShouldKeepConnectionAlive, bool()); MOCK_METHOD1(OnSuccessfulVersionNegotiation, void(const ParsedQuicVersion& version)); - MOCK_METHOD2(OnConnectivityProbeReceived, + MOCK_METHOD3(OnPacketReceived, void(const QuicSocketAddress& self_address, - const QuicSocketAddress& peer_address)); + const QuicSocketAddress& peer_address, + bool is_connectivity_probe)); MOCK_METHOD0(OnConfigNegotiated, void()); MOCK_METHOD0(OnAckNeedsRetransmittableFrame, void()); MOCK_METHOD0(SendPing, void()); @@ -624,6 +632,12 @@ class MockQuicSession : public QuicSession { MOCK_CONST_METHOD0(IsCryptoHandshakeConfirmed, bool()); MOCK_CONST_METHOD0(ShouldKeepConnectionAlive, bool()); MOCK_METHOD2(SendStopSending, void(uint16_t code, QuicStreamId stream_id)); + MOCK_METHOD1(OnCryptoHandshakeEvent, void(QuicSession::CryptoHandshakeEvent)); + MOCK_CONST_METHOD0(GetAlpnsToOffer, std::vector<std::string>()); + MOCK_CONST_METHOD1(SelectAlpn, + std::vector<QuicStringPiece>::const_iterator( + const std::vector<QuicStringPiece>&)); + MOCK_METHOD1(OnAlpnSelected, void(QuicStringPiece)); using QuicSession::ActivateStream; @@ -676,6 +690,8 @@ class MockQuicSpdySession : public QuicSpdySession { QuicSession::OnConnectionClosed(frame, source); } + using QuicSession::RegisterStaticStream; + // From QuicSession. MOCK_METHOD2(OnConnectionClosed, void(const QuicConnectionCloseFrame& frame, @@ -702,7 +718,8 @@ class MockQuicSpdySession : public QuicSpdySession { MOCK_METHOD2(OnStreamHeaders, void(QuicStreamId stream_id, QuicStringPiece headers_data)); MOCK_METHOD2(OnStreamHeadersPriority, - void(QuicStreamId stream_id, spdy::SpdyPriority priority)); + void(QuicStreamId stream_id, + const spdy::SpdyStreamPrecedence& precedence)); MOCK_METHOD3(OnStreamHeadersComplete, void(QuicStreamId stream_id, bool fin, size_t frame_len)); MOCK_METHOD4(OnStreamHeaderList, @@ -723,7 +740,8 @@ class MockQuicSpdySession : public QuicSpdySession { size_t frame_len, const QuicHeaderList& header_list)); MOCK_METHOD2(OnPriorityFrame, - void(QuicStreamId id, spdy::SpdyPriority priority)); + void(QuicStreamId id, + const spdy::SpdyStreamPrecedence& precedence)); MOCK_METHOD1(OnHeadersHeadOfLineBlocking, void(QuicTime::Delta delta)); MOCK_METHOD4( diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/server_thread.h b/chromium/net/third_party/quiche/src/quic/test_tools/server_thread.h index ffbce7f15a9..d430297f30b 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/server_thread.h +++ b/chromium/net/third_party/quiche/src/quic/test_tools/server_thread.h @@ -73,13 +73,13 @@ class ServerThread : public QuicThread { std::unique_ptr<QuicServer> server_; QuicSocketAddress address_; mutable QuicMutex port_lock_; - int port_ GUARDED_BY(port_lock_); + int port_ QUIC_GUARDED_BY(port_lock_); bool initialized_; QuicMutex scheduled_actions_lock_; QuicDeque<std::function<void()>> scheduled_actions_ - GUARDED_BY(scheduled_actions_lock_); + QUIC_GUARDED_BY(scheduled_actions_lock_); }; } // namespace test diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/simple_quic_framer.cc b/chromium/net/third_party/quiche/src/quic/test_tools/simple_quic_framer.cc index 547f6d26c8d..ad7e7bb32a1 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/simple_quic_framer.cc +++ b/chromium/net/third_party/quiche/src/quic/test_tools/simple_quic_framer.cc @@ -60,6 +60,10 @@ class SimpleFramerVisitor : public QuicFramerVisitorInterface { void OnCoalescedPacket(const QuicEncryptedPacket& /*packet*/) override {} + void OnUndecryptablePacket(const QuicEncryptedPacket& /*packet*/, + EncryptionLevel /*decryption_level*/, + bool /*has_decryption_key*/) override {} + bool OnStreamFrame(const QuicStreamFrame& frame) override { // Save a copy of the data so it is valid after the packet is processed. std::string* string_data = diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/simple_session_notifier.cc b/chromium/net/third_party/quiche/src/quic/test_tools/simple_session_notifier.cc index 16c441c8c32..72a23d73178 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/simple_session_notifier.cc +++ b/chromium/net/third_party/quiche/src/quic/test_tools/simple_session_notifier.cc @@ -175,6 +175,14 @@ void SimpleSessionNotifier::OnCanWrite() { } } +void SimpleSessionNotifier::OnStreamReset(QuicStreamId id, + QuicRstStreamErrorCode error) { + if (error != QUIC_STREAM_NO_ERROR) { + // Delete stream to avoid retransmissions. + stream_map_.erase(id); + } +} + bool SimpleSessionNotifier::WillingToWrite() const { QUIC_DVLOG(1) << "has_buffered_control_frames: " << HasBufferedControlFrames() << " as_lost_control_frames: " << !lost_control_frames_.empty() diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/simple_session_notifier.h b/chromium/net/third_party/quiche/src/quic/test_tools/simple_session_notifier.h index 74240539ae7..b3d5d729e82 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/simple_session_notifier.h +++ b/chromium/net/third_party/quiche/src/quic/test_tools/simple_session_notifier.h @@ -45,6 +45,9 @@ class SimpleSessionNotifier : public SessionNotifierInterface { // Called when connection_ becomes writable. void OnCanWrite(); + // Called to reset stream. + void OnStreamReset(QuicStreamId id, QuicRstStreamErrorCode error); + // Returns true if there are 1) unsent control frames and stream data, or 2) // lost control frames and stream data. bool WillingToWrite() const; diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/simple_session_notifier_test.cc b/chromium/net/third_party/quiche/src/quic/test_tools/simple_session_notifier_test.cc index 8b931fed34d..63da6397209 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/simple_session_notifier_test.cc +++ b/chromium/net/third_party/quiche/src/quic/test_tools/simple_session_notifier_test.cc @@ -251,8 +251,10 @@ TEST_F(SimpleSessionNotifierTest, OnCanWriteCryptoFrames) { .WillOnce(Invoke(&connection_, &MockQuicConnection::QuicConnection_SendCryptoData)); EXPECT_CALL(connection_, CloseConnection(QUIC_PACKET_WRITE_ERROR, _, _)); - producer.SaveCryptoData(ENCRYPTION_INITIAL, 0, std::string(1024, 'a')); - producer.SaveCryptoData(ENCRYPTION_INITIAL, 500, std::string(524, 'a')); + std::string crypto_data1(1024, 'a'); + producer.SaveCryptoData(ENCRYPTION_INITIAL, 0, crypto_data1); + std::string crypto_data2(524, 'a'); + producer.SaveCryptoData(ENCRYPTION_INITIAL, 500, crypto_data2); notifier_.WriteCryptoData(ENCRYPTION_INITIAL, 1024, 0); // Send crypto data [1024, 2048) in ENCRYPTION_ZERO_RTT. connection_.SetDefaultEncryptionLevel(ENCRYPTION_ZERO_RTT); @@ -261,7 +263,8 @@ TEST_F(SimpleSessionNotifierTest, OnCanWriteCryptoFrames) { EXPECT_CALL(connection_, SendCryptoData(ENCRYPTION_ZERO_RTT, 1024, 0)) .WillOnce(Invoke(&connection_, &MockQuicConnection::QuicConnection_SendCryptoData)); - producer.SaveCryptoData(ENCRYPTION_ZERO_RTT, 0, std::string(1024, 'a')); + std::string crypto_data3(1024, 'a'); + producer.SaveCryptoData(ENCRYPTION_ZERO_RTT, 0, crypto_data3); notifier_.WriteCryptoData(ENCRYPTION_ZERO_RTT, 1024, 0); // Send stream 3 [0, 1024) and connection is blocked. EXPECT_CALL(connection_, SendStreamData(3, 1024, 0, FIN)) diff --git a/chromium/net/third_party/quiche/src/quic/test_tools/simulator/quic_endpoint.h b/chromium/net/third_party/quiche/src/quic/test_tools/simulator/quic_endpoint.h index 7481ddc6b1f..43fce53bb4c 100644 --- a/chromium/net/third_party/quiche/src/quic/test_tools/simulator/quic_endpoint.h +++ b/chromium/net/third_party/quiche/src/quic/test_tools/simulator/quic_endpoint.h @@ -97,9 +97,9 @@ class QuicEndpoint : public Endpoint, void OnWriteBlocked() override {} void OnSuccessfulVersionNegotiation( const ParsedQuicVersion& /*version*/) override {} - void OnConnectivityProbeReceived( - const QuicSocketAddress& /*self_address*/, - const QuicSocketAddress& /*peer_address*/) override {} + void OnPacketReceived(const QuicSocketAddress& /*self_address*/, + const QuicSocketAddress& /*peer_address*/, + bool /*is_connectivity_probe*/) override {} void OnCongestionWindowChange(QuicTime /*now*/) override {} void OnConnectionMigration(AddressChangeType /*type*/) override {} void OnPathDegrading() override {} |