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 <memory> | |
6 | |
7 #include "base/base64url.h" | |
8 #include "components/copresence/handlers/gcm_handler_impl.h" | |
9 #include "components/copresence/proto/push_message.pb.h" | |
10 #include "components/copresence/test/fake_directive_handler.h" | |
11 #include "components/gcm_driver/fake_gcm_driver.h" | |
12 #include "components/gcm_driver/gcm_client.h" | |
13 #include "testing/gmock/include/gmock/gmock.h" | |
14 | |
15 namespace copresence { | |
16 | |
17 namespace { | |
18 | |
19 using google::protobuf::RepeatedPtrField; | |
20 void IgnoreMessages( | |
21 const RepeatedPtrField<SubscribedMessage>& /* messages */) {} | |
22 | |
23 } // namespace | |
24 | |
25 | |
26 class GCMHandlerTest : public testing::Test { | |
27 public: | |
28 GCMHandlerTest() | |
29 : driver_(new gcm::FakeGCMDriver), | |
30 directive_handler_(new FakeDirectiveHandler), | |
31 gcm_handler_(driver_.get(), | |
32 directive_handler_.get(), | |
33 base::Bind(&IgnoreMessages)) { | |
34 } | |
35 | |
36 protected: | |
37 void ProcessMessage(const gcm::IncomingMessage& message) { | |
38 gcm_handler_.OnMessage(GCMHandlerImpl::kCopresenceAppId, message); | |
39 } | |
40 | |
41 std::unique_ptr<gcm::GCMDriver> driver_; | |
42 std::unique_ptr<FakeDirectiveHandler> directive_handler_; | |
43 GCMHandlerImpl 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::Base64UrlEncode(serialized_proto, | |
59 base::Base64UrlEncodePolicy::INCLUDE_PADDING, | |
60 &encoded_proto); | |
61 | |
62 // Send it in a GCM message. | |
63 gcm::IncomingMessage gcm_message; | |
64 gcm_message.data[GCMHandlerImpl::kGcmMessageKey] = encoded_proto; | |
65 ProcessMessage(gcm_message); | |
66 | |
67 // Check that the correct directives were passed along. | |
68 EXPECT_THAT(directive_handler_->added_directives(), | |
69 testing::ElementsAre("subscription 1", "subscription 2")); | |
70 } | |
71 | |
72 } // namespace copresence | |
OLD | NEW |