OLD | NEW |
(Empty) | |
| 1 // Copyright 2014 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 "components/copresence/handlers/gcm_handler.h" |
| 6 |
| 7 #include "base/base64.h" |
| 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/strings/string_util.h" |
| 10 #include "components/copresence/proto/push_message.pb.h" |
| 11 #include "components/copresence/test/fake_directive_handler.h" |
| 12 #include "components/gcm_driver/fake_gcm_driver.h" |
| 13 #include "components/gcm_driver/gcm_client.h" |
| 14 #include "testing/gmock/include/gmock/gmock.h" |
| 15 |
| 16 using gcm::GCMClient; |
| 17 |
| 18 namespace { |
| 19 |
| 20 // TODO(ckehoe): Move this to a central place. |
| 21 std::string ToUrlSafe(std::string token) { |
| 22 base::ReplaceChars(token, "+", "-", &token); |
| 23 base::ReplaceChars(token, "/", "_", &token); |
| 24 return token; |
| 25 } |
| 26 |
| 27 } // namespace |
| 28 |
| 29 |
| 30 namespace copresence { |
| 31 |
| 32 class GCMHandlerTest : public testing::Test { |
| 33 public: |
| 34 GCMHandlerTest() |
| 35 : driver_(new gcm::FakeGCMDriver), |
| 36 directive_handler_(new FakeDirectiveHandler), |
| 37 gcm_handler_(driver_.get(), directive_handler_.get()) { |
| 38 } |
| 39 |
| 40 protected: |
| 41 scoped_ptr<gcm::GCMDriver> driver_; |
| 42 scoped_ptr<FakeDirectiveHandler> directive_handler_; |
| 43 GCMHandler gcm_handler_; |
| 44 }; |
| 45 |
| 46 TEST_F(GCMHandlerTest, OnMessage) { |
| 47 // Create a PushMessage. |
| 48 PushMessage push_message; |
| 49 push_message.set_type(PushMessage::REPORT); |
| 50 Report* report = push_message.mutable_report(); |
| 51 report->add_directive()->set_subscription_id("subscription 1"); |
| 52 report->add_directive()->set_subscription_id("subscription 2"); |
| 53 |
| 54 // Encode it. |
| 55 std::string serialized_proto; |
| 56 std::string encoded_proto; |
| 57 push_message.SerializeToString(&serialized_proto); |
| 58 base::Base64Encode(serialized_proto, &encoded_proto); |
| 59 |
| 60 // Send it in a GCM message. |
| 61 GCMClient::IncomingMessage gcm_message; |
| 62 gcm_message.data[GCMHandler::kGcmMessageKey] = ToUrlSafe(encoded_proto); |
| 63 gcm_handler_.OnMessage(GCMHandler::kCopresenceAppId, gcm_message); |
| 64 |
| 65 // Check that the correct directives were passed along. |
| 66 EXPECT_THAT(directive_handler_->added_directives(), |
| 67 testing::ElementsAre("subscription 1", "subscription 2")); |
| 68 } |
| 69 |
| 70 } // namespace copresence |
| 71 |
OLD | NEW |