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

Side by Side Diff: net/tools/quic/end_to_end_test.cc

Issue 2480183002: Rename ReliableQuicStream to QuicStream. No behavior change, not protected. (Closed)
Patch Set: add missing files Created 4 years, 1 month 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
« no previous file with comments | « net/quic/test_tools/reliable_quic_stream_peer.cc ('k') | net/tools/quic/quic_client_base.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <stddef.h> 5 #include <stddef.h>
6 #include <sys/epoll.h> 6 #include <sys/epoll.h>
7 7
8 #include <cstdint> 8 #include <cstdint>
9 #include <list> 9 #include <list>
10 #include <memory> 10 #include <memory>
(...skipping 19 matching lines...) Expand all
30 #include "net/quic/core/quic_server_id.h" 30 #include "net/quic/core/quic_server_id.h"
31 #include "net/quic/core/quic_session.h" 31 #include "net/quic/core/quic_session.h"
32 #include "net/quic/core/quic_utils.h" 32 #include "net/quic/core/quic_utils.h"
33 #include "net/quic/test_tools/crypto_test_utils.h" 33 #include "net/quic/test_tools/crypto_test_utils.h"
34 #include "net/quic/test_tools/quic_config_peer.h" 34 #include "net/quic/test_tools/quic_config_peer.h"
35 #include "net/quic/test_tools/quic_connection_peer.h" 35 #include "net/quic/test_tools/quic_connection_peer.h"
36 #include "net/quic/test_tools/quic_flow_controller_peer.h" 36 #include "net/quic/test_tools/quic_flow_controller_peer.h"
37 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" 37 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h"
38 #include "net/quic/test_tools/quic_session_peer.h" 38 #include "net/quic/test_tools/quic_session_peer.h"
39 #include "net/quic/test_tools/quic_spdy_session_peer.h" 39 #include "net/quic/test_tools/quic_spdy_session_peer.h"
40 #include "net/quic/test_tools/quic_stream_peer.h"
40 #include "net/quic/test_tools/quic_stream_sequencer_peer.h" 41 #include "net/quic/test_tools/quic_stream_sequencer_peer.h"
41 #include "net/quic/test_tools/quic_test_utils.h" 42 #include "net/quic/test_tools/quic_test_utils.h"
42 #include "net/quic/test_tools/reliable_quic_stream_peer.h"
43 #include "net/test/gtest_util.h" 43 #include "net/test/gtest_util.h"
44 #include "net/tools/epoll_server/epoll_server.h" 44 #include "net/tools/epoll_server/epoll_server.h"
45 #include "net/tools/quic/quic_epoll_connection_helper.h" 45 #include "net/tools/quic/quic_epoll_connection_helper.h"
46 #include "net/tools/quic/quic_in_memory_cache.h" 46 #include "net/tools/quic/quic_in_memory_cache.h"
47 #include "net/tools/quic/quic_packet_writer_wrapper.h" 47 #include "net/tools/quic/quic_packet_writer_wrapper.h"
48 #include "net/tools/quic/quic_server.h" 48 #include "net/tools/quic/quic_server.h"
49 #include "net/tools/quic/quic_simple_server_stream.h" 49 #include "net/tools/quic/quic_simple_server_stream.h"
50 #include "net/tools/quic/quic_socket_utils.h" 50 #include "net/tools/quic/quic_socket_utils.h"
51 #include "net/tools/quic/quic_spdy_client_stream.h" 51 #include "net/tools/quic/quic_spdy_client_stream.h"
52 #include "net/tools/quic/test_tools/packet_dropping_test_writer.h" 52 #include "net/tools/quic/test_tools/packet_dropping_test_writer.h"
(...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after
589 // Run all end to end tests with all supported versions. 589 // Run all end to end tests with all supported versions.
590 INSTANTIATE_TEST_CASE_P(EndToEndTests, 590 INSTANTIATE_TEST_CASE_P(EndToEndTests,
591 EndToEndTest, 591 EndToEndTest,
592 ::testing::ValuesIn(GetTestParams())); 592 ::testing::ValuesIn(GetTestParams()));
593 593
594 TEST_P(EndToEndTest, HandshakeSuccessful) { 594 TEST_P(EndToEndTest, HandshakeSuccessful) {
595 ASSERT_TRUE(Initialize()); 595 ASSERT_TRUE(Initialize());
596 client_->client()->WaitForCryptoHandshakeConfirmed(); 596 client_->client()->WaitForCryptoHandshakeConfirmed();
597 QuicCryptoStream* crypto_stream = 597 QuicCryptoStream* crypto_stream =
598 QuicSessionPeer::GetCryptoStream(client_->client()->session()); 598 QuicSessionPeer::GetCryptoStream(client_->client()->session());
599 QuicStreamSequencer* sequencer = 599 QuicStreamSequencer* sequencer = QuicStreamPeer::sequencer(crypto_stream);
600 ReliableQuicStreamPeer::sequencer(crypto_stream);
601 EXPECT_NE(FLAGS_quic_release_crypto_stream_buffer, 600 EXPECT_NE(FLAGS_quic_release_crypto_stream_buffer,
602 QuicStreamSequencerPeer::IsUnderlyingBufferAllocated(sequencer)); 601 QuicStreamSequencerPeer::IsUnderlyingBufferAllocated(sequencer));
603 server_thread_->Pause(); 602 server_thread_->Pause();
604 QuicDispatcher* dispatcher = 603 QuicDispatcher* dispatcher =
605 QuicServerPeer::GetDispatcher(server_thread_->server()); 604 QuicServerPeer::GetDispatcher(server_thread_->server());
606 QuicSession* server_session = dispatcher->session_map().begin()->second.get(); 605 QuicSession* server_session = dispatcher->session_map().begin()->second.get();
607 crypto_stream = QuicSessionPeer::GetCryptoStream(server_session); 606 crypto_stream = QuicSessionPeer::GetCryptoStream(server_session);
608 sequencer = ReliableQuicStreamPeer::sequencer(crypto_stream); 607 sequencer = QuicStreamPeer::sequencer(crypto_stream);
609 EXPECT_NE(FLAGS_quic_release_crypto_stream_buffer, 608 EXPECT_NE(FLAGS_quic_release_crypto_stream_buffer,
610 QuicStreamSequencerPeer::IsUnderlyingBufferAllocated(sequencer)); 609 QuicStreamSequencerPeer::IsUnderlyingBufferAllocated(sequencer));
611 } 610 }
612 611
613 TEST_P(EndToEndTest, SimpleRequestResponse) { 612 TEST_P(EndToEndTest, SimpleRequestResponse) {
614 ASSERT_TRUE(Initialize()); 613 ASSERT_TRUE(Initialize());
615 614
616 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); 615 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
617 EXPECT_EQ("200", client_->response_headers()->find(":status")->second); 616 EXPECT_EQ("200", client_->response_headers()->find(":status")->second);
618 EXPECT_EQ(2, client_->client()->GetNumSentClientHellos()); 617 EXPECT_EQ(2, client_->client()->GetNumSentClientHellos());
(...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after
1230 1229
1231 // TODO(rch): this test seems to cause net_unittests timeouts :| 1230 // TODO(rch): this test seems to cause net_unittests timeouts :|
1232 TEST_P(EndToEndTest, DISABLED_MultipleTermination) { 1231 TEST_P(EndToEndTest, DISABLED_MultipleTermination) {
1233 ASSERT_TRUE(Initialize()); 1232 ASSERT_TRUE(Initialize());
1234 1233
1235 // Set the offset so we won't frame. Otherwise when we pick up termination 1234 // Set the offset so we won't frame. Otherwise when we pick up termination
1236 // before HTTP framing is complete, we send an error and close the stream, 1235 // before HTTP framing is complete, we send an error and close the stream,
1237 // and the second write is picked up as writing on a closed stream. 1236 // and the second write is picked up as writing on a closed stream.
1238 QuicSpdyClientStream* stream = client_->GetOrCreateStream(); 1237 QuicSpdyClientStream* stream = client_->GetOrCreateStream();
1239 ASSERT_TRUE(stream != nullptr); 1238 ASSERT_TRUE(stream != nullptr);
1240 ReliableQuicStreamPeer::SetStreamBytesWritten(3, stream); 1239 QuicStreamPeer::SetStreamBytesWritten(3, stream);
1241 1240
1242 client_->SendData("bar", true); 1241 client_->SendData("bar", true);
1243 client_->WaitForWriteToFlush(); 1242 client_->WaitForWriteToFlush();
1244 1243
1245 // By default the stream protects itself from writes after terminte is set. 1244 // By default the stream protects itself from writes after terminte is set.
1246 // Override this to test the server handling buggy clients. 1245 // Override this to test the server handling buggy clients.
1247 ReliableQuicStreamPeer::SetWriteSideClosed(false, 1246 QuicStreamPeer::SetWriteSideClosed(false, client_->GetOrCreateStream());
1248 client_->GetOrCreateStream());
1249 1247
1250 EXPECT_QUIC_BUG(client_->SendData("eep", true), "Fin already buffered"); 1248 EXPECT_QUIC_BUG(client_->SendData("eep", true), "Fin already buffered");
1251 } 1249 }
1252 1250
1253 TEST_P(EndToEndTest, Timeout) { 1251 TEST_P(EndToEndTest, Timeout) {
1254 client_config_.SetIdleNetworkTimeout(QuicTime::Delta::FromMicroseconds(500), 1252 client_config_.SetIdleNetworkTimeout(QuicTime::Delta::FromMicroseconds(500),
1255 QuicTime::Delta::FromMicroseconds(500)); 1253 QuicTime::Delta::FromMicroseconds(500));
1256 // Note: we do NOT ASSERT_TRUE: we may time out during initial handshake: 1254 // Note: we do NOT ASSERT_TRUE: we may time out during initial handshake:
1257 // that's enough to validate timeout in this case. 1255 // that's enough to validate timeout in this case.
1258 Initialize(); 1256 Initialize();
(...skipping 937 matching lines...) Expand 10 before | Expand all | Expand 10 after
2196 ~ServerStreamWithErrorResponseBody() override {} 2194 ~ServerStreamWithErrorResponseBody() override {}
2197 2195
2198 protected: 2196 protected:
2199 void SendErrorResponse() override { 2197 void SendErrorResponse() override {
2200 DVLOG(1) << "Sending error response for stream " << id(); 2198 DVLOG(1) << "Sending error response for stream " << id();
2201 SpdyHeaderBlock headers; 2199 SpdyHeaderBlock headers;
2202 headers[":status"] = "500"; 2200 headers[":status"] = "500";
2203 headers["content-length"] = base::UintToString(response_body_.size()); 2201 headers["content-length"] = base::UintToString(response_body_.size());
2204 // This method must call CloseReadSide to cause the test case, StopReading 2202 // This method must call CloseReadSide to cause the test case, StopReading
2205 // is not sufficient. 2203 // is not sufficient.
2206 ReliableQuicStreamPeer::CloseReadSide(this); 2204 QuicStreamPeer::CloseReadSide(this);
2207 SendHeadersAndBody(std::move(headers), response_body_); 2205 SendHeadersAndBody(std::move(headers), response_body_);
2208 } 2206 }
2209 2207
2210 string response_body_; 2208 string response_body_;
2211 }; 2209 };
2212 2210
2213 class StreamWithErrorFactory : public QuicTestServer::StreamFactory { 2211 class StreamWithErrorFactory : public QuicTestServer::StreamFactory {
2214 public: 2212 public:
2215 explicit StreamWithErrorFactory(string response_body) 2213 explicit StreamWithErrorFactory(string response_body)
2216 : response_body_(std::move(response_body)) {} 2214 : response_body_(std::move(response_body)) {}
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
2496 // Tell the client to not close the stream if it receives an early response. 2494 // Tell the client to not close the stream if it receives an early response.
2497 client_->set_allow_bidirectional_data(true); 2495 client_->set_allow_bidirectional_data(true);
2498 // Send the headers. 2496 // Send the headers.
2499 client_->SendMessage(headers, "", /*fin=*/false); 2497 client_->SendMessage(headers, "", /*fin=*/false);
2500 2498
2501 // Receive the response and let the server close writing. 2499 // Receive the response and let the server close writing.
2502 client_->WaitForInitialResponse(); 2500 client_->WaitForInitialResponse();
2503 EXPECT_EQ("500", client_->response_headers()->find(":status")->second); 2501 EXPECT_EQ("500", client_->response_headers()->find(":status")->second);
2504 2502
2505 // Receive the reset stream from server on early response. 2503 // Receive the reset stream from server on early response.
2506 ReliableQuicStream* stream = 2504 QuicStream* stream =
2507 client_->client()->session()->GetOrCreateStream(kClientDataStreamId1); 2505 client_->client()->session()->GetOrCreateStream(kClientDataStreamId1);
2508 // The stream is reset by server's reset stream. 2506 // The stream is reset by server's reset stream.
2509 EXPECT_EQ(stream, nullptr); 2507 EXPECT_EQ(stream, nullptr);
2510 } 2508 }
2511 2509
2512 TEST_P(EndToEndTest, Trailers) { 2510 TEST_P(EndToEndTest, Trailers) {
2513 // Test sending and receiving HTTP/2 Trailers (trailing HEADERS frames). 2511 // Test sending and receiving HTTP/2 Trailers (trailing HEADERS frames).
2514 ASSERT_TRUE(Initialize()); 2512 ASSERT_TRUE(Initialize());
2515 client_->client()->WaitForCryptoHandshakeConfirmed(); 2513 client_->client()->WaitForCryptoHandshakeConfirmed();
2516 2514
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
2613 2611
2614 client_->client()->set_response_listener( 2612 client_->client()->set_response_listener(
2615 std::unique_ptr<QuicClientBase::ResponseListener>( 2613 std::unique_ptr<QuicClientBase::ResponseListener>(
2616 new TestResponseListener)); 2614 new TestResponseListener));
2617 2615
2618 DVLOG(1) << "send request for /push_example"; 2616 DVLOG(1) << "send request for /push_example";
2619 EXPECT_EQ(kBody, client_->SendSynchronousRequest( 2617 EXPECT_EQ(kBody, client_->SendSynchronousRequest(
2620 "https://example.com/push_example")); 2618 "https://example.com/push_example"));
2621 QuicHeadersStream* headers_stream = 2619 QuicHeadersStream* headers_stream =
2622 QuicSpdySessionPeer::GetHeadersStream(client_->client()->session()); 2620 QuicSpdySessionPeer::GetHeadersStream(client_->client()->session());
2623 QuicStreamSequencer* sequencer = 2621 QuicStreamSequencer* sequencer = QuicStreamPeer::sequencer(headers_stream);
2624 ReliableQuicStreamPeer::sequencer(headers_stream);
2625 // Headers stream's sequencer buffer shouldn't be released because server push 2622 // Headers stream's sequencer buffer shouldn't be released because server push
2626 // hasn't finished yet. 2623 // hasn't finished yet.
2627 EXPECT_TRUE(QuicStreamSequencerPeer::IsUnderlyingBufferAllocated(sequencer)); 2624 EXPECT_TRUE(QuicStreamSequencerPeer::IsUnderlyingBufferAllocated(sequencer));
2628 2625
2629 for (const string& url : push_urls) { 2626 for (const string& url : push_urls) {
2630 DVLOG(1) << "send request for pushed stream on url " << url; 2627 DVLOG(1) << "send request for pushed stream on url " << url;
2631 string expected_body = "This is server push response body for " + url; 2628 string expected_body = "This is server push response body for " + url;
2632 string response_body = client_->SendSynchronousRequest(url); 2629 string response_body = client_->SendSynchronousRequest(url);
2633 DVLOG(1) << "response body " << response_body; 2630 DVLOG(1) << "response body " << response_body;
2634 EXPECT_EQ(expected_body, response_body); 2631 EXPECT_EQ(expected_body, response_body);
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
2929 } 2926 }
2930 } 2927 }
2931 2928
2932 TEST_P(EndToEndTest, ReleaseHeadersStreamBufferWhenIdle) { 2929 TEST_P(EndToEndTest, ReleaseHeadersStreamBufferWhenIdle) {
2933 // Tests that when client side has no active request and no waiting 2930 // Tests that when client side has no active request and no waiting
2934 // PUSH_PROMISE, its headers stream's sequencer buffer should be released. 2931 // PUSH_PROMISE, its headers stream's sequencer buffer should be released.
2935 ASSERT_TRUE(Initialize()); 2932 ASSERT_TRUE(Initialize());
2936 client_->SendSynchronousRequest("/foo"); 2933 client_->SendSynchronousRequest("/foo");
2937 QuicHeadersStream* headers_stream = 2934 QuicHeadersStream* headers_stream =
2938 QuicSpdySessionPeer::GetHeadersStream(client_->client()->session()); 2935 QuicSpdySessionPeer::GetHeadersStream(client_->client()->session());
2939 QuicStreamSequencer* sequencer = 2936 QuicStreamSequencer* sequencer = QuicStreamPeer::sequencer(headers_stream);
2940 ReliableQuicStreamPeer::sequencer(headers_stream);
2941 EXPECT_NE(FLAGS_quic_headers_stream_release_sequencer_buffer, 2937 EXPECT_NE(FLAGS_quic_headers_stream_release_sequencer_buffer,
2942 QuicStreamSequencerPeer::IsUnderlyingBufferAllocated(sequencer)); 2938 QuicStreamSequencerPeer::IsUnderlyingBufferAllocated(sequencer));
2943 } 2939 }
2944 2940
2945 class EndToEndBufferedPacketsTest : public EndToEndTest { 2941 class EndToEndBufferedPacketsTest : public EndToEndTest {
2946 public: 2942 public:
2947 void CreateClientWithWriter() override { 2943 void CreateClientWithWriter() override {
2948 LOG(ERROR) << "create client with reorder_writer_ "; 2944 LOG(ERROR) << "create client with reorder_writer_ ";
2949 reorder_writer_ = new PacketReorderingWriter(); 2945 reorder_writer_ = new PacketReorderingWriter();
2950 client_.reset(EndToEndTest::CreateQuicClient(reorder_writer_)); 2946 client_.reset(EndToEndTest::CreateQuicClient(reorder_writer_));
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
2994 client_->WaitForResponse(); 2990 client_->WaitForResponse();
2995 EXPECT_EQ(kBarResponseBody, client_->response_body()); 2991 EXPECT_EQ(kBarResponseBody, client_->response_body());
2996 QuicConnectionStats client_stats = 2992 QuicConnectionStats client_stats =
2997 client_->client()->session()->connection()->GetStats(); 2993 client_->client()->session()->connection()->GetStats();
2998 EXPECT_EQ(0u, client_stats.packets_lost); 2994 EXPECT_EQ(0u, client_stats.packets_lost);
2999 EXPECT_EQ(1, client_->client()->GetNumSentClientHellos()); 2995 EXPECT_EQ(1, client_->client()->GetNumSentClientHellos());
3000 } 2996 }
3001 } // namespace 2997 } // namespace
3002 } // namespace test 2998 } // namespace test
3003 } // namespace net 2999 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/test_tools/reliable_quic_stream_peer.cc ('k') | net/tools/quic/quic_client_base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698