Add a new mode to MockCryptoClientStream to send CHLO packet on wire on cold start.
This mode can be used in QuicStreamFactoryTest to simulate cases where connection
migraiton is triggered while crypto handshake is not completed.
Bug: 790547
Change-Id: I3c32f156d503318b9a9b203c772d3ec4ed41d9f8
Reviewed-on: https://chromium-review.googlesource.com/1157439
Commit-Queue: Zhongyi Shi <[email protected]>
Reviewed-by: Ryan Hamilton <[email protected]>
Cr-Commit-Position: refs/heads/master@{#580243}
diff --git a/net/quic/mock_crypto_client_stream.cc b/net/quic/mock_crypto_client_stream.cc
index 57ae56a..6631b986 100644
--- a/net/quic/mock_crypto_client_stream.cc
+++ b/net/quic/mock_crypto_client_stream.cc
@@ -43,6 +43,7 @@
using quic::QuicSession;
using quic::QuicSpdyClientSessionBase;
using quic::QuicString;
+using quic::QuicStringPiece;
using quic::QuicTagVector;
using quic::QuicTime;
@@ -163,8 +164,19 @@
break;
}
- case USE_DEFAULT_CRYPTO_STREAM: {
- NOTREACHED();
+ case COLD_START_WITH_CHLO_SENT: {
+ handshake_confirmed_ = false;
+ encryption_established_ = false;
+
+ CryptoHandshakeMessage message = GetDummyCHLOMessage();
+ QUIC_DVLOG(1) << "Sending "
+ << message.DebugString(session()->perspective());
+ session()->NeuterUnencryptedData();
+ session()->OnCryptoHandshakeMessageSent(message);
+ const quic::QuicData& data =
+ message.GetSerialized(session()->perspective());
+ WriteOrBufferData(QuicStringPiece(data.data(), data.length()), false,
+ nullptr);
break;
}
}
@@ -216,6 +228,13 @@
session()->OnCryptoHandshakeEvent(event);
}
+// static
+CryptoHandshakeMessage MockCryptoClientStream::GetDummyCHLOMessage() {
+ CryptoHandshakeMessage message;
+ message.set_tag(quic::kCHLO);
+ return message;
+}
+
void MockCryptoClientStream::SetConfigNegotiated() {
ASSERT_FALSE(session()->config()->negotiated());
QuicTagVector cgst;