Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2286)

Unified Diff: google_apis/gcm/engine/mcs_client_unittest.cc

Issue 148293002: [GCM] Add basic collapse key support for upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: google_apis/gcm/engine/mcs_client_unittest.cc
diff --git a/google_apis/gcm/engine/mcs_client_unittest.cc b/google_apis/gcm/engine/mcs_client_unittest.cc
index 7ba590487dc8cfc36fa04b66d8ee7802a528810f..9276e62945e85ae73c409f43e762fdba72bb4d84 100644
--- a/google_apis/gcm/engine/mcs_client_unittest.cc
+++ b/google_apis/gcm/engine/mcs_client_unittest.cc
@@ -43,7 +43,8 @@ MCSMessage BuildDataMessage(const std::string& from,
const std::string& persistent_id,
int ttl,
uint64 sent,
- int queued) {
+ int queued,
+ const std::string& token) {
mcs_proto::DataMessageStanza data_message;
data_message.set_id(message_id);
data_message.set_from(from);
@@ -54,6 +55,7 @@ MCSMessage BuildDataMessage(const std::string& from,
data_message.set_ttl(ttl);
data_message.set_sent(sent);
data_message.set_queued(queued);
+ data_message.set_token(token);
return MCSMessage(kDataMessageStanzaTag, data_message);
}
@@ -286,7 +288,16 @@ TEST_F(MCSClientTest, SendMessageNoRMQ) {
BuildMCSClient();
InitializeClient();
LoginClient(std::vector<std::string>());
- MCSMessage message(BuildDataMessage("from", "category", "X", 1, "", 0, 1, 0));
+ MCSMessage message(
+ BuildDataMessage("from",
+ "category",
+ "X",
+ 1,
+ "",
+ 0,
+ 1,
+ 0,
+ ""));
GetFakeHandler()->ExpectOutgoingMessage(message);
mcs_client()->SendMessage(message);
EXPECT_TRUE(GetFakeHandler()->AllOutgoingMessagesReceived());
@@ -299,7 +310,16 @@ TEST_F(MCSClientTest, SendMessageNoRMQWhileDisconnected) {
InitializeClient();
EXPECT_TRUE(sent_message_id().empty());
- MCSMessage message(BuildDataMessage("from", "category", "X", 1, "", 0, 1, 0));
+ MCSMessage message(
+ BuildDataMessage("from",
+ "category",
+ "X",
+ 1,
+ "",
+ 0,
+ 1,
+ 0,
+ ""));
mcs_client()->SendMessage(message);
// Message sent callback should be invoked, but no message should actually
@@ -314,8 +334,15 @@ TEST_F(MCSClientTest, SendMessageRMQ) {
BuildMCSClient();
InitializeClient();
LoginClient(std::vector<std::string>());
- MCSMessage message(
- BuildDataMessage("from", "category", "X", 1, "1", kTTLValue, 1, 0));
+ MCSMessage message(BuildDataMessage("from",
+ "category",
+ "X",
+ 1,
+ "1",
+ kTTLValue,
+ 1,
+ 0,
+ ""));
GetFakeHandler()->ExpectOutgoingMessage(message);
mcs_client()->SendMessage(message);
EXPECT_TRUE(GetFakeHandler()->AllOutgoingMessagesReceived());
@@ -328,8 +355,15 @@ TEST_F(MCSClientTest, SendMessageRMQWhileDisconnected) {
InitializeClient();
LoginClient(std::vector<std::string>());
GetFakeHandler()->set_fail_send(true);
- MCSMessage message(
- BuildDataMessage("from", "category", "X", 1, "1", kTTLValue, 1, 0));
+ MCSMessage message(BuildDataMessage("from",
+ "category",
+ "X",
+ 1,
+ "1",
+ kTTLValue,
+ 1,
+ 0,
+ ""));
// The initial (failed) send.
GetFakeHandler()->ExpectOutgoingMessage(message);
@@ -346,7 +380,8 @@ TEST_F(MCSClientTest, SendMessageRMQWhileDisconnected) {
"1",
kTTLValue,
1,
- kTTLValue - 1));
+ kTTLValue - 1,
+ ""));
GetFakeHandler()->ExpectOutgoingMessage(message2);
mcs_client()->SendMessage(message);
EXPECT_FALSE(GetFakeHandler()->AllOutgoingMessagesReceived());
@@ -365,8 +400,15 @@ TEST_F(MCSClientTest, SendMessageRMQOnRestart) {
InitializeClient();
LoginClient(std::vector<std::string>());
GetFakeHandler()->set_fail_send(true);
- MCSMessage message(
- BuildDataMessage("from", "category", "X", 1, "1", kTTLValue, 1, 0));
+ MCSMessage message(BuildDataMessage("from",
+ "category",
+ "X",
+ 1,
+ "1",
+ kTTLValue,
+ 1,
+ 0,
+ ""));
// The initial (failed) send.
GetFakeHandler()->ExpectOutgoingMessage(message);
@@ -387,7 +429,8 @@ TEST_F(MCSClientTest, SendMessageRMQOnRestart) {
"1",
kTTLValue,
1,
- kTTLValue - 1));
+ kTTLValue - 1,
+ ""));
LoginClient(std::vector<std::string>());
GetFakeHandler()->ExpectOutgoingMessage(message2);
PumpLoop();
@@ -403,15 +446,15 @@ TEST_F(MCSClientTest, SendMessageRMQWithStreamAck) {
// Send some messages.
for (int i = 1; i <= kMessageBatchSize; ++i) {
- MCSMessage message(
- BuildDataMessage("from",
- "category",
- "X",
- 1,
- base::IntToString(i),
- kTTLValue,
- 1,
- 0));
+ MCSMessage message(BuildDataMessage("from",
+ "category",
+ "X",
+ 1,
+ base::IntToString(i),
+ kTTLValue,
+ 1,
+ 0,
+ ""));
GetFakeHandler()->ExpectOutgoingMessage(message);
mcs_client()->SendMessage(message);
}
@@ -444,15 +487,15 @@ TEST_F(MCSClientTest, SendMessageRMQAckOnReconnect) {
std::vector<std::string> id_list;
for (int i = 1; i <= kMessageBatchSize; ++i) {
id_list.push_back(base::IntToString(i));
- MCSMessage message(
- BuildDataMessage("from",
- "category",
- id_list.back(),
- 1,
- id_list.back(),
- kTTLValue,
- 1,
- 0));
+ MCSMessage message(BuildDataMessage("from",
+ "category",
+ id_list.back(),
+ 1,
+ id_list.back(),
+ kTTLValue,
+ 1,
+ 0,
+ ""));
GetFakeHandler()->ExpectOutgoingMessage(message);
mcs_client()->SendMessage(message);
}
@@ -483,15 +526,15 @@ TEST_F(MCSClientTest, SendMessageRMQPartialAckOnReconnect) {
std::vector<std::string> id_list;
for (int i = 1; i <= kMessageBatchSize; ++i) {
id_list.push_back(base::IntToString(i));
- MCSMessage message(
- BuildDataMessage("from",
- "category",
- id_list.back(),
- 1,
- id_list.back(),
- kTTLValue,
- 1,
- 0));
+ MCSMessage message(BuildDataMessage("from",
+ "category",
+ id_list.back(),
+ 1,
+ id_list.back(),
+ kTTLValue,
+ 1,
+ 0,
+ ""));
GetFakeHandler()->ExpectOutgoingMessage(message);
mcs_client()->SendMessage(message);
}
@@ -519,7 +562,8 @@ TEST_F(MCSClientTest, SendMessageRMQPartialAckOnReconnect) {
2,
remaining_ids[i - 1],
kTTLValue,
- 1, 0));
+ 1, 0,
+ ""));
GetFakeHandler()->ExpectOutgoingMessage(message);
}
scoped_ptr<mcs_proto::IqStanza> ack(BuildSelectiveAck(acked_ids));
@@ -542,15 +586,15 @@ TEST_F(MCSClientTest, AckOnLogin) {
std::vector<std::string> id_list;
for (int i = 1; i <= kMessageBatchSize; ++i) {
id_list.push_back(base::IntToString(i));
- MCSMessage message(
- BuildDataMessage("from",
- "category",
- "X",
- 1,
- id_list.back(),
- kTTLValue,
- 1,
- 0));
+ MCSMessage message(BuildDataMessage("from",
+ "category",
+ "X",
+ 1,
+ id_list.back(),
+ kTTLValue,
+ 1,
+ 0,
+ ""));
GetFakeHandler()->ReceiveMessage(message);
WaitForMCSEvent();
PumpLoop();
@@ -574,15 +618,15 @@ TEST_F(MCSClientTest, AckOnSend) {
std::vector<std::string> id_list;
for (int i = 1; i <= kMessageBatchSize; ++i) {
id_list.push_back(base::IntToString(i));
- MCSMessage message(
- BuildDataMessage("from",
- "category",
- id_list.back(),
- 1,
- id_list.back(),
- kTTLValue,
- 1,
- 0));
+ MCSMessage message(BuildDataMessage("from",
+ "category",
+ id_list.back(),
+ 1,
+ id_list.back(),
+ kTTLValue,
+ 1,
+ 0,
+ ""));
GetFakeHandler()->ReceiveMessage(message);
PumpLoop();
}
@@ -595,7 +639,8 @@ TEST_F(MCSClientTest, AckOnSend) {
kMessageBatchSize + 1,
"1",
kTTLValue,
- 1, 0));
+ 1, 0,
+ ""));
GetFakeHandler()->ExpectOutgoingMessage(message);
mcs_client()->SendMessage(message);
EXPECT_TRUE(GetFakeHandler()->AllOutgoingMessagesReceived());
@@ -619,15 +664,15 @@ TEST_F(MCSClientTest, AckWhenLimitReachedWithHeartbeat) {
std::vector<std::string> id_list;
for (int i = 1; i <= kAckLimitSize; ++i) {
id_list.push_back(base::IntToString(i));
- MCSMessage message(
- BuildDataMessage("from",
- "category",
- id_list.back(),
- 1,
- id_list.back(),
- kTTLValue,
- 1,
- 0));
+ MCSMessage message(BuildDataMessage("from",
+ "category",
+ id_list.back(),
+ 1,
+ id_list.back(),
+ kTTLValue,
+ 1,
+ 0,
+ ""));
GetFakeHandler()->ReceiveMessage(message);
WaitForMCSEvent();
PumpLoop();
@@ -666,8 +711,15 @@ TEST_F(MCSClientTest, ExpiredTTLOnSend) {
BuildMCSClient();
InitializeClient();
LoginClient(std::vector<std::string>());
- MCSMessage message(
- BuildDataMessage("from", "category", "X", 1, "1", kTTLValue, 1, 0));
+ MCSMessage message(BuildDataMessage("from",
+ "category",
+ "X",
+ 1,
+ "1",
+ kTTLValue,
+ 1,
+ 0,
+ ""));
// Advance time to after the TTL.
clock()->Advance(base::TimeDelta::FromSeconds(kTTLValue + 2));
@@ -685,8 +737,15 @@ TEST_F(MCSClientTest, ExpiredTTLOnRestart) {
InitializeClient();
LoginClient(std::vector<std::string>());
GetFakeHandler()->set_fail_send(true);
- MCSMessage message(
- BuildDataMessage("from", "category", "X", 1, "1", kTTLValue, 1, 0));
+ MCSMessage message(BuildDataMessage("from",
+ "category",
+ "X",
+ 1,
+ "1",
+ kTTLValue,
+ 1,
+ 0,
+ ""));
// The initial (failed) send.
GetFakeHandler()->ExpectOutgoingMessage(message);
@@ -707,6 +766,71 @@ TEST_F(MCSClientTest, ExpiredTTLOnRestart) {
EXPECT_TRUE(GetFakeHandler()->AllOutgoingMessagesReceived());
}
+// Sending two messages with the same collapse key and same app id while
+// disconnected should only send the latter of the two on reconnection.
+TEST_F(MCSClientTest, CollapseKeysSameApp) {
+ BuildMCSClient();
+ InitializeClient();
+ MCSMessage message(BuildDataMessage("from",
+ "category",
+ "message id 1",
+ 1,
+ "1",
+ kTTLValue,
+ 1,
+ 0,
+ "token"));
+ mcs_client()->SendMessage(message);
fgorski 2014/01/28 18:10:27 Speaking to the earlier comment. If connection bre
Nicolas Zea 2014/01/31 11:58:43 Correct, they're treated as completely independent
+
+ MCSMessage message2(BuildDataMessage("from",
+ "category",
+ "message id 2",
+ 1,
+ "1",
+ kTTLValue,
+ 1,
+ 0,
+ "token"));
+ mcs_client()->SendMessage(message2);
+
+ LoginClient(std::vector<std::string>());
+ GetFakeHandler()->ExpectOutgoingMessage(message2);
+ PumpLoop();
+}
+
+// Sending two messages with the same collapse key and different app id while
+// disconnected should not perform any collapsing.
+TEST_F(MCSClientTest, CollapseKeysDifferentApp) {
+ BuildMCSClient();
+ InitializeClient();
+ MCSMessage message(BuildDataMessage("from",
+ "category",
+ "message id 1",
+ 1,
+ "1",
+ kTTLValue,
+ 1,
+ 0,
+ "token"));
+ mcs_client()->SendMessage(message);
+
+ MCSMessage message2(BuildDataMessage("from a differnt app",
+ "category",
+ "message id 2",
+ 1,
+ "2",
+ kTTLValue,
+ 1,
+ 0,
+ "token"));
+ mcs_client()->SendMessage(message2);
+
+ LoginClient(std::vector<std::string>());
+ GetFakeHandler()->ExpectOutgoingMessage(message);
+ GetFakeHandler()->ExpectOutgoingMessage(message2);
+ PumpLoop();
+}
+
} // namespace
} // namespace gcm
« google_apis/gcm/engine/mcs_client.cc ('K') | « google_apis/gcm/engine/mcs_client.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698