Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(275)

Side by Side Diff: components/user_prefs/tracked/pref_hash_store_impl_unittest.cc

Issue 1908143002: Convert //components/user_prefs from scoped_ptr to std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Restore the rightful glory of <windows.h> Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/user_prefs/tracked/pref_hash_store_impl.h" 5 #include "components/user_prefs/tracked/pref_hash_store_impl.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/values.h" 10 #include "base/values.h"
11 #include "components/user_prefs/tracked/dictionary_hash_store_contents.h" 11 #include "components/user_prefs/tracked/dictionary_hash_store_contents.h"
12 #include "components/user_prefs/tracked/hash_store_contents.h" 12 #include "components/user_prefs/tracked/hash_store_contents.h"
13 #include "components/user_prefs/tracked/pref_hash_store_impl.h" 13 #include "components/user_prefs/tracked/pref_hash_store_impl.h"
14 #include "components/user_prefs/tracked/pref_hash_store_transaction.h" 14 #include "components/user_prefs/tracked/pref_hash_store_transaction.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 16
17 class PrefHashStoreImplTest : public testing::Test { 17 class PrefHashStoreImplTest : public testing::Test {
18 protected: 18 protected:
19 scoped_ptr<HashStoreContents> CreateHashStoreContents() { 19 std::unique_ptr<HashStoreContents> CreateHashStoreContents() {
20 return scoped_ptr<HashStoreContents>( 20 return std::unique_ptr<HashStoreContents>(
21 new DictionaryHashStoreContents(&pref_store_contents_)); 21 new DictionaryHashStoreContents(&pref_store_contents_));
22 } 22 }
23 23
24 private: 24 private:
25 base::DictionaryValue pref_store_contents_; 25 base::DictionaryValue pref_store_contents_;
26 }; 26 };
27 27
28 TEST_F(PrefHashStoreImplTest, AtomicHashStoreAndCheck) { 28 TEST_F(PrefHashStoreImplTest, AtomicHashStoreAndCheck) {
29 base::StringValue string_1("string1"); 29 base::StringValue string_1("string1");
30 base::StringValue string_2("string2"); 30 base::StringValue string_2("string2");
31 31
32 { 32 {
33 // 32 NULL bytes is the seed that was used to generate the legacy hash. 33 // 32 NULL bytes is the seed that was used to generate the legacy hash.
34 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true); 34 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
35 scoped_ptr<PrefHashStoreTransaction> transaction( 35 std::unique_ptr<PrefHashStoreTransaction> transaction(
36 pref_hash_store.BeginTransaction(CreateHashStoreContents())); 36 pref_hash_store.BeginTransaction(CreateHashStoreContents()));
37 37
38 // Only NULL should be trusted in the absence of a hash. 38 // Only NULL should be trusted in the absence of a hash.
39 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE, 39 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE,
40 transaction->CheckValue("path1", &string_1)); 40 transaction->CheckValue("path1", &string_1));
41 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_NULL_VALUE, 41 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_NULL_VALUE,
42 transaction->CheckValue("path1", NULL)); 42 transaction->CheckValue("path1", NULL));
43 43
44 transaction->StoreHash("path1", &string_1); 44 transaction->StoreHash("path1", &string_1);
45 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED, 45 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED,
(...skipping 16 matching lines...) Expand all
62 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED, 62 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED,
63 transaction->CheckValue("path1", &dict)); 63 transaction->CheckValue("path1", &dict));
64 } 64 }
65 65
66 ASSERT_FALSE(CreateHashStoreContents()->GetSuperMac().empty()); 66 ASSERT_FALSE(CreateHashStoreContents()->GetSuperMac().empty());
67 67
68 { 68 {
69 // |pref_hash_store2| should trust its initial hashes dictionary and thus 69 // |pref_hash_store2| should trust its initial hashes dictionary and thus
70 // trust new unknown values. 70 // trust new unknown values.
71 PrefHashStoreImpl pref_hash_store2(std::string(32, 0), "device_id", true); 71 PrefHashStoreImpl pref_hash_store2(std::string(32, 0), "device_id", true);
72 scoped_ptr<PrefHashStoreTransaction> transaction( 72 std::unique_ptr<PrefHashStoreTransaction> transaction(
73 pref_hash_store2.BeginTransaction(CreateHashStoreContents())); 73 pref_hash_store2.BeginTransaction(CreateHashStoreContents()));
74 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE, 74 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE,
75 transaction->CheckValue("new_path", &string_1)); 75 transaction->CheckValue("new_path", &string_1));
76 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE, 76 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE,
77 transaction->CheckValue("new_path", &string_2)); 77 transaction->CheckValue("new_path", &string_2));
78 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_NULL_VALUE, 78 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_NULL_VALUE,
79 transaction->CheckValue("new_path", NULL)); 79 transaction->CheckValue("new_path", NULL));
80 } 80 }
81 81
82 // Manually corrupt the super MAC. 82 // Manually corrupt the super MAC.
83 CreateHashStoreContents()->SetSuperMac(std::string(64, 'A')); 83 CreateHashStoreContents()->SetSuperMac(std::string(64, 'A'));
84 84
85 { 85 {
86 // |pref_hash_store3| should no longer trust its initial hashes dictionary 86 // |pref_hash_store3| should no longer trust its initial hashes dictionary
87 // and thus shouldn't trust non-NULL unknown values. 87 // and thus shouldn't trust non-NULL unknown values.
88 PrefHashStoreImpl pref_hash_store3(std::string(32, 0), "device_id", true); 88 PrefHashStoreImpl pref_hash_store3(std::string(32, 0), "device_id", true);
89 scoped_ptr<PrefHashStoreTransaction> transaction( 89 std::unique_ptr<PrefHashStoreTransaction> transaction(
90 pref_hash_store3.BeginTransaction(CreateHashStoreContents())); 90 pref_hash_store3.BeginTransaction(CreateHashStoreContents()));
91 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE, 91 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE,
92 transaction->CheckValue("new_path", &string_1)); 92 transaction->CheckValue("new_path", &string_1));
93 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE, 93 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE,
94 transaction->CheckValue("new_path", &string_2)); 94 transaction->CheckValue("new_path", &string_2));
95 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_NULL_VALUE, 95 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_NULL_VALUE,
96 transaction->CheckValue("new_path", NULL)); 96 transaction->CheckValue("new_path", NULL));
97 } 97 }
98 } 98 }
99 99
100 TEST_F(PrefHashStoreImplTest, ImportExportOperations) { 100 TEST_F(PrefHashStoreImplTest, ImportExportOperations) {
101 base::StringValue string_1("string1"); 101 base::StringValue string_1("string1");
102 base::StringValue string_2("string2"); 102 base::StringValue string_2("string2");
103 103
104 // Initial state: no super MAC. 104 // Initial state: no super MAC.
105 { 105 {
106 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true); 106 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
107 scoped_ptr<PrefHashStoreTransaction> transaction( 107 std::unique_ptr<PrefHashStoreTransaction> transaction(
108 pref_hash_store.BeginTransaction(CreateHashStoreContents())); 108 pref_hash_store.BeginTransaction(CreateHashStoreContents()));
109 ASSERT_FALSE(transaction->IsSuperMACValid()); 109 ASSERT_FALSE(transaction->IsSuperMACValid());
110 110
111 ASSERT_FALSE(transaction->HasHash("path1")); 111 ASSERT_FALSE(transaction->HasHash("path1"));
112 112
113 // Storing a hash will stamp the super MAC. 113 // Storing a hash will stamp the super MAC.
114 transaction->StoreHash("path1", &string_1); 114 transaction->StoreHash("path1", &string_1);
115 115
116 ASSERT_TRUE(transaction->HasHash("path1")); 116 ASSERT_TRUE(transaction->HasHash("path1"));
117 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED, 117 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED,
118 transaction->CheckValue("path1", &string_1)); 118 transaction->CheckValue("path1", &string_1));
119 EXPECT_EQ(PrefHashStoreTransaction::CHANGED, 119 EXPECT_EQ(PrefHashStoreTransaction::CHANGED,
120 transaction->CheckValue("path1", &string_2)); 120 transaction->CheckValue("path1", &string_2));
121 } 121 }
122 122
123 // Make a copy of the stored hash for future use. 123 // Make a copy of the stored hash for future use.
124 const base::Value* hash = NULL; 124 const base::Value* hash = NULL;
125 ASSERT_TRUE(CreateHashStoreContents()->GetContents()->Get("path1", &hash)); 125 ASSERT_TRUE(CreateHashStoreContents()->GetContents()->Get("path1", &hash));
126 scoped_ptr<base::Value> path_1_string_1_hash_copy(hash->DeepCopy()); 126 std::unique_ptr<base::Value> path_1_string_1_hash_copy(hash->DeepCopy());
127 hash = NULL; 127 hash = NULL;
128 128
129 // Verify that the super MAC was stamped. 129 // Verify that the super MAC was stamped.
130 { 130 {
131 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true); 131 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
132 scoped_ptr<PrefHashStoreTransaction> transaction( 132 std::unique_ptr<PrefHashStoreTransaction> transaction(
133 pref_hash_store.BeginTransaction(CreateHashStoreContents())); 133 pref_hash_store.BeginTransaction(CreateHashStoreContents()));
134 ASSERT_TRUE(transaction->IsSuperMACValid()); 134 ASSERT_TRUE(transaction->IsSuperMACValid());
135 ASSERT_TRUE(transaction->HasHash("path1")); 135 ASSERT_TRUE(transaction->HasHash("path1"));
136 136
137 // Clearing the hash should preserve validity. 137 // Clearing the hash should preserve validity.
138 transaction->ClearHash("path1"); 138 transaction->ClearHash("path1");
139 139
140 // The effects of the clear should be immediately visible. 140 // The effects of the clear should be immediately visible.
141 ASSERT_FALSE(transaction->HasHash("path1")); 141 ASSERT_FALSE(transaction->HasHash("path1"));
142 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_NULL_VALUE, 142 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_NULL_VALUE,
143 transaction->CheckValue("path1", NULL)); 143 transaction->CheckValue("path1", NULL));
144 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE, 144 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE,
145 transaction->CheckValue("path1", &string_1)); 145 transaction->CheckValue("path1", &string_1));
146 } 146 }
147 147
148 // Verify that validity was preserved and that the clear took effect. 148 // Verify that validity was preserved and that the clear took effect.
149 { 149 {
150 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true); 150 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
151 scoped_ptr<PrefHashStoreTransaction> transaction( 151 std::unique_ptr<PrefHashStoreTransaction> transaction(
152 pref_hash_store.BeginTransaction(CreateHashStoreContents())); 152 pref_hash_store.BeginTransaction(CreateHashStoreContents()));
153 ASSERT_TRUE(transaction->IsSuperMACValid()); 153 ASSERT_TRUE(transaction->IsSuperMACValid());
154 ASSERT_FALSE(transaction->HasHash("path1")); 154 ASSERT_FALSE(transaction->HasHash("path1"));
155 } 155 }
156 156
157 // Invalidate the super MAC. 157 // Invalidate the super MAC.
158 CreateHashStoreContents()->SetSuperMac(std::string()); 158 CreateHashStoreContents()->SetSuperMac(std::string());
159 159
160 { 160 {
161 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true); 161 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
162 scoped_ptr<PrefHashStoreTransaction> transaction( 162 std::unique_ptr<PrefHashStoreTransaction> transaction(
163 pref_hash_store.BeginTransaction(CreateHashStoreContents())); 163 pref_hash_store.BeginTransaction(CreateHashStoreContents()));
164 ASSERT_FALSE(transaction->IsSuperMACValid()); 164 ASSERT_FALSE(transaction->IsSuperMACValid());
165 ASSERT_FALSE(transaction->HasHash("path1")); 165 ASSERT_FALSE(transaction->HasHash("path1"));
166 166
167 // An import should preserve invalidity. 167 // An import should preserve invalidity.
168 transaction->ImportHash("path1", path_1_string_1_hash_copy.get()); 168 transaction->ImportHash("path1", path_1_string_1_hash_copy.get());
169 169
170 ASSERT_TRUE(transaction->HasHash("path1")); 170 ASSERT_TRUE(transaction->HasHash("path1"));
171 171
172 // The imported hash should be usable for validating the original value. 172 // The imported hash should be usable for validating the original value.
173 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED, 173 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED,
174 transaction->CheckValue("path1", &string_1)); 174 transaction->CheckValue("path1", &string_1));
175 } 175 }
176 176
177 // Verify that invalidity was preserved and that the import took effect. 177 // Verify that invalidity was preserved and that the import took effect.
178 { 178 {
179 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true); 179 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
180 scoped_ptr<PrefHashStoreTransaction> transaction( 180 std::unique_ptr<PrefHashStoreTransaction> transaction(
181 pref_hash_store.BeginTransaction(CreateHashStoreContents())); 181 pref_hash_store.BeginTransaction(CreateHashStoreContents()));
182 ASSERT_FALSE(transaction->IsSuperMACValid()); 182 ASSERT_FALSE(transaction->IsSuperMACValid());
183 ASSERT_TRUE(transaction->HasHash("path1")); 183 ASSERT_TRUE(transaction->HasHash("path1"));
184 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED, 184 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED,
185 transaction->CheckValue("path1", &string_1)); 185 transaction->CheckValue("path1", &string_1));
186 186
187 // After clearing the hash, non-null values are UNTRUSTED_UNKNOWN. 187 // After clearing the hash, non-null values are UNTRUSTED_UNKNOWN.
188 transaction->ClearHash("path1"); 188 transaction->ClearHash("path1");
189 189
190 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_NULL_VALUE, 190 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_NULL_VALUE,
191 transaction->CheckValue("path1", NULL)); 191 transaction->CheckValue("path1", NULL));
192 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE, 192 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE,
193 transaction->CheckValue("path1", &string_1)); 193 transaction->CheckValue("path1", &string_1));
194 } 194 }
195 195
196 { 196 {
197 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true); 197 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
198 scoped_ptr<PrefHashStoreTransaction> transaction( 198 std::unique_ptr<PrefHashStoreTransaction> transaction(
199 pref_hash_store.BeginTransaction(CreateHashStoreContents())); 199 pref_hash_store.BeginTransaction(CreateHashStoreContents()));
200 ASSERT_FALSE(transaction->IsSuperMACValid()); 200 ASSERT_FALSE(transaction->IsSuperMACValid());
201 201
202 // Test StampSuperMac. 202 // Test StampSuperMac.
203 transaction->StampSuperMac(); 203 transaction->StampSuperMac();
204 } 204 }
205 205
206 // Verify that the store is now valid. 206 // Verify that the store is now valid.
207 { 207 {
208 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true); 208 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
209 scoped_ptr<PrefHashStoreTransaction> transaction( 209 std::unique_ptr<PrefHashStoreTransaction> transaction(
210 pref_hash_store.BeginTransaction(CreateHashStoreContents())); 210 pref_hash_store.BeginTransaction(CreateHashStoreContents()));
211 ASSERT_TRUE(transaction->IsSuperMACValid()); 211 ASSERT_TRUE(transaction->IsSuperMACValid());
212 212
213 // Store the hash of a different value to test an "over-import". 213 // Store the hash of a different value to test an "over-import".
214 transaction->StoreHash("path1", &string_2); 214 transaction->StoreHash("path1", &string_2);
215 EXPECT_EQ(PrefHashStoreTransaction::CHANGED, 215 EXPECT_EQ(PrefHashStoreTransaction::CHANGED,
216 transaction->CheckValue("path1", &string_1)); 216 transaction->CheckValue("path1", &string_1));
217 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED, 217 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED,
218 transaction->CheckValue("path1", &string_2)); 218 transaction->CheckValue("path1", &string_2));
219 } 219 }
220 220
221 { 221 {
222 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true); 222 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
223 scoped_ptr<PrefHashStoreTransaction> transaction( 223 std::unique_ptr<PrefHashStoreTransaction> transaction(
224 pref_hash_store.BeginTransaction(CreateHashStoreContents())); 224 pref_hash_store.BeginTransaction(CreateHashStoreContents()));
225 ASSERT_TRUE(transaction->IsSuperMACValid()); 225 ASSERT_TRUE(transaction->IsSuperMACValid());
226 226
227 // "Over-import". An import should preserve validity. 227 // "Over-import". An import should preserve validity.
228 transaction->ImportHash("path1", path_1_string_1_hash_copy.get()); 228 transaction->ImportHash("path1", path_1_string_1_hash_copy.get());
229 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED, 229 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED,
230 transaction->CheckValue("path1", &string_1)); 230 transaction->CheckValue("path1", &string_1));
231 EXPECT_EQ(PrefHashStoreTransaction::CHANGED, 231 EXPECT_EQ(PrefHashStoreTransaction::CHANGED,
232 transaction->CheckValue("path1", &string_2)); 232 transaction->CheckValue("path1", &string_2));
233 } 233 }
234 234
235 // Verify that validity was preserved and the "over-import" took effect. 235 // Verify that validity was preserved and the "over-import" took effect.
236 { 236 {
237 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true); 237 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
238 scoped_ptr<PrefHashStoreTransaction> transaction( 238 std::unique_ptr<PrefHashStoreTransaction> transaction(
239 pref_hash_store.BeginTransaction(CreateHashStoreContents())); 239 pref_hash_store.BeginTransaction(CreateHashStoreContents()));
240 ASSERT_TRUE(transaction->IsSuperMACValid()); 240 ASSERT_TRUE(transaction->IsSuperMACValid());
241 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED, 241 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED,
242 transaction->CheckValue("path1", &string_1)); 242 transaction->CheckValue("path1", &string_1));
243 EXPECT_EQ(PrefHashStoreTransaction::CHANGED, 243 EXPECT_EQ(PrefHashStoreTransaction::CHANGED,
244 transaction->CheckValue("path1", &string_2)); 244 transaction->CheckValue("path1", &string_2));
245 } 245 }
246 } 246 }
247 247
248 TEST_F(PrefHashStoreImplTest, SuperMACDisabled) { 248 TEST_F(PrefHashStoreImplTest, SuperMACDisabled) {
249 base::StringValue string_1("string1"); 249 base::StringValue string_1("string1");
250 base::StringValue string_2("string2"); 250 base::StringValue string_2("string2");
251 251
252 { 252 {
253 // Pass |use_super_mac| => false. 253 // Pass |use_super_mac| => false.
254 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", false); 254 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", false);
255 scoped_ptr<PrefHashStoreTransaction> transaction( 255 std::unique_ptr<PrefHashStoreTransaction> transaction(
256 pref_hash_store.BeginTransaction(CreateHashStoreContents())); 256 pref_hash_store.BeginTransaction(CreateHashStoreContents()));
257 257
258 transaction->StoreHash("path1", &string_2); 258 transaction->StoreHash("path1", &string_2);
259 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED, 259 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED,
260 transaction->CheckValue("path1", &string_2)); 260 transaction->CheckValue("path1", &string_2));
261 } 261 }
262 262
263 ASSERT_TRUE(CreateHashStoreContents()->GetSuperMac().empty()); 263 ASSERT_TRUE(CreateHashStoreContents()->GetSuperMac().empty());
264 264
265 { 265 {
266 PrefHashStoreImpl pref_hash_store2(std::string(32, 0), "device_id", false); 266 PrefHashStoreImpl pref_hash_store2(std::string(32, 0), "device_id", false);
267 scoped_ptr<PrefHashStoreTransaction> transaction( 267 std::unique_ptr<PrefHashStoreTransaction> transaction(
268 pref_hash_store2.BeginTransaction(CreateHashStoreContents())); 268 pref_hash_store2.BeginTransaction(CreateHashStoreContents()));
269 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE, 269 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE,
270 transaction->CheckValue("new_path", &string_1)); 270 transaction->CheckValue("new_path", &string_1));
271 } 271 }
272 } 272 }
273 273
274 TEST_F(PrefHashStoreImplTest, SplitHashStoreAndCheck) { 274 TEST_F(PrefHashStoreImplTest, SplitHashStoreAndCheck) {
275 base::DictionaryValue dict; 275 base::DictionaryValue dict;
276 dict.Set("a", new base::StringValue("to be replaced")); 276 dict.Set("a", new base::StringValue("to be replaced"));
277 dict.Set("b", new base::StringValue("same")); 277 dict.Set("b", new base::StringValue("same"));
278 dict.Set("o", new base::StringValue("old")); 278 dict.Set("o", new base::StringValue("old"));
279 279
280 base::DictionaryValue modified_dict; 280 base::DictionaryValue modified_dict;
281 modified_dict.Set("a", new base::StringValue("replaced")); 281 modified_dict.Set("a", new base::StringValue("replaced"));
282 modified_dict.Set("b", new base::StringValue("same")); 282 modified_dict.Set("b", new base::StringValue("same"));
283 modified_dict.Set("c", new base::StringValue("new")); 283 modified_dict.Set("c", new base::StringValue("new"));
284 284
285 base::DictionaryValue empty_dict; 285 base::DictionaryValue empty_dict;
286 286
287 std::vector<std::string> invalid_keys; 287 std::vector<std::string> invalid_keys;
288 288
289 { 289 {
290 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true); 290 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
291 scoped_ptr<PrefHashStoreTransaction> transaction( 291 std::unique_ptr<PrefHashStoreTransaction> transaction(
292 pref_hash_store.BeginTransaction(CreateHashStoreContents())); 292 pref_hash_store.BeginTransaction(CreateHashStoreContents()));
293 293
294 // No hashes stored yet and hashes dictionary is empty (and thus not 294 // No hashes stored yet and hashes dictionary is empty (and thus not
295 // trusted). 295 // trusted).
296 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE, 296 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE,
297 transaction->CheckSplitValue("path1", &dict, &invalid_keys)); 297 transaction->CheckSplitValue("path1", &dict, &invalid_keys));
298 EXPECT_TRUE(invalid_keys.empty()); 298 EXPECT_TRUE(invalid_keys.empty());
299 299
300 transaction->StoreSplitHash("path1", &dict); 300 transaction->StoreSplitHash("path1", &dict);
301 301
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 expected_invalid_keys2.push_back("o"); 351 expected_invalid_keys2.push_back("o");
352 expected_invalid_keys2.push_back("c"); 352 expected_invalid_keys2.push_back("c");
353 EXPECT_EQ(expected_invalid_keys2, invalid_keys); 353 EXPECT_EQ(expected_invalid_keys2, invalid_keys);
354 invalid_keys.clear(); 354 invalid_keys.clear();
355 } 355 }
356 356
357 { 357 {
358 // |pref_hash_store2| should trust its initial hashes dictionary and thus 358 // |pref_hash_store2| should trust its initial hashes dictionary and thus
359 // trust new unknown values. 359 // trust new unknown values.
360 PrefHashStoreImpl pref_hash_store2(std::string(32, 0), "device_id", true); 360 PrefHashStoreImpl pref_hash_store2(std::string(32, 0), "device_id", true);
361 scoped_ptr<PrefHashStoreTransaction> transaction( 361 std::unique_ptr<PrefHashStoreTransaction> transaction(
362 pref_hash_store2.BeginTransaction(CreateHashStoreContents())); 362 pref_hash_store2.BeginTransaction(CreateHashStoreContents()));
363 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE, 363 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE,
364 transaction->CheckSplitValue("new_path", &dict, &invalid_keys)); 364 transaction->CheckSplitValue("new_path", &dict, &invalid_keys));
365 EXPECT_TRUE(invalid_keys.empty()); 365 EXPECT_TRUE(invalid_keys.empty());
366 } 366 }
367 367
368 // Manually corrupt the super MAC. 368 // Manually corrupt the super MAC.
369 CreateHashStoreContents()->SetSuperMac(std::string(64, 'A')); 369 CreateHashStoreContents()->SetSuperMac(std::string(64, 'A'));
370 370
371 { 371 {
372 // |pref_hash_store3| should no longer trust its initial hashes dictionary 372 // |pref_hash_store3| should no longer trust its initial hashes dictionary
373 // and thus shouldn't trust unknown values. 373 // and thus shouldn't trust unknown values.
374 PrefHashStoreImpl pref_hash_store3(std::string(32, 0), "device_id", true); 374 PrefHashStoreImpl pref_hash_store3(std::string(32, 0), "device_id", true);
375 scoped_ptr<PrefHashStoreTransaction> transaction( 375 std::unique_ptr<PrefHashStoreTransaction> transaction(
376 pref_hash_store3.BeginTransaction(CreateHashStoreContents())); 376 pref_hash_store3.BeginTransaction(CreateHashStoreContents()));
377 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE, 377 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE,
378 transaction->CheckSplitValue("new_path", &dict, &invalid_keys)); 378 transaction->CheckSplitValue("new_path", &dict, &invalid_keys));
379 EXPECT_TRUE(invalid_keys.empty()); 379 EXPECT_TRUE(invalid_keys.empty());
380 } 380 }
381 } 381 }
382 382
383 TEST_F(PrefHashStoreImplTest, EmptyAndNULLSplitDict) { 383 TEST_F(PrefHashStoreImplTest, EmptyAndNULLSplitDict) {
384 base::DictionaryValue empty_dict; 384 base::DictionaryValue empty_dict;
385 385
386 std::vector<std::string> invalid_keys; 386 std::vector<std::string> invalid_keys;
387 387
388 { 388 {
389 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true); 389 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
390 scoped_ptr<PrefHashStoreTransaction> transaction( 390 std::unique_ptr<PrefHashStoreTransaction> transaction(
391 pref_hash_store.BeginTransaction(CreateHashStoreContents())); 391 pref_hash_store.BeginTransaction(CreateHashStoreContents()));
392 392
393 // Store hashes for a random dict to be overwritten below. 393 // Store hashes for a random dict to be overwritten below.
394 base::DictionaryValue initial_dict; 394 base::DictionaryValue initial_dict;
395 initial_dict.Set("a", new base::StringValue("foo")); 395 initial_dict.Set("a", new base::StringValue("foo"));
396 transaction->StoreSplitHash("path1", &initial_dict); 396 transaction->StoreSplitHash("path1", &initial_dict);
397 397
398 // Verify stored empty dictionary matches NULL and empty dictionary back. 398 // Verify stored empty dictionary matches NULL and empty dictionary back.
399 transaction->StoreSplitHash("path1", &empty_dict); 399 transaction->StoreSplitHash("path1", &empty_dict);
400 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED, 400 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED,
(...skipping 15 matching lines...) Expand all
416 EXPECT_TRUE(invalid_keys.empty()); 416 EXPECT_TRUE(invalid_keys.empty());
417 } 417 }
418 418
419 { 419 {
420 // |pref_hash_store2| should trust its initial hashes dictionary (and thus 420 // |pref_hash_store2| should trust its initial hashes dictionary (and thus
421 // trust new unknown values) even though the last action done was to clear 421 // trust new unknown values) even though the last action done was to clear
422 // the hashes for path1 by setting its value to NULL (this is a regression 422 // the hashes for path1 by setting its value to NULL (this is a regression
423 // test ensuring that the internal action of clearing some hashes does 423 // test ensuring that the internal action of clearing some hashes does
424 // update the stored hash of hashes). 424 // update the stored hash of hashes).
425 PrefHashStoreImpl pref_hash_store2(std::string(32, 0), "device_id", true); 425 PrefHashStoreImpl pref_hash_store2(std::string(32, 0), "device_id", true);
426 scoped_ptr<PrefHashStoreTransaction> transaction( 426 std::unique_ptr<PrefHashStoreTransaction> transaction(
427 pref_hash_store2.BeginTransaction(CreateHashStoreContents())); 427 pref_hash_store2.BeginTransaction(CreateHashStoreContents()));
428 428
429 base::DictionaryValue tested_dict; 429 base::DictionaryValue tested_dict;
430 tested_dict.Set("a", new base::StringValue("foo")); 430 tested_dict.Set("a", new base::StringValue("foo"));
431 tested_dict.Set("b", new base::StringValue("bar")); 431 tested_dict.Set("b", new base::StringValue("bar"));
432 EXPECT_EQ( 432 EXPECT_EQ(
433 PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE, 433 PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE,
434 transaction->CheckSplitValue("new_path", &tested_dict, &invalid_keys)); 434 transaction->CheckSplitValue("new_path", &tested_dict, &invalid_keys));
435 EXPECT_TRUE(invalid_keys.empty()); 435 EXPECT_TRUE(invalid_keys.empty());
436 } 436 }
437 } 437 }
438 438
439 // Test that the PrefHashStore returns TRUSTED_UNKNOWN_VALUE when checking for 439 // Test that the PrefHashStore returns TRUSTED_UNKNOWN_VALUE when checking for
440 // a split preference even if there is an existing atomic preference's hash 440 // a split preference even if there is an existing atomic preference's hash
441 // stored. There is no point providing a migration path for preferences 441 // stored. There is no point providing a migration path for preferences
442 // switching strategies after their initial release as split preferences are 442 // switching strategies after their initial release as split preferences are
443 // turned into split preferences specifically because the atomic hash isn't 443 // turned into split preferences specifically because the atomic hash isn't
444 // considered useful. 444 // considered useful.
445 TEST_F(PrefHashStoreImplTest, TrustedUnknownSplitValueFromExistingAtomic) { 445 TEST_F(PrefHashStoreImplTest, TrustedUnknownSplitValueFromExistingAtomic) {
446 base::StringValue string("string1"); 446 base::StringValue string("string1");
447 447
448 base::DictionaryValue dict; 448 base::DictionaryValue dict;
449 dict.Set("a", new base::StringValue("foo")); 449 dict.Set("a", new base::StringValue("foo"));
450 dict.Set("d", new base::StringValue("bad")); 450 dict.Set("d", new base::StringValue("bad"));
451 dict.Set("b", new base::StringValue("bar")); 451 dict.Set("b", new base::StringValue("bar"));
452 dict.Set("c", new base::StringValue("baz")); 452 dict.Set("c", new base::StringValue("baz"));
453 453
454 { 454 {
455 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true); 455 PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
456 scoped_ptr<PrefHashStoreTransaction> transaction( 456 std::unique_ptr<PrefHashStoreTransaction> transaction(
457 pref_hash_store.BeginTransaction(CreateHashStoreContents())); 457 pref_hash_store.BeginTransaction(CreateHashStoreContents()));
458 458
459 transaction->StoreHash("path1", &string); 459 transaction->StoreHash("path1", &string);
460 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED, 460 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED,
461 transaction->CheckValue("path1", &string)); 461 transaction->CheckValue("path1", &string));
462 } 462 }
463 463
464 { 464 {
465 // Load a new |pref_hash_store2| in which the hashes dictionary is trusted. 465 // Load a new |pref_hash_store2| in which the hashes dictionary is trusted.
466 PrefHashStoreImpl pref_hash_store2(std::string(32, 0), "device_id", true); 466 PrefHashStoreImpl pref_hash_store2(std::string(32, 0), "device_id", true);
467 scoped_ptr<PrefHashStoreTransaction> transaction( 467 std::unique_ptr<PrefHashStoreTransaction> transaction(
468 pref_hash_store2.BeginTransaction(CreateHashStoreContents())); 468 pref_hash_store2.BeginTransaction(CreateHashStoreContents()));
469 std::vector<std::string> invalid_keys; 469 std::vector<std::string> invalid_keys;
470 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE, 470 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE,
471 transaction->CheckSplitValue("path1", &dict, &invalid_keys)); 471 transaction->CheckSplitValue("path1", &dict, &invalid_keys));
472 EXPECT_TRUE(invalid_keys.empty()); 472 EXPECT_TRUE(invalid_keys.empty());
473 } 473 }
474 } 474 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698