| Index: net/tools/quic/end_to_end_test.cc
|
| diff --git a/net/tools/quic/end_to_end_test.cc b/net/tools/quic/end_to_end_test.cc
|
| index b99cf1e454b7cf20c2e580c1f9b670c637b575b5..0d82d6dc4baf731a03dd811d97f1d45d6e5792f7 100644
|
| --- a/net/tools/quic/end_to_end_test.cc
|
| +++ b/net/tools/quic/end_to_end_test.cc
|
| @@ -211,18 +211,12 @@ vector<TestParams> GetTestParams() {
|
|
|
| class ServerDelegate : public PacketDroppingTestWriter::Delegate {
|
| public:
|
| - ServerDelegate(TestWriterFactory* writer_factory,
|
| - QuicDispatcher* dispatcher)
|
| - : writer_factory_(writer_factory),
|
| - dispatcher_(dispatcher) {}
|
| + explicit ServerDelegate(QuicDispatcher* dispatcher)
|
| + : dispatcher_(dispatcher) {}
|
| ~ServerDelegate() override {}
|
| - void OnPacketSent(WriteResult result) override {
|
| - writer_factory_->OnPacketSent(result);
|
| - }
|
| void OnCanWrite() override { dispatcher_->OnCanWrite(); }
|
|
|
| private:
|
| - TestWriterFactory* writer_factory_;
|
| QuicDispatcher* dispatcher_;
|
| };
|
|
|
| @@ -230,7 +224,6 @@ class ClientDelegate : public PacketDroppingTestWriter::Delegate {
|
| public:
|
| explicit ClientDelegate(QuicClient* client) : client_(client) {}
|
| ~ClientDelegate() override {}
|
| - void OnPacketSent(WriteResult /*result*/) override {}
|
| void OnCanWrite() override {
|
| EpollEvent event(EPOLLOUT, false);
|
| client_->OnEvent(client_->fd(), &event);
|
| @@ -400,19 +393,11 @@ class EndToEndTest : public ::testing::TestWithParam<TestParams> {
|
| packet_writer_factory);
|
| QuicDispatcherPeer::UseWriter(dispatcher, server_writer_);
|
|
|
| - if (GetParam().server_uses_stateless_rejects_if_peer_supported) {
|
| - // Enable stateless rejects and force the server to always send
|
| - // them.
|
| - FLAGS_enable_quic_stateless_reject_support = true;
|
| - FLAGS_quic_session_map_threshold_for_stateless_rejects = 0;
|
| - } else {
|
| - FLAGS_enable_quic_stateless_reject_support = false;
|
| - FLAGS_quic_session_map_threshold_for_stateless_rejects = -1;
|
| - }
|
| + FLAGS_enable_quic_stateless_reject_support =
|
| + GetParam().server_uses_stateless_rejects_if_peer_supported;
|
|
|
| - server_writer_->Initialize(
|
| - QuicDispatcherPeer::GetHelper(dispatcher),
|
| - new ServerDelegate(packet_writer_factory, dispatcher));
|
| + server_writer_->Initialize(QuicDispatcherPeer::GetHelper(dispatcher),
|
| + new ServerDelegate(dispatcher));
|
| if (stream_factory_ != nullptr) {
|
| static_cast<QuicTestServer*>(server_thread_->server())
|
| ->SetSpdyStreamFactory(stream_factory_);
|
| @@ -474,7 +459,11 @@ class EndToEndTest : public ::testing::TestWithParam<TestParams> {
|
| // EXPECT_EQ(0u, client_stats.packets_lost);
|
| // }
|
| EXPECT_EQ(0u, client_stats.packets_discarded);
|
| - EXPECT_EQ(0u, client_stats.packets_dropped);
|
| + // When doing 0-RTT with stateless rejects, the encrypted requests cause
|
| + // a retranmission of the SREJ packets which are dropped by the client.
|
| + if (!BothSidesSupportStatelessRejects()) {
|
| + EXPECT_EQ(0u, client_stats.packets_dropped);
|
| + }
|
| EXPECT_EQ(client_stats.packets_received, client_stats.packets_processed);
|
|
|
| const int num_expected_stateless_rejects =
|
| @@ -926,22 +915,9 @@ TEST_P(EndToEndTest, LargePostSynchronousRequest) {
|
| TEST_P(EndToEndTest, StatelessRejectWithPacketLoss) {
|
| // In this test, we intentionally drop the first packet from the
|
| // server, which corresponds with the initial REJ/SREJ response from
|
| - // the server. The REJ case will succeed, due to redundancy in the
|
| - // stateful handshake. The SREJ will fail, because there is
|
| - // (currently) no way to recover from a loss of the first SREJ, and
|
| - // all remaining state for the first handshake is black-holed on the
|
| - // time-wait list.
|
| - // TODO(jokulik): Once redundant SREJ support is added, this test
|
| - // should succeed.
|
| + // the server.
|
| server_writer_->set_fake_drop_first_n_packets(1);
|
| - // If this test will involve version negotiation then the version
|
| - // negotiation packet will be dropped, not the SREJ, and since the
|
| - // version negotiation packet will be retransmitted the test will
|
| - // succeed.
|
| - const bool will_succeed =
|
| - !BothSidesSupportStatelessRejects() ||
|
| - negotiated_version_ != client_supported_versions_.front();
|
| - ASSERT_EQ(will_succeed, Initialize());
|
| + ASSERT_TRUE(Initialize());
|
| }
|
|
|
| TEST_P(EndToEndTest, SetInitialReceivedConnectionOptions) {
|
| @@ -1073,7 +1049,8 @@ TEST_P(EndToEndTest, InvalidStream) {
|
|
|
| client_->SendCustomSynchronousRequest(request);
|
| // EXPECT_EQ(QUIC_STREAM_CONNECTION_ERROR, client_->stream_error());
|
| - EXPECT_EQ(QUIC_PACKET_FOR_NONEXISTENT_STREAM, client_->connection_error());
|
| + EXPECT_EQ(QUIC_STREAM_CONNECTION_ERROR, client_->stream_error());
|
| + EXPECT_EQ(QUIC_INVALID_STREAM_ID, client_->connection_error());
|
| }
|
|
|
| // TODO(rch): this test seems to cause net_unittests timeouts :|
|
| @@ -1721,7 +1698,7 @@ TEST_P(EndToEndTest, AckNotifierWithPacketLossAndBlockedSocket) {
|
| EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
|
|
|
| // Send another request to flush out any pending ACKs on the server.
|
| - client_->SendSynchronousRequest(request_string);
|
| + client_->SendSynchronousRequest("/bar");
|
|
|
| // Pause the server to avoid races.
|
| server_thread_->Pause();
|
|
|