Home | History | Annotate | Download | only in engine
      1 // Copyright 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 GOOGLE_APIS_GCM_ENGINE_FAKE_CONNECTION_HANDLER_H_
      6 #define GOOGLE_APIS_GCM_ENGINE_FAKE_CONNECTION_HANDLER_H_
      7 
      8 #include <list>
      9 
     10 #include "google_apis/gcm/base/mcs_message.h"
     11 #include "google_apis/gcm/engine/connection_handler.h"
     12 
     13 namespace gcm {
     14 
     15 // A fake implementation of a ConnectionHandler that can arbitrarily receive
     16 // messages and verify expectations for outgoing messages.
     17 class FakeConnectionHandler : public ConnectionHandler {
     18  public:
     19   FakeConnectionHandler(
     20       const ConnectionHandler::ProtoReceivedCallback& read_callback,
     21       const ConnectionHandler::ProtoSentCallback& write_callback);
     22   virtual ~FakeConnectionHandler();
     23 
     24   // ConnectionHandler implementation.
     25   virtual void Init(const mcs_proto::LoginRequest& login_request,
     26                     net::StreamSocket* socket) OVERRIDE;
     27   virtual void Reset() OVERRIDE;
     28   virtual bool CanSendMessage() const OVERRIDE;
     29   virtual void SendMessage(const google::protobuf::MessageLite& message)
     30       OVERRIDE;
     31 
     32   // EXPECT's receipt of |message| via SendMessage(..).
     33   void ExpectOutgoingMessage(const MCSMessage& message);
     34 
     35   // Reset the expected outgoing messages.
     36   void ResetOutgoingMessageExpectations();
     37 
     38   // Whether all expected outgoing messages have been received;
     39   bool AllOutgoingMessagesReceived() const;
     40 
     41   // Passes on |message| to |write_callback_|.
     42   void ReceiveMessage(const MCSMessage& message);
     43 
     44   // Whether to return an error with the next login response.
     45   void set_fail_login(bool fail_login) {
     46     fail_login_ = fail_login;
     47   }
     48 
     49   // Whether to invoke the write callback on the next send attempt or fake a
     50   // connection error instead.
     51   void set_fail_send(bool fail_send) {
     52     fail_send_ = fail_send;
     53   }
     54 
     55  private:
     56   ConnectionHandler::ProtoReceivedCallback read_callback_;
     57   ConnectionHandler::ProtoSentCallback write_callback_;
     58 
     59   std::list<MCSMessage> expected_outgoing_messages_;
     60 
     61   // Whether to fail the login or not.
     62   bool fail_login_;
     63 
     64   // Whether to fail a SendMessage call or not.
     65   bool fail_send_;
     66 
     67   // Whether a successful login has completed.
     68   bool initialized_;
     69 
     70   DISALLOW_COPY_AND_ASSIGN(FakeConnectionHandler);
     71 };
     72 
     73 }  // namespace gcm
     74 
     75 #endif  // GOOGLE_APIS_GCM_ENGINE_FAKE_CONNECTION_HANDLER_H_
     76