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

Unified Diff: net/quic/chromium/quic_chromium_client_session_test.cc

Issue 2844493002: QuicChromiumClientSession::StreamRequest to be created by the session (Closed)
Patch Set: Rebase Created 3 years, 8 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/chromium/quic_chromium_client_session.cc ('k') | net/quic/chromium/quic_http_stream.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/chromium/quic_chromium_client_session_test.cc
diff --git a/net/quic/chromium/quic_chromium_client_session_test.cc b/net/quic/chromium/quic_chromium_client_session_test.cc
index 2c4c58286f2fd58b22e34112ad7bc2104da6bd2e..ffae007acabad7d72db61bafc0c80285757dfc2c 100644
--- a/net/quic/chromium/quic_chromium_client_session_test.cc
+++ b/net/quic/chromium/quic_chromium_client_session_test.cc
@@ -18,6 +18,7 @@
#include "net/log/test_net_log.h"
#include "net/quic/chromium/crypto/proof_verifier_chromium.h"
#include "net/quic/chromium/mock_crypto_client_stream_factory.h"
+#include "net/quic/chromium/mock_quic_data.h"
#include "net/quic/chromium/quic_chromium_alarm_factory.h"
#include "net/quic/chromium/quic_chromium_client_session_peer.h"
#include "net/quic/chromium/quic_chromium_connection_helper.h"
@@ -103,7 +104,8 @@ class QuicChromiumClientSessionTest
}
void Initialize() {
- socket_factory_.AddSocketDataProvider(socket_data_.get());
+ if (socket_data_)
+ socket_factory_.AddSocketDataProvider(socket_data_.get());
std::unique_ptr<DatagramClientSocket> socket =
socket_factory_.CreateDatagramClientSocket(DatagramSocket::DEFAULT_BIND,
base::Bind(&base::RandInt),
@@ -193,6 +195,129 @@ TEST_P(QuicChromiumClientSessionTest, CryptoConnect) {
CompleteCryptoHandshake();
}
+TEST_P(QuicChromiumClientSessionTest, StreamRequest) {
+ MockQuicData quic_data;
+ quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
+ quic_data.AddRead(ASYNC, ERR_IO_PENDING);
+ quic_data.AddRead(ASYNC, OK); // EOF
+ quic_data.AddSocketDataToFactory(&socket_factory_);
+
+ Initialize();
+ CompleteCryptoHandshake();
+
+ // Request a stream and verify that a stream was created.
+ std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
+ session_->CreateStreamRequest();
+ TestCompletionCallback callback;
+ ASSERT_EQ(OK, stream_request->StartRequest(callback.callback()));
+ EXPECT_TRUE(stream_request->ReleaseStream() != nullptr);
+
+ quic_data.Resume();
+ EXPECT_TRUE(quic_data.AllReadDataConsumed());
+ EXPECT_TRUE(quic_data.AllWriteDataConsumed());
+}
+
+TEST_P(QuicChromiumClientSessionTest, CancelStreamRequestBeforeRelease) {
+ MockQuicData quic_data;
+ quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
+ quic_data.AddWrite(client_maker_.MakeRstPacket(2, true, kClientDataStreamId1,
+ QUIC_STREAM_CANCELLED));
+ quic_data.AddRead(ASYNC, ERR_IO_PENDING);
+ quic_data.AddRead(ASYNC, OK); // EOF
+ quic_data.AddSocketDataToFactory(&socket_factory_);
+
+ Initialize();
+ CompleteCryptoHandshake();
+
+ // Request a stream and cancel it without releasing the stream.
+ std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
+ session_->CreateStreamRequest();
+ TestCompletionCallback callback;
+ ASSERT_EQ(OK, stream_request->StartRequest(callback.callback()));
+ stream_request.reset();
+
+ quic_data.Resume();
+ EXPECT_TRUE(quic_data.AllReadDataConsumed());
+ EXPECT_TRUE(quic_data.AllWriteDataConsumed());
+}
+
+TEST_P(QuicChromiumClientSessionTest, AsyncStreamRequest) {
+ MockQuicData quic_data;
+ quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
+ quic_data.AddWrite(client_maker_.MakeRstPacket(2, true, kClientDataStreamId1,
+ QUIC_RST_ACKNOWLEDGEMENT));
+ quic_data.AddRead(ASYNC, ERR_IO_PENDING);
+ quic_data.AddRead(ASYNC, OK); // EOF
+ quic_data.AddSocketDataToFactory(&socket_factory_);
+
+ Initialize();
+ CompleteCryptoHandshake();
+
+ // Open the maximum number of streams so that a subsequent request
+ // can not proceed immediately.
+ const size_t kMaxOpenStreams = session_->max_open_outgoing_streams();
+ for (size_t i = 0; i < kMaxOpenStreams; i++) {
+ session_->CreateOutgoingDynamicStream(kDefaultPriority);
+ }
+ EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams());
+
+ // Request a stream and verify that it's pending.
+ std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
+ session_->CreateStreamRequest();
+ TestCompletionCallback callback;
+ ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
+
+ // Close a stream and ensure the stream request completes.
+ QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_STREAM_CANCELLED, 0);
+ session_->OnRstStream(rst);
+ ASSERT_TRUE(callback.have_result());
+ EXPECT_THAT(callback.WaitForResult(), IsOk());
+ EXPECT_TRUE(stream_request->ReleaseStream() != nullptr);
+
+ quic_data.Resume();
+ EXPECT_TRUE(quic_data.AllReadDataConsumed());
+ EXPECT_TRUE(quic_data.AllWriteDataConsumed());
+}
+
+TEST_P(QuicChromiumClientSessionTest, CancelPendingStreamRequest) {
+ MockQuicData quic_data;
+ quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
+ quic_data.AddWrite(client_maker_.MakeRstPacket(2, true, kClientDataStreamId1,
+ QUIC_RST_ACKNOWLEDGEMENT));
+ quic_data.AddRead(ASYNC, ERR_IO_PENDING);
+ quic_data.AddRead(ASYNC, OK); // EOF
+ quic_data.AddSocketDataToFactory(&socket_factory_);
+
+ Initialize();
+ CompleteCryptoHandshake();
+
+ // Open the maximum number of streams so that a subsequent request
+ // can not proceed immediately.
+ const size_t kMaxOpenStreams = session_->max_open_outgoing_streams();
+ for (size_t i = 0; i < kMaxOpenStreams; i++) {
+ session_->CreateOutgoingDynamicStream(kDefaultPriority);
+ }
+ EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams());
+
+ // Request a stream and verify that it's pending.
+ std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
+ session_->CreateStreamRequest();
+ TestCompletionCallback callback;
+ ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
+
+ // Cancel the pending stream request.
+ stream_request.reset();
+
+ // Close a stream and ensure that no new stream is created.
+ QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_STREAM_CANCELLED, 0);
+ session_->OnRstStream(rst);
+ EXPECT_EQ(kMaxOpenStreams - 1, session_->GetNumOpenOutgoingStreams());
+
+ quic_data.Resume();
+ EXPECT_TRUE(quic_data.AllReadDataConsumed());
+ EXPECT_TRUE(quic_data.AllWriteDataConsumed());
+}
+
TEST_P(QuicChromiumClientSessionTest, MaxNumStreams) {
MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
std::unique_ptr<QuicEncryptedPacket> settings_packet(
@@ -544,12 +669,10 @@ TEST_P(QuicChromiumClientSessionTest, MaxNumStreamsViaRequest) {
streams.push_back(stream);
}
- QuicChromiumClientStream* stream;
- QuicChromiumClientSession::StreamRequest stream_request;
+ std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
+ session_->CreateStreamRequest();
TestCompletionCallback callback;
- ASSERT_EQ(ERR_IO_PENDING,
- stream_request.StartRequest(session_->GetWeakPtr(), &stream,
- callback.callback()));
+ ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
// Close a stream and ensure I can now open a new one.
QuicStreamId stream_id = streams[0]->id();
@@ -558,7 +681,7 @@ TEST_P(QuicChromiumClientSessionTest, MaxNumStreamsViaRequest) {
session_->OnRstStream(rst1);
ASSERT_TRUE(callback.have_result());
EXPECT_THAT(callback.WaitForResult(), IsOk());
- EXPECT_TRUE(stream != nullptr);
+ EXPECT_TRUE(stream_request->ReleaseStream() != nullptr);
}
TEST_P(QuicChromiumClientSessionTest, GoAwayReceived) {
« no previous file with comments | « net/quic/chromium/quic_chromium_client_session.cc ('k') | net/quic/chromium/quic_http_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698