Home | History | Annotate | Download | only in invalidation
      1 // Copyright (c) 2012 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 "components/invalidation/invalidator_storage.h"
      6 
      7 #include "base/prefs/pref_service.h"
      8 #include "base/strings/string_util.h"
      9 #include "chrome/common/pref_names.h"
     10 #include "chrome/test/base/testing_pref_service_syncable.h"
     11 #include "sync/notifier/unacked_invalidation_set_test_util.h"
     12 #include "testing/gtest/include/gtest/gtest.h"
     13 
     14 namespace invalidation {
     15 
     16 class InvalidatorStorageTest : public testing::Test {
     17  public:
     18   InvalidatorStorageTest() {}
     19 
     20   virtual void SetUp() {
     21     InvalidatorStorage::RegisterProfilePrefs(pref_service_.registry());
     22   }
     23 
     24  protected:
     25   TestingPrefServiceSyncable pref_service_;
     26 };
     27 
     28 // Clearing the storage should erase all version map entries, bootstrap data,
     29 // and the client ID.
     30 TEST_F(InvalidatorStorageTest, Clear) {
     31   InvalidatorStorage storage(&pref_service_);
     32   EXPECT_TRUE(storage.GetBootstrapData().empty());
     33   EXPECT_TRUE(storage.GetInvalidatorClientId().empty());
     34 
     35   storage.ClearAndSetNewClientId("fake_id");
     36   EXPECT_EQ("fake_id", storage.GetInvalidatorClientId());
     37 
     38   storage.SetBootstrapData("test");
     39   EXPECT_EQ("test", storage.GetBootstrapData());
     40 
     41   storage.Clear();
     42 
     43   EXPECT_TRUE(storage.GetBootstrapData().empty());
     44   EXPECT_TRUE(storage.GetInvalidatorClientId().empty());
     45 }
     46 
     47 TEST_F(InvalidatorStorageTest, SetGetNotifierClientId) {
     48   InvalidatorStorage storage(&pref_service_);
     49   const std::string client_id("fK6eDzAIuKqx9A4+93bljg==");
     50 
     51   storage.ClearAndSetNewClientId(client_id);
     52   EXPECT_EQ(client_id, storage.GetInvalidatorClientId());
     53 }
     54 
     55 TEST_F(InvalidatorStorageTest, SetGetBootstrapData) {
     56   InvalidatorStorage storage(&pref_service_);
     57   const std::string mess("n\0tK\0\0l\344", 8);
     58   ASSERT_FALSE(base::IsStringUTF8(mess));
     59 
     60   storage.SetBootstrapData(mess);
     61   EXPECT_EQ(mess, storage.GetBootstrapData());
     62 }
     63 
     64 TEST_F(InvalidatorStorageTest, SaveGetInvalidations_Empty) {
     65   InvalidatorStorage storage(&pref_service_);
     66   syncer::UnackedInvalidationsMap empty_map;
     67   ASSERT_TRUE(empty_map.empty());
     68 
     69   storage.SetSavedInvalidations(empty_map);
     70   syncer::UnackedInvalidationsMap restored_map =
     71       storage.GetSavedInvalidations();
     72   EXPECT_TRUE(restored_map.empty());
     73 }
     74 
     75 TEST_F(InvalidatorStorageTest, SaveGetInvalidations) {
     76   InvalidatorStorage storage(&pref_service_);
     77 
     78   ObjectId id1(10, "object1");
     79   syncer::UnackedInvalidationSet storage1(id1);
     80   syncer::Invalidation unknown_version_inv =
     81       syncer::Invalidation::InitUnknownVersion(id1);
     82   syncer::Invalidation known_version_inv =
     83       syncer::Invalidation::Init(id1, 314, "payload");
     84   storage1.Add(unknown_version_inv);
     85   storage1.Add(known_version_inv);
     86 
     87   ObjectId id2(10, "object2");
     88   syncer::UnackedInvalidationSet storage2(id2);
     89   syncer::Invalidation obj2_inv =
     90       syncer::Invalidation::Init(id2, 1234, "payl\0ad\xff");
     91   storage2.Add(obj2_inv);
     92 
     93   syncer::UnackedInvalidationsMap map;
     94   map.insert(std::make_pair(storage1.object_id(), storage1));
     95   map.insert(std::make_pair(storage2.object_id(), storage2));
     96 
     97   storage.SetSavedInvalidations(map);
     98   syncer::UnackedInvalidationsMap restored_map =
     99       storage.GetSavedInvalidations();
    100 
    101   EXPECT_THAT(map, syncer::test_util::Eq(restored_map));
    102 }
    103 
    104 }  // namespace invalidation
    105