15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "google_apis/gcm/engine/account_mapping.h" 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <string> 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace gcm { 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace { 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST(AccountMappingTest, SerializeAccountMapping) { 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AccountMapping account_mapping; 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) account_mapping.account_id = "acc_id"; 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) account_mapping.email = "test@example.com"; 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) account_mapping.access_token = "access_token"; 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci account_mapping.status = AccountMapping::NEW; 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) account_mapping.status_change_timestamp = base::Time(); 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci account_mapping.last_message_id.clear(); 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("test@example.com&new&0", account_mapping.SerializeAsString()); 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci account_mapping.status = AccountMapping::ADDING; 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci account_mapping.status_change_timestamp = 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Time::FromInternalValue(1305797421259977LL); 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) account_mapping.last_message_id = "last_message_id_1"; 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("test@example.com&adding&1305797421259977&last_message_id_1", 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci account_mapping.SerializeAsString()); 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci account_mapping.status = AccountMapping::MAPPED; 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("test@example.com&mapped&1305797421259977&last_message_id_1", 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci account_mapping.SerializeAsString()); 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci account_mapping.last_message_id.clear(); 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("test@example.com&mapped&1305797421259977", 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) account_mapping.SerializeAsString()); 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) account_mapping.account_id = "acc_id2"; 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) account_mapping.email = "test@gmail.com"; 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) account_mapping.access_token = "access_token"; // should be ignored. 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci account_mapping.status = AccountMapping::REMOVING; 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) account_mapping.last_message_id = "last_message_id_2"; 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("test@gmail.com&removing&1305797421259977&last_message_id_2", 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) account_mapping.SerializeAsString()); 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST(AccountMappingTest, DeserializeAccountMapping) { 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AccountMapping account_mapping; 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) account_mapping.account_id = "acc_id"; 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(account_mapping.ParseFromString("test@example.com&new&0")); 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("acc_id", account_mapping.account_id); 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("test@example.com", account_mapping.email); 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(account_mapping.access_token.empty()); 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(AccountMapping::NEW, account_mapping.status); 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(base::Time(), account_mapping.status_change_timestamp); 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(account_mapping.last_message_id.empty()); 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(account_mapping.ParseFromString( 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "test@gmail.com&adding&1305797421259977&last_message_id_1")); 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("acc_id", account_mapping.account_id); 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("test@gmail.com", account_mapping.email); 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(account_mapping.access_token.empty()); 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(AccountMapping::ADDING, account_mapping.status); 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(base::Time::FromInternalValue(1305797421259977LL), 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) account_mapping.status_change_timestamp); 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("last_message_id_1", account_mapping.last_message_id); 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(account_mapping.ParseFromString( 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "test@example.com&mapped&1305797421259977")); 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("acc_id", account_mapping.account_id); 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("test@example.com", account_mapping.email); 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(account_mapping.access_token.empty()); 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(AccountMapping::MAPPED, account_mapping.status); 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(base::Time::FromInternalValue(1305797421259977LL), 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci account_mapping.status_change_timestamp); 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(account_mapping.last_message_id.empty()); 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(account_mapping.ParseFromString( 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "test@gmail.com&mapped&1305797421259977&last_message_id_1")); 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("acc_id", account_mapping.account_id); 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("test@gmail.com", account_mapping.email); 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(account_mapping.access_token.empty()); 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(AccountMapping::MAPPED, account_mapping.status); 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(base::Time::FromInternalValue(1305797421259977LL), 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) account_mapping.status_change_timestamp); 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("last_message_id_1", account_mapping.last_message_id); 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(account_mapping.ParseFromString( 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "test@gmail.com&removing&1305797421259977&last_message_id_2")); 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("acc_id", account_mapping.account_id); 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("test@gmail.com", account_mapping.email); 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(account_mapping.access_token.empty()); 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(AccountMapping::REMOVING, account_mapping.status); 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(base::Time::FromInternalValue(1305797421259977LL), 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci account_mapping.status_change_timestamp); 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("last_message_id_2", account_mapping.last_message_id); 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST(AccountMappingTest, DeserializeAccountMappingInvalidInput) { 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AccountMapping account_mapping; 1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) account_mapping.account_id = "acc_id"; 1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Too many agruments. 1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(account_mapping.ParseFromString( 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "test@example.com&adding&1305797421259935&last_message_id_1&stuff_here")); 1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Too few arguments. 1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(account_mapping.ParseFromString( 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "test@example.com&removing&1305797421259935")); 1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Too few arguments. 1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(account_mapping.ParseFromString( 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "test@example.com&adding&1305797421259935")); 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Too few arguments. 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(account_mapping.ParseFromString( 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "test@example.com&new")); 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Too few arguments. 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(account_mapping.ParseFromString( 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "test@example.com&mapped")); 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Missing email. 1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(account_mapping.ParseFromString( 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "&remove&1305797421259935&last_message_id_2")); 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Missing mapping status. 1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(account_mapping.ParseFromString( 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "test@example.com&&1305797421259935&last_message_id_2")); 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Unkown mapping status. 1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(account_mapping.ParseFromString( 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "test@example.com&random&1305797421259935&last_message_id_2")); 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Missing mapping status change timestamp. 1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(account_mapping.ParseFromString( 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "test@gmail.com&removing&&last_message_id_2")); 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Last mapping status change timestamp not parseable. 1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(account_mapping.ParseFromString( 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "test@gmail.com&removing&asdfjkl&last_message_id_2")); 1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Missing last message ID. 1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(account_mapping.ParseFromString( 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "test@example.com&removing&1305797421259935&")); 1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace 1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace gcm 147