Home | History | Annotate | Download | only in engine
      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