Index: chrome/browser/sync/profile_sync_service_password_unittest.cc |
diff --git a/chrome/browser/sync/profile_sync_service_password_unittest.cc b/chrome/browser/sync/profile_sync_service_password_unittest.cc |
index b70457805c04a75d7c746f0783f99d669af7fd9d..0dccd709017bba304755e81efa7b42fbc802f2a4 100644 |
--- a/chrome/browser/sync/profile_sync_service_password_unittest.cc |
+++ b/chrome/browser/sync/profile_sync_service_password_unittest.cc |
@@ -122,7 +122,7 @@ class ProfileSyncServicePasswordTest : public testing::Test { |
MessageLoop::current()->RunAllPending(); |
} |
- void StartSyncService(Task* task) { |
+ void StartSyncService(Task* root_task, Task* node_task) { |
if (!service_.get()) { |
service_.reset(new TestProfileSyncService(&factory_, &profile_, |
false, false)); |
@@ -144,7 +144,7 @@ class ProfileSyncServicePasswordTest : public testing::Test { |
// State changes once for the backend init and once for startup done. |
EXPECT_CALL(observer_, OnStateChanged()). |
- WillOnce(Return()). |
+ WillOnce(InvokeTask(root_task)). |
WillOnce(Return()). |
WillOnce(QuitUIMessageLoop()); |
@@ -152,13 +152,17 @@ class ProfileSyncServicePasswordTest : public testing::Test { |
service_->Initialize(); |
MessageLoop::current()->Run(); |
- EXPECT_CALL(observer_, OnStateChanged()). |
- WillOnce(InvokeTask(task)). |
- WillOnce(Return()). |
- WillOnce(QuitUIMessageLoop()); |
- |
- service_->SetPassphrase("foo"); |
- MessageLoop::current()->Run(); |
+ // Only set the passphrase if we actually created the password and nigori |
+ // root nodes. |
+ if (root_task) { |
+ EXPECT_CALL(observer_, OnStateChanged()). |
+ WillOnce(InvokeTask(node_task)). |
+ WillOnce(Return()). |
+ WillOnce(QuitUIMessageLoop()); |
+ |
+ service_->SetPassphrase("foo"); |
+ MessageLoop::current()->Run(); |
+ } |
} |
} |
@@ -170,22 +174,50 @@ class ProfileSyncServicePasswordTest : public testing::Test { |
ASSERT_TRUE(dir.good()); |
WriteTransaction wtrans(dir, UNITTEST, __FILE__, __LINE__); |
- MutableEntry node(&wtrans, |
- CREATE, |
- wtrans.root_id(), |
- browser_sync::kPasswordTag); |
- node.Put(UNIQUE_SERVER_TAG, browser_sync::kPasswordTag); |
- node.Put(IS_DIR, true); |
- node.Put(SERVER_IS_DIR, false); |
- node.Put(IS_UNSYNCED, false); |
- node.Put(IS_UNAPPLIED_UPDATE, false); |
- node.Put(SERVER_VERSION, 20); |
- node.Put(BASE_VERSION, 20); |
- node.Put(IS_DEL, false); |
- node.Put(ID, ids_.MakeServer(browser_sync::kPasswordTag)); |
- sync_pb::EntitySpecifics specifics; |
- specifics.MutableExtension(sync_pb::password); |
- node.Put(SPECIFICS, specifics); |
+ |
+ MutableEntry password_node(&wtrans, |
+ CREATE, |
+ wtrans.root_id(), |
+ browser_sync::kPasswordTag); |
+ password_node.Put(UNIQUE_SERVER_TAG, browser_sync::kPasswordTag); |
+ password_node.Put(IS_DIR, true); |
+ password_node.Put(SERVER_IS_DIR, false); |
+ password_node.Put(IS_UNSYNCED, false); |
+ password_node.Put(IS_UNAPPLIED_UPDATE, false); |
+ password_node.Put(SERVER_VERSION, 20); |
+ password_node.Put(BASE_VERSION, 20); |
+ password_node.Put(IS_DEL, false); |
+ password_node.Put(ID, ids_.MakeServer(browser_sync::kPasswordTag)); |
+ sync_pb::EntitySpecifics password_specifics; |
+ password_specifics.MutableExtension(sync_pb::password); |
+ password_node.Put(SPECIFICS, password_specifics); |
+ } |
+ |
+ void CreateNigoriRoot() { |
+ UserShare* user_share = service_->backend()->GetUserShareHandle(); |
+ DirectoryManager* dir_manager = user_share->dir_manager.get(); |
+ |
+ ScopedDirLookup dir(dir_manager, user_share->authenticated_name); |
+ ASSERT_TRUE(dir.good()); |
+ |
+ WriteTransaction wtrans(dir, UNITTEST, __FILE__, __LINE__); |
+ |
+ MutableEntry nigori_node(&wtrans, |
+ CREATE, |
+ wtrans.root_id(), |
+ browser_sync::kNigoriTag); |
+ nigori_node.Put(UNIQUE_SERVER_TAG, browser_sync::kNigoriTag); |
+ nigori_node.Put(IS_DIR, false); |
+ nigori_node.Put(SERVER_IS_DIR, false); |
+ nigori_node.Put(IS_UNSYNCED, false); |
+ nigori_node.Put(IS_UNAPPLIED_UPDATE, false); |
+ nigori_node.Put(SERVER_VERSION, 20); |
+ nigori_node.Put(BASE_VERSION, 20); |
+ nigori_node.Put(IS_DEL, false); |
+ nigori_node.Put(ID, ids_.MakeServer(browser_sync::kNigoriTag)); |
+ sync_pb::EntitySpecifics nigori_specifics; |
+ nigori_specifics.MutableExtension(sync_pb::nigori); |
+ nigori_node.Put(SPECIFICS, nigori_specifics); |
} |
void AddPasswordSyncNode(const PasswordForm& entry) { |
@@ -240,12 +272,13 @@ class ProfileSyncServicePasswordTest : public testing::Test { |
} |
void SetIdleChangeProcessorExpectations() { |
- EXPECT_CALL(*(password_store_.get()), AddLoginImpl(_)).Times(0); |
- EXPECT_CALL(*(password_store_.get()), UpdateLoginImpl(_)).Times(0); |
- EXPECT_CALL(*(password_store_.get()), RemoveLoginImpl(_)).Times(0); |
+ EXPECT_CALL(*password_store_, AddLoginImpl(_)).Times(0); |
+ EXPECT_CALL(*password_store_, UpdateLoginImpl(_)).Times(0); |
+ EXPECT_CALL(*password_store_, RemoveLoginImpl(_)).Times(0); |
} |
friend class CreatePasswordRootTask; |
+ friend class CreateNigoriRootTask; |
friend class AddPasswordEntriesTask; |
MessageLoopForUI message_loop_; |
@@ -270,6 +303,7 @@ class CreatePasswordRootTask : public Task { |
} |
virtual void Run() { |
+ test_->CreateNigoriRoot(); |
test_->CreatePasswordRoot(); |
} |
@@ -277,6 +311,20 @@ class CreatePasswordRootTask : public Task { |
ProfileSyncServicePasswordTest* test_; |
}; |
+class CreateNigoriRootTask : public Task { |
+ public: |
+ explicit CreateNigoriRootTask(ProfileSyncServicePasswordTest* test) |
+ : test_(test) { |
+ } |
+ |
+ virtual void Run() { |
+ test_->CreateNigoriRoot(); |
+ } |
+ |
+ private: |
+ ProfileSyncServicePasswordTest* test_; |
+}; |
+ |
class AddPasswordEntriesTask : public Task { |
public: |
AddPasswordEntriesTask(ProfileSyncServicePasswordTest* test, |
@@ -285,7 +333,6 @@ class AddPasswordEntriesTask : public Task { |
} |
virtual void Run() { |
- test_->CreatePasswordRoot(); |
for (size_t i = 0; i < entries_.size(); ++i) { |
test_->AddPasswordSyncNode(entries_[i]); |
} |
@@ -301,19 +348,21 @@ TEST_F(ProfileSyncServicePasswordTest, FailModelAssociation) { |
EXPECT_CALL(backend_, RequestPause()). |
WillRepeatedly(testing::DoAll(Notify(NotificationType::SYNC_PAUSED), |
testing::Return(true))); |
- // Don't create the root password node so startup fails. |
- StartSyncService(NULL); |
+ // Create the nigori root node so that password model association is |
+ // attempted, but not the password root node so that it fails. |
+ CreateNigoriRootTask task(this); |
+ StartSyncService(&task, NULL); |
EXPECT_TRUE(service_->unrecoverable_error_detected()); |
} |
TEST_F(ProfileSyncServicePasswordTest, EmptyNativeEmptySync) { |
- EXPECT_CALL(*(password_store_.get()), FillAutofillableLogins(_)) |
+ EXPECT_CALL(*password_store_, FillAutofillableLogins(_)) |
.WillOnce(Return(true)); |
- EXPECT_CALL(*(password_store_.get()), FillBlacklistLogins(_)) |
+ EXPECT_CALL(*password_store_, FillBlacklistLogins(_)) |
.WillOnce(Return(true)); |
SetIdleChangeProcessorExpectations(); |
CreatePasswordRootTask task(this); |
- StartSyncService(&task); |
+ StartSyncService(&task, NULL); |
std::vector<PasswordForm> sync_entries; |
GetPasswordEntriesFromSyncDB(&sync_entries); |
EXPECT_EQ(0U, sync_entries.size()); |
@@ -337,13 +386,13 @@ TEST_F(ProfileSyncServicePasswordTest, HasNativeEntriesEmptySync) { |
new_form->blacklisted_by_user = false; |
forms.push_back(new_form); |
expected_forms.push_back(*new_form); |
- EXPECT_CALL(*(password_store_.get()), FillAutofillableLogins(_)) |
+ EXPECT_CALL(*password_store_, FillAutofillableLogins(_)) |
.WillOnce(DoAll(SetArgumentPointee<0>(forms), Return(true))); |
- EXPECT_CALL(*(password_store_.get()), FillBlacklistLogins(_)) |
+ EXPECT_CALL(*password_store_, FillBlacklistLogins(_)) |
.WillOnce(Return(true)); |
SetIdleChangeProcessorExpectations(); |
CreatePasswordRootTask task(this); |
- StartSyncService(&task); |
+ StartSyncService(&task, NULL); |
std::vector<PasswordForm> sync_forms; |
GetPasswordEntriesFromSyncDB(&sync_forms); |
ASSERT_EQ(1U, sync_forms.size()); |
@@ -389,13 +438,13 @@ TEST_F(ProfileSyncServicePasswordTest, HasNativeEntriesEmptySyncSameUsername) { |
expected_forms.push_back(*new_form); |
} |
- EXPECT_CALL(*(password_store_.get()), FillAutofillableLogins(_)) |
+ EXPECT_CALL(*password_store_, FillAutofillableLogins(_)) |
.WillOnce(DoAll(SetArgumentPointee<0>(forms), Return(true))); |
- EXPECT_CALL(*(password_store_.get()), FillBlacklistLogins(_)) |
+ EXPECT_CALL(*password_store_, FillBlacklistLogins(_)) |
.WillOnce(Return(true)); |
SetIdleChangeProcessorExpectations(); |
CreatePasswordRootTask task(this); |
- StartSyncService(&task); |
+ StartSyncService(&task, NULL); |
std::vector<PasswordForm> sync_forms; |
GetPasswordEntriesFromSyncDB(&sync_forms); |
ASSERT_EQ(2U, sync_forms.size()); |
@@ -444,15 +493,14 @@ TEST_F(ProfileSyncServicePasswordTest, HasNativeHasSyncNoMerge) { |
expected_forms.push_back(new_form); |
} |
- EXPECT_CALL(*(password_store_.get()), FillAutofillableLogins(_)) |
+ EXPECT_CALL(*password_store_, FillAutofillableLogins(_)) |
.WillOnce(DoAll(SetArgumentPointee<0>(native_forms), Return(true))); |
- EXPECT_CALL(*(password_store_.get()), FillBlacklistLogins(_)) |
- .WillOnce(Return(true)); |
+ EXPECT_CALL(*password_store_, FillBlacklistLogins(_)).WillOnce(Return(true)); |
+ EXPECT_CALL(*password_store_, AddLoginImpl(_)).Times(1); |
- AddPasswordEntriesTask task(this, sync_forms); |
- |
- EXPECT_CALL(*(password_store_.get()), AddLoginImpl(_)).Times(1); |
- StartSyncService(&task); |
+ CreatePasswordRootTask root_task(this); |
+ AddPasswordEntriesTask node_task(this, sync_forms); |
+ StartSyncService(&root_task, &node_task); |
std::vector<PasswordForm> new_sync_forms; |
GetPasswordEntriesFromSyncDB(&new_sync_forms); |
@@ -518,15 +566,15 @@ TEST_F(ProfileSyncServicePasswordTest, HasNativeHasSyncMergeEntry) { |
expected_forms.push_back(new_form); |
} |
- EXPECT_CALL(*(password_store_.get()), FillAutofillableLogins(_)) |
+ EXPECT_CALL(*password_store_, FillAutofillableLogins(_)) |
.WillOnce(DoAll(SetArgumentPointee<0>(native_forms), Return(true))); |
- EXPECT_CALL(*(password_store_.get()), FillBlacklistLogins(_)) |
- .WillOnce(Return(true)); |
+ EXPECT_CALL(*password_store_, FillBlacklistLogins(_)).WillOnce(Return(true)); |
+ EXPECT_CALL(*password_store_, UpdateLoginImpl(_)).Times(1); |
- AddPasswordEntriesTask task(this, sync_forms); |
+ CreatePasswordRootTask root_task(this); |
+ AddPasswordEntriesTask node_task(this, sync_forms); |
- EXPECT_CALL(*(password_store_.get()), UpdateLoginImpl(_)).Times(1); |
- StartSyncService(&task); |
+ StartSyncService(&root_task, &node_task); |
std::vector<PasswordForm> new_sync_forms; |
GetPasswordEntriesFromSyncDB(&new_sync_forms); |