| Index: net/socket/ssl_client_socket_snapstart_unittest.cc
|
| diff --git a/net/socket/ssl_client_socket_snapstart_unittest.cc b/net/socket/ssl_client_socket_snapstart_unittest.cc
|
| index 25c2b1f30d6c0a1fa5fb2cad886731fa1ed331a2..e72521c8b70280d2c3b98ee73fad598d479ff018 100644
|
| --- a/net/socket/ssl_client_socket_snapstart_unittest.cc
|
| +++ b/net/socket/ssl_client_socket_snapstart_unittest.cc
|
| @@ -225,6 +225,8 @@ class SSLClientSocketSnapStartTest : public PlatformTest {
|
| EXPECT_EQ(8, rv);
|
| EXPECT_TRUE(memcmp(reply_buffer->data(), "goodbye!", 8) == 0);
|
|
|
| + next_proto_status_ = sock->GetNextProto(&next_proto_);
|
| +
|
| sock->Disconnect();
|
| }
|
|
|
| @@ -265,6 +267,8 @@ class SSLClientSocketSnapStartTest : public PlatformTest {
|
| int client_;
|
| SSLConfig ssl_config_;
|
| CapturingNetLog log_;
|
| + SSLClientSocket::NextProtoStatus next_proto_status_;
|
| + std::string next_proto_;
|
| };
|
|
|
| TEST_F(SSLClientSocketSnapStartTest, Basic) {
|
| @@ -317,4 +321,45 @@ TEST_F(SSLClientSocketSnapStartTest, SnapStartResumeRecovery) {
|
| EXPECT_TRUE(DidMerge());
|
| }
|
|
|
| +TEST_F(SSLClientSocketSnapStartTest, SnapStartWithNPN) {
|
| + ssl_config_.next_protos.assign("\003foo\003bar");
|
| + StartSnapStartServer("snap-start", "npn", NULL);
|
| + PerformConnection();
|
| + EXPECT_EQ(SSLClientSocket::kNextProtoNegotiated, next_proto_status_);
|
| + EXPECT_EQ("foo", next_proto_);
|
| + EXPECT_EQ(SSL_SNAP_START_NONE, SnapStartEventType());
|
| + EXPECT_FALSE(DidMerge());
|
| + SSLClientSocketNSS::ClearSessionCache();
|
| + PerformConnection();
|
| + EXPECT_EQ(SSL_SNAP_START_FULL, SnapStartEventType());
|
| + EXPECT_EQ(SSLClientSocket::kNextProtoNegotiated, next_proto_status_);
|
| + EXPECT_EQ("foo", next_proto_);
|
| + EXPECT_TRUE(DidMerge());
|
| +}
|
| +
|
| +TEST_F(SSLClientSocketSnapStartTest, SnapStartWithNPNMispredict) {
|
| + // This tests that we recover in the event of a misprediction.
|
| + ssl_config_.next_protos.assign("\003foo\003baz");
|
| + StartSnapStartServer("snap-start", "npn-mispredict", NULL);
|
| + PerformConnection();
|
| + EXPECT_EQ(SSLClientSocket::kNextProtoNegotiated, next_proto_status_);
|
| + EXPECT_EQ("foo", next_proto_);
|
| + EXPECT_EQ(SSL_SNAP_START_NONE, SnapStartEventType());
|
| + EXPECT_FALSE(DidMerge());
|
| +
|
| + SSLClientSocketNSS::ClearSessionCache();
|
| + PerformConnection();
|
| + EXPECT_EQ(SSL_SNAP_START_RECOVERY, SnapStartEventType());
|
| + EXPECT_EQ(SSLClientSocket::kNextProtoNegotiated, next_proto_status_);
|
| + EXPECT_EQ("baz", next_proto_);
|
| + EXPECT_TRUE(DidMerge());
|
| +
|
| + SSLClientSocketNSS::ClearSessionCache();
|
| + PerformConnection();
|
| + EXPECT_EQ(SSL_SNAP_START_FULL, SnapStartEventType());
|
| + EXPECT_EQ(SSLClientSocket::kNextProtoNegotiated, next_proto_status_);
|
| + EXPECT_EQ("baz", next_proto_);
|
| + EXPECT_TRUE(DidMerge());
|
| +}
|
| +
|
| } // namespace net
|
|
|