Chromium Code Reviews| Index: chrome/browser/services/gcm/gcm_profile_service_unittest.cc |
| diff --git a/chrome/browser/services/gcm/gcm_profile_service_unittest.cc b/chrome/browser/services/gcm/gcm_profile_service_unittest.cc |
| index d060cc0b7d6df22be5debf3978129a503be8ff15..d4507e1a085471c165bea728ec93e1aecdf1b18b 100644 |
| --- a/chrome/browser/services/gcm/gcm_profile_service_unittest.cc |
| +++ b/chrome/browser/services/gcm/gcm_profile_service_unittest.cc |
| @@ -10,6 +10,7 @@ |
| #include "base/message_loop/message_loop.h" |
| #include "base/prefs/pref_service.h" |
| #include "base/run_loop.h" |
| +#include "base/strings/string_tokenizer.h" |
| #include "chrome/browser/chrome_notification_types.h" |
| #include "chrome/browser/extensions/state_store.h" |
| #include "chrome/browser/extensions/test_extension_service.h" |
| @@ -539,6 +540,17 @@ class GCMProfileServiceTest : public testing::Test { |
| waiter_.PumpIOLoop(); |
| } |
| + void RegisterAllSenders(GCMProfileServiceTestConsumer* consumer, |
|
jianli
2014/03/05 01:33:02
This should be defined in GCMProfileServiceTestCon
fgorski
2014/03/05 19:30:22
Done. I extracted string to vector conversion to a
|
| + const std::string& app_id, |
| + const std::string& sender_ids) { |
| + std::vector<std::string> senders; |
| + base::StringTokenizer tokenizer(sender_ids, ","); |
| + while (tokenizer.GetNext()) |
| + senders.push_back(tokenizer.token()); |
| + consumer->Register(app_id, senders); |
| + WaitUntilCompleted(); |
| + } |
| + |
| Profile* profile() const { return consumer_->profile(); } |
| GCMProfileServiceTestConsumer* consumer() const { return consumer_.get(); } |
| @@ -1024,9 +1036,11 @@ TEST_F(GCMProfileServiceSingleProfileTest, SendError) { |
| } |
| TEST_F(GCMProfileServiceSingleProfileTest, MessageReceived) { |
| + RegisterAllSenders(consumer(), kTestingAppId, "sender"); |
| GCMClient::IncomingMessage message; |
| message.data["key1"] = "value1"; |
| message.data["key2"] = "value2"; |
| + message.sender_id = "sender"; |
| consumer()->GetGCMClient()->ReceiveMessage(kTestingAppId, message); |
| WaitUntilCompleted(); |
| EXPECT_EQ(FakeGCMEventRouter::MESSAGE_EVENT, |
| @@ -1034,12 +1048,56 @@ TEST_F(GCMProfileServiceSingleProfileTest, MessageReceived) { |
| EXPECT_EQ(kTestingAppId, consumer()->gcm_event_router()->app_id()); |
| EXPECT_TRUE(message.data == consumer()->gcm_event_router()->message().data); |
| EXPECT_TRUE(consumer()->gcm_event_router()->message().collapse_key.empty()); |
| + EXPECT_EQ(message.sender_id, |
| + consumer()->gcm_event_router()->message().sender_id); |
| +} |
| + |
| +TEST_F(GCMProfileServiceSingleProfileTest, |
| + MessageNotReceivedWhenSenderNotRegistered) { |
|
jianli
2014/03/05 01:33:02
nit: MessageNotReceivedFromNotRegisteredSender
fgorski
2014/03/05 19:30:22
Done.
|
| + // Explicitly not registering the sender2 here, so that message gets dropped. |
| + RegisterAllSenders(consumer(), kTestingAppId, "sender1"); |
| + GCMClient::IncomingMessage message; |
| + message.data["key1"] = "value1"; |
| + message.data["key2"] = "value2"; |
| + message.sender_id = "sender2"; |
| + consumer()->GetGCMClient()->ReceiveMessage(kTestingAppId, message); |
| + PumpUILoop(); |
| + EXPECT_EQ(FakeGCMEventRouter::NO_EVENT, |
| + consumer()->gcm_event_router()->received_event()); |
| + consumer()->gcm_event_router()->clear_results(); |
| + |
| + // Register for sender2 and try to receive the message again, which should |
| + // work with no problems. |
| + RegisterAllSenders(consumer(), kTestingAppId, "sender1,sender2"); |
| + consumer()->GetGCMClient()->ReceiveMessage(kTestingAppId, message); |
| + WaitUntilCompleted(); |
| + EXPECT_EQ(FakeGCMEventRouter::MESSAGE_EVENT, |
| + consumer()->gcm_event_router()->received_event()); |
| + consumer()->gcm_event_router()->clear_results(); |
| + |
| + // Making sure that sender1 can receive the message as well. |
| + message.sender_id = "sender1"; |
| + consumer()->GetGCMClient()->ReceiveMessage(kTestingAppId, message); |
| + WaitUntilCompleted(); |
| + EXPECT_EQ(FakeGCMEventRouter::MESSAGE_EVENT, |
| + consumer()->gcm_event_router()->received_event()); |
| + consumer()->gcm_event_router()->clear_results(); |
| + |
| + // Register for sender1 only and make sure it is not possible to receive the |
| + // message again from from sender1. |
| + RegisterAllSenders(consumer(), kTestingAppId, "sender2"); |
| + consumer()->GetGCMClient()->ReceiveMessage(kTestingAppId, message); |
| + PumpUILoop(); |
| + EXPECT_EQ(FakeGCMEventRouter::NO_EVENT, |
| + consumer()->gcm_event_router()->received_event()); |
| } |
| TEST_F(GCMProfileServiceSingleProfileTest, MessageWithCollapseKeyReceived) { |
| + RegisterAllSenders(consumer(), kTestingAppId, "sender"); |
| GCMClient::IncomingMessage message; |
| message.data["key1"] = "value1"; |
| message.collapse_key = "collapse_key_value"; |
| + message.sender_id = "sender"; |
| consumer()->GetGCMClient()->ReceiveMessage(kTestingAppId, message); |
| WaitUntilCompleted(); |
| EXPECT_EQ(FakeGCMEventRouter::MESSAGE_EVENT, |
| @@ -1168,15 +1226,21 @@ TEST_F(GCMProfileServiceMultiProfileTest, Send) { |
| } |
| TEST_F(GCMProfileServiceMultiProfileTest, MessageReceived) { |
| + RegisterAllSenders(consumer(), kTestingAppId, "sender"); |
| + RegisterAllSenders(consumer2(), kTestingAppId, "sender"); |
| + RegisterAllSenders(consumer2(), kTestingAppId2, "sender2"); |
| + |
| // Trigger an incoming message for an app in one profile. |
| GCMClient::IncomingMessage message; |
| message.data["key1"] = "value1"; |
| message.data["key2"] = "value2"; |
| + message.sender_id = "sender"; |
| consumer()->GetGCMClient()->ReceiveMessage(kTestingAppId, message); |
| // Trigger an incoming message for the same app in another profile. |
| GCMClient::IncomingMessage message2; |
| message2.data["foo"] = "bar"; |
| + message2.sender_id = "sender"; |
| consumer2()->GetGCMClient()->ReceiveMessage(kTestingAppId, message2); |
| WaitUntilCompleted(); |
| @@ -1186,16 +1250,19 @@ TEST_F(GCMProfileServiceMultiProfileTest, MessageReceived) { |
| consumer()->gcm_event_router()->received_event()); |
| EXPECT_EQ(kTestingAppId, consumer()->gcm_event_router()->app_id()); |
| EXPECT_TRUE(message.data == consumer()->gcm_event_router()->message().data); |
| + EXPECT_EQ("sender", consumer()->gcm_event_router()->message().sender_id); |
| EXPECT_EQ(FakeGCMEventRouter::MESSAGE_EVENT, |
| consumer2()->gcm_event_router()->received_event()); |
| EXPECT_EQ(kTestingAppId, consumer2()->gcm_event_router()->app_id()); |
| EXPECT_TRUE(message2.data == consumer2()->gcm_event_router()->message().data); |
| + EXPECT_EQ("sender", consumer2()->gcm_event_router()->message().sender_id); |
| // Trigger another incoming message for a different app in another profile. |
| GCMClient::IncomingMessage message3; |
| message3.data["bar1"] = "foo1"; |
| message3.data["bar2"] = "foo2"; |
| + message3.sender_id = "sender2"; |
| consumer2()->GetGCMClient()->ReceiveMessage(kTestingAppId2, message3); |
| WaitUntilCompleted(); |
| @@ -1204,6 +1271,7 @@ TEST_F(GCMProfileServiceMultiProfileTest, MessageReceived) { |
| consumer2()->gcm_event_router()->received_event()); |
| EXPECT_EQ(kTestingAppId2, consumer2()->gcm_event_router()->app_id()); |
| EXPECT_TRUE(message3.data == consumer2()->gcm_event_router()->message().data); |
| + EXPECT_EQ("sender2", consumer2()->gcm_event_router()->message().sender_id); |
| } |
| // Test a set of GCM operations on multiple profiles. |
| @@ -1264,6 +1332,7 @@ TEST_F(GCMProfileServiceMultiProfileTest, Combined) { |
| GCMClient::IncomingMessage in_message; |
| in_message.data["in1"] = "in_data1"; |
| in_message.data["in1_2"] = "in_data1_2"; |
| + in_message.sender_id = "sender1"; |
| consumer()->GetGCMClient()->ReceiveMessage(kTestingAppId, in_message); |
| WaitUntilCompleted(); |
| @@ -1278,11 +1347,13 @@ TEST_F(GCMProfileServiceMultiProfileTest, Combined) { |
| // profile. |
| GCMClient::IncomingMessage in_message2; |
| in_message2.data["in2"] = "in_data2"; |
| + in_message2.sender_id = "sender3"; |
| consumer2()->GetGCMClient()->ReceiveMessage(kTestingAppId2, in_message2); |
| GCMClient::IncomingMessage in_message3; |
| in_message3.data["in3"] = "in_data3"; |
| in_message3.data["in3_2"] = "in_data3_2"; |
| + in_message3.sender_id = "foo"; |
| consumer2()->GetGCMClient()->ReceiveMessage(kTestingAppId, in_message3); |
| consumer2()->gcm_event_router()->clear_results(); |
| @@ -1371,9 +1442,13 @@ TEST_F(GCMProfileServiceMultiProfileTest, Combined) { |
| // Sign in with a different user. |
| consumer()->SignIn(kTestingUsername3); |
| + // Signing our cleared all registrations, so we need to register again. |
|
jianli
2014/03/05 01:33:02
nit: out
fgorski
2014/03/05 19:30:22
Done.
|
| + RegisterAllSenders(consumer(), kTestingAppId, "sender1"); |
| + |
| // Incoming message will go through for the new signed-in user. |
| GCMClient::IncomingMessage in_message5; |
| in_message5.data["in5"] = "in_data5"; |
| + in_message5.sender_id = "sender1"; |
| consumer()->GetGCMClient()->ReceiveMessage(kTestingAppId, in_message5); |
| consumer()->gcm_event_router()->clear_results(); |