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                     scoped_ptr<net::StreamSocket> socket) OVERRIDE;
     27   virtual bool CanSendMessage() const OVERRIDE;
     28   virtual void SendMessage(const google::protobuf::MessageLite& message)
     29       OVERRIDE;
     30 
     31   // EXPECT's receipt of |message| via SendMessage(..).
     32   void ExpectOutgoingMessage(const MCSMessage& message);
     33 
     34   // Reset the expected outgoing messages.
     35   void ResetOutgoingMessageExpectations();
     36 
     37   // Whether all expected outgoing messages have been received;
     38   bool AllOutgoingMessagesReceived() const;
     39 
     40   // Passes on |message| to |write_callback_|.
     41   void ReceiveMessage(const MCSMessage& message);
     42 
     43   // Whether to return an error with the next login response.
     44   void set_fail_login(bool fail_login) {
     45     fail_login_ = fail_login;
     46   }
     47 
     48   // Whether to invoke the write callback on the next send attempt or fake a
     49   // connection error instead.
     50   void set_fail_send(bool fail_send) {
     51     fail_send_ = fail_send;
     52   }
     53 
     54  private:
     55   ConnectionHandler::ProtoReceivedCallback read_callback_;
     56   ConnectionHandler::ProtoSentCallback write_callback_;
     57 
     58   std::list<MCSMessage> expected_outgoing_messages_;
     59 
     60   // Whether to fail the login or not.
     61   bool fail_login_;
     62 
     63   // Whether to fail a SendMessage call or not.
     64   bool fail_send_;
     65 
     66   // Whether a successful login has completed.
     67   bool initialized_;
     68 
     69   DISALLOW_COPY_AND_ASSIGN(FakeConnectionHandler);
     70 };
     71 
     72 }  // namespace gcm
     73 
     74 #endif  // GOOGLE_APIS_GCM_ENGINE_FAKE_CONNECTION_HANDLER_H_
     75