| Index: sync/internal_api/sync_manager_impl_unittest.cc
|
| diff --git a/sync/internal_api/sync_manager_impl_unittest.cc b/sync/internal_api/sync_manager_impl_unittest.cc
|
| index 841ffd05f3ea9e862115bb78c8cfa0e1defc9ae1..4765c67c7033653872bf6403b50a6edd7558acf9 100644
|
| --- a/sync/internal_api/sync_manager_impl_unittest.cc
|
| +++ b/sync/internal_api/sync_manager_impl_unittest.cc
|
| @@ -796,7 +796,9 @@ class SyncManagerTest : public testing::Test,
|
| }
|
|
|
| void GetModelSafeRoutingInfo(ModelSafeRoutingInfo* out) {
|
| - (*out)[NIGORI] = GROUP_PASSIVE;
|
| + (*out)[NIGORI] = GROUP_CONTROL;
|
| + (*out)[PER_DEVICE_METADATA] = GROUP_CONTROL;
|
| + (*out)[PER_USER_METADATA] = GROUP_CONTROL;
|
| (*out)[BOOKMARKS] = GROUP_PASSIVE;
|
| (*out)[THEMES] = GROUP_PASSIVE;
|
| (*out)[SESSIONS] = GROUP_PASSIVE;
|
| @@ -941,6 +943,14 @@ class SyncManagerTest : public testing::Test,
|
| sync_manager_.directory()->set_initial_sync_ended_for_type(type, value);
|
| }
|
|
|
| + void RefreshEncryption() {
|
| + sync_manager_.RefreshEncryption();
|
| + }
|
| +
|
| + void UpdateDeviceInformation(std::string version, std::string session_name) {
|
| + sync_manager_.UpdateDeviceInformation(version, session_name);
|
| + }
|
| +
|
| private:
|
| // Needed by |sync_manager_|.
|
| MessageLoop message_loop_;
|
| @@ -1185,7 +1195,7 @@ TEST_F(SyncManagerTest, GetChildNodeIds) {
|
| const ListValue* nodes = NULL;
|
| ASSERT_TRUE(return_args.Get().GetList(0, &nodes));
|
| ASSERT_TRUE(nodes);
|
| - EXPECT_EQ(6u, nodes->GetSize());
|
| + EXPECT_EQ(8u, nodes->GetSize());
|
| }
|
|
|
| TEST_F(SyncManagerTest, GetChildNodeIdsFailure) {
|
| @@ -1345,12 +1355,99 @@ TEST_F(SyncManagerTest, OnIncomingNotification) {
|
| PumpLoop();
|
| }
|
|
|
| +TEST_F(SyncManagerTest, CreateNewDeviceInformation) {
|
| + const std::string version("v1");
|
| + const std::string session_name("session");
|
| + const std::string cache_guid =
|
| + sync_manager_.GetUserShare()->directory->cache_guid();
|
| +
|
| + {
|
| + ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| + ReadNode node(&trans);
|
| + ASSERT_EQ(BaseNode::INIT_FAILED_ENTRY_NOT_GOOD,
|
| + node.InitByClientTagLookup(PER_DEVICE_METADATA, cache_guid));
|
| + }
|
| +
|
| + UpdateDeviceInformation("v1", "session");
|
| +
|
| + {
|
| + ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| + ReadNode node(&trans);
|
| + ASSERT_EQ(BaseNode::INIT_OK,
|
| + node.InitByClientTagLookup(PER_DEVICE_METADATA, cache_guid));
|
| + sync_pb::PerDeviceSpecifics specifics = node.GetPerDeviceSpecifics();
|
| + ASSERT_TRUE(specifics.has_device_information());
|
| + const sync_pb::DeviceInformation& device_info =
|
| + specifics.device_information();
|
| +
|
| + EXPECT_EQ(version, device_info.chrome_version());
|
| + EXPECT_EQ(session_name, device_info.name());
|
| + EXPECT_EQ(cache_guid, device_info.cache_guid());
|
| + }
|
| +}
|
| +
|
| +TEST_F(SyncManagerTest, DontModifyExistingDeviceInformation) {
|
| + const std::string version("v1");
|
| + const std::string session_name("session");
|
| + const std::string cache_guid =
|
| + sync_manager_.GetUserShare()->directory->cache_guid();
|
| + sync_pb::DeviceInformation old_device_info;
|
| + sync_pb::DeviceInformation new_device_info;
|
| +
|
| + UpdateDeviceInformation(version, session_name);
|
| +
|
| + {
|
| + ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| + ReadNode node(&trans);
|
| + ASSERT_EQ(BaseNode::INIT_OK,
|
| + node.InitByClientTagLookup(PER_DEVICE_METADATA, cache_guid));
|
| + sync_pb::PerDeviceSpecifics old_specifics = node.GetPerDeviceSpecifics();
|
| + }
|
| +
|
| + UpdateDeviceInformation(version, session_name);
|
| +
|
| + {
|
| + ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| + ReadNode node(&trans);
|
| + ASSERT_EQ(BaseNode::INIT_OK,
|
| + node.InitByClientTagLookup(PER_DEVICE_METADATA, cache_guid));
|
| + sync_pb::PerDeviceSpecifics new_specifics = node.GetPerDeviceSpecifics();
|
| + }
|
| +
|
| + EXPECT_EQ(old_device_info.chrome_version(), new_device_info.chrome_version());
|
| + EXPECT_EQ(old_device_info.name(), new_device_info.name());
|
| + EXPECT_EQ(old_device_info.cache_guid(), new_device_info.cache_guid());
|
| +}
|
| +
|
| +TEST_F(SyncManagerTest, UpdateExistingDeviceInformation) {
|
| + const std::string old_version("v1");
|
| + const std::string new_version("v2");
|
| + const std::string session_name("session");
|
| + const std::string cache_guid =
|
| + sync_manager_.GetUserShare()->directory->cache_guid();
|
| +
|
| + UpdateDeviceInformation(old_version, session_name);
|
| + UpdateDeviceInformation(new_version, session_name);
|
| +
|
| + {
|
| + WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| + WriteNode node(&trans);
|
| + ASSERT_EQ(BaseNode::INIT_OK,
|
| + node.InitByClientTagLookup(PER_DEVICE_METADATA, cache_guid));
|
| + sync_pb::PerDeviceSpecifics specifics = node.GetPerDeviceSpecifics();
|
| + ASSERT_TRUE(specifics.has_device_information());
|
| + const sync_pb::DeviceInformation& device_info =
|
| + specifics.device_information();
|
| +
|
| + EXPECT_EQ(new_version, device_info.chrome_version());
|
| + }
|
| +}
|
| +
|
| TEST_F(SyncManagerTest, RefreshEncryptionReady) {
|
| EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION));
|
| EXPECT_CALL(observer_, OnEncryptionComplete());
|
|
|
| - sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing));
|
| - PumpLoop();
|
| + RefreshEncryption();
|
|
|
| const ModelTypeSet encrypted_types = GetEncryptedDataTypesForTest();
|
| EXPECT_TRUE(encrypted_types.Has(PASSWORDS));
|
| @@ -1369,27 +1466,13 @@ TEST_F(SyncManagerTest, RefreshEncryptionReady) {
|
| }
|
| }
|
|
|
| -// Attempt to refresh encryption when nigori not downloaded.
|
| -TEST_F(SyncManagerTest, RefreshEncryptionNotReady) {
|
| - // Don't set up encryption (no nigori node created).
|
| -
|
| - // Should fail.
|
| - sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing));
|
| - PumpLoop();
|
| -
|
| - const ModelTypeSet encrypted_types = GetEncryptedDataTypesForTest();
|
| - EXPECT_TRUE(encrypted_types.Has(PASSWORDS)); // Hardcoded.
|
| - EXPECT_FALSE(EncryptEverythingEnabledForTest());
|
| -}
|
| -
|
| // Attempt to refresh encryption when nigori is empty.
|
| TEST_F(SyncManagerTest, RefreshEncryptionEmptyNigori) {
|
| EXPECT_TRUE(SetUpEncryption(DONT_WRITE_NIGORI, DEFAULT_ENCRYPTION));
|
| EXPECT_CALL(observer_, OnEncryptionComplete());
|
|
|
| // Should write to nigori.
|
| - sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing));
|
| - PumpLoop();
|
| + RefreshEncryption();
|
|
|
| const ModelTypeSet encrypted_types = GetEncryptedDataTypesForTest();
|
| EXPECT_TRUE(encrypted_types.Has(PASSWORDS)); // Hardcoded.
|
| @@ -1412,7 +1495,7 @@ TEST_F(SyncManagerTest, EncryptDataTypesWithNoData) {
|
| EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION));
|
| EXPECT_CALL(observer_,
|
| OnEncryptedTypesChanged(
|
| - HasModelTypes(ModelTypeSet::All()), true));
|
| + HasModelTypes(syncer::EncryptableTypes()), true));
|
| EXPECT_CALL(observer_, OnEncryptionComplete());
|
| sync_manager_.EnableEncryptEverything();
|
| EXPECT_TRUE(EncryptEverythingEnabledForTest());
|
| @@ -1469,14 +1552,14 @@ TEST_F(SyncManagerTest, EncryptDataTypesWithData) {
|
|
|
| EXPECT_CALL(observer_,
|
| OnEncryptedTypesChanged(
|
| - HasModelTypes(ModelTypeSet::All()), true));
|
| + HasModelTypes(syncer::EncryptableTypes()), true));
|
| EXPECT_CALL(observer_, OnEncryptionComplete());
|
| sync_manager_.EnableEncryptEverything();
|
| EXPECT_TRUE(EncryptEverythingEnabledForTest());
|
| {
|
| ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| EXPECT_TRUE(GetEncryptedTypes(&trans).Equals(
|
| - ModelTypeSet::All()));
|
| + syncer::EncryptableTypes()));
|
| EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest(
|
| trans.GetWrappedTrans(),
|
| trans.GetCryptographer(),
|
| @@ -1503,7 +1586,7 @@ TEST_F(SyncManagerTest, EncryptDataTypesWithData) {
|
| EXPECT_TRUE(EncryptEverythingEnabledForTest());
|
| {
|
| ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| - EXPECT_TRUE(GetEncryptedTypes(&trans).Equals(ModelTypeSet::All()));
|
| + EXPECT_TRUE(GetEncryptedTypes(&trans).Equals(syncer::EncryptableTypes()));
|
| EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest(
|
| trans.GetWrappedTrans(),
|
| trans.GetCryptographer(),
|
| @@ -1944,14 +2027,14 @@ TEST_F(SyncManagerTest, EncryptBookmarksWithLegacyData) {
|
|
|
| EXPECT_CALL(observer_,
|
| OnEncryptedTypesChanged(
|
| - HasModelTypes(ModelTypeSet::All()), true));
|
| + HasModelTypes(syncer::EncryptableTypes()), true));
|
| EXPECT_CALL(observer_, OnEncryptionComplete());
|
| sync_manager_.EnableEncryptEverything();
|
| EXPECT_TRUE(EncryptEverythingEnabledForTest());
|
|
|
| {
|
| ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| - EXPECT_TRUE(GetEncryptedTypes(&trans).Equals(ModelTypeSet::All()));
|
| + EXPECT_TRUE(GetEncryptedTypes(&trans).Equals(syncer::EncryptableTypes()));
|
| EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest(
|
| trans.GetWrappedTrans(),
|
| trans.GetCryptographer(),
|
| @@ -2032,12 +2115,11 @@ TEST_F(SyncManagerTest, UpdateEntryWithEncryption) {
|
| // Encrypt the datatatype, should set is_unsynced.
|
| EXPECT_CALL(observer_,
|
| OnEncryptedTypesChanged(
|
| - HasModelTypes(ModelTypeSet::All()), true));
|
| + HasModelTypes(syncer::EncryptableTypes()), true));
|
| EXPECT_CALL(observer_, OnEncryptionComplete());
|
| EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION));
|
|
|
| - sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing));
|
| - PumpLoop();
|
| + RefreshEncryption();
|
| {
|
| ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| ReadNode node(&trans);
|
| @@ -2080,9 +2162,7 @@ TEST_F(SyncManagerTest, UpdateEntryWithEncryption) {
|
| testing::Mock::VerifyAndClearExpectations(&observer_);
|
| EXPECT_CALL(observer_, OnEncryptionComplete());
|
|
|
| - sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing));
|
| - PumpLoop();
|
| -
|
| + RefreshEncryption();
|
| {
|
| ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| ReadNode node(&trans);
|
| @@ -2279,8 +2359,7 @@ TEST_F(SyncManagerTest, UpdatePasswordReencryptEverything) {
|
| // Force a re-encrypt everything. Should not set is_unsynced.
|
| testing::Mock::VerifyAndClearExpectations(&observer_);
|
| EXPECT_CALL(observer_, OnEncryptionComplete());
|
| - sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing));
|
| - PumpLoop();
|
| + RefreshEncryption();
|
| EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag));
|
| }
|
|
|
| @@ -2337,11 +2416,10 @@ TEST_F(SyncManagerTest, SetBookmarkTitleWithEncryption) {
|
| // Encrypt the datatatype, should set is_unsynced.
|
| EXPECT_CALL(observer_,
|
| OnEncryptedTypesChanged(
|
| - HasModelTypes(ModelTypeSet::All()), true));
|
| + HasModelTypes(syncer::EncryptableTypes()), true));
|
| EXPECT_CALL(observer_, OnEncryptionComplete());
|
| EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION));
|
| - sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing));
|
| - PumpLoop();
|
| + RefreshEncryption();
|
| EXPECT_TRUE(ResetUnsyncedEntry(BOOKMARKS, client_tag));
|
|
|
| // Manually change to the same title. Should not set is_unsynced.
|
| @@ -2432,11 +2510,10 @@ TEST_F(SyncManagerTest, SetNonBookmarkTitleWithEncryption) {
|
| // Encrypt the datatatype, should set is_unsynced.
|
| EXPECT_CALL(observer_,
|
| OnEncryptedTypesChanged(
|
| - HasModelTypes(ModelTypeSet::All()), true));
|
| + HasModelTypes(syncer::EncryptableTypes()), true));
|
| EXPECT_CALL(observer_, OnEncryptionComplete());
|
| EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION));
|
| - sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing));
|
| - PumpLoop();
|
| + RefreshEncryption();
|
| EXPECT_TRUE(ResetUnsyncedEntry(PREFERENCES, client_tag));
|
|
|
| // Manually change to the same title. Should not set is_unsynced.
|
|
|