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

Unified Diff: net/quic/bidirectional_stream_quic_impl_unittest.cc

Issue 2077683002: Move the logic for delaying 0-RTT QUIC POST from the QuicStreamFactory (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@QuicHttpStream
Patch Set: tweak Created 4 years, 6 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/bidirectional_stream_quic_impl.cc ('k') | net/quic/quic_chromium_client_stream.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/bidirectional_stream_quic_impl_unittest.cc
diff --git a/net/quic/bidirectional_stream_quic_impl_unittest.cc b/net/quic/bidirectional_stream_quic_impl_unittest.cc
index 22dba77f7459d9490ff900fdbf3f04e9b20ade90..9d8658c5a6bceaf1ac550f873f57cde4ede3a561 100644
--- a/net/quic/bidirectional_stream_quic_impl_unittest.cc
+++ b/net/quic/bidirectional_stream_quic_impl_unittest.cc
@@ -68,16 +68,19 @@ class TestDelegateBase : public BidirectionalStreamImpl::Delegate {
on_data_sent_count_(0),
not_expect_callback_(false),
on_failed_called_(false),
- send_request_headers_automatically_(true) {
+ send_request_headers_automatically_(true),
+ is_ready_(false) {
loop_.reset(new base::RunLoop);
}
~TestDelegateBase() override {}
void OnStreamReady(bool request_headers_sent) override {
+ CHECK(!is_ready_);
CHECK(!on_failed_called_);
EXPECT_EQ(send_request_headers_automatically_, request_headers_sent);
CHECK(!not_expect_callback_);
+ is_ready_ = true;
loop_->Quit();
}
@@ -194,6 +197,7 @@ class TestDelegateBase : public BidirectionalStreamImpl::Delegate {
int on_data_read_count() const { return on_data_read_count_; }
int on_data_sent_count() const { return on_data_sent_count_; }
bool on_failed_called() const { return on_failed_called_; }
+ bool is_ready() const { return is_ready_; }
protected:
// Quits |loop_|.
@@ -220,6 +224,7 @@ class TestDelegateBase : public BidirectionalStreamImpl::Delegate {
bool on_failed_called_;
CompletionCallback callback_;
bool send_request_headers_automatically_;
+ bool is_ready_;
DISALLOW_COPY_AND_ASSIGN(TestDelegateBase);
};
@@ -342,6 +347,8 @@ class BidirectionalStreamQuicImplTest
// Configures the test fixture to use the list of expected writes.
void Initialize() {
+ crypto_client_stream_factory_.set_handshake_mode(
+ MockCryptoClientStream::ZERO_RTT);
mock_writes_.reset(new MockWrite[writes_.size()]);
for (size_t i = 0; i < writes_.size(); i++) {
if (writes_[i].packet == nullptr) {
@@ -382,7 +389,12 @@ class BidirectionalStreamQuicImplTest
/*socket_performance_watcher=*/nullptr, net_log().bound().net_log()));
session_->Initialize();
session_->GetCryptoStream()->CryptoConnect();
- EXPECT_TRUE(session_->IsCryptoHandshakeConfirmed());
+ EXPECT_TRUE(session_->IsEncryptionEstablished());
+ }
+
+ void ConfirmHandshake() {
+ crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
+ QuicSession::HANDSHAKE_CONFIRMED);
}
void SetRequest(const std::string& method,
@@ -716,6 +728,8 @@ TEST_P(BidirectionalStreamQuicImplTest, CoalesceDataBuffersNotHeadersFrame) {
new TestDelegateBase(read_buffer.get(), kReadBufferSize));
delegate->DoNotSendRequestHeadersAutomatically();
delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
+ EXPECT_FALSE(delegate->is_ready());
+ ConfirmHandshake();
delegate->WaitUntilNextCallback(); // OnStreamReady
// Sends request headers separately, which causes them to be sent in a
@@ -819,6 +833,7 @@ TEST_P(BidirectionalStreamQuicImplTest,
new TestDelegateBase(read_buffer.get(), kReadBufferSize));
delegate->DoNotSendRequestHeadersAutomatically();
delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
+ ConfirmHandshake();
delegate->WaitUntilNextCallback(); // OnStreamReady
// Send a Data packet.
@@ -916,6 +931,7 @@ TEST_P(BidirectionalStreamQuicImplTest,
new TestDelegateBase(read_buffer.get(), kReadBufferSize));
delegate->DoNotSendRequestHeadersAutomatically();
delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
+ ConfirmHandshake();
delegate->WaitUntilNextCallback(); // OnStreamReady
// Send a Data packet.
@@ -1006,6 +1022,84 @@ TEST_P(BidirectionalStreamQuicImplTest, PostRequest) {
std::unique_ptr<TestDelegateBase> delegate(
new TestDelegateBase(read_buffer.get(), kReadBufferSize));
delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
+ ConfirmHandshake();
+ delegate->WaitUntilNextCallback(); // OnStreamReady
+
+ // Send a DATA frame.
+ scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData));
+
+ delegate->SendData(buf, buf->size(), true);
+ delegate->WaitUntilNextCallback(); // OnDataSent
+
+ // Server acks the request.
+ ProcessPacket(ConstructServerAckPacket(1, 0, 0));
+
+ // Server sends the response headers.
+ SpdyHeaderBlock response_headers = ConstructResponseHeaders("200");
+ size_t spdy_response_headers_frame_length;
+ QuicStreamOffset offset = 0;
+ ProcessPacket(ConstructResponseHeadersPacket(
+ 2, !kFin, response_headers, &spdy_response_headers_frame_length,
+ &offset));
+
+ delegate->WaitUntilNextCallback(); // OnHeadersReceived
+ TestCompletionCallback cb;
+ int rv = delegate->ReadData(cb.callback());
+ EXPECT_EQ(ERR_IO_PENDING, rv);
+ EXPECT_EQ("200", delegate->response_headers().find(":status")->second);
+ const char kResponseBody[] = "Hello world!";
+ // Server sends data.
+ ProcessPacket(
+ ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody));
+
+ EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult());
+
+ size_t spdy_trailers_frame_length;
+ SpdyHeaderBlock trailers;
+ trailers["foo"] = "bar";
+ trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody));
+ // Server sends trailers.
+ ProcessPacket(ConstructResponseTrailersPacket(
+ 4, kFin, trailers, &spdy_trailers_frame_length, &offset));
+
+ delegate->WaitUntilNextCallback(); // OnTrailersReceived
+ trailers.erase(kFinalOffsetHeaderKey);
+ EXPECT_EQ(trailers, delegate->trailers());
+ EXPECT_EQ(OK, delegate->ReadData(cb.callback()));
+
+ EXPECT_EQ(1, delegate->on_data_read_count());
+ EXPECT_EQ(1, delegate->on_data_sent_count());
+ EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol());
+ EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length +
+ strlen(kUploadData)),
+ delegate->GetTotalSentBytes());
+ EXPECT_EQ(
+ static_cast<int64_t>(spdy_response_headers_frame_length +
+ strlen(kResponseBody) + spdy_trailers_frame_length),
+ delegate->GetTotalReceivedBytes());
+}
+
+TEST_P(BidirectionalStreamQuicImplTest, PutRequest) {
+ SetRequest("PUT", "/", DEFAULT_PRIORITY);
+ size_t spdy_request_headers_frame_length;
+ AddWrite(ConstructRequestHeadersPacket(1, !kFin, DEFAULT_PRIORITY,
+ &spdy_request_headers_frame_length));
+ AddWrite(ConstructDataPacket(2, kIncludeVersion, kFin, 0, kUploadData,
+ &client_maker_));
+ AddWrite(ConstructClientAckPacket(3, 3, 1));
+
+ Initialize();
+
+ BidirectionalStreamRequestInfo request;
+ request.method = "PUT";
+ request.url = GURL("http://www.google.com/");
+ request.end_stream_on_headers = false;
+ request.priority = DEFAULT_PRIORITY;
+
+ scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
+ std::unique_ptr<TestDelegateBase> delegate(
+ new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+ delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
delegate->WaitUntilNextCallback(); // OnStreamReady
// Send a DATA frame.
@@ -1084,6 +1178,7 @@ TEST_P(BidirectionalStreamQuicImplTest, InterleaveReadDataAndSendData) {
std::unique_ptr<TestDelegateBase> delegate(
new TestDelegateBase(read_buffer.get(), kReadBufferSize));
delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
+ ConfirmHandshake();
delegate->WaitUntilNextCallback(); // OnStreamReady
// Server acks the request.
@@ -1163,6 +1258,7 @@ TEST_P(BidirectionalStreamQuicImplTest, ServerSendsRstAfterHeaders) {
new TestDelegateBase(read_buffer.get(), kReadBufferSize));
delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
delegate->WaitUntilNextCallback(); // OnStreamReady
+ ConfirmHandshake();
// Server sends a Rst.
ProcessPacket(ConstructServerRstStreamPacket(1));
@@ -1202,6 +1298,7 @@ TEST_P(BidirectionalStreamQuicImplTest, ServerSendsRstAfterReadData) {
new TestDelegateBase(read_buffer.get(), kReadBufferSize));
delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
delegate->WaitUntilNextCallback(); // OnStreamReady
+ ConfirmHandshake();
// Server acks the request.
ProcessPacket(ConstructServerAckPacket(1, 0, 0));
@@ -1259,6 +1356,7 @@ TEST_P(BidirectionalStreamQuicImplTest, CancelStreamAfterSendData) {
std::unique_ptr<TestDelegateBase> delegate(
new TestDelegateBase(read_buffer.get(), kReadBufferSize));
delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
+ ConfirmHandshake();
delegate->WaitUntilNextCallback(); // OnStreamReady
// Server acks the request.
@@ -1314,6 +1412,7 @@ TEST_P(BidirectionalStreamQuicImplTest, SessionClosedBeforeReadData) {
std::unique_ptr<TestDelegateBase> delegate(
new TestDelegateBase(read_buffer.get(), kReadBufferSize));
delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
+ ConfirmHandshake();
delegate->WaitUntilNextCallback(); // OnStreamReady
// Server acks the request.
@@ -1372,6 +1471,7 @@ TEST_P(BidirectionalStreamQuicImplTest, CancelStreamAfterReadData) {
std::unique_ptr<TestDelegateBase> delegate(
new TestDelegateBase(read_buffer.get(), kReadBufferSize));
delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
+ ConfirmHandshake();
delegate->WaitUntilNextCallback(); // OnStreamReady
// Server acks the request.
@@ -1422,6 +1522,7 @@ TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamDuringOnHeadersReceived) {
new DeleteStreamDelegate(read_buffer.get(), kReadBufferSize,
DeleteStreamDelegate::ON_HEADERS_RECEIVED));
delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
+ ConfirmHandshake();
delegate->WaitUntilNextCallback(); // OnStreamReady
// Server acks the request.
@@ -1464,6 +1565,7 @@ TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamDuringOnDataRead) {
std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate(
read_buffer.get(), kReadBufferSize, DeleteStreamDelegate::ON_DATA_READ));
delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
+ ConfirmHandshake();
delegate->WaitUntilNextCallback(); // OnStreamReady
// Server acks the request.
« no previous file with comments | « net/quic/bidirectional_stream_quic_impl.cc ('k') | net/quic/quic_chromium_client_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698