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