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

Side by Side Diff: chrome/browser/sync/util/cryptographer_unittest.cc

Issue 8851006: [Sync] Replace all instances of ModelTypeSet with ModelEnumSet (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Cleanup Created 9 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/browser/sync/util/cryptographer.h" 5 #include "chrome/browser/sync/util/cryptographer.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
11 #include "chrome/browser/password_manager/encryptor.h" 11 #include "chrome/browser/password_manager/encryptor.h"
12 #include "chrome/browser/sync/protocol/nigori_specifics.pb.h" 12 #include "chrome/browser/sync/protocol/nigori_specifics.pb.h"
13 #include "chrome/browser/sync/protocol/password_specifics.pb.h" 13 #include "chrome/browser/sync/protocol/password_specifics.pb.h"
14 #include "chrome/browser/sync/syncable/model_type_test_util.h"
14 #include "testing/gmock/include/gmock/gmock.h" 15 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
16 17
17 namespace browser_sync { 18 namespace browser_sync {
18 19
20 using ::testing::_;
19 using ::testing::Mock; 21 using ::testing::Mock;
20 using ::testing::StrictMock; 22 using ::testing::StrictMock;
21 using syncable::ModelTypeSet; 23 using syncable::ModelEnumSet;
22 24
23 namespace { 25 namespace {
24 26
25 class MockObserver : public Cryptographer::Observer { 27 class MockObserver : public Cryptographer::Observer {
26 public: 28 public:
27 MOCK_METHOD2(OnEncryptedTypesChanged, 29 MOCK_METHOD2(OnEncryptedTypesChanged,
28 void(const syncable::ModelTypeSet&, bool)); 30 void(syncable::ModelEnumSet, bool));
29 }; 31 };
30 32
31 } // namespace 33 } // namespace
32 34
33 TEST(CryptographerTest, EmptyCantDecrypt) { 35 TEST(CryptographerTest, EmptyCantDecrypt) {
34 Cryptographer cryptographer; 36 Cryptographer cryptographer;
35 EXPECT_FALSE(cryptographer.is_ready()); 37 EXPECT_FALSE(cryptographer.is_ready());
36 38
37 sync_pb::EncryptedData encrypted; 39 sync_pb::EncryptedData encrypted;
38 encrypted.set_key_name("foo"); 40 encrypted.set_key_name("foo");
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 Cryptographer cryptographer2; 201 Cryptographer cryptographer2;
200 sync_pb::NigoriSpecifics nigori; 202 sync_pb::NigoriSpecifics nigori;
201 203
202 StrictMock<MockObserver> observer; 204 StrictMock<MockObserver> observer;
203 cryptographer.AddObserver(&observer); 205 cryptographer.AddObserver(&observer);
204 StrictMock<MockObserver> observer2; 206 StrictMock<MockObserver> observer2;
205 cryptographer2.AddObserver(&observer2); 207 cryptographer2.AddObserver(&observer2);
206 208
207 // Just set the sensitive types (shouldn't trigger any 209 // Just set the sensitive types (shouldn't trigger any
208 // notifications). 210 // notifications).
209 ModelTypeSet encrypted_types(Cryptographer::SensitiveTypes()); 211 ModelEnumSet encrypted_types(Cryptographer::SensitiveTypes());
210 cryptographer.MergeEncryptedTypesForTest(encrypted_types); 212 cryptographer.MergeEncryptedTypesForTest(encrypted_types);
211 cryptographer.UpdateNigoriFromEncryptedTypes(&nigori); 213 cryptographer.UpdateNigoriFromEncryptedTypes(&nigori);
212 cryptographer2.UpdateEncryptedTypesFromNigori(nigori); 214 cryptographer2.UpdateEncryptedTypesFromNigori(nigori);
213 EXPECT_EQ(encrypted_types, cryptographer.GetEncryptedTypes()); 215 EXPECT_TRUE(encrypted_types.Equals(cryptographer.GetEncryptedTypes()));
214 EXPECT_EQ(encrypted_types, cryptographer2.GetEncryptedTypes()); 216 EXPECT_TRUE(encrypted_types.Equals(cryptographer2.GetEncryptedTypes()));
215 217
216 Mock::VerifyAndClearExpectations(&observer); 218 Mock::VerifyAndClearExpectations(&observer);
217 Mock::VerifyAndClearExpectations(&observer2); 219 Mock::VerifyAndClearExpectations(&observer2);
218 220
219 EXPECT_CALL(observer, 221 EXPECT_CALL(observer,
220 OnEncryptedTypesChanged(syncable::GetAllRealModelTypes(), 222 OnEncryptedTypesChanged(
221 false)); 223 HasModelTypes(syncable::ModelEnumSet::All()),
224 false));
222 EXPECT_CALL(observer2, 225 EXPECT_CALL(observer2,
223 OnEncryptedTypesChanged(syncable::GetAllRealModelTypes(), 226 OnEncryptedTypesChanged(_,
Nicolas Zea 2011/12/08 01:49:37 modelenumset::all?
akalin 2011/12/09 19:10:10 Done.
224 false)); 227 false));
225 228
226 // Set all encrypted types 229 // Set all encrypted types
227 encrypted_types = syncable::GetAllRealModelTypes(); 230 encrypted_types = syncable::ModelEnumSet::All();
228 cryptographer.MergeEncryptedTypesForTest(encrypted_types); 231 cryptographer.MergeEncryptedTypesForTest(encrypted_types);
229 cryptographer.UpdateNigoriFromEncryptedTypes(&nigori); 232 cryptographer.UpdateNigoriFromEncryptedTypes(&nigori);
230 cryptographer2.UpdateEncryptedTypesFromNigori(nigori); 233 cryptographer2.UpdateEncryptedTypesFromNigori(nigori);
231 EXPECT_EQ(encrypted_types, cryptographer.GetEncryptedTypes()); 234 EXPECT_TRUE(encrypted_types.Equals(cryptographer.GetEncryptedTypes()));
232 EXPECT_EQ(encrypted_types, cryptographer2.GetEncryptedTypes()); 235 EXPECT_TRUE(encrypted_types.Equals(cryptographer2.GetEncryptedTypes()));
233 236
234 // Receiving an empty nigori should not reset any encrypted types or trigger 237 // Receiving an empty nigori should not reset any encrypted types or trigger
235 // an observer notification. 238 // an observer notification.
236 Mock::VerifyAndClearExpectations(&observer); 239 Mock::VerifyAndClearExpectations(&observer);
237 nigori = sync_pb::NigoriSpecifics(); 240 nigori = sync_pb::NigoriSpecifics();
238 cryptographer.UpdateEncryptedTypesFromNigori(nigori); 241 cryptographer.UpdateEncryptedTypesFromNigori(nigori);
239 EXPECT_EQ(encrypted_types, cryptographer.GetEncryptedTypes()); 242 EXPECT_TRUE(encrypted_types.Equals(cryptographer.GetEncryptedTypes()));
240 } 243 }
241 244
242 TEST(CryptographerTest, EncryptEverythingExplicit) { 245 TEST(CryptographerTest, EncryptEverythingExplicit) {
243 ModelTypeSet real_types = syncable::GetAllRealModelTypes(); 246 ModelEnumSet real_types = syncable::ModelEnumSet::All();
244 sync_pb::NigoriSpecifics specifics; 247 sync_pb::NigoriSpecifics specifics;
245 specifics.set_encrypt_everything(true); 248 specifics.set_encrypt_everything(true);
246 249
247 Cryptographer cryptographer; 250 Cryptographer cryptographer;
248 StrictMock<MockObserver> observer; 251 StrictMock<MockObserver> observer;
249 cryptographer.AddObserver(&observer); 252 cryptographer.AddObserver(&observer);
250 253
251 EXPECT_CALL(observer, 254 EXPECT_CALL(observer,
252 OnEncryptedTypesChanged(syncable::GetAllRealModelTypes(), 255 OnEncryptedTypesChanged(
253 true)); 256 HasModelTypes(syncable::ModelEnumSet::All()), true));
254 257
255 EXPECT_FALSE(cryptographer.encrypt_everything()); 258 EXPECT_FALSE(cryptographer.encrypt_everything());
256 ModelTypeSet encrypted_types = cryptographer.GetEncryptedTypes(); 259 ModelEnumSet encrypted_types = cryptographer.GetEncryptedTypes();
257 for (ModelTypeSet::iterator iter = real_types.begin(); 260 for (ModelEnumSet::Iterator iter = real_types.First();
258 iter != real_types.end(); 261 iter.Good(); iter.Inc()) {
259 ++iter) { 262 if (iter.Get() == syncable::PASSWORDS || iter.Get() == syncable::NIGORI)
260 if (*iter == syncable::PASSWORDS || *iter == syncable::NIGORI) 263 EXPECT_TRUE(encrypted_types.Has(iter.Get()));
261 EXPECT_EQ(1U, encrypted_types.count(*iter));
262 else 264 else
263 EXPECT_EQ(0U, encrypted_types.count(*iter)); 265 EXPECT_FALSE(encrypted_types.Has(iter.Get()));
264 } 266 }
265 267
266 cryptographer.UpdateEncryptedTypesFromNigori(specifics); 268 cryptographer.UpdateEncryptedTypesFromNigori(specifics);
267 269
268 EXPECT_TRUE(cryptographer.encrypt_everything()); 270 EXPECT_TRUE(cryptographer.encrypt_everything());
269 encrypted_types = cryptographer.GetEncryptedTypes(); 271 encrypted_types = cryptographer.GetEncryptedTypes();
270 for (ModelTypeSet::iterator iter = real_types.begin(); 272 for (ModelEnumSet::Iterator iter = real_types.First();
271 iter != real_types.end(); 273 iter.Good(); iter.Inc()) {
272 ++iter) { 274 EXPECT_TRUE(encrypted_types.Has(iter.Get()));
273 EXPECT_EQ(1U, encrypted_types.count(*iter));
274 } 275 }
275 276
276 // Shouldn't trigger another notification. 277 // Shouldn't trigger another notification.
277 specifics.set_encrypt_everything(true); 278 specifics.set_encrypt_everything(true);
278 279
279 cryptographer.RemoveObserver(&observer); 280 cryptographer.RemoveObserver(&observer);
280 } 281 }
281 282
282 TEST(CryptographerTest, EncryptEverythingImplicit) { 283 TEST(CryptographerTest, EncryptEverythingImplicit) {
283 ModelTypeSet real_types = syncable::GetAllRealModelTypes(); 284 ModelEnumSet real_types = syncable::ModelEnumSet::All();
284 sync_pb::NigoriSpecifics specifics; 285 sync_pb::NigoriSpecifics specifics;
285 specifics.set_encrypt_bookmarks(true); // Non-passwords = encrypt everything 286 specifics.set_encrypt_bookmarks(true); // Non-passwords = encrypt everything
286 287
287 Cryptographer cryptographer; 288 Cryptographer cryptographer;
288 StrictMock<MockObserver> observer; 289 StrictMock<MockObserver> observer;
289 cryptographer.AddObserver(&observer); 290 cryptographer.AddObserver(&observer);
290 291
291 EXPECT_CALL(observer, 292 EXPECT_CALL(observer,
292 OnEncryptedTypesChanged(syncable::GetAllRealModelTypes(), 293 OnEncryptedTypesChanged(
293 true)); 294 HasModelTypes(syncable::ModelEnumSet::All()), true));
294 295
295 EXPECT_FALSE(cryptographer.encrypt_everything()); 296 EXPECT_FALSE(cryptographer.encrypt_everything());
296 ModelTypeSet encrypted_types = cryptographer.GetEncryptedTypes(); 297 ModelEnumSet encrypted_types = cryptographer.GetEncryptedTypes();
297 for (ModelTypeSet::iterator iter = real_types.begin(); 298 for (ModelEnumSet::Iterator iter = real_types.First();
298 iter != real_types.end(); 299 iter.Good(); iter.Inc()) {
299 ++iter) { 300 if (iter.Get() == syncable::PASSWORDS || iter.Get() == syncable::NIGORI)
300 if (*iter == syncable::PASSWORDS || *iter == syncable::NIGORI) 301 EXPECT_TRUE(encrypted_types.Has(iter.Get()));
301 EXPECT_EQ(1U, encrypted_types.count(*iter));
302 else 302 else
303 EXPECT_EQ(0U, encrypted_types.count(*iter)); 303 EXPECT_FALSE(encrypted_types.Has(iter.Get()));
304 } 304 }
305 305
306 cryptographer.UpdateEncryptedTypesFromNigori(specifics); 306 cryptographer.UpdateEncryptedTypesFromNigori(specifics);
307 307
308 EXPECT_TRUE(cryptographer.encrypt_everything()); 308 EXPECT_TRUE(cryptographer.encrypt_everything());
309 encrypted_types = cryptographer.GetEncryptedTypes(); 309 encrypted_types = cryptographer.GetEncryptedTypes();
310 for (ModelTypeSet::iterator iter = real_types.begin(); 310 for (ModelEnumSet::Iterator iter = real_types.First();
311 iter != real_types.end(); 311 iter.Good(); iter.Inc()) {
312 ++iter) { 312 EXPECT_TRUE(encrypted_types.Has(iter.Get()));
313 EXPECT_EQ(1U, encrypted_types.count(*iter));
314 } 313 }
315 314
316 // Shouldn't trigger another notification. 315 // Shouldn't trigger another notification.
317 specifics.set_encrypt_everything(true); 316 specifics.set_encrypt_everything(true);
318 317
319 cryptographer.RemoveObserver(&observer); 318 cryptographer.RemoveObserver(&observer);
320 } 319 }
321 320
322 TEST(CryptographerTest, UnknownSensitiveTypes) { 321 TEST(CryptographerTest, UnknownSensitiveTypes) {
323 ModelTypeSet real_types = syncable::GetAllRealModelTypes(); 322 ModelEnumSet real_types = syncable::ModelEnumSet::All();
324 sync_pb::NigoriSpecifics specifics; 323 sync_pb::NigoriSpecifics specifics;
325 // Explicitly setting encrypt everything should override logic for implicit 324 // Explicitly setting encrypt everything should override logic for implicit
326 // encrypt everything. 325 // encrypt everything.
327 specifics.set_encrypt_everything(false); 326 specifics.set_encrypt_everything(false);
328 specifics.set_encrypt_bookmarks(true); 327 specifics.set_encrypt_bookmarks(true);
329 328
330 Cryptographer cryptographer; 329 Cryptographer cryptographer;
331 StrictMock<MockObserver> observer; 330 StrictMock<MockObserver> observer;
332 cryptographer.AddObserver(&observer); 331 cryptographer.AddObserver(&observer);
333 332
334 syncable::ModelTypeSet expected_encrypted_types = 333 syncable::ModelEnumSet expected_encrypted_types =
335 Cryptographer::SensitiveTypes(); 334 Cryptographer::SensitiveTypes();
336 expected_encrypted_types.insert(syncable::BOOKMARKS); 335 expected_encrypted_types.Put(syncable::BOOKMARKS);
337 336
338 EXPECT_CALL(observer, 337 EXPECT_CALL(observer,
339 OnEncryptedTypesChanged(expected_encrypted_types, 338 OnEncryptedTypesChanged(
340 false)); 339 HasModelTypes(expected_encrypted_types), false));
341 340
342 EXPECT_FALSE(cryptographer.encrypt_everything()); 341 EXPECT_FALSE(cryptographer.encrypt_everything());
343 ModelTypeSet encrypted_types = cryptographer.GetEncryptedTypes(); 342 ModelEnumSet encrypted_types = cryptographer.GetEncryptedTypes();
344 for (ModelTypeSet::iterator iter = real_types.begin(); 343 for (ModelEnumSet::Iterator iter = real_types.First();
345 iter != real_types.end(); 344 iter.Good(); iter.Inc()) {
346 ++iter) { 345 if (iter.Get() == syncable::PASSWORDS || iter.Get() == syncable::NIGORI)
347 if (*iter == syncable::PASSWORDS || *iter == syncable::NIGORI) 346 EXPECT_TRUE(encrypted_types.Has(iter.Get()));
348 EXPECT_EQ(1U, encrypted_types.count(*iter));
349 else 347 else
350 EXPECT_EQ(0U, encrypted_types.count(*iter)); 348 EXPECT_FALSE(encrypted_types.Has(iter.Get()));
351 } 349 }
352 350
353 cryptographer.UpdateEncryptedTypesFromNigori(specifics); 351 cryptographer.UpdateEncryptedTypesFromNigori(specifics);
354 352
355 EXPECT_FALSE(cryptographer.encrypt_everything()); 353 EXPECT_FALSE(cryptographer.encrypt_everything());
356 encrypted_types = cryptographer.GetEncryptedTypes(); 354 encrypted_types = cryptographer.GetEncryptedTypes();
357 for (ModelTypeSet::iterator iter = real_types.begin(); 355 for (ModelEnumSet::Iterator iter = real_types.First();
358 iter != real_types.end(); 356 iter.Good(); iter.Inc()) {
359 ++iter) { 357 if (iter.Get() == syncable::PASSWORDS ||
360 if (*iter == syncable::PASSWORDS || 358 iter.Get() == syncable::NIGORI ||
361 *iter == syncable::NIGORI || 359 iter.Get() == syncable::BOOKMARKS)
362 *iter == syncable::BOOKMARKS) 360 EXPECT_TRUE(encrypted_types.Has(iter.Get()));
363 EXPECT_EQ(1U, encrypted_types.count(*iter));
364 else 361 else
365 EXPECT_EQ(0U, encrypted_types.count(*iter)); 362 EXPECT_FALSE(encrypted_types.Has(iter.Get()));
366 } 363 }
367 364
368 cryptographer.RemoveObserver(&observer); 365 cryptographer.RemoveObserver(&observer);
369 } 366 }
370 367
371 } // namespace browser_sync 368 } // namespace browser_sync
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698