diff options
author | fgorski <fgorski@chromium.org> | 2014-09-04 09:48:54 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-04 16:51:54 +0000 |
commit | c1047318d54970f8176ab98b818280895045eb6c (patch) | |
tree | 3df83918e659b5bde180ef1f2f81e300d509c2d2 /google_apis/gcm/engine | |
parent | 6017d60fc4bfdf6ffb56f66aff105d23cb53b992 (diff) | |
download | chromium_src-c1047318d54970f8176ab98b818280895045eb6c.zip chromium_src-c1047318d54970f8176ab98b818280895045eb6c.tar.gz chromium_src-c1047318d54970f8176ab98b818280895045eb6c.tar.bz2 |
[GCM] Adding GCMAccountMapper to link signed in profile to accounts.
* Addes GCMAccountMapper with tests for adding and removing accoounts.
BUG=374969
Review URL: https://codereview.chromium.org/491443004
Cr-Commit-Position: refs/heads/master@{#293308}
Diffstat (limited to 'google_apis/gcm/engine')
-rw-r--r-- | google_apis/gcm/engine/account_mapping.cc | 102 | ||||
-rw-r--r-- | google_apis/gcm/engine/account_mapping.h | 12 | ||||
-rw-r--r-- | google_apis/gcm/engine/account_mapping_unittest.cc | 112 | ||||
-rw-r--r-- | google_apis/gcm/engine/gcm_store_impl_unittest.cc | 5 |
4 files changed, 117 insertions, 114 deletions
diff --git a/google_apis/gcm/engine/account_mapping.cc b/google_apis/gcm/engine/account_mapping.cc index 0049b2a..e154077 100644 --- a/google_apis/gcm/engine/account_mapping.cc +++ b/google_apis/gcm/engine/account_mapping.cc @@ -12,39 +12,44 @@ namespace gcm { namespace { const char kSeparator[] = "&"; -uint32 kEmailIndex = 0; -uint32 kMappingChangeTimestampIndex = 1; -uint32 kMessageTypeIndex = 2; -uint32 kMessageIdIndex = 3; -uint32 kSizeWithNoMessage = kMessageTypeIndex + 1; -uint32 kSizeWithMessage = kMessageIdIndex + 1; - -const char kMessageTypeNoneString[] = "none"; -const char kMessageTypeAddString[] = "add"; -const char kMessageTypeRemoveString[] = "remove"; - -std::string MessageTypeToString(AccountMapping::MessageType type) { - switch (type) { - case AccountMapping::MSG_NONE: - return kMessageTypeNoneString; - case AccountMapping::MSG_ADD: - return kMessageTypeAddString; - case AccountMapping::MSG_REMOVE: - return kMessageTypeRemoveString; +const uint32 kEmailIndex = 0; +const uint32 kStatusIndex = 1; +const uint32 kStatusChangeTimestampIndex = 2; +const uint32 kSizeWithNoMessage = kStatusChangeTimestampIndex + 1; +const uint32 kMessageIdIndex = 3; +const uint32 kSizeWithMessage = kMessageIdIndex + 1; + +const char kStatusNew[] = "new"; +const char kStatusAdding[] = "adding"; +const char kStatusMapped[] = "mapped"; +const char kStatusRemoving[] = "removing"; + +std::string StatusToString(AccountMapping::MappingStatus status) { + switch (status) { + case AccountMapping::NEW: + return kStatusNew; + case AccountMapping::ADDING: + return kStatusAdding; + case AccountMapping::MAPPED: + return kStatusMapped; + case AccountMapping::REMOVING: + return kStatusRemoving; default: NOTREACHED(); } return std::string(); } -bool StringToMessageType(const std::string& type_str, - AccountMapping::MessageType* type) { - if (type_str.compare(kMessageTypeAddString) == 0) - *type = AccountMapping::MSG_ADD; - else if (type_str.compare(kMessageTypeRemoveString) == 0) - *type = AccountMapping::MSG_REMOVE; - else if (type_str.compare(kMessageTypeNoneString) == 0) - *type = AccountMapping::MSG_NONE; +bool StringToStatus(const std::string& status_str, + AccountMapping::MappingStatus* status) { + if (status_str.compare(kStatusAdding) == 0) + *status = AccountMapping::ADDING; + else if (status_str.compare(kStatusMapped) == 0) + *status = AccountMapping::MAPPED; + else if (status_str.compare(kStatusRemoving) == 0) + *status = AccountMapping::REMOVING; + else if (status_str.compare(kStatusNew) == 0) + *status = AccountMapping::NEW; else return false; @@ -53,7 +58,7 @@ bool StringToMessageType(const std::string& type_str, } // namespace -AccountMapping::AccountMapping() { +AccountMapping::AccountMapping() : status(NEW) { } AccountMapping::~AccountMapping() { @@ -63,10 +68,10 @@ std::string AccountMapping::SerializeAsString() const { std::string value; value.append(email); value.append(kSeparator); - value.append(base::Int64ToString(status_change_timestamp.ToInternalValue())); + value.append(StatusToString(status)); value.append(kSeparator); - value.append(MessageTypeToString(last_message_type)); - if (last_message_type != MSG_NONE) { + value.append(base::Int64ToString(status_change_timestamp.ToInternalValue())); + if (!last_message_id.empty()) { value.append(kSeparator); value.append(last_message_id); } @@ -83,49 +88,40 @@ bool AccountMapping::ParseFromString(const std::string& value) { } if (values[kEmailIndex].empty() || - values[kMappingChangeTimestampIndex].empty() || - values[kMessageTypeIndex].empty()) { + values[kStatusChangeTimestampIndex].empty() || + values[kStatusIndex].empty()) { return false; } - if (values.size() == kSizeWithMessage && values[kMessageIdIndex].empty()) { + if (values.size() == kSizeWithMessage && values[kMessageIdIndex].empty()) return false; - } - MessageType message_type; - if (!StringToMessageType(values[kMessageTypeIndex], &message_type)) + MappingStatus temp_status; + if (!StringToStatus(values[kStatusIndex], &temp_status)) return false; - if ((message_type == MSG_NONE && values.size() == kSizeWithMessage) || - (message_type != MSG_NONE && values.size() != kSizeWithMessage)) { + if (values.size() == kSizeWithNoMessage && + (temp_status == REMOVING || temp_status == ADDING)) { return false; } - last_message_type = message_type; - int64 status_change_ts_internal = 0LL; - if (!base::StringToInt64(values[kMappingChangeTimestampIndex], + if (!base::StringToInt64(values[kStatusChangeTimestampIndex], &status_change_ts_internal)) { return false; } - if (status_change_ts_internal == 0LL) - status = ADDING; - else if (last_message_type == MSG_REMOVE) - status = REMOVING; - else - status = MAPPED; + status_change_timestamp = + base::Time::FromInternalValue(status_change_ts_internal); + status = temp_status; + email = values[kEmailIndex]; + access_token.clear(); if (values.size() == kSizeWithMessage) last_message_id = values[kMessageIdIndex]; else last_message_id.clear(); - email = values[kEmailIndex]; - status_change_timestamp = - base::Time::FromInternalValue(status_change_ts_internal); - access_token.clear(); - return true; } diff --git a/google_apis/gcm/engine/account_mapping.h b/google_apis/gcm/engine/account_mapping.h index 10fa6dc..a152d56 100644 --- a/google_apis/gcm/engine/account_mapping.h +++ b/google_apis/gcm/engine/account_mapping.h @@ -25,16 +25,6 @@ struct GCM_EXPORT AccountMapping { // reached the GCM. REMOVING, // Account is removed, but a message removing the mapping has not // been confirmed yet. - REMOVED, // Account is removed, and at least one message has been - // confirmed to have reached the GCM. - }; - - // Indicates whether a message, if sent, was adding or removing account - // mapping. - enum MessageType { - MSG_NONE, // No message has been sent. - MSG_ADD, // Account was mapped to device by the message. - MSG_REMOVE, // Account mapping to device was removed by the message. }; AccountMapping(); @@ -57,8 +47,6 @@ struct GCM_EXPORT AccountMapping { MappingStatus status; // Time of the mapping status change. base::Time status_change_timestamp; - // Type of the last mapping message sent to GCM. - MessageType last_message_type; // ID of the last mapping message sent to GCM. std::string last_message_id; }; diff --git a/google_apis/gcm/engine/account_mapping_unittest.cc b/google_apis/gcm/engine/account_mapping_unittest.cc index 00ff7e1..5ce5d05 100644 --- a/google_apis/gcm/engine/account_mapping_unittest.cc +++ b/google_apis/gcm/engine/account_mapping_unittest.cc @@ -17,66 +17,91 @@ TEST(AccountMappingTest, SerializeAccountMapping) { account_mapping.account_id = "acc_id"; account_mapping.email = "test@example.com"; account_mapping.access_token = "access_token"; - account_mapping.status = AccountMapping::ADDING; + account_mapping.status = AccountMapping::NEW; account_mapping.status_change_timestamp = base::Time(); + account_mapping.last_message_id.clear(); + + EXPECT_EQ("test@example.com&new&0", account_mapping.SerializeAsString()); + + account_mapping.status = AccountMapping::ADDING; + account_mapping.status_change_timestamp = + base::Time::FromInternalValue(1305797421259977LL); account_mapping.last_message_id = "last_message_id_1"; - account_mapping.last_message_type = AccountMapping::MSG_ADD; - EXPECT_EQ("test@example.com&0&add&last_message_id_1", + EXPECT_EQ("test@example.com&adding&1305797421259977&last_message_id_1", + account_mapping.SerializeAsString()); + + account_mapping.status = AccountMapping::MAPPED; + + EXPECT_EQ("test@example.com&mapped&1305797421259977&last_message_id_1", + account_mapping.SerializeAsString()); + + account_mapping.last_message_id.clear(); + + EXPECT_EQ("test@example.com&mapped&1305797421259977", account_mapping.SerializeAsString()); account_mapping.account_id = "acc_id2"; account_mapping.email = "test@gmail.com"; account_mapping.access_token = "access_token"; // should be ignored. - account_mapping.status = AccountMapping::MAPPED; // should be ignored. - account_mapping.status_change_timestamp = - base::Time::FromInternalValue(1305797421259977LL); + account_mapping.status = AccountMapping::REMOVING; account_mapping.last_message_id = "last_message_id_2"; - account_mapping.last_message_type = AccountMapping::MSG_REMOVE; - - EXPECT_EQ("test@gmail.com&1305797421259977&remove&last_message_id_2", - account_mapping.SerializeAsString()); - - account_mapping.last_message_type = AccountMapping::MSG_NONE; - EXPECT_EQ("test@gmail.com&1305797421259977&none", + EXPECT_EQ("test@gmail.com&removing&1305797421259977&last_message_id_2", account_mapping.SerializeAsString()); } TEST(AccountMappingTest, DeserializeAccountMapping) { AccountMapping account_mapping; account_mapping.account_id = "acc_id"; - EXPECT_TRUE(account_mapping.ParseFromString( - "test@example.com&0&add&last_message_id_1")); + + EXPECT_TRUE(account_mapping.ParseFromString("test@example.com&new&0")); EXPECT_EQ("acc_id", account_mapping.account_id); EXPECT_EQ("test@example.com", account_mapping.email); EXPECT_TRUE(account_mapping.access_token.empty()); - EXPECT_EQ(AccountMapping::ADDING, account_mapping.status); + EXPECT_EQ(AccountMapping::NEW, account_mapping.status); EXPECT_EQ(base::Time(), account_mapping.status_change_timestamp); - EXPECT_EQ(AccountMapping::MSG_ADD, account_mapping.last_message_type); - EXPECT_EQ("last_message_id_1", account_mapping.last_message_id); + EXPECT_TRUE(account_mapping.last_message_id.empty()); EXPECT_TRUE(account_mapping.ParseFromString( - "test@gmail.com&1305797421259977&remove&last_message_id_2")); + "test@gmail.com&adding&1305797421259977&last_message_id_1")); EXPECT_EQ("acc_id", account_mapping.account_id); EXPECT_EQ("test@gmail.com", account_mapping.email); EXPECT_TRUE(account_mapping.access_token.empty()); - EXPECT_EQ(AccountMapping::REMOVING, account_mapping.status); + EXPECT_EQ(AccountMapping::ADDING, account_mapping.status); EXPECT_EQ(base::Time::FromInternalValue(1305797421259977LL), account_mapping.status_change_timestamp); - EXPECT_EQ(AccountMapping::MSG_REMOVE, account_mapping.last_message_type); - EXPECT_EQ("last_message_id_2", account_mapping.last_message_id); + EXPECT_EQ("last_message_id_1", account_mapping.last_message_id); EXPECT_TRUE(account_mapping.ParseFromString( - "test@gmail.com&1305797421259977&none")); + "test@example.com&mapped&1305797421259977")); + EXPECT_EQ("acc_id", account_mapping.account_id); + EXPECT_EQ("test@example.com", account_mapping.email); + EXPECT_TRUE(account_mapping.access_token.empty()); + EXPECT_EQ(AccountMapping::MAPPED, account_mapping.status); + EXPECT_EQ(base::Time::FromInternalValue(1305797421259977LL), + account_mapping.status_change_timestamp); + EXPECT_TRUE(account_mapping.last_message_id.empty()); + + EXPECT_TRUE(account_mapping.ParseFromString( + "test@gmail.com&mapped&1305797421259977&last_message_id_1")); EXPECT_EQ("acc_id", account_mapping.account_id); EXPECT_EQ("test@gmail.com", account_mapping.email); EXPECT_TRUE(account_mapping.access_token.empty()); EXPECT_EQ(AccountMapping::MAPPED, account_mapping.status); EXPECT_EQ(base::Time::FromInternalValue(1305797421259977LL), account_mapping.status_change_timestamp); - EXPECT_EQ(AccountMapping::MSG_NONE, account_mapping.last_message_type); - EXPECT_EQ("", account_mapping.last_message_id); + EXPECT_EQ("last_message_id_1", account_mapping.last_message_id); + + EXPECT_TRUE(account_mapping.ParseFromString( + "test@gmail.com&removing&1305797421259977&last_message_id_2")); + EXPECT_EQ("acc_id", account_mapping.account_id); + EXPECT_EQ("test@gmail.com", account_mapping.email); + EXPECT_TRUE(account_mapping.access_token.empty()); + EXPECT_EQ(AccountMapping::REMOVING, account_mapping.status); + EXPECT_EQ(base::Time::FromInternalValue(1305797421259977LL), + account_mapping.status_change_timestamp); + EXPECT_EQ("last_message_id_2", account_mapping.last_message_id); } TEST(AccountMappingTest, DeserializeAccountMappingInvalidInput) { @@ -84,38 +109,37 @@ TEST(AccountMappingTest, DeserializeAccountMappingInvalidInput) { account_mapping.account_id = "acc_id"; // Too many agruments. EXPECT_FALSE(account_mapping.ParseFromString( - "test@example.com&1305797421259935" - "&add&last_message_id_1&stuff_here")); + "test@example.com&adding&1305797421259935&last_message_id_1&stuff_here")); // Too few arguments. EXPECT_FALSE(account_mapping.ParseFromString( - "test@example.com&1305797421259935&remove")); + "test@example.com&removing&1305797421259935")); // Too few arguments. EXPECT_FALSE(account_mapping.ParseFromString( - "test@example.com&1305797421259935")); - // Missing email. + "test@example.com&adding&1305797421259935")); + // Too few arguments. EXPECT_FALSE(account_mapping.ParseFromString( - "&1305797421259935&remove&last_message_id_2")); - // Missing mapping status change timestamp. + "test@example.com&new")); + // Too few arguments. EXPECT_FALSE(account_mapping.ParseFromString( - "test@gmail.com&&remove&last_message_id_2")); - // Last mapping status change timestamp not parseable. + "test@example.com&mapped")); + // Missing email. EXPECT_FALSE(account_mapping.ParseFromString( - "test@gmail.com&remove&asdfjkl&last_message_id_2")); - // Missing message type. + "&remove&1305797421259935&last_message_id_2")); + // Missing mapping status. EXPECT_FALSE(account_mapping.ParseFromString( - "test@example.com&1305797421259935&&last_message_id_2")); - // Unkown message type. + "test@example.com&&1305797421259935&last_message_id_2")); + // Unkown mapping status. EXPECT_FALSE(account_mapping.ParseFromString( - "test@example.com&1305797421259935&random&last_message_id_2")); - // Message type is none when message details specified. + "test@example.com&random&1305797421259935&last_message_id_2")); + // Missing mapping status change timestamp. EXPECT_FALSE(account_mapping.ParseFromString( - "test@example.com&1305797421259935&none&last_message_id_2")); - // Message type is messed up. + "test@gmail.com&removing&&last_message_id_2")); + // Last mapping status change timestamp not parseable. EXPECT_FALSE(account_mapping.ParseFromString( - "test@example.com&1305797421259935&random")); + "test@gmail.com&removing&asdfjkl&last_message_id_2")); // Missing last message ID. EXPECT_FALSE(account_mapping.ParseFromString( - "test@example.com&1305797421259935&remove&")); + "test@example.com&removing&1305797421259935&")); } } // namespace diff --git a/google_apis/gcm/engine/gcm_store_impl_unittest.cc b/google_apis/gcm/engine/gcm_store_impl_unittest.cc index bbe408f..81b5bbf 100644 --- a/google_apis/gcm/engine/gcm_store_impl_unittest.cc +++ b/google_apis/gcm/engine/gcm_store_impl_unittest.cc @@ -532,7 +532,6 @@ TEST_F(GCMStoreImplTest, AccountMapping) { account_mapping1.access_token = "account_token1"; account_mapping1.status = AccountMapping::ADDING; account_mapping1.status_change_timestamp = base::Time(); - account_mapping1.last_message_type = AccountMapping::MSG_ADD; account_mapping1.last_message_id = "message_1"; AccountMapping account_mapping2; @@ -542,7 +541,6 @@ TEST_F(GCMStoreImplTest, AccountMapping) { account_mapping2.status = AccountMapping::REMOVING; account_mapping2.status_change_timestamp = base::Time::FromInternalValue(1305734521259935LL); - account_mapping2.last_message_type = AccountMapping::MSG_REMOVE; account_mapping2.last_message_id = "message_2"; gcm_store->AddAccountMapping( @@ -569,7 +567,6 @@ TEST_F(GCMStoreImplTest, AccountMapping) { EXPECT_EQ(AccountMapping::ADDING, iter->second.status); EXPECT_EQ(account_mapping1.status_change_timestamp, iter->second.status_change_timestamp); - EXPECT_EQ(account_mapping1.last_message_type, iter->second.last_message_type); EXPECT_EQ(account_mapping1.last_message_id, iter->second.last_message_id); ++iter; EXPECT_EQ("account_id_2", iter->first); @@ -579,7 +576,6 @@ TEST_F(GCMStoreImplTest, AccountMapping) { EXPECT_EQ(AccountMapping::REMOVING, iter->second.status); EXPECT_EQ(account_mapping2.status_change_timestamp, iter->second.status_change_timestamp); - EXPECT_EQ(account_mapping2.last_message_type, iter->second.last_message_type); EXPECT_EQ(account_mapping2.last_message_id, iter->second.last_message_id); gcm_store->RemoveAccountMapping( @@ -601,7 +597,6 @@ TEST_F(GCMStoreImplTest, AccountMapping) { EXPECT_EQ(AccountMapping::REMOVING, iter->second.status); EXPECT_EQ(account_mapping2.status_change_timestamp, iter->second.status_change_timestamp); - EXPECT_EQ(account_mapping2.last_message_type, iter->second.last_message_type); EXPECT_EQ(account_mapping2.last_message_id, iter->second.last_message_id); } |