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 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 entry.Put(syncable::SPECIFICS, specifics); | 220 entry.Put(syncable::SPECIFICS, specifics); |
221 return entry.Get(syncable::META_HANDLE); | 221 return entry.Get(syncable::META_HANDLE); |
222 } | 222 } |
223 | 223 |
224 } // namespace | 224 } // namespace |
225 | 225 |
226 class SyncApiTest : public testing::Test { | 226 class SyncApiTest : public testing::Test { |
227 public: | 227 public: |
228 virtual void SetUp() { | 228 virtual void SetUp() { |
229 test_user_share_.SetUp(); | 229 test_user_share_.SetUp(); |
230 SetUpEncryption(); | |
231 } | 230 } |
232 | 231 |
233 virtual void TearDown() { | 232 virtual void TearDown() { |
234 test_user_share_.TearDown(); | 233 test_user_share_.TearDown(); |
235 } | 234 } |
236 | 235 |
237 void SetUpEncryption() { | |
238 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | |
239 encryption_handler_.reset( | |
240 new SyncEncryptionHandlerImpl(test_user_share_.user_share(), | |
241 trans.GetCryptographer())); | |
242 trans.GetCryptographer()->SetNigoriHandler(encryption_handler_.get()); | |
243 } | |
244 | |
245 protected: | 236 protected: |
246 MessageLoop message_loop_; | 237 MessageLoop message_loop_; |
247 TestUserShare test_user_share_; | 238 TestUserShare test_user_share_; |
248 scoped_ptr<SyncEncryptionHandlerImpl> encryption_handler_; | |
249 }; | 239 }; |
250 | 240 |
251 TEST_F(SyncApiTest, SanityCheckTest) { | 241 TEST_F(SyncApiTest, SanityCheckTest) { |
252 { | 242 { |
253 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | 243 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); |
254 EXPECT_TRUE(trans.GetWrappedTrans() != NULL); | 244 EXPECT_TRUE(trans.GetWrappedTrans()); |
255 } | 245 } |
256 { | 246 { |
257 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); | 247 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); |
258 EXPECT_TRUE(trans.GetWrappedTrans() != NULL); | 248 EXPECT_TRUE(trans.GetWrappedTrans()); |
259 } | 249 } |
260 { | 250 { |
261 // No entries but root should exist | 251 // No entries but root should exist |
262 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | 252 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); |
263 ReadNode node(&trans); | 253 ReadNode node(&trans); |
264 // Metahandle 1 can be root, sanity check 2 | 254 // Metahandle 1 can be root, sanity check 2 |
265 EXPECT_EQ(BaseNode::INIT_FAILED_ENTRY_NOT_GOOD, node.InitByIdLookup(2)); | 255 EXPECT_EQ(BaseNode::INIT_FAILED_ENTRY_NOT_GOOD, node.InitByIdLookup(2)); |
266 } | 256 } |
267 } | 257 } |
268 | 258 |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
478 EXPECT_EQ("secret", data.password_value()); | 468 EXPECT_EQ("secret", data.password_value()); |
479 } | 469 } |
480 } | 470 } |
481 | 471 |
482 TEST_F(SyncApiTest, WriteEncryptedTitle) { | 472 TEST_F(SyncApiTest, WriteEncryptedTitle) { |
483 KeyParams params = {"localhost", "username", "passphrase"}; | 473 KeyParams params = {"localhost", "username", "passphrase"}; |
484 { | 474 { |
485 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | 475 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); |
486 trans.GetCryptographer()->AddKey(params); | 476 trans.GetCryptographer()->AddKey(params); |
487 } | 477 } |
488 encryption_handler_->EnableEncryptEverything(); | 478 test_user_share_.encryption_handler()->EnableEncryptEverything(); |
489 { | 479 { |
490 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); | 480 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); |
491 ReadNode root_node(&trans); | 481 ReadNode root_node(&trans); |
492 root_node.InitByRootLookup(); | 482 root_node.InitByRootLookup(); |
493 | 483 |
494 WriteNode bookmark_node(&trans); | 484 WriteNode bookmark_node(&trans); |
495 WriteNode::InitUniqueByCreationResult result = | 485 WriteNode::InitUniqueByCreationResult result = |
496 bookmark_node.InitUniqueByCreation(BOOKMARKS, | 486 bookmark_node.InitUniqueByCreation(BOOKMARKS, |
497 root_node, "foo"); | 487 root_node, "foo"); |
498 EXPECT_EQ(WriteNode::INIT_SUCCESS, result); | 488 EXPECT_EQ(WriteNode::INIT_SUCCESS, result); |
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
854 return false; | 844 return false; |
855 if (encryption_status != UNINITIALIZED) { | 845 if (encryption_status != UNINITIALIZED) { |
856 KeyParams params = {"localhost", "dummy", "foobar"}; | 846 KeyParams params = {"localhost", "dummy", "foobar"}; |
857 cryptographer->AddKey(params); | 847 cryptographer->AddKey(params); |
858 } else { | 848 } else { |
859 DCHECK_NE(nigori_status, WRITE_TO_NIGORI); | 849 DCHECK_NE(nigori_status, WRITE_TO_NIGORI); |
860 } | 850 } |
861 if (nigori_status == WRITE_TO_NIGORI) { | 851 if (nigori_status == WRITE_TO_NIGORI) { |
862 sync_pb::NigoriSpecifics nigori; | 852 sync_pb::NigoriSpecifics nigori; |
863 cryptographer->GetKeys(nigori.mutable_encrypted()); | 853 cryptographer->GetKeys(nigori.mutable_encrypted()); |
864 cryptographer->UpdateNigoriFromEncryptedTypes( | 854 share->directory->GetNigoriHandler()->UpdateNigoriFromEncryptedTypes( |
865 &nigori, | 855 &nigori, |
866 trans.GetWrappedTrans()); | 856 trans.GetWrappedTrans()); |
867 WriteNode node(&trans); | 857 WriteNode node(&trans); |
868 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(nigori_id)); | 858 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(nigori_id)); |
869 node.SetNigoriSpecifics(nigori); | 859 node.SetNigoriSpecifics(nigori); |
870 } | 860 } |
871 return cryptographer->is_ready(); | 861 return cryptographer->is_ready(); |
872 } | 862 } |
873 | 863 |
874 int64 GetIdForDataType(ModelType type) { | 864 int64 GetIdForDataType(ModelType type) { |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
917 } | 907 } |
918 | 908 |
919 // Returns true if we are currently encrypting all sync data. May | 909 // Returns true if we are currently encrypting all sync data. May |
920 // be called on any thread. | 910 // be called on any thread. |
921 bool EncryptEverythingEnabledForTest() { | 911 bool EncryptEverythingEnabledForTest() { |
922 return sync_manager_.GetEncryptionHandler()->EncryptEverythingEnabled(); | 912 return sync_manager_.GetEncryptionHandler()->EncryptEverythingEnabled(); |
923 } | 913 } |
924 | 914 |
925 // Gets the set of encrypted types from the cryptographer | 915 // Gets the set of encrypted types from the cryptographer |
926 // Note: opens a transaction. May be called from any thread. | 916 // Note: opens a transaction. May be called from any thread. |
927 syncer::ModelTypeSet GetEncryptedDataTypesForTest() { | 917 ModelTypeSet GetEncryptedTypes() { |
928 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 918 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
929 return GetEncryptedTypes(&trans); | 919 return GetEncryptedTypesWithTrans(&trans); |
| 920 } |
| 921 |
| 922 ModelTypeSet GetEncryptedTypesWithTrans(BaseTransaction* trans) { |
| 923 return trans->GetDirectory()->GetNigoriHandler()-> |
| 924 GetEncryptedTypes(trans->GetWrappedTrans()); |
930 } | 925 } |
931 | 926 |
932 void SimulateEnableNotificationsForTest() { | 927 void SimulateEnableNotificationsForTest() { |
933 DCHECK(sync_manager_.thread_checker_.CalledOnValidThread()); | 928 DCHECK(sync_manager_.thread_checker_.CalledOnValidThread()); |
934 sync_manager_.OnNotificationsEnabled(); | 929 sync_manager_.OnNotificationsEnabled(); |
935 } | 930 } |
936 | 931 |
937 void SimulateDisableNotificationsForTest( | 932 void SimulateDisableNotificationsForTest( |
938 NotificationsDisabledReason reason) { | 933 NotificationsDisabledReason reason) { |
939 DCHECK(sync_manager_.thread_checker_.CalledOnValidThread()); | 934 DCHECK(sync_manager_.thread_checker_.CalledOnValidThread()); |
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1372 TriggerOnIncomingNotificationForTest(model_types); | 1367 TriggerOnIncomingNotificationForTest(model_types); |
1373 | 1368 |
1374 // Should trigger the replies. | 1369 // Should trigger the replies. |
1375 PumpLoop(); | 1370 PumpLoop(); |
1376 } | 1371 } |
1377 | 1372 |
1378 TEST_F(SyncManagerTest, RefreshEncryptionReady) { | 1373 TEST_F(SyncManagerTest, RefreshEncryptionReady) { |
1379 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION)); | 1374 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION)); |
1380 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); | 1375 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); |
1381 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); | 1376 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); |
| 1377 EXPECT_CALL(encryption_observer_, OnEncryptedTypesChanged(_, false)); |
1382 | 1378 |
1383 sync_manager_.GetEncryptionHandler()->Init(); | 1379 sync_manager_.GetEncryptionHandler()->Init(); |
1384 PumpLoop(); | 1380 PumpLoop(); |
1385 | 1381 |
1386 const ModelTypeSet encrypted_types = GetEncryptedDataTypesForTest(); | 1382 const ModelTypeSet encrypted_types = GetEncryptedTypes(); |
1387 EXPECT_TRUE(encrypted_types.Has(PASSWORDS)); | 1383 EXPECT_TRUE(encrypted_types.Has(PASSWORDS)); |
1388 EXPECT_FALSE(EncryptEverythingEnabledForTest()); | 1384 EXPECT_FALSE(EncryptEverythingEnabledForTest()); |
1389 | 1385 |
1390 { | 1386 { |
1391 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1387 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1392 ReadNode node(&trans); | 1388 ReadNode node(&trans); |
1393 EXPECT_EQ(BaseNode::INIT_OK, | 1389 EXPECT_EQ(BaseNode::INIT_OK, |
1394 node.InitByIdLookup(GetIdForDataType(NIGORI))); | 1390 node.InitByIdLookup(GetIdForDataType(NIGORI))); |
1395 sync_pb::NigoriSpecifics nigori = node.GetNigoriSpecifics(); | 1391 sync_pb::NigoriSpecifics nigori = node.GetNigoriSpecifics(); |
1396 EXPECT_TRUE(nigori.has_encrypted()); | 1392 EXPECT_TRUE(nigori.has_encrypted()); |
1397 Cryptographer* cryptographer = trans.GetCryptographer(); | 1393 Cryptographer* cryptographer = trans.GetCryptographer(); |
1398 EXPECT_TRUE(cryptographer->is_ready()); | 1394 EXPECT_TRUE(cryptographer->is_ready()); |
1399 EXPECT_TRUE(cryptographer->CanDecrypt(nigori.encrypted())); | 1395 EXPECT_TRUE(cryptographer->CanDecrypt(nigori.encrypted())); |
1400 } | 1396 } |
1401 } | 1397 } |
1402 | 1398 |
1403 // Attempt to refresh encryption when nigori not downloaded. | 1399 // Attempt to refresh encryption when nigori not downloaded. |
1404 TEST_F(SyncManagerTest, RefreshEncryptionNotReady) { | 1400 TEST_F(SyncManagerTest, RefreshEncryptionNotReady) { |
1405 // Don't set up encryption (no nigori node created). | 1401 // Don't set up encryption (no nigori node created). |
1406 | 1402 |
1407 // Should fail. Triggers an OnPassphraseRequired because the cryptographer | 1403 // Should fail. Triggers an OnPassphraseRequired because the cryptographer |
1408 // is not ready. | 1404 // is not ready. |
1409 EXPECT_CALL(encryption_observer_, OnPassphraseRequired(_, _)).Times(1); | 1405 EXPECT_CALL(encryption_observer_, OnPassphraseRequired(_, _)).Times(1); |
1410 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); | 1406 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); |
| 1407 EXPECT_CALL(encryption_observer_, OnEncryptedTypesChanged(_, false)); |
1411 sync_manager_.GetEncryptionHandler()->Init(); | 1408 sync_manager_.GetEncryptionHandler()->Init(); |
1412 PumpLoop(); | 1409 PumpLoop(); |
1413 | 1410 |
1414 const ModelTypeSet encrypted_types = GetEncryptedDataTypesForTest(); | 1411 const ModelTypeSet encrypted_types = GetEncryptedTypes(); |
1415 EXPECT_TRUE(encrypted_types.Has(PASSWORDS)); // Hardcoded. | 1412 EXPECT_TRUE(encrypted_types.Has(PASSWORDS)); // Hardcoded. |
1416 EXPECT_FALSE(EncryptEverythingEnabledForTest()); | 1413 EXPECT_FALSE(EncryptEverythingEnabledForTest()); |
1417 } | 1414 } |
1418 | 1415 |
1419 // Attempt to refresh encryption when nigori is empty. | 1416 // Attempt to refresh encryption when nigori is empty. |
1420 TEST_F(SyncManagerTest, RefreshEncryptionEmptyNigori) { | 1417 TEST_F(SyncManagerTest, RefreshEncryptionEmptyNigori) { |
1421 EXPECT_TRUE(SetUpEncryption(DONT_WRITE_NIGORI, DEFAULT_ENCRYPTION)); | 1418 EXPECT_TRUE(SetUpEncryption(DONT_WRITE_NIGORI, DEFAULT_ENCRYPTION)); |
1422 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()).Times(1); | 1419 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()).Times(1); |
1423 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); | 1420 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); |
| 1421 EXPECT_CALL(encryption_observer_, OnEncryptedTypesChanged(_, false)); |
1424 | 1422 |
1425 // Should write to nigori. | 1423 // Should write to nigori. |
1426 sync_manager_.GetEncryptionHandler()->Init(); | 1424 sync_manager_.GetEncryptionHandler()->Init(); |
1427 PumpLoop(); | 1425 PumpLoop(); |
1428 | 1426 |
1429 const ModelTypeSet encrypted_types = GetEncryptedDataTypesForTest(); | 1427 const ModelTypeSet encrypted_types = GetEncryptedTypes(); |
1430 EXPECT_TRUE(encrypted_types.Has(PASSWORDS)); // Hardcoded. | 1428 EXPECT_TRUE(encrypted_types.Has(PASSWORDS)); // Hardcoded. |
1431 EXPECT_FALSE(EncryptEverythingEnabledForTest()); | 1429 EXPECT_FALSE(EncryptEverythingEnabledForTest()); |
1432 | 1430 |
1433 { | 1431 { |
1434 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1432 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1435 ReadNode node(&trans); | 1433 ReadNode node(&trans); |
1436 EXPECT_EQ(BaseNode::INIT_OK, | 1434 EXPECT_EQ(BaseNode::INIT_OK, |
1437 node.InitByIdLookup(GetIdForDataType(NIGORI))); | 1435 node.InitByIdLookup(GetIdForDataType(NIGORI))); |
1438 sync_pb::NigoriSpecifics nigori = node.GetNigoriSpecifics(); | 1436 sync_pb::NigoriSpecifics nigori = node.GetNigoriSpecifics(); |
1439 EXPECT_TRUE(nigori.has_encrypted()); | 1437 EXPECT_TRUE(nigori.has_encrypted()); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1476 } | 1474 } |
1477 // Last batch_size nodes are a third type that will not need encryption. | 1475 // Last batch_size nodes are a third type that will not need encryption. |
1478 for (; i < 3*batch_size; ++i) { | 1476 for (; i < 3*batch_size; ++i) { |
1479 MakeNodeWithParent(sync_manager_.GetUserShare(), THEMES, | 1477 MakeNodeWithParent(sync_manager_.GetUserShare(), THEMES, |
1480 base::StringPrintf("%"PRIuS"", i), | 1478 base::StringPrintf("%"PRIuS"", i), |
1481 GetIdForDataType(THEMES)); | 1479 GetIdForDataType(THEMES)); |
1482 } | 1480 } |
1483 | 1481 |
1484 { | 1482 { |
1485 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1483 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1486 EXPECT_TRUE(GetEncryptedTypes(&trans).Equals( | 1484 EXPECT_TRUE(GetEncryptedTypesWithTrans(&trans).Equals( |
1487 SyncEncryptionHandler::SensitiveTypes())); | 1485 SyncEncryptionHandler::SensitiveTypes())); |
1488 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1486 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1489 trans.GetWrappedTrans(), | 1487 trans.GetWrappedTrans(), |
1490 trans.GetCryptographer(), | |
1491 BOOKMARKS, | 1488 BOOKMARKS, |
1492 false /* not encrypted */)); | 1489 false /* not encrypted */)); |
1493 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1490 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1494 trans.GetWrappedTrans(), | 1491 trans.GetWrappedTrans(), |
1495 trans.GetCryptographer(), | |
1496 SESSIONS, | 1492 SESSIONS, |
1497 false /* not encrypted */)); | 1493 false /* not encrypted */)); |
1498 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1494 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1499 trans.GetWrappedTrans(), | 1495 trans.GetWrappedTrans(), |
1500 trans.GetCryptographer(), | |
1501 THEMES, | 1496 THEMES, |
1502 false /* not encrypted */)); | 1497 false /* not encrypted */)); |
1503 } | 1498 } |
1504 | 1499 |
1505 EXPECT_CALL(encryption_observer_, | 1500 EXPECT_CALL(encryption_observer_, |
1506 OnEncryptedTypesChanged( | 1501 OnEncryptedTypesChanged( |
1507 HasModelTypes(ModelTypeSet::All()), true)); | 1502 HasModelTypes(ModelTypeSet::All()), true)); |
1508 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); | 1503 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); |
1509 sync_manager_.GetEncryptionHandler()->EnableEncryptEverything(); | 1504 sync_manager_.GetEncryptionHandler()->EnableEncryptEverything(); |
1510 EXPECT_TRUE(EncryptEverythingEnabledForTest()); | 1505 EXPECT_TRUE(EncryptEverythingEnabledForTest()); |
1511 { | 1506 { |
1512 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1507 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1513 EXPECT_TRUE(GetEncryptedTypes(&trans).Equals( | 1508 EXPECT_TRUE(GetEncryptedTypesWithTrans(&trans).Equals( |
1514 ModelTypeSet::All())); | 1509 ModelTypeSet::All())); |
1515 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1510 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1516 trans.GetWrappedTrans(), | 1511 trans.GetWrappedTrans(), |
1517 trans.GetCryptographer(), | |
1518 BOOKMARKS, | 1512 BOOKMARKS, |
1519 true /* is encrypted */)); | 1513 true /* is encrypted */)); |
1520 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1514 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1521 trans.GetWrappedTrans(), | 1515 trans.GetWrappedTrans(), |
1522 trans.GetCryptographer(), | |
1523 SESSIONS, | 1516 SESSIONS, |
1524 true /* is encrypted */)); | 1517 true /* is encrypted */)); |
1525 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1518 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1526 trans.GetWrappedTrans(), | 1519 trans.GetWrappedTrans(), |
1527 trans.GetCryptographer(), | |
1528 THEMES, | 1520 THEMES, |
1529 true /* is encrypted */)); | 1521 true /* is encrypted */)); |
1530 } | 1522 } |
1531 | 1523 |
1532 // Trigger's a ReEncryptEverything with new passphrase. | 1524 // Trigger's a ReEncryptEverything with new passphrase. |
1533 testing::Mock::VerifyAndClearExpectations(&encryption_observer_); | 1525 testing::Mock::VerifyAndClearExpectations(&encryption_observer_); |
1534 EXPECT_CALL(encryption_observer_, OnBootstrapTokenUpdated(_)); | 1526 EXPECT_CALL(encryption_observer_, OnBootstrapTokenUpdated(_)); |
1535 EXPECT_CALL(encryption_observer_, OnPassphraseAccepted()); | 1527 EXPECT_CALL(encryption_observer_, OnPassphraseAccepted()); |
1536 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); | 1528 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); |
1537 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); | 1529 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); |
1538 sync_manager_.GetEncryptionHandler()->SetEncryptionPassphrase( | 1530 sync_manager_.GetEncryptionHandler()->SetEncryptionPassphrase( |
1539 "new_passphrase", true); | 1531 "new_passphrase", true); |
1540 EXPECT_TRUE(EncryptEverythingEnabledForTest()); | 1532 EXPECT_TRUE(EncryptEverythingEnabledForTest()); |
1541 { | 1533 { |
1542 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1534 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1543 EXPECT_TRUE(GetEncryptedTypes(&trans).Equals(ModelTypeSet::All())); | 1535 EXPECT_TRUE(GetEncryptedTypesWithTrans(&trans).Equals(ModelTypeSet::All())); |
1544 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1536 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1545 trans.GetWrappedTrans(), | 1537 trans.GetWrappedTrans(), |
1546 trans.GetCryptographer(), | |
1547 BOOKMARKS, | 1538 BOOKMARKS, |
1548 true /* is encrypted */)); | 1539 true /* is encrypted */)); |
1549 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1540 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1550 trans.GetWrappedTrans(), | 1541 trans.GetWrappedTrans(), |
1551 trans.GetCryptographer(), | |
1552 SESSIONS, | 1542 SESSIONS, |
1553 true /* is encrypted */)); | 1543 true /* is encrypted */)); |
1554 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1544 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1555 trans.GetWrappedTrans(), | 1545 trans.GetWrappedTrans(), |
1556 trans.GetCryptographer(), | |
1557 THEMES, | 1546 THEMES, |
1558 true /* is encrypted */)); | 1547 true /* is encrypted */)); |
1559 } | 1548 } |
1560 // Calling EncryptDataTypes with an empty encrypted types should not trigger | 1549 // Calling EncryptDataTypes with an empty encrypted types should not trigger |
1561 // a reencryption and should just notify immediately. | 1550 // a reencryption and should just notify immediately. |
1562 testing::Mock::VerifyAndClearExpectations(&encryption_observer_); | 1551 testing::Mock::VerifyAndClearExpectations(&encryption_observer_); |
1563 EXPECT_CALL(encryption_observer_, OnBootstrapTokenUpdated(_)).Times(0); | 1552 EXPECT_CALL(encryption_observer_, OnBootstrapTokenUpdated(_)).Times(0); |
1564 EXPECT_CALL(encryption_observer_, OnPassphraseAccepted()).Times(0); | 1553 EXPECT_CALL(encryption_observer_, OnPassphraseAccepted()).Times(0); |
1565 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()).Times(0); | 1554 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()).Times(0); |
1566 sync_manager_.GetEncryptionHandler()->EnableEncryptEverything(); | 1555 sync_manager_.GetEncryptionHandler()->EnableEncryptEverything(); |
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2007 // specifics should be stored in the server legal form. | 1996 // specifics should be stored in the server legal form. |
2008 EXPECT_EQ(raw_title2, node2.GetTitle()); | 1997 EXPECT_EQ(raw_title2, node2.GetTitle()); |
2009 EXPECT_EQ(title2, node2.GetBookmarkSpecifics().title()); | 1998 EXPECT_EQ(title2, node2.GetBookmarkSpecifics().title()); |
2010 EXPECT_EQ(url2, node2.GetBookmarkSpecifics().url()); | 1999 EXPECT_EQ(url2, node2.GetBookmarkSpecifics().url()); |
2011 } | 2000 } |
2012 | 2001 |
2013 { | 2002 { |
2014 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2003 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2015 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 2004 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
2016 trans.GetWrappedTrans(), | 2005 trans.GetWrappedTrans(), |
2017 trans.GetCryptographer(), | |
2018 BOOKMARKS, | 2006 BOOKMARKS, |
2019 false /* not encrypted */)); | 2007 false /* not encrypted */)); |
2020 } | 2008 } |
2021 | 2009 |
2022 EXPECT_CALL(encryption_observer_, | 2010 EXPECT_CALL(encryption_observer_, |
2023 OnEncryptedTypesChanged( | 2011 OnEncryptedTypesChanged( |
2024 HasModelTypes(ModelTypeSet::All()), true)); | 2012 HasModelTypes(ModelTypeSet::All()), true)); |
2025 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); | 2013 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); |
2026 sync_manager_.GetEncryptionHandler()->EnableEncryptEverything(); | 2014 sync_manager_.GetEncryptionHandler()->EnableEncryptEverything(); |
2027 EXPECT_TRUE(EncryptEverythingEnabledForTest()); | 2015 EXPECT_TRUE(EncryptEverythingEnabledForTest()); |
2028 | 2016 |
2029 { | 2017 { |
2030 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2018 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2031 EXPECT_TRUE(GetEncryptedTypes(&trans).Equals(ModelTypeSet::All())); | 2019 EXPECT_TRUE(GetEncryptedTypesWithTrans(&trans).Equals(ModelTypeSet::All())); |
2032 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 2020 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
2033 trans.GetWrappedTrans(), | 2021 trans.GetWrappedTrans(), |
2034 trans.GetCryptographer(), | |
2035 BOOKMARKS, | 2022 BOOKMARKS, |
2036 true /* is encrypted */)); | 2023 true /* is encrypted */)); |
2037 | 2024 |
2038 ReadNode node(&trans); | 2025 ReadNode node(&trans); |
2039 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(node_id1)); | 2026 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(node_id1)); |
2040 EXPECT_EQ(BOOKMARKS, node.GetModelType()); | 2027 EXPECT_EQ(BOOKMARKS, node.GetModelType()); |
2041 EXPECT_EQ(title, node.GetTitle()); | 2028 EXPECT_EQ(title, node.GetTitle()); |
2042 EXPECT_EQ(title, node.GetBookmarkSpecifics().title()); | 2029 EXPECT_EQ(title, node.GetBookmarkSpecifics().title()); |
2043 EXPECT_EQ(url, node.GetBookmarkSpecifics().url()); | 2030 EXPECT_EQ(url, node.GetBookmarkSpecifics().url()); |
2044 | 2031 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2107 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); | 2094 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); |
2108 | 2095 |
2109 // Encrypt the datatatype, should set is_unsynced. | 2096 // Encrypt the datatatype, should set is_unsynced. |
2110 EXPECT_CALL(encryption_observer_, | 2097 EXPECT_CALL(encryption_observer_, |
2111 OnEncryptedTypesChanged( | 2098 OnEncryptedTypesChanged( |
2112 HasModelTypes(ModelTypeSet::All()), true)); | 2099 HasModelTypes(ModelTypeSet::All()), true)); |
2113 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); | 2100 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); |
2114 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); | 2101 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); |
2115 | 2102 |
2116 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); | 2103 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); |
| 2104 EXPECT_CALL(encryption_observer_, OnEncryptedTypesChanged(_, true)); |
2117 sync_manager_.GetEncryptionHandler()->Init(); | 2105 sync_manager_.GetEncryptionHandler()->Init(); |
2118 PumpLoop(); | 2106 PumpLoop(); |
2119 { | 2107 { |
2120 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2108 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2121 ReadNode node(&trans); | 2109 ReadNode node(&trans); |
2122 EXPECT_EQ(BaseNode::INIT_OK, | 2110 EXPECT_EQ(BaseNode::INIT_OK, |
2123 node.InitByClientTagLookup(BOOKMARKS, client_tag)); | 2111 node.InitByClientTagLookup(BOOKMARKS, client_tag)); |
2124 const syncable::Entry* node_entry = node.GetEntry(); | 2112 const syncable::Entry* node_entry = node.GetEntry(); |
2125 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); | 2113 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); |
2126 EXPECT_TRUE(specifics.has_encrypted()); | 2114 EXPECT_TRUE(specifics.has_encrypted()); |
(...skipping 27 matching lines...) Expand all Loading... |
2154 EXPECT_TRUE(cryptographer->is_ready()); | 2142 EXPECT_TRUE(cryptographer->is_ready()); |
2155 EXPECT_TRUE(cryptographer->CanDecryptUsingDefaultKey( | 2143 EXPECT_TRUE(cryptographer->CanDecryptUsingDefaultKey( |
2156 specifics.encrypted())); | 2144 specifics.encrypted())); |
2157 } | 2145 } |
2158 EXPECT_TRUE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); | 2146 EXPECT_TRUE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); |
2159 | 2147 |
2160 // Force a re-encrypt everything. Should not set is_unsynced. | 2148 // Force a re-encrypt everything. Should not set is_unsynced. |
2161 testing::Mock::VerifyAndClearExpectations(&encryption_observer_); | 2149 testing::Mock::VerifyAndClearExpectations(&encryption_observer_); |
2162 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); | 2150 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); |
2163 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); | 2151 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); |
| 2152 EXPECT_CALL(encryption_observer_, OnEncryptedTypesChanged(_, false)); |
2164 | 2153 |
2165 sync_manager_.GetEncryptionHandler()->Init(); | 2154 sync_manager_.GetEncryptionHandler()->Init(); |
2166 PumpLoop(); | 2155 PumpLoop(); |
2167 | 2156 |
2168 { | 2157 { |
2169 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2158 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2170 ReadNode node(&trans); | 2159 ReadNode node(&trans); |
2171 EXPECT_EQ(BaseNode::INIT_OK, | 2160 EXPECT_EQ(BaseNode::INIT_OK, |
2172 node.InitByClientTagLookup(BOOKMARKS, client_tag)); | 2161 node.InitByClientTagLookup(BOOKMARKS, client_tag)); |
2173 const syncable::Entry* node_entry = node.GetEntry(); | 2162 const syncable::Entry* node_entry = node.GetEntry(); |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2360 BaseNode::GenerateSyncableHash(PASSWORDS, | 2349 BaseNode::GenerateSyncableHash(PASSWORDS, |
2361 client_tag), | 2350 client_tag), |
2362 entity_specifics); | 2351 entity_specifics); |
2363 // New node shouldn't start off unsynced. | 2352 // New node shouldn't start off unsynced. |
2364 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); | 2353 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); |
2365 | 2354 |
2366 // Force a re-encrypt everything. Should not set is_unsynced. | 2355 // Force a re-encrypt everything. Should not set is_unsynced. |
2367 testing::Mock::VerifyAndClearExpectations(&encryption_observer_); | 2356 testing::Mock::VerifyAndClearExpectations(&encryption_observer_); |
2368 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); | 2357 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); |
2369 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); | 2358 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); |
| 2359 EXPECT_CALL(encryption_observer_, OnEncryptedTypesChanged(_, false)); |
2370 sync_manager_.GetEncryptionHandler()->Init(); | 2360 sync_manager_.GetEncryptionHandler()->Init(); |
2371 PumpLoop(); | 2361 PumpLoop(); |
2372 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); | 2362 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); |
2373 } | 2363 } |
2374 | 2364 |
2375 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for bookmarks | 2365 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for bookmarks |
2376 // when we write the same data, but does set it when we write new data. | 2366 // when we write the same data, but does set it when we write new data. |
2377 TEST_F(SyncManagerTest, SetBookmarkTitle) { | 2367 TEST_F(SyncManagerTest, SetBookmarkTitle) { |
2378 std::string client_tag = "title"; | 2368 std::string client_tag = "title"; |
2379 sync_pb::EntitySpecifics entity_specifics; | 2369 sync_pb::EntitySpecifics entity_specifics; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2422 // New node shouldn't start off unsynced. | 2412 // New node shouldn't start off unsynced. |
2423 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); | 2413 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); |
2424 | 2414 |
2425 // Encrypt the datatatype, should set is_unsynced. | 2415 // Encrypt the datatatype, should set is_unsynced. |
2426 EXPECT_CALL(encryption_observer_, | 2416 EXPECT_CALL(encryption_observer_, |
2427 OnEncryptedTypesChanged( | 2417 OnEncryptedTypesChanged( |
2428 HasModelTypes(ModelTypeSet::All()), true)); | 2418 HasModelTypes(ModelTypeSet::All()), true)); |
2429 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); | 2419 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); |
2430 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); | 2420 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); |
2431 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); | 2421 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); |
| 2422 EXPECT_CALL(encryption_observer_, OnEncryptedTypesChanged(_, true)); |
2432 sync_manager_.GetEncryptionHandler()->Init(); | 2423 sync_manager_.GetEncryptionHandler()->Init(); |
2433 PumpLoop(); | 2424 PumpLoop(); |
2434 EXPECT_TRUE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); | 2425 EXPECT_TRUE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); |
2435 | 2426 |
2436 // Manually change to the same title. Should not set is_unsynced. | 2427 // Manually change to the same title. Should not set is_unsynced. |
2437 // NON_UNIQUE_NAME should be kEncryptedString. | 2428 // NON_UNIQUE_NAME should be kEncryptedString. |
2438 { | 2429 { |
2439 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2430 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2440 WriteNode node(&trans); | 2431 WriteNode node(&trans); |
2441 EXPECT_EQ(BaseNode::INIT_OK, | 2432 EXPECT_EQ(BaseNode::INIT_OK, |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2518 // New node shouldn't start off unsynced. | 2509 // New node shouldn't start off unsynced. |
2519 EXPECT_FALSE(ResetUnsyncedEntry(PREFERENCES, client_tag)); | 2510 EXPECT_FALSE(ResetUnsyncedEntry(PREFERENCES, client_tag)); |
2520 | 2511 |
2521 // Encrypt the datatatype, should set is_unsynced. | 2512 // Encrypt the datatatype, should set is_unsynced. |
2522 EXPECT_CALL(encryption_observer_, | 2513 EXPECT_CALL(encryption_observer_, |
2523 OnEncryptedTypesChanged( | 2514 OnEncryptedTypesChanged( |
2524 HasModelTypes(ModelTypeSet::All()), true)); | 2515 HasModelTypes(ModelTypeSet::All()), true)); |
2525 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); | 2516 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); |
2526 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); | 2517 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); |
2527 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); | 2518 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); |
| 2519 EXPECT_CALL(encryption_observer_, OnEncryptedTypesChanged(_, true)); |
2528 sync_manager_.GetEncryptionHandler()->Init(); | 2520 sync_manager_.GetEncryptionHandler()->Init(); |
2529 PumpLoop(); | 2521 PumpLoop(); |
2530 EXPECT_TRUE(ResetUnsyncedEntry(PREFERENCES, client_tag)); | 2522 EXPECT_TRUE(ResetUnsyncedEntry(PREFERENCES, client_tag)); |
2531 | 2523 |
2532 // Manually change to the same title. Should not set is_unsynced. | 2524 // Manually change to the same title. Should not set is_unsynced. |
2533 // NON_UNIQUE_NAME should be kEncryptedString. | 2525 // NON_UNIQUE_NAME should be kEncryptedString. |
2534 { | 2526 { |
2535 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2527 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2536 WriteNode node(&trans); | 2528 WriteNode node(&trans); |
2537 EXPECT_EQ(BaseNode::INIT_OK, | 2529 EXPECT_EQ(BaseNode::INIT_OK, |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2890 | 2882 |
2891 // Verify only the non-disabled types remain after cleanup. | 2883 // Verify only the non-disabled types remain after cleanup. |
2892 sync_manager_.PurgeDisabledTypes(enabled_types, new_enabled_types); | 2884 sync_manager_.PurgeDisabledTypes(enabled_types, new_enabled_types); |
2893 EXPECT_TRUE(new_enabled_types.Equals( | 2885 EXPECT_TRUE(new_enabled_types.Equals( |
2894 Union(sync_manager_.InitialSyncEndedTypes(), partial_enabled_types))); | 2886 Union(sync_manager_.InitialSyncEndedTypes(), partial_enabled_types))); |
2895 EXPECT_TRUE(disabled_types.Equals( | 2887 EXPECT_TRUE(disabled_types.Equals( |
2896 sync_manager_.GetTypesWithEmptyProgressMarkerToken(ModelTypeSet::All()))); | 2888 sync_manager_.GetTypesWithEmptyProgressMarkerToken(ModelTypeSet::All()))); |
2897 } | 2889 } |
2898 | 2890 |
2899 } // namespace | 2891 } // namespace |
OLD | NEW |