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

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

Issue 2334943002: Add a new QuicChromiumClientSession::Handle class (Closed)
Patch Set: cleanup 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
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 2ac521305b457e265ea593dcd845e8d1fbf41ac8..4f17ff73b955db8427bebd141b913c93a02178ee 100644
--- a/net/quic/chromium/quic_chromium_client_session_test.cc
+++ b/net/quic/chromium/quic_chromium_client_session_test.cc
@@ -89,6 +89,7 @@ class QuicChromiumClientSessionTest
new SequencedSocketData(default_read_.get(), 1, nullptr, 0)),
random_(0),
helper_(&clock_, &random_),
+ server_id_(kServerHostname, kServerPort, PRIVACY_MODE_DISABLED),
client_maker_(GetParam(),
0,
&clock_,
@@ -121,8 +122,7 @@ class QuicChromiumClientSessionTest
connection, std::move(socket),
/*stream_factory=*/nullptr, &crypto_client_stream_factory_, &clock_,
&transport_security_state_,
- base::WrapUnique(static_cast<QuicServerInfo*>(nullptr)),
- QuicServerId(kServerHostname, kServerPort, PRIVACY_MODE_DISABLED),
+ base::WrapUnique(static_cast<QuicServerInfo*>(nullptr)), server_id_,
/*require_confirmation=*/false, kQuicYieldAfterPacketsRead,
QuicTime::Delta::FromMilliseconds(kQuicYieldAfterDurationMilliseconds),
/*cert_verify_flags=*/0, DefaultQuicConfig(), &crypto_config_,
@@ -141,7 +141,8 @@ class QuicChromiumClientSessionTest
}
void TearDown() override {
- session_->CloseSessionOnError(ERR_ABORTED, QUIC_INTERNAL_ERROR);
+ if (session_)
+ session_->CloseSessionOnError(ERR_ABORTED, QUIC_INTERNAL_ERROR);
}
void CompleteCryptoHandshake() {
@@ -170,6 +171,7 @@ class QuicChromiumClientSessionTest
TransportSecurityState transport_security_state_;
MockCryptoClientStreamFactory crypto_client_stream_factory_;
QuicClientPushPromiseIndex push_promise_index_;
+ QuicServerId server_id_;
std::unique_ptr<QuicChromiumClientSession> session_;
TestServerPushDelegate test_push_delegate_;
QuicConnectionVisitorInterface* visitor_;
@@ -195,6 +197,111 @@ TEST_P(QuicChromiumClientSessionTest, CryptoConnect) {
CompleteCryptoHandshake();
}
+TEST_P(QuicChromiumClientSessionTest, GetHandle) {
+ 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();
+
+ NetLogWithSource session_net_log = session_->net_log();
+ EXPECT_EQ(NetLogSourceType::QUIC_SESSION, session_net_log.source().type);
+ EXPECT_EQ(&net_log_, session_net_log.net_log());
+
+ QuicChromiumClientSession::Handle handle = session_->GetHandle();
+ EXPECT_TRUE(handle.IsConnected());
+ EXPECT_FALSE(handle.IsCryptoHandshakeConfirmed());
+ EXPECT_EQ(GetParam(), handle.GetQuicVersion());
+ EXPECT_EQ(server_id_, handle.server_id());
+ EXPECT_EQ(session_net_log.source().type, handle.net_log().source().type);
+ EXPECT_EQ(session_net_log.source().id, handle.net_log().source().id);
+ EXPECT_EQ(session_net_log.net_log(), handle.net_log().net_log());
+ IPEndPoint address;
+ EXPECT_EQ(OK, handle.GetPeerAddress(&address));
+ EXPECT_EQ(kIpEndPoint, address);
+ EXPECT_TRUE(handle.CreatePacketBundler(QuicConnection::NO_ACK).get() !=
+ nullptr);
+ {
+ // Verify that the copy constructor works as expected.
+ QuicChromiumClientSession::Handle handle2(handle);
+ EXPECT_TRUE(handle2.IsConnected());
+ EXPECT_FALSE(handle2.IsCryptoHandshakeConfirmed());
+ }
+
+ CompleteCryptoHandshake();
+
+ EXPECT_TRUE(handle.IsCryptoHandshakeConfirmed());
+
+ // Request a stream and verify that a stream was created.
+ auto stream_request =
+ handle.CreateStreamRequest(/*requires_confirmation=*/false);
+ 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());
+
+ // Veirfy that the handle works correctly after the session is closed.
+ EXPECT_FALSE(handle.IsConnected());
+ EXPECT_TRUE(handle.IsCryptoHandshakeConfirmed());
+ EXPECT_EQ(GetParam(), handle.GetQuicVersion());
+ EXPECT_EQ(server_id_, handle.server_id());
+ EXPECT_EQ(session_net_log.source().type, handle.net_log().source().type);
+ EXPECT_EQ(session_net_log.source().id, handle.net_log().source().id);
+ EXPECT_EQ(session_net_log.net_log(), handle.net_log().net_log());
+ EXPECT_EQ(ERR_CONNECTION_CLOSED, handle.GetPeerAddress(&address));
+ EXPECT_TRUE(handle.CreatePacketBundler(QuicConnection::NO_ACK).get() ==
+ nullptr);
+ {
+ // Verify that the copy constructor works as expected, even after the
+ // session is closed.
+ QuicChromiumClientSession::Handle handle2(handle);
+ EXPECT_FALSE(handle2.IsConnected());
+ EXPECT_TRUE(handle2.IsCryptoHandshakeConfirmed());
+ }
+
+ {
+ // Verify that GetHandle() works even after the session is closed.
+ QuicChromiumClientSession::Handle handle2 = session_->GetHandle();
+ EXPECT_FALSE(handle2.IsConnected());
+ EXPECT_TRUE(handle2.IsCryptoHandshakeConfirmed());
+ }
+
+ auto stream_request2 =
+ handle.CreateStreamRequest(/*requires_confirmation=*/false);
+ ASSERT_EQ(ERR_CONNECTION_CLOSED,
+ stream_request->StartRequest(callback.callback()));
+
+ session_.reset();
+
+ // Veirfy that the handle works correctly after the session is delete.
+ EXPECT_FALSE(handle.IsConnected());
+ EXPECT_TRUE(handle.IsCryptoHandshakeConfirmed());
+ EXPECT_EQ(GetParam(), handle.GetQuicVersion());
+ EXPECT_EQ(server_id_, handle.server_id());
+ EXPECT_EQ(session_net_log.source().type, handle.net_log().source().type);
+ EXPECT_EQ(session_net_log.source().id, handle.net_log().source().id);
+ EXPECT_EQ(session_net_log.net_log(), handle.net_log().net_log());
+ EXPECT_EQ(ERR_CONNECTION_CLOSED, handle.GetPeerAddress(&address));
+ EXPECT_TRUE(handle.CreatePacketBundler(QuicConnection::NO_ACK).get() ==
+ nullptr);
+ auto stream_request3 =
+ handle.CreateStreamRequest(/*requires_confirmation=*/false);
+ ASSERT_EQ(ERR_CONNECTION_CLOSED,
+ stream_request->StartRequest(callback.callback()));
+ {
+ // Verify that the copy constructor works as expected, even after the
+ // session is deleted.
+ QuicChromiumClientSession::Handle handle2(handle);
+ EXPECT_FALSE(handle2.IsConnected());
+ EXPECT_TRUE(handle2.IsCryptoHandshakeConfirmed());
+ }
+}
+
TEST_P(QuicChromiumClientSessionTest, StreamRequest) {
MockQuicData quic_data;
quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
@@ -206,8 +313,9 @@ TEST_P(QuicChromiumClientSessionTest, StreamRequest) {
CompleteCryptoHandshake();
// Request a stream and verify that a stream was created.
+ QuicChromiumClientSession::Handle handle = session_->GetHandle();
std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
- session_->CreateStreamRequest(/*requires_confirmation=*/false);
+ handle.CreateStreamRequest(/*requires_confirmation=*/false);
TestCompletionCallback callback;
ASSERT_EQ(OK, stream_request->StartRequest(callback.callback()));
EXPECT_TRUE(stream_request->ReleaseStream() != nullptr);
@@ -228,8 +336,9 @@ TEST_P(QuicChromiumClientSessionTest, ConfirmationRequiredStreamRequest) {
CompleteCryptoHandshake();
// Request a stream and verify that a stream was created.
+ QuicChromiumClientSession::Handle handle = session_->GetHandle();
std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
- session_->CreateStreamRequest(/*requires_confirmation=*/true);
+ handle.CreateStreamRequest(/*requires_confirmation=*/true);
TestCompletionCallback callback;
ASSERT_EQ(OK, stream_request->StartRequest(callback.callback()));
EXPECT_TRUE(stream_request->ReleaseStream() != nullptr);
@@ -249,8 +358,9 @@ TEST_P(QuicChromiumClientSessionTest, StreamRequestBeforeConfirmation) {
Initialize();
// Request a stream and verify that a stream was created.
+ QuicChromiumClientSession::Handle handle = session_->GetHandle();
std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
- session_->CreateStreamRequest(/*requires_confirmation=*/true);
+ handle.CreateStreamRequest(/*requires_confirmation=*/true);
TestCompletionCallback callback;
ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
@@ -278,8 +388,9 @@ TEST_P(QuicChromiumClientSessionTest, CancelStreamRequestBeforeRelease) {
CompleteCryptoHandshake();
// Request a stream and cancel it without releasing the stream.
+ QuicChromiumClientSession::Handle handle = session_->GetHandle();
std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
- session_->CreateStreamRequest(/*requires_confirmation=*/false);
+ handle.CreateStreamRequest(/*requires_confirmation=*/false);
TestCompletionCallback callback;
ASSERT_EQ(OK, stream_request->StartRequest(callback.callback()));
stream_request.reset();
@@ -310,8 +421,9 @@ TEST_P(QuicChromiumClientSessionTest, AsyncStreamRequest) {
EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams());
// Request a stream and verify that it's pending.
+ QuicChromiumClientSession::Handle handle = session_->GetHandle();
std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
- session_->CreateStreamRequest(/*requires_confirmation=*/false);
+ handle.CreateStreamRequest(/*requires_confirmation=*/false);
TestCompletionCallback callback;
ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
@@ -348,8 +460,9 @@ TEST_P(QuicChromiumClientSessionTest, CancelPendingStreamRequest) {
EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams());
// Request a stream and verify that it's pending.
+ QuicChromiumClientSession::Handle handle = session_->GetHandle();
std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
- session_->CreateStreamRequest(/*requires_confirmation=*/false);
+ handle.CreateStreamRequest(/*requires_confirmation=*/false);
TestCompletionCallback callback;
ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
@@ -379,8 +492,9 @@ TEST_P(QuicChromiumClientSessionTest, ConnectionCloseBeforeStreamRequest) {
base::RunLoop().RunUntilIdle();
// Request a stream and verify that it failed.
+ QuicChromiumClientSession::Handle handle = session_->GetHandle();
std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
- session_->CreateStreamRequest(/*requires_confirmation=*/false);
+ handle.CreateStreamRequest(/*requires_confirmation=*/false);
TestCompletionCallback callback;
ASSERT_EQ(ERR_CONNECTION_CLOSED,
stream_request->StartRequest(callback.callback()));
@@ -398,8 +512,9 @@ TEST_P(QuicChromiumClientSessionTest, ConnectionCloseBeforeHandshakeConfirmed) {
Initialize();
// Request a stream and verify that it's pending.
+ QuicChromiumClientSession::Handle handle = session_->GetHandle();
std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
- session_->CreateStreamRequest(/*requires_confirmation=*/true);
+ handle.CreateStreamRequest(/*requires_confirmation=*/true);
TestCompletionCallback callback;
ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
@@ -433,8 +548,9 @@ TEST_P(QuicChromiumClientSessionTest, ConnectionCloseWithPendingStreamRequest) {
EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams());
// Request a stream and verify that it's pending.
+ QuicChromiumClientSession::Handle handle = session_->GetHandle();
std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
- session_->CreateStreamRequest(/*requires_confirmation=*/false);
+ handle.CreateStreamRequest(/*requires_confirmation=*/false);
TestCompletionCallback callback;
ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
@@ -800,8 +916,9 @@ TEST_P(QuicChromiumClientSessionTest, MaxNumStreamsViaRequest) {
streams.push_back(stream);
}
+ QuicChromiumClientSession::Handle handle = session_->GetHandle();
std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
- session_->CreateStreamRequest(/*requires_confirmation=*/false);
+ handle.CreateStreamRequest(/*requires_confirmation=*/false);
TestCompletionCallback callback;
ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));

Powered by Google App Engine
This is Rietveld 408576698