12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef NET_QUIC_TEST_TOOLS_MOCK_CRYPTO_CLIENT_STREAM_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define NET_QUIC_TEST_TOOLS_MOCK_CRYPTO_CLIENT_STREAM_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/quic/crypto/crypto_handshake.h"
113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "net/quic/crypto/crypto_protocol.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/quic/quic_crypto_client_stream.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/quic/quic_session.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace net {
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
17e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass QuicServerId;
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockCryptoClientStream : public QuicCryptoClientStream {
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // HandshakeMode enumerates the handshake mode MockCryptoClientStream should
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // mock in CryptoConnect.
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  enum HandshakeMode {
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // CONFIRM_HANDSHAKE indicates that CryptoConnect will immediately confirm
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // the handshake and establish encryption.  This behavior will never happen
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // in the field, but is convenient for higher level tests.
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    CONFIRM_HANDSHAKE,
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // ZERO_RTT indicates that CryptoConnect will establish encryption but will
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // not confirm the handshake.
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ZERO_RTT,
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // COLD_START indicates that CryptoConnect will neither establish encryption
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // nor confirm the handshake
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    COLD_START,
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  };
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  MockCryptoClientStream(
39e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      const QuicServerId& server_id,
40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      QuicClientSessionBase* session,
41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      ProofVerifyContext* verify_context,
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      QuicCryptoClientConfig* crypto_config,
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      HandshakeMode handshake_mode,
4423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      const ProofVerifyDetails* proof_verify_details_);
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~MockCryptoClientStream();
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // CryptoFramerVisitorInterface implementation.
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnHandshakeMessage(
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const CryptoHandshakeMessage& message) OVERRIDE;
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // QuicCryptoClientStream implementation.
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool CryptoConnect() OVERRIDE;
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Invokes the sessions's CryptoHandshakeEvent method with the specified
553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // event.
563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void SendOnCryptoHandshakeEvent(QuicSession::CryptoHandshakeEvent event);
573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  HandshakeMode handshake_mode_;
59ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
60ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch private:
61ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  void SetConfigNegotiated();
62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  QuicClientSessionBase* client_session();
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
6423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  const ProofVerifyDetails* proof_verify_details_;
650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  DISALLOW_COPY_AND_ASSIGN(MockCryptoClientStream);
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace net
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // NET_QUIC_TEST_TOOLS_MOCK_CRYPTO_CLIENT_STREAM_H_
72