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 "google_apis/gcm/engine/account_mapping.h" 6 7 #include <string> 8 9 #include "testing/gtest/include/gtest/gtest.h" 10 11 namespace gcm { 12 13 namespace { 14 15 TEST(AccountMappingTest, SerializeAccountMapping) { 16 AccountMapping account_mapping; 17 account_mapping.account_id = "acc_id"; 18 account_mapping.email = "test (at) example.com"; 19 account_mapping.access_token = "access_token"; 20 account_mapping.status = AccountMapping::NEW; 21 account_mapping.status_change_timestamp = base::Time(); 22 account_mapping.last_message_id.clear(); 23 24 EXPECT_EQ("test (at) example.com&new&0", account_mapping.SerializeAsString()); 25 26 account_mapping.status = AccountMapping::ADDING; 27 account_mapping.status_change_timestamp = 28 base::Time::FromInternalValue(1305797421259977LL); 29 account_mapping.last_message_id = "last_message_id_1"; 30 31 EXPECT_EQ("test (at) example.com&adding&1305797421259977&last_message_id_1", 32 account_mapping.SerializeAsString()); 33 34 account_mapping.status = AccountMapping::MAPPED; 35 36 EXPECT_EQ("test (at) example.com&mapped&1305797421259977&last_message_id_1", 37 account_mapping.SerializeAsString()); 38 39 account_mapping.last_message_id.clear(); 40 41 EXPECT_EQ("test (at) example.com&mapped&1305797421259977", 42 account_mapping.SerializeAsString()); 43 44 account_mapping.account_id = "acc_id2"; 45 account_mapping.email = "test (at) gmail.com"; 46 account_mapping.access_token = "access_token"; // should be ignored. 47 account_mapping.status = AccountMapping::REMOVING; 48 account_mapping.last_message_id = "last_message_id_2"; 49 50 EXPECT_EQ("test (at) gmail.com&removing&1305797421259977&last_message_id_2", 51 account_mapping.SerializeAsString()); 52 } 53 54 TEST(AccountMappingTest, DeserializeAccountMapping) { 55 AccountMapping account_mapping; 56 account_mapping.account_id = "acc_id"; 57 58 EXPECT_TRUE(account_mapping.ParseFromString("test (at) example.com&new&0")); 59 EXPECT_EQ("acc_id", account_mapping.account_id); 60 EXPECT_EQ("test (at) example.com", account_mapping.email); 61 EXPECT_TRUE(account_mapping.access_token.empty()); 62 EXPECT_EQ(AccountMapping::NEW, account_mapping.status); 63 EXPECT_EQ(base::Time(), account_mapping.status_change_timestamp); 64 EXPECT_TRUE(account_mapping.last_message_id.empty()); 65 66 EXPECT_TRUE(account_mapping.ParseFromString( 67 "test (at) gmail.com&adding&1305797421259977&last_message_id_1")); 68 EXPECT_EQ("acc_id", account_mapping.account_id); 69 EXPECT_EQ("test (at) gmail.com", account_mapping.email); 70 EXPECT_TRUE(account_mapping.access_token.empty()); 71 EXPECT_EQ(AccountMapping::ADDING, account_mapping.status); 72 EXPECT_EQ(base::Time::FromInternalValue(1305797421259977LL), 73 account_mapping.status_change_timestamp); 74 EXPECT_EQ("last_message_id_1", account_mapping.last_message_id); 75 76 EXPECT_TRUE(account_mapping.ParseFromString( 77 "test (at) example.com&mapped&1305797421259977")); 78 EXPECT_EQ("acc_id", account_mapping.account_id); 79 EXPECT_EQ("test (at) example.com", account_mapping.email); 80 EXPECT_TRUE(account_mapping.access_token.empty()); 81 EXPECT_EQ(AccountMapping::MAPPED, account_mapping.status); 82 EXPECT_EQ(base::Time::FromInternalValue(1305797421259977LL), 83 account_mapping.status_change_timestamp); 84 EXPECT_TRUE(account_mapping.last_message_id.empty()); 85 86 EXPECT_TRUE(account_mapping.ParseFromString( 87 "test (at) gmail.com&mapped&1305797421259977&last_message_id_1")); 88 EXPECT_EQ("acc_id", account_mapping.account_id); 89 EXPECT_EQ("test (at) gmail.com", account_mapping.email); 90 EXPECT_TRUE(account_mapping.access_token.empty()); 91 EXPECT_EQ(AccountMapping::MAPPED, account_mapping.status); 92 EXPECT_EQ(base::Time::FromInternalValue(1305797421259977LL), 93 account_mapping.status_change_timestamp); 94 EXPECT_EQ("last_message_id_1", account_mapping.last_message_id); 95 96 EXPECT_TRUE(account_mapping.ParseFromString( 97 "test (at) gmail.com&removing&1305797421259977&last_message_id_2")); 98 EXPECT_EQ("acc_id", account_mapping.account_id); 99 EXPECT_EQ("test (at) gmail.com", account_mapping.email); 100 EXPECT_TRUE(account_mapping.access_token.empty()); 101 EXPECT_EQ(AccountMapping::REMOVING, account_mapping.status); 102 EXPECT_EQ(base::Time::FromInternalValue(1305797421259977LL), 103 account_mapping.status_change_timestamp); 104 EXPECT_EQ("last_message_id_2", account_mapping.last_message_id); 105 } 106 107 TEST(AccountMappingTest, DeserializeAccountMappingInvalidInput) { 108 AccountMapping account_mapping; 109 account_mapping.account_id = "acc_id"; 110 // Too many agruments. 111 EXPECT_FALSE(account_mapping.ParseFromString( 112 "test (at) example.com&adding&1305797421259935&last_message_id_1&stuff_here")); 113 // Too few arguments. 114 EXPECT_FALSE(account_mapping.ParseFromString( 115 "test (at) example.com&removing&1305797421259935")); 116 // Too few arguments. 117 EXPECT_FALSE(account_mapping.ParseFromString( 118 "test (at) example.com&adding&1305797421259935")); 119 // Too few arguments. 120 EXPECT_FALSE(account_mapping.ParseFromString( 121 "test (at) example.com&new")); 122 // Too few arguments. 123 EXPECT_FALSE(account_mapping.ParseFromString( 124 "test (at) example.com&mapped")); 125 // Missing email. 126 EXPECT_FALSE(account_mapping.ParseFromString( 127 "&remove&1305797421259935&last_message_id_2")); 128 // Missing mapping status. 129 EXPECT_FALSE(account_mapping.ParseFromString( 130 "test (at) example.com&&1305797421259935&last_message_id_2")); 131 // Unkown mapping status. 132 EXPECT_FALSE(account_mapping.ParseFromString( 133 "test (at) example.com&random&1305797421259935&last_message_id_2")); 134 // Missing mapping status change timestamp. 135 EXPECT_FALSE(account_mapping.ParseFromString( 136 "test (at) gmail.com&removing&&last_message_id_2")); 137 // Last mapping status change timestamp not parseable. 138 EXPECT_FALSE(account_mapping.ParseFromString( 139 "test (at) gmail.com&removing&asdfjkl&last_message_id_2")); 140 // Missing last message ID. 141 EXPECT_FALSE(account_mapping.ParseFromString( 142 "test (at) example.com&removing&1305797421259935&")); 143 } 144 145 } // namespace 146 } // namespace gcm 147