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 #include "google_apis/gcm/engine/fake_connection_handler.h" 6 7 #include "base/logging.h" 8 #include "google_apis/gcm/base/mcs_util.h" 9 #include "net/socket/stream_socket.h" 10 #include "testing/gtest/include/gtest/gtest.h" 11 12 namespace gcm { 13 14 namespace { 15 16 // Build a basic login response. 17 scoped_ptr<google::protobuf::MessageLite> BuildLoginResponse(bool fail_login) { 18 scoped_ptr<mcs_proto::LoginResponse> login_response( 19 new mcs_proto::LoginResponse()); 20 login_response->set_id("id"); 21 if (fail_login) 22 login_response->mutable_error()->set_code(1); 23 return login_response.PassAs<google::protobuf::MessageLite>(); 24 } 25 26 } // namespace 27 28 FakeConnectionHandler::FakeConnectionHandler( 29 const ConnectionHandler::ProtoReceivedCallback& read_callback, 30 const ConnectionHandler::ProtoSentCallback& write_callback) 31 : read_callback_(read_callback), 32 write_callback_(write_callback), 33 fail_login_(false), 34 fail_send_(false), 35 initialized_(false) { 36 } 37 38 FakeConnectionHandler::~FakeConnectionHandler() { 39 } 40 41 void FakeConnectionHandler::Init(const mcs_proto::LoginRequest& login_request, 42 net::StreamSocket* socket) { 43 ASSERT_GE(expected_outgoing_messages_.size(), 1U); 44 EXPECT_EQ(expected_outgoing_messages_.front().SerializeAsString(), 45 login_request.SerializeAsString()); 46 expected_outgoing_messages_.pop_front(); 47 DVLOG(1) << "Received init call."; 48 read_callback_.Run(BuildLoginResponse(fail_login_)); 49 initialized_ = !fail_login_; 50 } 51 52 void FakeConnectionHandler::Reset() { 53 initialized_ = false; 54 } 55 56 bool FakeConnectionHandler::CanSendMessage() const { 57 return initialized_; 58 } 59 60 void FakeConnectionHandler::SendMessage( 61 const google::protobuf::MessageLite& message) { 62 if (expected_outgoing_messages_.empty()) 63 FAIL() << "Unexpected message sent."; 64 EXPECT_EQ(expected_outgoing_messages_.front().SerializeAsString(), 65 message.SerializeAsString()); 66 expected_outgoing_messages_.pop_front(); 67 DVLOG(1) << "Received message, " 68 << (fail_send_ ? " failing send." : "calling back."); 69 if (!fail_send_) 70 write_callback_.Run(); 71 else 72 initialized_ = false; // Prevent future messages until reconnect. 73 } 74 75 void FakeConnectionHandler::ExpectOutgoingMessage(const MCSMessage& message) { 76 expected_outgoing_messages_.push_back(message); 77 } 78 79 void FakeConnectionHandler::ResetOutgoingMessageExpectations() { 80 expected_outgoing_messages_.clear(); 81 } 82 83 bool FakeConnectionHandler::AllOutgoingMessagesReceived() const { 84 return expected_outgoing_messages_.empty(); 85 } 86 87 void FakeConnectionHandler::ReceiveMessage(const MCSMessage& message) { 88 read_callback_.Run(message.CloneProtobuf()); 89 } 90 91 } // namespace gcm 92