Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / google_apis / gcm / engine / fake_connection_handler.h
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   ~FakeConnectionHandler() override;
23
24   // ConnectionHandler implementation.
25   void Init(const mcs_proto::LoginRequest& login_request,
26             net::StreamSocket* socket) override;
27   void Reset() override;
28   bool CanSendMessage() const override;
29   void SendMessage(const google::protobuf::MessageLite& message) 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_