123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// found in the LICENSE file.
423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/browser/prefs/tracked/pref_service_hash_store_contents.h"
623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include <string>
823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/prefs/pref_service.h"
1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/prefs/testing_pref_service.h"
1123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/values.h"
1223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class PrefServiceHashStoreContentsTest : public testing::Test {
1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) public:
1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual void SetUp() OVERRIDE {
1723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    PrefServiceHashStoreContents::RegisterPrefs(local_state_.registry());
1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
2023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) protected:
2123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  TestingPrefServiceSimple local_state_;
2223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)};
2323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
2423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)TEST_F(PrefServiceHashStoreContentsTest, hash_store_id) {
2523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  PrefServiceHashStoreContents contents("store_id", &local_state_);
2623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  ASSERT_EQ("store_id", contents.hash_store_id());
2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
2923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)TEST_F(PrefServiceHashStoreContentsTest, IsInitialized) {
3023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  {
3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    PrefServiceHashStoreContents contents("store_id", &local_state_);
3223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_FALSE(contents.IsInitialized());
3323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    (*contents.GetMutableContents())->Set("foo", new base::StringValue("bar"));
3423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_TRUE(contents.IsInitialized());
3523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
3623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  {
3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    PrefServiceHashStoreContents contents("store_id", &local_state_);
3823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_TRUE(contents.IsInitialized());
3923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    PrefServiceHashStoreContents other_contents("other_store_id",
4023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                                                &local_state_);
4123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_FALSE(other_contents.IsInitialized());
4223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
4423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
4523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)TEST_F(PrefServiceHashStoreContentsTest, Reset) {
46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_FALSE(local_state_.GetUserPrefValue(
47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      PrefServiceHashStoreContents::kProfilePreferenceHashes));
48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
4923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  {
5023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    PrefServiceHashStoreContents contents("store_id", &local_state_);
5123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_FALSE(contents.IsInitialized());
5223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    (*contents.GetMutableContents())->Set("foo", new base::StringValue("bar"));
5323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_TRUE(contents.IsInitialized());
5423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    PrefServiceHashStoreContents other_contents("other_store_id",
5523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                                                &local_state_);
5623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    (*other_contents.GetMutableContents())
5723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        ->Set("foo", new base::StringValue("bar"));
5823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(local_state_.GetUserPrefValue(
61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      PrefServiceHashStoreContents::kProfilePreferenceHashes));
62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
6323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  {
6423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    PrefServiceHashStoreContents contents("store_id", &local_state_);
6523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_TRUE(contents.IsInitialized());
6623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    contents.Reset();
6723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_FALSE(contents.IsInitialized());
6823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(local_state_.GetUserPrefValue(
71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      PrefServiceHashStoreContents::kProfilePreferenceHashes));
72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
7323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  {
7423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    PrefServiceHashStoreContents contents("store_id", &local_state_);
7523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_FALSE(contents.IsInitialized());
7623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    PrefServiceHashStoreContents other_contents("other_store_id",
7723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                                                &local_state_);
7823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_TRUE(other_contents.IsInitialized());
7923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
8023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
8123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  {
8223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    PrefServiceHashStoreContents other_contents("other_store_id",
8323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                                                &local_state_);
84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    other_contents.Reset();
8523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
86f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
87f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_FALSE(local_state_.GetUserPrefValue(
88f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      PrefServiceHashStoreContents::kProfilePreferenceHashes));
8923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
9023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
9123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)TEST_F(PrefServiceHashStoreContentsTest, GetAndSetContents) {
9223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  {
9323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    PrefServiceHashStoreContents contents("store_id", &local_state_);
9423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_EQ(NULL, contents.GetContents());
9523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    (*contents.GetMutableContents())->Set("foo", new base::StringValue("bar"));
9623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_FALSE(contents.GetContents() == NULL);
9723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    std::string actual_value;
9823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_TRUE(contents.GetContents()->GetString("foo", &actual_value));
9923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_EQ("bar", actual_value);
10023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    PrefServiceHashStoreContents other_contents("other_store_id",
10123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                                                &local_state_);
10223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_EQ(NULL, other_contents.GetContents());
10323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
10423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  {
10523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    PrefServiceHashStoreContents contents("store_id", &local_state_);
10623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_FALSE(contents.GetContents() == NULL);
10723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
10823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
10923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
11023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)TEST_F(PrefServiceHashStoreContentsTest, GetAndSetSuperMac) {
11123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  {
11223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    PrefServiceHashStoreContents contents("store_id", &local_state_);
11323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_TRUE(contents.GetSuperMac().empty());
11423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    (*contents.GetMutableContents())->Set("foo", new base::StringValue("bar"));
11523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_TRUE(contents.GetSuperMac().empty());
11623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    contents.SetSuperMac("0123456789");
11723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_EQ("0123456789", contents.GetSuperMac());
11823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
11923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  {
12023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    PrefServiceHashStoreContents contents("store_id", &local_state_);
12123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_EQ("0123456789", contents.GetSuperMac());
12223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    PrefServiceHashStoreContents other_contents("other_store_id",
12323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                                                &local_state_);
12423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_TRUE(other_contents.GetSuperMac().empty());
12523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
12623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
12723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
12823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)TEST_F(PrefServiceHashStoreContentsTest, ResetAllPrefHashStores) {
12923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  {
13023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    PrefServiceHashStoreContents contents_1("store_id_1", &local_state_);
13123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    PrefServiceHashStoreContents contents_2("store_id_2", &local_state_);
13223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    (*contents_1.GetMutableContents())
13323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        ->Set("foo", new base::StringValue("bar"));
13423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    (*contents_2.GetMutableContents())
13523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        ->Set("foo", new base::StringValue("bar"));
13623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
13723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  {
13823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    PrefServiceHashStoreContents contents_1("store_id_1", &local_state_);
13923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    PrefServiceHashStoreContents contents_2("store_id_2", &local_state_);
14023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_TRUE(contents_1.IsInitialized());
14123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_TRUE(contents_2.IsInitialized());
14223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
14323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
14423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  PrefServiceHashStoreContents::ResetAllPrefHashStores(&local_state_);
14523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
14623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  {
14723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    PrefServiceHashStoreContents contents_1("store_id_1", &local_state_);
14823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    PrefServiceHashStoreContents contents_2("store_id_2", &local_state_);
14923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_FALSE(contents_1.IsInitialized());
15023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_FALSE(contents_2.IsInitialized());
15123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
15223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
153