OLD | NEW |
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 // Unit tests for the SyncApi. Note that a lot of the underlying | 5 // Unit tests for the SyncApi. Note that a lot of the underlying |
6 // functionality is provided by the Syncable layer, which has its own | 6 // functionality is provided by the Syncable layer, which has its own |
7 // unit tests. We'll test SyncApi specific things in this harness. | 7 // unit tests. We'll test SyncApi specific things in this harness. |
8 | 8 |
9 #include <cstddef> | 9 #include <cstddef> |
10 #include <map> | 10 #include <map> |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 entry.Put(syncable::SPECIFICS, specifics); | 218 entry.Put(syncable::SPECIFICS, specifics); |
219 return entry.Get(syncable::META_HANDLE); | 219 return entry.Get(syncable::META_HANDLE); |
220 } | 220 } |
221 | 221 |
222 } // namespace | 222 } // namespace |
223 | 223 |
224 class SyncApiTest : public testing::Test { | 224 class SyncApiTest : public testing::Test { |
225 public: | 225 public: |
226 virtual void SetUp() { | 226 virtual void SetUp() { |
227 test_user_share_.SetUp(); | 227 test_user_share_.SetUp(); |
228 SetUpEncryption(); | |
229 } | 228 } |
230 | 229 |
231 virtual void TearDown() { | 230 virtual void TearDown() { |
232 test_user_share_.TearDown(); | 231 test_user_share_.TearDown(); |
233 } | 232 } |
234 | 233 |
235 void SetUpEncryption() { | |
236 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | |
237 encryption_handler_.reset( | |
238 new SyncEncryptionHandlerImpl(test_user_share_.user_share(), | |
239 trans.GetCryptographer())); | |
240 trans.GetCryptographer()->SetNigoriHandler(encryption_handler_.get()); | |
241 } | |
242 | |
243 protected: | 234 protected: |
244 MessageLoop message_loop_; | 235 MessageLoop message_loop_; |
245 TestUserShare test_user_share_; | 236 TestUserShare test_user_share_; |
246 scoped_ptr<SyncEncryptionHandlerImpl> encryption_handler_; | |
247 }; | 237 }; |
248 | 238 |
249 TEST_F(SyncApiTest, SanityCheckTest) { | 239 TEST_F(SyncApiTest, SanityCheckTest) { |
250 { | 240 { |
251 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | 241 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); |
252 EXPECT_TRUE(trans.GetWrappedTrans() != NULL); | 242 EXPECT_TRUE(trans.GetWrappedTrans()); |
253 } | 243 } |
254 { | 244 { |
255 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); | 245 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); |
256 EXPECT_TRUE(trans.GetWrappedTrans() != NULL); | 246 EXPECT_TRUE(trans.GetWrappedTrans()); |
257 } | 247 } |
258 { | 248 { |
259 // No entries but root should exist | 249 // No entries but root should exist |
260 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | 250 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); |
261 ReadNode node(&trans); | 251 ReadNode node(&trans); |
262 // Metahandle 1 can be root, sanity check 2 | 252 // Metahandle 1 can be root, sanity check 2 |
263 EXPECT_EQ(BaseNode::INIT_FAILED_ENTRY_NOT_GOOD, node.InitByIdLookup(2)); | 253 EXPECT_EQ(BaseNode::INIT_FAILED_ENTRY_NOT_GOOD, node.InitByIdLookup(2)); |
264 } | 254 } |
265 } | 255 } |
266 | 256 |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
476 EXPECT_EQ("secret", data.password_value()); | 466 EXPECT_EQ("secret", data.password_value()); |
477 } | 467 } |
478 } | 468 } |
479 | 469 |
480 TEST_F(SyncApiTest, WriteEncryptedTitle) { | 470 TEST_F(SyncApiTest, WriteEncryptedTitle) { |
481 KeyParams params = {"localhost", "username", "passphrase"}; | 471 KeyParams params = {"localhost", "username", "passphrase"}; |
482 { | 472 { |
483 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | 473 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); |
484 trans.GetCryptographer()->AddKey(params); | 474 trans.GetCryptographer()->AddKey(params); |
485 } | 475 } |
486 encryption_handler_->EnableEncryptEverything(); | 476 test_user_share_.encryption_handler()->EnableEncryptEverything(); |
487 { | 477 { |
488 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); | 478 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); |
489 ReadNode root_node(&trans); | 479 ReadNode root_node(&trans); |
490 root_node.InitByRootLookup(); | 480 root_node.InitByRootLookup(); |
491 | 481 |
492 WriteNode bookmark_node(&trans); | 482 WriteNode bookmark_node(&trans); |
493 WriteNode::InitUniqueByCreationResult result = | 483 WriteNode::InitUniqueByCreationResult result = |
494 bookmark_node.InitUniqueByCreation(BOOKMARKS, | 484 bookmark_node.InitUniqueByCreation(BOOKMARKS, |
495 root_node, "foo"); | 485 root_node, "foo"); |
496 EXPECT_EQ(WriteNode::INIT_SUCCESS, result); | 486 EXPECT_EQ(WriteNode::INIT_SUCCESS, result); |
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
834 return false; | 824 return false; |
835 if (encryption_status != UNINITIALIZED) { | 825 if (encryption_status != UNINITIALIZED) { |
836 KeyParams params = {"localhost", "dummy", "foobar"}; | 826 KeyParams params = {"localhost", "dummy", "foobar"}; |
837 cryptographer->AddKey(params); | 827 cryptographer->AddKey(params); |
838 } else { | 828 } else { |
839 DCHECK_NE(nigori_status, WRITE_TO_NIGORI); | 829 DCHECK_NE(nigori_status, WRITE_TO_NIGORI); |
840 } | 830 } |
841 if (nigori_status == WRITE_TO_NIGORI) { | 831 if (nigori_status == WRITE_TO_NIGORI) { |
842 sync_pb::NigoriSpecifics nigori; | 832 sync_pb::NigoriSpecifics nigori; |
843 cryptographer->GetKeys(nigori.mutable_encrypted()); | 833 cryptographer->GetKeys(nigori.mutable_encrypted()); |
844 cryptographer->UpdateNigoriFromEncryptedTypes( | 834 share->directory->GetNigoriHandler()->UpdateNigoriFromEncryptedTypes( |
845 &nigori, | 835 &nigori, |
846 trans.GetWrappedTrans()); | 836 trans.GetWrappedTrans()); |
847 WriteNode node(&trans); | 837 WriteNode node(&trans); |
848 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(nigori_id)); | 838 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(nigori_id)); |
849 node.SetNigoriSpecifics(nigori); | 839 node.SetNigoriSpecifics(nigori); |
850 } | 840 } |
851 return cryptographer->is_ready(); | 841 return cryptographer->is_ready(); |
852 } | 842 } |
853 | 843 |
854 int64 GetIdForDataType(ModelType type) { | 844 int64 GetIdForDataType(ModelType type) { |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
897 } | 887 } |
898 | 888 |
899 // Returns true if we are currently encrypting all sync data. May | 889 // Returns true if we are currently encrypting all sync data. May |
900 // be called on any thread. | 890 // be called on any thread. |
901 bool EncryptEverythingEnabledForTest() { | 891 bool EncryptEverythingEnabledForTest() { |
902 return sync_manager_.GetEncryptionHandler()->EncryptEverythingEnabled(); | 892 return sync_manager_.GetEncryptionHandler()->EncryptEverythingEnabled(); |
903 } | 893 } |
904 | 894 |
905 // Gets the set of encrypted types from the cryptographer | 895 // Gets the set of encrypted types from the cryptographer |
906 // Note: opens a transaction. May be called from any thread. | 896 // Note: opens a transaction. May be called from any thread. |
907 syncer::ModelTypeSet GetEncryptedDataTypesForTest() { | 897 ModelTypeSet GetEncryptedTypes() { |
908 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 898 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
909 return GetEncryptedTypes(&trans); | 899 return GetEncryptedTypesWithTrans(&trans); |
| 900 } |
| 901 |
| 902 ModelTypeSet GetEncryptedTypesWithTrans(BaseTransaction* trans) { |
| 903 return trans->GetDirectory()->GetNigoriHandler()-> |
| 904 GetEncryptedTypes(trans->GetWrappedTrans()); |
910 } | 905 } |
911 | 906 |
912 void SimulateEnableNotificationsForTest() { | 907 void SimulateEnableNotificationsForTest() { |
913 DCHECK(sync_manager_.thread_checker_.CalledOnValidThread()); | 908 DCHECK(sync_manager_.thread_checker_.CalledOnValidThread()); |
914 sync_manager_.OnNotificationsEnabled(); | 909 sync_manager_.OnNotificationsEnabled(); |
915 } | 910 } |
916 | 911 |
917 void SimulateDisableNotificationsForTest( | 912 void SimulateDisableNotificationsForTest( |
918 NotificationsDisabledReason reason) { | 913 NotificationsDisabledReason reason) { |
919 DCHECK(sync_manager_.thread_checker_.CalledOnValidThread()); | 914 DCHECK(sync_manager_.thread_checker_.CalledOnValidThread()); |
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1349 TriggerOnIncomingNotificationForTest(model_types); | 1344 TriggerOnIncomingNotificationForTest(model_types); |
1350 | 1345 |
1351 // Should trigger the replies. | 1346 // Should trigger the replies. |
1352 PumpLoop(); | 1347 PumpLoop(); |
1353 } | 1348 } |
1354 | 1349 |
1355 TEST_F(SyncManagerTest, RefreshEncryptionReady) { | 1350 TEST_F(SyncManagerTest, RefreshEncryptionReady) { |
1356 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION)); | 1351 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION)); |
1357 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); | 1352 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); |
1358 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); | 1353 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); |
| 1354 EXPECT_CALL(encryption_observer_, OnEncryptedTypesChanged(_, false)); |
1359 | 1355 |
1360 sync_manager_.GetEncryptionHandler()->Init(); | 1356 sync_manager_.GetEncryptionHandler()->Init(); |
1361 PumpLoop(); | 1357 PumpLoop(); |
1362 | 1358 |
1363 const ModelTypeSet encrypted_types = GetEncryptedDataTypesForTest(); | 1359 const ModelTypeSet encrypted_types = GetEncryptedTypes(); |
1364 EXPECT_TRUE(encrypted_types.Has(PASSWORDS)); | 1360 EXPECT_TRUE(encrypted_types.Has(PASSWORDS)); |
1365 EXPECT_FALSE(EncryptEverythingEnabledForTest()); | 1361 EXPECT_FALSE(EncryptEverythingEnabledForTest()); |
1366 | 1362 |
1367 { | 1363 { |
1368 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1364 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1369 ReadNode node(&trans); | 1365 ReadNode node(&trans); |
1370 EXPECT_EQ(BaseNode::INIT_OK, | 1366 EXPECT_EQ(BaseNode::INIT_OK, |
1371 node.InitByIdLookup(GetIdForDataType(NIGORI))); | 1367 node.InitByIdLookup(GetIdForDataType(NIGORI))); |
1372 sync_pb::NigoriSpecifics nigori = node.GetNigoriSpecifics(); | 1368 sync_pb::NigoriSpecifics nigori = node.GetNigoriSpecifics(); |
1373 EXPECT_TRUE(nigori.has_encrypted()); | 1369 EXPECT_TRUE(nigori.has_encrypted()); |
1374 Cryptographer* cryptographer = trans.GetCryptographer(); | 1370 Cryptographer* cryptographer = trans.GetCryptographer(); |
1375 EXPECT_TRUE(cryptographer->is_ready()); | 1371 EXPECT_TRUE(cryptographer->is_ready()); |
1376 EXPECT_TRUE(cryptographer->CanDecrypt(nigori.encrypted())); | 1372 EXPECT_TRUE(cryptographer->CanDecrypt(nigori.encrypted())); |
1377 } | 1373 } |
1378 } | 1374 } |
1379 | 1375 |
1380 // Attempt to refresh encryption when nigori not downloaded. | 1376 // Attempt to refresh encryption when nigori not downloaded. |
1381 TEST_F(SyncManagerTest, RefreshEncryptionNotReady) { | 1377 TEST_F(SyncManagerTest, RefreshEncryptionNotReady) { |
1382 // Don't set up encryption (no nigori node created). | 1378 // Don't set up encryption (no nigori node created). |
1383 | 1379 |
1384 // Should fail. Triggers an OnPassphraseRequired because the cryptographer | 1380 // Should fail. Triggers an OnPassphraseRequired because the cryptographer |
1385 // is not ready. | 1381 // is not ready. |
1386 EXPECT_CALL(encryption_observer_, OnPassphraseRequired(_, _)).Times(1); | 1382 EXPECT_CALL(encryption_observer_, OnPassphraseRequired(_, _)).Times(1); |
1387 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); | 1383 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); |
| 1384 EXPECT_CALL(encryption_observer_, OnEncryptedTypesChanged(_, false)); |
1388 sync_manager_.GetEncryptionHandler()->Init(); | 1385 sync_manager_.GetEncryptionHandler()->Init(); |
1389 PumpLoop(); | 1386 PumpLoop(); |
1390 | 1387 |
1391 const ModelTypeSet encrypted_types = GetEncryptedDataTypesForTest(); | 1388 const ModelTypeSet encrypted_types = GetEncryptedTypes(); |
1392 EXPECT_TRUE(encrypted_types.Has(PASSWORDS)); // Hardcoded. | 1389 EXPECT_TRUE(encrypted_types.Has(PASSWORDS)); // Hardcoded. |
1393 EXPECT_FALSE(EncryptEverythingEnabledForTest()); | 1390 EXPECT_FALSE(EncryptEverythingEnabledForTest()); |
1394 } | 1391 } |
1395 | 1392 |
1396 // Attempt to refresh encryption when nigori is empty. | 1393 // Attempt to refresh encryption when nigori is empty. |
1397 TEST_F(SyncManagerTest, RefreshEncryptionEmptyNigori) { | 1394 TEST_F(SyncManagerTest, RefreshEncryptionEmptyNigori) { |
1398 EXPECT_TRUE(SetUpEncryption(DONT_WRITE_NIGORI, DEFAULT_ENCRYPTION)); | 1395 EXPECT_TRUE(SetUpEncryption(DONT_WRITE_NIGORI, DEFAULT_ENCRYPTION)); |
1399 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()).Times(1); | 1396 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()).Times(1); |
1400 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); | 1397 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); |
| 1398 EXPECT_CALL(encryption_observer_, OnEncryptedTypesChanged(_, false)); |
1401 | 1399 |
1402 // Should write to nigori. | 1400 // Should write to nigori. |
1403 sync_manager_.GetEncryptionHandler()->Init(); | 1401 sync_manager_.GetEncryptionHandler()->Init(); |
1404 PumpLoop(); | 1402 PumpLoop(); |
1405 | 1403 |
1406 const ModelTypeSet encrypted_types = GetEncryptedDataTypesForTest(); | 1404 const ModelTypeSet encrypted_types = GetEncryptedTypes(); |
1407 EXPECT_TRUE(encrypted_types.Has(PASSWORDS)); // Hardcoded. | 1405 EXPECT_TRUE(encrypted_types.Has(PASSWORDS)); // Hardcoded. |
1408 EXPECT_FALSE(EncryptEverythingEnabledForTest()); | 1406 EXPECT_FALSE(EncryptEverythingEnabledForTest()); |
1409 | 1407 |
1410 { | 1408 { |
1411 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1409 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1412 ReadNode node(&trans); | 1410 ReadNode node(&trans); |
1413 EXPECT_EQ(BaseNode::INIT_OK, | 1411 EXPECT_EQ(BaseNode::INIT_OK, |
1414 node.InitByIdLookup(GetIdForDataType(NIGORI))); | 1412 node.InitByIdLookup(GetIdForDataType(NIGORI))); |
1415 sync_pb::NigoriSpecifics nigori = node.GetNigoriSpecifics(); | 1413 sync_pb::NigoriSpecifics nigori = node.GetNigoriSpecifics(); |
1416 EXPECT_TRUE(nigori.has_encrypted()); | 1414 EXPECT_TRUE(nigori.has_encrypted()); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1453 } | 1451 } |
1454 // Last batch_size nodes are a third type that will not need encryption. | 1452 // Last batch_size nodes are a third type that will not need encryption. |
1455 for (; i < 3*batch_size; ++i) { | 1453 for (; i < 3*batch_size; ++i) { |
1456 MakeNodeWithParent(sync_manager_.GetUserShare(), THEMES, | 1454 MakeNodeWithParent(sync_manager_.GetUserShare(), THEMES, |
1457 base::StringPrintf("%"PRIuS"", i), | 1455 base::StringPrintf("%"PRIuS"", i), |
1458 GetIdForDataType(THEMES)); | 1456 GetIdForDataType(THEMES)); |
1459 } | 1457 } |
1460 | 1458 |
1461 { | 1459 { |
1462 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1460 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1463 EXPECT_TRUE(GetEncryptedTypes(&trans).Equals( | 1461 EXPECT_TRUE(GetEncryptedTypesWithTrans(&trans).Equals( |
1464 SyncEncryptionHandler::SensitiveTypes())); | 1462 SyncEncryptionHandler::SensitiveTypes())); |
1465 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1463 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1466 trans.GetWrappedTrans(), | 1464 trans.GetWrappedTrans(), |
1467 trans.GetCryptographer(), | |
1468 BOOKMARKS, | 1465 BOOKMARKS, |
1469 false /* not encrypted */)); | 1466 false /* not encrypted */)); |
1470 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1467 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1471 trans.GetWrappedTrans(), | 1468 trans.GetWrappedTrans(), |
1472 trans.GetCryptographer(), | |
1473 SESSIONS, | 1469 SESSIONS, |
1474 false /* not encrypted */)); | 1470 false /* not encrypted */)); |
1475 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1471 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1476 trans.GetWrappedTrans(), | 1472 trans.GetWrappedTrans(), |
1477 trans.GetCryptographer(), | |
1478 THEMES, | 1473 THEMES, |
1479 false /* not encrypted */)); | 1474 false /* not encrypted */)); |
1480 } | 1475 } |
1481 | 1476 |
1482 EXPECT_CALL(encryption_observer_, | 1477 EXPECT_CALL(encryption_observer_, |
1483 OnEncryptedTypesChanged( | 1478 OnEncryptedTypesChanged( |
1484 HasModelTypes(ModelTypeSet::All()), true)); | 1479 HasModelTypes(ModelTypeSet::All()), true)); |
1485 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); | 1480 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); |
1486 sync_manager_.GetEncryptionHandler()->EnableEncryptEverything(); | 1481 sync_manager_.GetEncryptionHandler()->EnableEncryptEverything(); |
1487 EXPECT_TRUE(EncryptEverythingEnabledForTest()); | 1482 EXPECT_TRUE(EncryptEverythingEnabledForTest()); |
1488 { | 1483 { |
1489 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1484 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1490 EXPECT_TRUE(GetEncryptedTypes(&trans).Equals( | 1485 EXPECT_TRUE(GetEncryptedTypesWithTrans(&trans).Equals( |
1491 ModelTypeSet::All())); | 1486 ModelTypeSet::All())); |
1492 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1487 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1493 trans.GetWrappedTrans(), | 1488 trans.GetWrappedTrans(), |
1494 trans.GetCryptographer(), | |
1495 BOOKMARKS, | 1489 BOOKMARKS, |
1496 true /* is encrypted */)); | 1490 true /* is encrypted */)); |
1497 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1491 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1498 trans.GetWrappedTrans(), | 1492 trans.GetWrappedTrans(), |
1499 trans.GetCryptographer(), | |
1500 SESSIONS, | 1493 SESSIONS, |
1501 true /* is encrypted */)); | 1494 true /* is encrypted */)); |
1502 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1495 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1503 trans.GetWrappedTrans(), | 1496 trans.GetWrappedTrans(), |
1504 trans.GetCryptographer(), | |
1505 THEMES, | 1497 THEMES, |
1506 true /* is encrypted */)); | 1498 true /* is encrypted */)); |
1507 } | 1499 } |
1508 | 1500 |
1509 // Trigger's a ReEncryptEverything with new passphrase. | 1501 // Trigger's a ReEncryptEverything with new passphrase. |
1510 testing::Mock::VerifyAndClearExpectations(&encryption_observer_); | 1502 testing::Mock::VerifyAndClearExpectations(&encryption_observer_); |
1511 EXPECT_CALL(encryption_observer_, OnBootstrapTokenUpdated(_)); | 1503 EXPECT_CALL(encryption_observer_, OnBootstrapTokenUpdated(_)); |
1512 EXPECT_CALL(encryption_observer_, OnPassphraseAccepted()); | 1504 EXPECT_CALL(encryption_observer_, OnPassphraseAccepted()); |
1513 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); | 1505 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); |
1514 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); | 1506 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); |
1515 sync_manager_.GetEncryptionHandler()->SetEncryptionPassphrase( | 1507 sync_manager_.GetEncryptionHandler()->SetEncryptionPassphrase( |
1516 "new_passphrase", true); | 1508 "new_passphrase", true); |
1517 EXPECT_TRUE(EncryptEverythingEnabledForTest()); | 1509 EXPECT_TRUE(EncryptEverythingEnabledForTest()); |
1518 { | 1510 { |
1519 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1511 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1520 EXPECT_TRUE(GetEncryptedTypes(&trans).Equals(ModelTypeSet::All())); | 1512 EXPECT_TRUE(GetEncryptedTypesWithTrans(&trans).Equals(ModelTypeSet::All())); |
1521 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1513 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1522 trans.GetWrappedTrans(), | 1514 trans.GetWrappedTrans(), |
1523 trans.GetCryptographer(), | |
1524 BOOKMARKS, | 1515 BOOKMARKS, |
1525 true /* is encrypted */)); | 1516 true /* is encrypted */)); |
1526 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1517 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1527 trans.GetWrappedTrans(), | 1518 trans.GetWrappedTrans(), |
1528 trans.GetCryptographer(), | |
1529 SESSIONS, | 1519 SESSIONS, |
1530 true /* is encrypted */)); | 1520 true /* is encrypted */)); |
1531 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1521 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1532 trans.GetWrappedTrans(), | 1522 trans.GetWrappedTrans(), |
1533 trans.GetCryptographer(), | |
1534 THEMES, | 1523 THEMES, |
1535 true /* is encrypted */)); | 1524 true /* is encrypted */)); |
1536 } | 1525 } |
1537 // Calling EncryptDataTypes with an empty encrypted types should not trigger | 1526 // Calling EncryptDataTypes with an empty encrypted types should not trigger |
1538 // a reencryption and should just notify immediately. | 1527 // a reencryption and should just notify immediately. |
1539 testing::Mock::VerifyAndClearExpectations(&encryption_observer_); | 1528 testing::Mock::VerifyAndClearExpectations(&encryption_observer_); |
1540 EXPECT_CALL(encryption_observer_, OnBootstrapTokenUpdated(_)).Times(0); | 1529 EXPECT_CALL(encryption_observer_, OnBootstrapTokenUpdated(_)).Times(0); |
1541 EXPECT_CALL(encryption_observer_, OnPassphraseAccepted()).Times(0); | 1530 EXPECT_CALL(encryption_observer_, OnPassphraseAccepted()).Times(0); |
1542 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()).Times(0); | 1531 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()).Times(0); |
1543 sync_manager_.GetEncryptionHandler()->EnableEncryptEverything(); | 1532 sync_manager_.GetEncryptionHandler()->EnableEncryptEverything(); |
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1984 // specifics should be stored in the server legal form. | 1973 // specifics should be stored in the server legal form. |
1985 EXPECT_EQ(raw_title2, node2.GetTitle()); | 1974 EXPECT_EQ(raw_title2, node2.GetTitle()); |
1986 EXPECT_EQ(title2, node2.GetBookmarkSpecifics().title()); | 1975 EXPECT_EQ(title2, node2.GetBookmarkSpecifics().title()); |
1987 EXPECT_EQ(url2, node2.GetBookmarkSpecifics().url()); | 1976 EXPECT_EQ(url2, node2.GetBookmarkSpecifics().url()); |
1988 } | 1977 } |
1989 | 1978 |
1990 { | 1979 { |
1991 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1980 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1992 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1981 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1993 trans.GetWrappedTrans(), | 1982 trans.GetWrappedTrans(), |
1994 trans.GetCryptographer(), | |
1995 BOOKMARKS, | 1983 BOOKMARKS, |
1996 false /* not encrypted */)); | 1984 false /* not encrypted */)); |
1997 } | 1985 } |
1998 | 1986 |
1999 EXPECT_CALL(encryption_observer_, | 1987 EXPECT_CALL(encryption_observer_, |
2000 OnEncryptedTypesChanged( | 1988 OnEncryptedTypesChanged( |
2001 HasModelTypes(ModelTypeSet::All()), true)); | 1989 HasModelTypes(ModelTypeSet::All()), true)); |
2002 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); | 1990 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); |
2003 sync_manager_.GetEncryptionHandler()->EnableEncryptEverything(); | 1991 sync_manager_.GetEncryptionHandler()->EnableEncryptEverything(); |
2004 EXPECT_TRUE(EncryptEverythingEnabledForTest()); | 1992 EXPECT_TRUE(EncryptEverythingEnabledForTest()); |
2005 | 1993 |
2006 { | 1994 { |
2007 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1995 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2008 EXPECT_TRUE(GetEncryptedTypes(&trans).Equals(ModelTypeSet::All())); | 1996 EXPECT_TRUE(GetEncryptedTypesWithTrans(&trans).Equals(ModelTypeSet::All())); |
2009 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1997 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
2010 trans.GetWrappedTrans(), | 1998 trans.GetWrappedTrans(), |
2011 trans.GetCryptographer(), | |
2012 BOOKMARKS, | 1999 BOOKMARKS, |
2013 true /* is encrypted */)); | 2000 true /* is encrypted */)); |
2014 | 2001 |
2015 ReadNode node(&trans); | 2002 ReadNode node(&trans); |
2016 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(node_id1)); | 2003 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(node_id1)); |
2017 EXPECT_EQ(BOOKMARKS, node.GetModelType()); | 2004 EXPECT_EQ(BOOKMARKS, node.GetModelType()); |
2018 EXPECT_EQ(title, node.GetTitle()); | 2005 EXPECT_EQ(title, node.GetTitle()); |
2019 EXPECT_EQ(title, node.GetBookmarkSpecifics().title()); | 2006 EXPECT_EQ(title, node.GetBookmarkSpecifics().title()); |
2020 EXPECT_EQ(url, node.GetBookmarkSpecifics().url()); | 2007 EXPECT_EQ(url, node.GetBookmarkSpecifics().url()); |
2021 | 2008 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2084 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); | 2071 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); |
2085 | 2072 |
2086 // Encrypt the datatatype, should set is_unsynced. | 2073 // Encrypt the datatatype, should set is_unsynced. |
2087 EXPECT_CALL(encryption_observer_, | 2074 EXPECT_CALL(encryption_observer_, |
2088 OnEncryptedTypesChanged( | 2075 OnEncryptedTypesChanged( |
2089 HasModelTypes(ModelTypeSet::All()), true)); | 2076 HasModelTypes(ModelTypeSet::All()), true)); |
2090 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); | 2077 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); |
2091 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); | 2078 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); |
2092 | 2079 |
2093 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); | 2080 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); |
| 2081 EXPECT_CALL(encryption_observer_, OnEncryptedTypesChanged(_, true)); |
2094 sync_manager_.GetEncryptionHandler()->Init(); | 2082 sync_manager_.GetEncryptionHandler()->Init(); |
2095 PumpLoop(); | 2083 PumpLoop(); |
2096 { | 2084 { |
2097 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2085 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2098 ReadNode node(&trans); | 2086 ReadNode node(&trans); |
2099 EXPECT_EQ(BaseNode::INIT_OK, | 2087 EXPECT_EQ(BaseNode::INIT_OK, |
2100 node.InitByClientTagLookup(BOOKMARKS, client_tag)); | 2088 node.InitByClientTagLookup(BOOKMARKS, client_tag)); |
2101 const syncable::Entry* node_entry = node.GetEntry(); | 2089 const syncable::Entry* node_entry = node.GetEntry(); |
2102 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); | 2090 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); |
2103 EXPECT_TRUE(specifics.has_encrypted()); | 2091 EXPECT_TRUE(specifics.has_encrypted()); |
(...skipping 27 matching lines...) Expand all Loading... |
2131 EXPECT_TRUE(cryptographer->is_ready()); | 2119 EXPECT_TRUE(cryptographer->is_ready()); |
2132 EXPECT_TRUE(cryptographer->CanDecryptUsingDefaultKey( | 2120 EXPECT_TRUE(cryptographer->CanDecryptUsingDefaultKey( |
2133 specifics.encrypted())); | 2121 specifics.encrypted())); |
2134 } | 2122 } |
2135 EXPECT_TRUE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); | 2123 EXPECT_TRUE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); |
2136 | 2124 |
2137 // Force a re-encrypt everything. Should not set is_unsynced. | 2125 // Force a re-encrypt everything. Should not set is_unsynced. |
2138 testing::Mock::VerifyAndClearExpectations(&encryption_observer_); | 2126 testing::Mock::VerifyAndClearExpectations(&encryption_observer_); |
2139 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); | 2127 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); |
2140 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); | 2128 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); |
| 2129 EXPECT_CALL(encryption_observer_, OnEncryptedTypesChanged(_, true)); |
2141 | 2130 |
2142 sync_manager_.GetEncryptionHandler()->Init(); | 2131 sync_manager_.GetEncryptionHandler()->Init(); |
2143 PumpLoop(); | 2132 PumpLoop(); |
2144 | 2133 |
2145 { | 2134 { |
2146 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2135 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2147 ReadNode node(&trans); | 2136 ReadNode node(&trans); |
2148 EXPECT_EQ(BaseNode::INIT_OK, | 2137 EXPECT_EQ(BaseNode::INIT_OK, |
2149 node.InitByClientTagLookup(BOOKMARKS, client_tag)); | 2138 node.InitByClientTagLookup(BOOKMARKS, client_tag)); |
2150 const syncable::Entry* node_entry = node.GetEntry(); | 2139 const syncable::Entry* node_entry = node.GetEntry(); |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2337 BaseNode::GenerateSyncableHash(PASSWORDS, | 2326 BaseNode::GenerateSyncableHash(PASSWORDS, |
2338 client_tag), | 2327 client_tag), |
2339 entity_specifics); | 2328 entity_specifics); |
2340 // New node shouldn't start off unsynced. | 2329 // New node shouldn't start off unsynced. |
2341 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); | 2330 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); |
2342 | 2331 |
2343 // Force a re-encrypt everything. Should not set is_unsynced. | 2332 // Force a re-encrypt everything. Should not set is_unsynced. |
2344 testing::Mock::VerifyAndClearExpectations(&encryption_observer_); | 2333 testing::Mock::VerifyAndClearExpectations(&encryption_observer_); |
2345 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); | 2334 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); |
2346 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); | 2335 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); |
| 2336 EXPECT_CALL(encryption_observer_, OnEncryptedTypesChanged(_, false)); |
2347 sync_manager_.GetEncryptionHandler()->Init(); | 2337 sync_manager_.GetEncryptionHandler()->Init(); |
2348 PumpLoop(); | 2338 PumpLoop(); |
2349 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); | 2339 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); |
2350 } | 2340 } |
2351 | 2341 |
2352 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for bookmarks | 2342 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for bookmarks |
2353 // when we write the same data, but does set it when we write new data. | 2343 // when we write the same data, but does set it when we write new data. |
2354 TEST_F(SyncManagerTest, SetBookmarkTitle) { | 2344 TEST_F(SyncManagerTest, SetBookmarkTitle) { |
2355 std::string client_tag = "title"; | 2345 std::string client_tag = "title"; |
2356 sync_pb::EntitySpecifics entity_specifics; | 2346 sync_pb::EntitySpecifics entity_specifics; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2399 // New node shouldn't start off unsynced. | 2389 // New node shouldn't start off unsynced. |
2400 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); | 2390 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); |
2401 | 2391 |
2402 // Encrypt the datatatype, should set is_unsynced. | 2392 // Encrypt the datatatype, should set is_unsynced. |
2403 EXPECT_CALL(encryption_observer_, | 2393 EXPECT_CALL(encryption_observer_, |
2404 OnEncryptedTypesChanged( | 2394 OnEncryptedTypesChanged( |
2405 HasModelTypes(ModelTypeSet::All()), true)); | 2395 HasModelTypes(ModelTypeSet::All()), true)); |
2406 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); | 2396 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); |
2407 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); | 2397 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); |
2408 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); | 2398 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); |
| 2399 EXPECT_CALL(encryption_observer_, OnEncryptedTypesChanged(_, true)); |
2409 sync_manager_.GetEncryptionHandler()->Init(); | 2400 sync_manager_.GetEncryptionHandler()->Init(); |
2410 PumpLoop(); | 2401 PumpLoop(); |
2411 EXPECT_TRUE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); | 2402 EXPECT_TRUE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); |
2412 | 2403 |
2413 // Manually change to the same title. Should not set is_unsynced. | 2404 // Manually change to the same title. Should not set is_unsynced. |
2414 // NON_UNIQUE_NAME should be kEncryptedString. | 2405 // NON_UNIQUE_NAME should be kEncryptedString. |
2415 { | 2406 { |
2416 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2407 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2417 WriteNode node(&trans); | 2408 WriteNode node(&trans); |
2418 EXPECT_EQ(BaseNode::INIT_OK, | 2409 EXPECT_EQ(BaseNode::INIT_OK, |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2495 // New node shouldn't start off unsynced. | 2486 // New node shouldn't start off unsynced. |
2496 EXPECT_FALSE(ResetUnsyncedEntry(PREFERENCES, client_tag)); | 2487 EXPECT_FALSE(ResetUnsyncedEntry(PREFERENCES, client_tag)); |
2497 | 2488 |
2498 // Encrypt the datatatype, should set is_unsynced. | 2489 // Encrypt the datatatype, should set is_unsynced. |
2499 EXPECT_CALL(encryption_observer_, | 2490 EXPECT_CALL(encryption_observer_, |
2500 OnEncryptedTypesChanged( | 2491 OnEncryptedTypesChanged( |
2501 HasModelTypes(ModelTypeSet::All()), true)); | 2492 HasModelTypes(ModelTypeSet::All()), true)); |
2502 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); | 2493 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); |
2503 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); | 2494 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); |
2504 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); | 2495 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); |
| 2496 EXPECT_CALL(encryption_observer_, OnEncryptedTypesChanged(_, true)); |
2505 sync_manager_.GetEncryptionHandler()->Init(); | 2497 sync_manager_.GetEncryptionHandler()->Init(); |
2506 PumpLoop(); | 2498 PumpLoop(); |
2507 EXPECT_TRUE(ResetUnsyncedEntry(PREFERENCES, client_tag)); | 2499 EXPECT_TRUE(ResetUnsyncedEntry(PREFERENCES, client_tag)); |
2508 | 2500 |
2509 // Manually change to the same title. Should not set is_unsynced. | 2501 // Manually change to the same title. Should not set is_unsynced. |
2510 // NON_UNIQUE_NAME should be kEncryptedString. | 2502 // NON_UNIQUE_NAME should be kEncryptedString. |
2511 { | 2503 { |
2512 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2504 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2513 WriteNode node(&trans); | 2505 WriteNode node(&trans); |
2514 EXPECT_EQ(BaseNode::INIT_OK, | 2506 EXPECT_EQ(BaseNode::INIT_OK, |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2867 | 2859 |
2868 // Verify only the non-disabled types remain after cleanup. | 2860 // Verify only the non-disabled types remain after cleanup. |
2869 sync_manager_.PurgeDisabledTypes(enabled_types, new_enabled_types); | 2861 sync_manager_.PurgeDisabledTypes(enabled_types, new_enabled_types); |
2870 EXPECT_TRUE(new_enabled_types.Equals( | 2862 EXPECT_TRUE(new_enabled_types.Equals( |
2871 Union(sync_manager_.InitialSyncEndedTypes(), partial_enabled_types))); | 2863 Union(sync_manager_.InitialSyncEndedTypes(), partial_enabled_types))); |
2872 EXPECT_TRUE(disabled_types.Equals( | 2864 EXPECT_TRUE(disabled_types.Equals( |
2873 sync_manager_.GetTypesWithEmptyProgressMarkerToken(ModelTypeSet::All()))); | 2865 sync_manager_.GetTypesWithEmptyProgressMarkerToken(ModelTypeSet::All()))); |
2874 } | 2866 } |
2875 | 2867 |
2876 } // namespace | 2868 } // namespace |
OLD | NEW |