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#ifndef NET_QUIC_TEST_TOOLS_MOCK_CRYPTO_CLIENT_STREAM_H_
6#define NET_QUIC_TEST_TOOLS_MOCK_CRYPTO_CLIENT_STREAM_H_
7
8#include <string>
9
10#include "net/quic/crypto/crypto_handshake.h"
11#include "net/quic/crypto/crypto_protocol.h"
12#include "net/quic/quic_crypto_client_stream.h"
13#include "net/quic/quic_session.h"
14
15namespace net {
16
17class QuicServerId;
18
19class MockCryptoClientStream : public QuicCryptoClientStream {
20 public:
21  // HandshakeMode enumerates the handshake mode MockCryptoClientStream should
22  // mock in CryptoConnect.
23  enum HandshakeMode {
24    // CONFIRM_HANDSHAKE indicates that CryptoConnect will immediately confirm
25    // the handshake and establish encryption.  This behavior will never happen
26    // in the field, but is convenient for higher level tests.
27    CONFIRM_HANDSHAKE,
28
29    // ZERO_RTT indicates that CryptoConnect will establish encryption but will
30    // not confirm the handshake.
31    ZERO_RTT,
32
33    // COLD_START indicates that CryptoConnect will neither establish encryption
34    // nor confirm the handshake
35    COLD_START,
36  };
37
38  MockCryptoClientStream(
39      const QuicServerId& server_id,
40      QuicClientSessionBase* session,
41      ProofVerifyContext* verify_context,
42      QuicCryptoClientConfig* crypto_config,
43      HandshakeMode handshake_mode,
44      const ProofVerifyDetails* proof_verify_details_);
45  virtual ~MockCryptoClientStream();
46
47  // CryptoFramerVisitorInterface implementation.
48  virtual void OnHandshakeMessage(
49      const CryptoHandshakeMessage& message) OVERRIDE;
50
51  // QuicCryptoClientStream implementation.
52  virtual bool CryptoConnect() OVERRIDE;
53
54  // Invokes the sessions's CryptoHandshakeEvent method with the specified
55  // event.
56  void SendOnCryptoHandshakeEvent(QuicSession::CryptoHandshakeEvent event);
57
58  HandshakeMode handshake_mode_;
59
60 private:
61  void SetConfigNegotiated();
62  QuicClientSessionBase* client_session();
63
64  const ProofVerifyDetails* proof_verify_details_;
65
66  DISALLOW_COPY_AND_ASSIGN(MockCryptoClientStream);
67};
68
69}  // namespace net
70
71#endif  // NET_QUIC_TEST_TOOLS_MOCK_CRYPTO_CLIENT_STREAM_H_
72