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

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

Issue 10827266: [Sync] Add SyncEncryptionHandler (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments 2 Created 8 years, 4 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 | Annotate | Revision Log
« sync/util/cryptographer.h ('K') | « sync/util/cryptographer.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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 "sync/util/cryptographer.h" 5 #include "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 "sync/internal_api/public/base/model_type_test_util.h"
12 #include "sync/protocol/nigori_specifics.pb.h"
13 #include "sync/protocol/password_specifics.pb.h" 11 #include "sync/protocol/password_specifics.pb.h"
14 #include "sync/test/fake_encryptor.h" 12 #include "sync/test/fake_encryptor.h"
15 #include "testing/gmock/include/gmock/gmock.h" 13 #include "testing/gmock/include/gmock/gmock.h"
16 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
17 15
18 namespace syncer { 16 namespace syncer {
19 17
20 namespace { 18 namespace {
21 19
22 using ::testing::_; 20 using ::testing::_;
23 using ::testing::Mock;
24 using ::testing::StrictMock;
25
26 class MockObserver : public Cryptographer::Observer {
27 public:
28 MOCK_METHOD2(OnEncryptedTypesChanged, void(ModelTypeSet, bool));
29 };
30 21
31 } // namespace 22 } // namespace
32 23
33 class SyncCryptographerTest : public ::testing::Test { 24 class SyncCryptographerTest : public ::testing::Test {
34 protected: 25 protected:
35 SyncCryptographerTest() : cryptographer_(&encryptor_) {} 26 SyncCryptographerTest() : cryptographer_(&encryptor_) {}
36 27
37 FakeEncryptor encryptor_; 28 FakeEncryptor encryptor_;
38 Cryptographer cryptographer_; 29 Cryptographer cryptographer_;
39 }; 30 };
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 cryptographer_.GetKeystoreKeyBootstrapToken(&token); 235 cryptographer_.GetKeystoreKeyBootstrapToken(&token);
245 EXPECT_FALSE(token.empty()); 236 EXPECT_FALSE(token.empty());
246 237
247 Cryptographer cryptographer2(&encryptor_); 238 Cryptographer cryptographer2(&encryptor_);
248 EXPECT_FALSE(cryptographer2.HasKeystoreKey()); 239 EXPECT_FALSE(cryptographer2.HasKeystoreKey());
249 cryptographer2.BootstrapKeystoreKey(token); 240 cryptographer2.BootstrapKeystoreKey(token);
250 EXPECT_TRUE(cryptographer2.HasKeystoreKey()); 241 EXPECT_TRUE(cryptographer2.HasKeystoreKey());
251 EXPECT_FALSE(cryptographer2.is_initialized()); 242 EXPECT_FALSE(cryptographer2.is_initialized());
252 } 243 }
253 244
254 TEST_F(SyncCryptographerTest, NigoriEncryptionTypes) {
255 Cryptographer cryptographer2(&encryptor_);
256 sync_pb::NigoriSpecifics nigori;
257
258 StrictMock<MockObserver> observer;
259 cryptographer_.AddObserver(&observer);
260 StrictMock<MockObserver> observer2;
261 cryptographer2.AddObserver(&observer2);
262
263 // Just set the sensitive types (shouldn't trigger any
264 // notifications).
265 ModelTypeSet encrypted_types(Cryptographer::SensitiveTypes());
266 cryptographer_.MergeEncryptedTypesForTest(encrypted_types);
267 cryptographer_.UpdateNigoriFromEncryptedTypes(&nigori);
268 cryptographer2.UpdateEncryptedTypesFromNigori(nigori);
269 EXPECT_TRUE(encrypted_types.Equals(cryptographer_.GetEncryptedTypes()));
270 EXPECT_TRUE(encrypted_types.Equals(cryptographer2.GetEncryptedTypes()));
271
272 Mock::VerifyAndClearExpectations(&observer);
273 Mock::VerifyAndClearExpectations(&observer2);
274
275 EXPECT_CALL(observer,
276 OnEncryptedTypesChanged(
277 HasModelTypes(ModelTypeSet::All()), false));
278 EXPECT_CALL(observer2,
279 OnEncryptedTypesChanged(
280 HasModelTypes(ModelTypeSet::All()), false));
281
282 // Set all encrypted types
283 encrypted_types = ModelTypeSet::All();
284 cryptographer_.MergeEncryptedTypesForTest(encrypted_types);
285 cryptographer_.UpdateNigoriFromEncryptedTypes(&nigori);
286 cryptographer2.UpdateEncryptedTypesFromNigori(nigori);
287 EXPECT_TRUE(encrypted_types.Equals(cryptographer_.GetEncryptedTypes()));
288 EXPECT_TRUE(encrypted_types.Equals(cryptographer2.GetEncryptedTypes()));
289
290 // Receiving an empty nigori should not reset any encrypted types or trigger
291 // an observer notification.
292 Mock::VerifyAndClearExpectations(&observer);
293 nigori = sync_pb::NigoriSpecifics();
294 cryptographer_.UpdateEncryptedTypesFromNigori(nigori);
295 EXPECT_TRUE(encrypted_types.Equals(cryptographer_.GetEncryptedTypes()));
296 }
297
298 TEST_F(SyncCryptographerTest, EncryptEverythingExplicit) {
299 ModelTypeSet real_types = ModelTypeSet::All();
300 sync_pb::NigoriSpecifics specifics;
301 specifics.set_encrypt_everything(true);
302
303 StrictMock<MockObserver> observer;
304 cryptographer_.AddObserver(&observer);
305
306 EXPECT_CALL(observer,
307 OnEncryptedTypesChanged(
308 HasModelTypes(ModelTypeSet::All()), true));
309
310 EXPECT_FALSE(cryptographer_.encrypt_everything());
311 ModelTypeSet encrypted_types = cryptographer_.GetEncryptedTypes();
312 for (ModelTypeSet::Iterator iter = real_types.First();
313 iter.Good(); iter.Inc()) {
314 if (iter.Get() == PASSWORDS || iter.Get() == NIGORI)
315 EXPECT_TRUE(encrypted_types.Has(iter.Get()));
316 else
317 EXPECT_FALSE(encrypted_types.Has(iter.Get()));
318 }
319
320 cryptographer_.UpdateEncryptedTypesFromNigori(specifics);
321
322 EXPECT_TRUE(cryptographer_.encrypt_everything());
323 encrypted_types = cryptographer_.GetEncryptedTypes();
324 for (ModelTypeSet::Iterator iter = real_types.First();
325 iter.Good(); iter.Inc()) {
326 EXPECT_TRUE(encrypted_types.Has(iter.Get()));
327 }
328
329 // Shouldn't trigger another notification.
330 specifics.set_encrypt_everything(true);
331
332 cryptographer_.RemoveObserver(&observer);
333 }
334
335 TEST_F(SyncCryptographerTest, EncryptEverythingImplicit) {
336 ModelTypeSet real_types = ModelTypeSet::All();
337 sync_pb::NigoriSpecifics specifics;
338 specifics.set_encrypt_bookmarks(true); // Non-passwords = encrypt everything
339
340 StrictMock<MockObserver> observer;
341 cryptographer_.AddObserver(&observer);
342
343 EXPECT_CALL(observer,
344 OnEncryptedTypesChanged(
345 HasModelTypes(ModelTypeSet::All()), true));
346
347 EXPECT_FALSE(cryptographer_.encrypt_everything());
348 ModelTypeSet encrypted_types = cryptographer_.GetEncryptedTypes();
349 for (ModelTypeSet::Iterator iter = real_types.First();
350 iter.Good(); iter.Inc()) {
351 if (iter.Get() == PASSWORDS || iter.Get() == NIGORI)
352 EXPECT_TRUE(encrypted_types.Has(iter.Get()));
353 else
354 EXPECT_FALSE(encrypted_types.Has(iter.Get()));
355 }
356
357 cryptographer_.UpdateEncryptedTypesFromNigori(specifics);
358
359 EXPECT_TRUE(cryptographer_.encrypt_everything());
360 encrypted_types = cryptographer_.GetEncryptedTypes();
361 for (ModelTypeSet::Iterator iter = real_types.First();
362 iter.Good(); iter.Inc()) {
363 EXPECT_TRUE(encrypted_types.Has(iter.Get()));
364 }
365
366 // Shouldn't trigger another notification.
367 specifics.set_encrypt_everything(true);
368
369 cryptographer_.RemoveObserver(&observer);
370 }
371
372 TEST_F(SyncCryptographerTest, UnknownSensitiveTypes) {
373 ModelTypeSet real_types = ModelTypeSet::All();
374 sync_pb::NigoriSpecifics specifics;
375 // Explicitly setting encrypt everything should override logic for implicit
376 // encrypt everything.
377 specifics.set_encrypt_everything(false);
378 specifics.set_encrypt_bookmarks(true);
379
380 StrictMock<MockObserver> observer;
381 cryptographer_.AddObserver(&observer);
382
383 ModelTypeSet expected_encrypted_types = Cryptographer::SensitiveTypes();
384 expected_encrypted_types.Put(BOOKMARKS);
385
386 EXPECT_CALL(observer,
387 OnEncryptedTypesChanged(
388 HasModelTypes(expected_encrypted_types), false));
389
390 EXPECT_FALSE(cryptographer_.encrypt_everything());
391 ModelTypeSet encrypted_types = cryptographer_.GetEncryptedTypes();
392 for (ModelTypeSet::Iterator iter = real_types.First();
393 iter.Good(); iter.Inc()) {
394 if (iter.Get() == PASSWORDS || iter.Get() == NIGORI)
395 EXPECT_TRUE(encrypted_types.Has(iter.Get()));
396 else
397 EXPECT_FALSE(encrypted_types.Has(iter.Get()));
398 }
399
400 cryptographer_.UpdateEncryptedTypesFromNigori(specifics);
401
402 EXPECT_FALSE(cryptographer_.encrypt_everything());
403 encrypted_types = cryptographer_.GetEncryptedTypes();
404 for (ModelTypeSet::Iterator iter = real_types.First();
405 iter.Good(); iter.Inc()) {
406 if (iter.Get() == PASSWORDS ||
407 iter.Get() == NIGORI ||
408 iter.Get() == BOOKMARKS)
409 EXPECT_TRUE(encrypted_types.Has(iter.Get()));
410 else
411 EXPECT_FALSE(encrypted_types.Has(iter.Get()));
412 }
413
414 cryptographer_.RemoveObserver(&observer);
415 }
416
417 } // namespace syncer 245 } // namespace syncer
OLDNEW
« sync/util/cryptographer.h ('K') | « sync/util/cryptographer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698