mock_crypto_client_stream.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
1// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "net/quic/test_tools/mock_crypto_client_stream.h" 6 7#include "net/quic/quic_session_key.h" 8#include "net/ssl/ssl_info.h" 9#include "testing/gtest/include/gtest/gtest.h" 10 11namespace net { 12 13MockCryptoClientStream::MockCryptoClientStream( 14 const QuicSessionKey& server_key, 15 QuicSession* session, 16 QuicCryptoClientConfig* crypto_config, 17 HandshakeMode handshake_mode, 18 const SSLInfo* ssl_info) 19 : QuicCryptoClientStream(server_key, session, crypto_config), 20 handshake_mode_(handshake_mode), 21 ssl_info_(ssl_info) { 22} 23 24MockCryptoClientStream::~MockCryptoClientStream() { 25} 26 27void MockCryptoClientStream::OnHandshakeMessage( 28 const CryptoHandshakeMessage& message) { 29 CloseConnection(QUIC_CRYPTO_MESSAGE_AFTER_HANDSHAKE_COMPLETE); 30} 31 32bool MockCryptoClientStream::CryptoConnect() { 33 switch (handshake_mode_) { 34 case ZERO_RTT: { 35 encryption_established_ = true; 36 handshake_confirmed_ = false; 37 session()->OnCryptoHandshakeEvent( 38 QuicSession::ENCRYPTION_FIRST_ESTABLISHED); 39 break; 40 } 41 42 case CONFIRM_HANDSHAKE: { 43 encryption_established_ = true; 44 handshake_confirmed_ = true; 45 SetConfigNegotiated(); 46 session()->OnCryptoHandshakeEvent(QuicSession::HANDSHAKE_CONFIRMED); 47 break; 48 } 49 50 case COLD_START: { 51 handshake_confirmed_ = false; 52 encryption_established_ = false; 53 break; 54 } 55 } 56 return true; 57} 58 59bool MockCryptoClientStream::GetSSLInfo(SSLInfo* ssl_info) { 60 ssl_info->Reset(); 61 if (!ssl_info_) { 62 return false; 63 } 64 *ssl_info = *ssl_info_; 65 return true; 66} 67 68void MockCryptoClientStream::SendOnCryptoHandshakeEvent( 69 QuicSession::CryptoHandshakeEvent event) { 70 encryption_established_ = true; 71 if (event == QuicSession::HANDSHAKE_CONFIRMED) { 72 handshake_confirmed_ = true; 73 SetConfigNegotiated(); 74 } 75 session()->OnCryptoHandshakeEvent(event); 76} 77 78void MockCryptoClientStream::SetConfigNegotiated() { 79 ASSERT_FALSE(session()->config()->negotiated()); 80 QuicTagVector cgst; 81 cgst.push_back(kINAR); 82 cgst.push_back(kQBIC); 83 session()->config()->set_congestion_control(cgst, kQBIC); 84 session()->config()->set_idle_connection_state_lifetime( 85 QuicTime::Delta::FromSeconds(2 * kDefaultTimeoutSecs), 86 QuicTime::Delta::FromSeconds(kDefaultTimeoutSecs)); 87 session()->config()->set_max_streams_per_connection( 88 2 * kDefaultMaxStreamsPerConnection, kDefaultMaxStreamsPerConnection); 89 90 CryptoHandshakeMessage msg; 91 session()->config()->ToHandshakeMessage(&msg); 92 string error_details; 93 const QuicErrorCode error = 94 session()->config()->ProcessClientHello(msg, &error_details); 95 ASSERT_EQ(QUIC_NO_ERROR, error); 96 ASSERT_TRUE(session()->config()->negotiated()); 97} 98 99} // namespace net 100