Home | History | Annotate | Download | only in protocol
      1 // Copyright (c) 2012 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 REMOTING_PROTOCOL_PROTOCOL_MOCK_OBJECTS_H_
      6 #define REMOTING_PROTOCOL_PROTOCOL_MOCK_OBJECTS_H_
      7 
      8 #include <map>
      9 #include <string>
     10 
     11 #include "base/location.h"
     12 #include "base/single_thread_task_runner.h"
     13 #include "base/values.h"
     14 #include "net/base/ip_endpoint.h"
     15 #include "remoting/proto/internal.pb.h"
     16 #include "remoting/proto/video.pb.h"
     17 #include "remoting/protocol/authenticator.h"
     18 #include "remoting/protocol/client_stub.h"
     19 #include "remoting/protocol/clipboard_stub.h"
     20 #include "remoting/protocol/connection_to_client.h"
     21 #include "remoting/protocol/host_stub.h"
     22 #include "remoting/protocol/input_stub.h"
     23 #include "remoting/protocol/pairing_registry.h"
     24 #include "remoting/protocol/session.h"
     25 #include "remoting/protocol/session_manager.h"
     26 #include "remoting/protocol/transport.h"
     27 #include "remoting/protocol/video_stub.h"
     28 #include "testing/gmock/include/gmock/gmock.h"
     29 
     30 namespace remoting {
     31 namespace protocol {
     32 
     33 class MockConnectionToClient : public ConnectionToClient {
     34  public:
     35   MockConnectionToClient(Session* session,
     36                          HostStub* host_stub);
     37   virtual ~MockConnectionToClient();
     38 
     39   MOCK_METHOD1(Init, void(Session* session));
     40   MOCK_METHOD0(video_stub, VideoStub*());
     41   MOCK_METHOD0(client_stub, ClientStub*());
     42   MOCK_METHOD0(session, Session*());
     43   MOCK_METHOD0(Disconnect, void());
     44 
     45  private:
     46   DISALLOW_COPY_AND_ASSIGN(MockConnectionToClient);
     47 };
     48 
     49 class MockConnectionToClientEventHandler :
     50       public ConnectionToClient::EventHandler {
     51  public:
     52   MockConnectionToClientEventHandler();
     53   virtual ~MockConnectionToClientEventHandler();
     54 
     55   MOCK_METHOD1(OnConnectionAuthenticated, void(ConnectionToClient* connection));
     56   MOCK_METHOD1(OnConnectionChannelsConnected,
     57                void(ConnectionToClient* connection));
     58   MOCK_METHOD2(OnConnectionClosed, void(ConnectionToClient* connection,
     59                                         ErrorCode error));
     60   MOCK_METHOD2(OnSequenceNumberUpdated, void(ConnectionToClient* connection,
     61                                              int64 sequence_number));
     62   MOCK_METHOD3(OnRouteChange, void(ConnectionToClient* connection,
     63                                    const std::string& channel_name,
     64                                    const TransportRoute& route));
     65 
     66  private:
     67   DISALLOW_COPY_AND_ASSIGN(MockConnectionToClientEventHandler);
     68 };
     69 
     70 class MockClipboardStub : public ClipboardStub {
     71  public:
     72   MockClipboardStub();
     73   virtual ~MockClipboardStub();
     74 
     75   MOCK_METHOD1(InjectClipboardEvent, void(const ClipboardEvent& event));
     76 
     77  private:
     78   DISALLOW_COPY_AND_ASSIGN(MockClipboardStub);
     79 };
     80 
     81 class MockCursorShapeChangeCallback {
     82  public:
     83   MockCursorShapeChangeCallback();
     84   virtual ~MockCursorShapeChangeCallback();
     85 
     86   MOCK_METHOD1(CursorShapeChangedPtr, void(CursorShapeInfo* info));
     87   void CursorShapeChanged(scoped_ptr<CursorShapeInfo> info);
     88 
     89  private:
     90   DISALLOW_COPY_AND_ASSIGN(MockCursorShapeChangeCallback);
     91 };
     92 
     93 class MockInputStub : public InputStub {
     94  public:
     95   MockInputStub();
     96   virtual ~MockInputStub();
     97 
     98   MOCK_METHOD1(InjectKeyEvent, void(const KeyEvent& event));
     99   MOCK_METHOD1(InjectMouseEvent, void(const MouseEvent& event));
    100 
    101  private:
    102   DISALLOW_COPY_AND_ASSIGN(MockInputStub);
    103 };
    104 
    105 class MockHostStub : public HostStub {
    106  public:
    107   MockHostStub();
    108   virtual ~MockHostStub();
    109 
    110   MOCK_METHOD1(NotifyClientResolution,
    111                void(const ClientResolution& resolution));
    112   MOCK_METHOD1(ControlVideo, void(const VideoControl& video_control));
    113   MOCK_METHOD1(ControlAudio, void(const AudioControl& audio_control));
    114   MOCK_METHOD1(SetCapabilities, void(const Capabilities& capabilities));
    115   MOCK_METHOD1(RequestPairing,
    116                void(const PairingRequest& pairing_request));
    117   MOCK_METHOD1(DeliverClientMessage, void(const ExtensionMessage& message));
    118 
    119  private:
    120   DISALLOW_COPY_AND_ASSIGN(MockHostStub);
    121 };
    122 
    123 class MockClientStub : public ClientStub {
    124  public:
    125   MockClientStub();
    126   virtual ~MockClientStub();
    127 
    128   // ClientStub mock implementation.
    129   MOCK_METHOD1(SetCapabilities, void(const Capabilities& capabilities));
    130   MOCK_METHOD1(SetPairingResponse,
    131                void(const PairingResponse& pairing_response));
    132   MOCK_METHOD1(DeliverHostMessage, void(const ExtensionMessage& message));
    133 
    134   // ClipboardStub mock implementation.
    135   MOCK_METHOD1(InjectClipboardEvent, void(const ClipboardEvent& event));
    136 
    137   // CursorShapeStub mock implementation.
    138   MOCK_METHOD1(SetCursorShape, void(const CursorShapeInfo& cursor_shape));
    139 
    140  private:
    141   DISALLOW_COPY_AND_ASSIGN(MockClientStub);
    142 };
    143 
    144 class MockVideoStub : public VideoStub {
    145  public:
    146   MockVideoStub();
    147   virtual ~MockVideoStub();
    148 
    149   MOCK_METHOD2(ProcessVideoPacketPtr, void(const VideoPacket* video_packet,
    150                                            const base::Closure& done));
    151   virtual void ProcessVideoPacket(scoped_ptr<VideoPacket> video_packet,
    152                                   const base::Closure& done) {
    153     ProcessVideoPacketPtr(video_packet.get(), done);
    154   }
    155 
    156  private:
    157   DISALLOW_COPY_AND_ASSIGN(MockVideoStub);
    158 };
    159 
    160 class MockSession : public Session {
    161  public:
    162   MockSession();
    163   virtual ~MockSession();
    164 
    165   MOCK_METHOD1(SetEventHandler, void(Session::EventHandler* event_handler));
    166   MOCK_METHOD0(error, ErrorCode());
    167   MOCK_METHOD0(GetTransportChannelFactory, ChannelFactory*());
    168   MOCK_METHOD0(GetMultiplexedChannelFactory, ChannelFactory*());
    169   MOCK_METHOD0(jid, const std::string&());
    170   MOCK_METHOD0(candidate_config, const CandidateSessionConfig*());
    171   MOCK_METHOD0(config, const SessionConfig&());
    172   MOCK_METHOD1(set_config, void(const SessionConfig& config));
    173   MOCK_METHOD0(initiator_token, const std::string&());
    174   MOCK_METHOD1(set_initiator_token, void(const std::string& initiator_token));
    175   MOCK_METHOD0(receiver_token, const std::string&());
    176   MOCK_METHOD1(set_receiver_token, void(const std::string& receiver_token));
    177   MOCK_METHOD1(set_shared_secret, void(const std::string& secret));
    178   MOCK_METHOD0(shared_secret, const std::string&());
    179   MOCK_METHOD0(Close, void());
    180 
    181  private:
    182   DISALLOW_COPY_AND_ASSIGN(MockSession);
    183 };
    184 
    185 class MockSessionManager : public SessionManager {
    186  public:
    187   MockSessionManager();
    188   virtual ~MockSessionManager();
    189 
    190   MOCK_METHOD2(Init, void(SignalStrategy*, Listener*));
    191   MOCK_METHOD3(ConnectPtr, Session*(
    192       const std::string& host_jid,
    193       Authenticator* authenticator,
    194       CandidateSessionConfig* config));
    195   MOCK_METHOD0(Close, void());
    196   MOCK_METHOD1(set_authenticator_factory_ptr,
    197                void(AuthenticatorFactory* factory));
    198   virtual scoped_ptr<Session> Connect(
    199       const std::string& host_jid,
    200       scoped_ptr<Authenticator> authenticator,
    201       scoped_ptr<CandidateSessionConfig> config) {
    202     return scoped_ptr<Session>(ConnectPtr(
    203         host_jid, authenticator.get(), config.get()));
    204   }
    205   virtual void set_authenticator_factory(
    206       scoped_ptr<AuthenticatorFactory> authenticator_factory) {
    207     set_authenticator_factory_ptr(authenticator_factory.release());
    208   }
    209 
    210  private:
    211   DISALLOW_COPY_AND_ASSIGN(MockSessionManager);
    212 };
    213 
    214 // Simple delegate that caches information on paired clients in memory.
    215 class MockPairingRegistryDelegate : public PairingRegistry::Delegate {
    216  public:
    217   MockPairingRegistryDelegate();
    218   virtual ~MockPairingRegistryDelegate();
    219 
    220   // PairingRegistry::Delegate implementation.
    221   virtual scoped_ptr<base::ListValue> LoadAll() OVERRIDE;
    222   virtual bool DeleteAll() OVERRIDE;
    223   virtual protocol::PairingRegistry::Pairing Load(
    224       const std::string& client_id) OVERRIDE;
    225   virtual bool Save(const protocol::PairingRegistry::Pairing& pairing) OVERRIDE;
    226   virtual bool Delete(const std::string& client_id) OVERRIDE;
    227 
    228  private:
    229   typedef std::map<std::string, protocol::PairingRegistry::Pairing> Pairings;
    230   Pairings pairings_;
    231 };
    232 
    233 class SynchronousPairingRegistry : public PairingRegistry {
    234  public:
    235   explicit SynchronousPairingRegistry(scoped_ptr<Delegate> delegate);
    236 
    237  protected:
    238   virtual ~SynchronousPairingRegistry();
    239 
    240   // Runs tasks synchronously instead of posting them to |task_runner|.
    241   virtual void PostTask(
    242       const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
    243       const tracked_objects::Location& from_here,
    244       const base::Closure& task) OVERRIDE;
    245 };
    246 
    247 }  // namespace protocol
    248 }  // namespace remoting
    249 
    250 #endif  // REMOTING_PROTOCOL_PROTOCOL_MOCK_OBJECTS_H_
    251