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