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(); |