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

Unified Diff: components/sync_driver/data_type_manager_impl_unittest.cc

Issue 535683002: Fix use-after-free in HDDDTC shutdown (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix tests Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/sync_driver/data_type_manager_impl.cc ('k') | components/sync_driver/data_type_manager_mock.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/sync_driver/data_type_manager_impl_unittest.cc
diff --git a/components/sync_driver/data_type_manager_impl_unittest.cc b/components/sync_driver/data_type_manager_impl_unittest.cc
index 054e2677954bf77d5ca3fec8317d5e55670dc78c..c4d2ec2542f779006445bbce2368b3f79c3d69ea 100644
--- a/components/sync_driver/data_type_manager_impl_unittest.cc
+++ b/components/sync_driver/data_type_manager_impl_unittest.cc
@@ -14,11 +14,11 @@
#include "components/sync_driver/fake_data_type_controller.h"
#include "sync/internal_api/public/base/model_type.h"
#include "sync/internal_api/public/configure_reason.h"
-#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace sync_driver {
+using syncer::SyncError;
using syncer::ModelType;
using syncer::ModelTypeSet;
using syncer::ModelTypeToString;
@@ -27,25 +27,48 @@ using syncer::APPS;
using syncer::PASSWORDS;
using syncer::PREFERENCES;
using syncer::NIGORI;
-using testing::_;
-using testing::Mock;
-using testing::ResultOf;
namespace {
-// Used by SetConfigureDoneExpectation.
-DataTypeManager::ConfigureStatus GetStatus(
- const DataTypeManager::ConfigureResult& result) {
- return result.status;
-}
-
// Helper for unioning with priority types.
-syncer::ModelTypeSet AddHighPriorityTypesTo(syncer::ModelTypeSet types) {
- syncer::ModelTypeSet result = syncer::ControlTypes();
+ModelTypeSet AddHighPriorityTypesTo(ModelTypeSet types) {
+ ModelTypeSet result = syncer::ControlTypes();
result.PutAll(types);
return result;
}
+DataTypeStatusTable BuildStatusTable(ModelTypeSet crypto_errors,
+ ModelTypeSet association_errors,
+ ModelTypeSet unready_errors,
+ ModelTypeSet unrecoverable_errors) {
+ DataTypeStatusTable::TypeErrorMap error_map;
+ for (ModelTypeSet::Iterator iter = crypto_errors.First(); iter.Good();
+ iter.Inc()) {
+ error_map[iter.Get()] = SyncError(
+ FROM_HERE, SyncError::CRYPTO_ERROR, "crypto error", iter.Get());
+ }
+ for (ModelTypeSet::Iterator iter = association_errors.First(); iter.Good();
+ iter.Inc()) {
+ error_map[iter.Get()] = SyncError(
+ FROM_HERE, SyncError::DATATYPE_ERROR, "association error", iter.Get());
+ }
+ for (ModelTypeSet::Iterator iter = unready_errors.First(); iter.Good();
+ iter.Inc()) {
+ error_map[iter.Get()] = SyncError(
+ FROM_HERE, SyncError::UNREADY_ERROR, "unready errors", iter.Get());
+ }
+ for (ModelTypeSet::Iterator iter = unrecoverable_errors.First(); iter.Good();
+ iter.Inc()) {
+ error_map[iter.Get()] = SyncError(FROM_HERE,
+ SyncError::UNRECOVERABLE_ERROR,
+ "unrecoverable errors",
+ iter.Get());
+ }
+ DataTypeStatusTable status_table;
+ status_table.UpdateFailedDataTypes(error_map);
+ return status_table;
+}
+
// Fake BackendDataTypeConfigurer implementation that simply stores away the
// callback passed into ConfigureDataTypes.
class FakeBackendDataTypeConfigurer : public BackendDataTypeConfigurer {
@@ -65,9 +88,9 @@ class FakeBackendDataTypeConfigurer : public BackendDataTypeConfigurer {
EXPECT_TRUE(
expected_configure_types_.Equals(
GetDataTypesInState(CONFIGURE_ACTIVE, config_state_map)))
- << syncer::ModelTypeSetToString(expected_configure_types_)
+ << ModelTypeSetToString(expected_configure_types_)
<< " v.s. "
- << syncer::ModelTypeSetToString(
+ << ModelTypeSetToString(
GetDataTypesInState(CONFIGURE_ACTIVE, config_state_map));
}
}
@@ -85,28 +108,72 @@ class FakeBackendDataTypeConfigurer : public BackendDataTypeConfigurer {
return last_ready_task_;
}
- void set_expected_configure_types(syncer::ModelTypeSet types) {
+ void set_expected_configure_types(ModelTypeSet types) {
expected_configure_types_ = types;
}
- const syncer::ModelTypeSet activated_types() { return activated_types_; }
+ const ModelTypeSet activated_types() { return activated_types_; }
private:
base::Callback<void(ModelTypeSet, ModelTypeSet)> last_ready_task_;
- syncer::ModelTypeSet expected_configure_types_;
- syncer::ModelTypeSet activated_types_;
+ ModelTypeSet expected_configure_types_;
+ ModelTypeSet activated_types_;
};
-// Mock DataTypeManagerObserver implementation.
-class DataTypeManagerObserverMock : public DataTypeManagerObserver {
+// DataTypeManagerObserver implementation.
+class FakeDataTypeManagerObserver : public DataTypeManagerObserver {
public:
- DataTypeManagerObserverMock() {}
- virtual ~DataTypeManagerObserverMock() {}
+ FakeDataTypeManagerObserver() { ResetExpectations(); }
+ virtual ~FakeDataTypeManagerObserver() {
+ EXPECT_FALSE(start_expected_);
+ DataTypeManager::ConfigureResult default_result;
+ EXPECT_EQ(done_expectation_.status, default_result.status);
+ EXPECT_TRUE(
+ done_expectation_.data_type_status_table.GetFailedTypes().Empty());
+ }
+
+ void ExpectStart() {
+ start_expected_ = true;
+ }
+ void ExpectDone(const DataTypeManager::ConfigureResult& result) {
+ done_expectation_ = result;
+ }
+ void ResetExpectations() {
+ start_expected_ = false;
+ done_expectation_ = DataTypeManager::ConfigureResult();
+ }
+
+ virtual void OnConfigureDone(
+ const DataTypeManager::ConfigureResult& result) OVERRIDE {
+ EXPECT_EQ(done_expectation_.status, result.status);
+ DataTypeStatusTable::TypeErrorMap errors =
+ result.data_type_status_table.GetAllErrors();
+ DataTypeStatusTable::TypeErrorMap expected_errors =
+ done_expectation_.data_type_status_table.GetAllErrors();
+ ASSERT_EQ(expected_errors.size(), errors.size());
+ for (DataTypeStatusTable::TypeErrorMap::const_iterator iter =
+ expected_errors.begin();
+ iter != expected_errors.end();
+ ++iter) {
+ ASSERT_TRUE(errors.find(iter->first) != errors.end());
+ ASSERT_EQ(iter->second.error_type(),
+ errors.find(iter->first)->second.error_type());
+ }
+ done_expectation_ = DataTypeManager::ConfigureResult();
+ }
+
+ virtual void OnConfigureRetry() OVERRIDE{
+ // Not verified.
+ }
+
+ virtual void OnConfigureStart() OVERRIDE {
+ EXPECT_TRUE(start_expected_);
+ start_expected_ = false;
+ }
- MOCK_METHOD1(OnConfigureDone,
- void(const DataTypeManager::ConfigureResult&));
- MOCK_METHOD0(OnConfigureRetry, void());
- MOCK_METHOD0(OnConfigureStart, void());
+ private:
+ bool start_expected_ = true;
+ DataTypeManager::ConfigureResult done_expectation_;
};
class FakeDataTypeEncryptionHandler : public DataTypeEncryptionHandler {
@@ -115,17 +182,17 @@ class FakeDataTypeEncryptionHandler : public DataTypeEncryptionHandler {
virtual ~FakeDataTypeEncryptionHandler();
virtual bool IsPassphraseRequired() const OVERRIDE;
- virtual syncer::ModelTypeSet GetEncryptedDataTypes() const OVERRIDE;
+ virtual ModelTypeSet GetEncryptedDataTypes() const OVERRIDE;
void set_passphrase_required(bool passphrase_required) {
passphrase_required_ = passphrase_required;
}
- void set_encrypted_types(syncer::ModelTypeSet encrypted_types) {
+ void set_encrypted_types(ModelTypeSet encrypted_types) {
encrypted_types_ = encrypted_types;
}
private:
bool passphrase_required_;
- syncer::ModelTypeSet encrypted_types_;
+ ModelTypeSet encrypted_types_;
};
FakeDataTypeEncryptionHandler::FakeDataTypeEncryptionHandler()
@@ -136,7 +203,7 @@ bool FakeDataTypeEncryptionHandler::IsPassphraseRequired() const {
return passphrase_required_;
}
-syncer::ModelTypeSet
+ModelTypeSet
FakeDataTypeEncryptionHandler::GetEncryptedDataTypes() const {
return encrypted_types_;
}
@@ -151,18 +218,16 @@ class TestDataTypeManager : public DataTypeManagerImpl {
BackendDataTypeConfigurer* configurer,
const DataTypeController::TypeMap* controllers,
const DataTypeEncryptionHandler* encryption_handler,
- DataTypeManagerObserver* observer,
- DataTypeStatusTable* data_type_status_table)
+ DataTypeManagerObserver* observer)
: DataTypeManagerImpl(base::Closure(),
debug_info_listener,
controllers,
encryption_handler,
configurer,
- observer,
- data_type_status_table),
+ observer),
custom_priority_types_(syncer::ControlTypes()) {}
- void set_priority_types(const syncer::ModelTypeSet& priority_types) {
+ void set_priority_types(const ModelTypeSet& priority_types) {
custom_priority_types_ = priority_types;
}
@@ -177,11 +242,11 @@ class TestDataTypeManager : public DataTypeManagerImpl {
}
private:
- virtual syncer::ModelTypeSet GetPriorityTypes() const OVERRIDE {
+ virtual ModelTypeSet GetPriorityTypes() const OVERRIDE {
return custom_priority_types_;
}
- syncer::ModelTypeSet custom_priority_types_;
+ ModelTypeSet custom_priority_types_;
DataTypeManager::ConfigureResult configure_result_;
};
@@ -202,21 +267,24 @@ class SyncDataTypeManagerImplTest : public testing::Test {
&configurer_,
&controllers_,
&encryption_handler_,
- &observer_,
- &data_type_status_table_));
+ &observer_));
}
void SetConfigureStartExpectation() {
- EXPECT_CALL(observer_, OnConfigureStart());
+ observer_.ExpectStart();
}
- void SetConfigureDoneExpectation(DataTypeManager::ConfigureStatus status) {
- EXPECT_CALL(observer_, OnConfigureDone(ResultOf(&GetStatus, status)));
+ void SetConfigureDoneExpectation(DataTypeManager::ConfigureStatus status,
+ const DataTypeStatusTable& status_table) {
+ DataTypeManager::ConfigureResult result;
+ result.status = status;
+ result.data_type_status_table = status_table;
+ observer_.ExpectDone(result);
}
// Configure the given DTM with the given desired types.
void Configure(DataTypeManagerImpl* dtm,
- const syncer::ModelTypeSet& desired_types) {
+ const ModelTypeSet& desired_types) {
dtm->Configure(desired_types, syncer::CONFIGURE_REASON_RECONFIGURATION);
}
@@ -252,7 +320,7 @@ class SyncDataTypeManagerImplTest : public testing::Test {
static_cast<FakeDataTypeController*>(it->second.get()));
}
- void FailEncryptionFor(syncer::ModelTypeSet encrypted_types) {
+ void FailEncryptionFor(ModelTypeSet encrypted_types) {
encryption_handler_.set_passphrase_required(true);
encryption_handler_.set_encrypted_types(encrypted_types);
}
@@ -260,9 +328,8 @@ class SyncDataTypeManagerImplTest : public testing::Test {
base::MessageLoopForUI ui_loop_;
DataTypeController::TypeMap controllers_;
FakeBackendDataTypeConfigurer configurer_;
- DataTypeManagerObserverMock observer_;
+ FakeDataTypeManagerObserver observer_;
scoped_ptr<TestDataTypeManager> dtm_;
- DataTypeStatusTable data_type_status_table_;
FakeDataTypeEncryptionHandler encryption_handler_;
};
@@ -270,7 +337,7 @@ class SyncDataTypeManagerImplTest : public testing::Test {
// and then stop it.
TEST_F(SyncDataTypeManagerImplTest, NoControllers) {
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK, DataTypeStatusTable());
Configure(dtm_.get(), ModelTypeSet());
EXPECT_EQ(DataTypeManager::DOWNLOAD_PENDING, dtm_->state());
@@ -288,7 +355,7 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureOne) {
AddController(BOOKMARKS);
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK, DataTypeStatusTable());
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS));
EXPECT_EQ(DataTypeManager::DOWNLOAD_PENDING, dtm_->state());
@@ -314,7 +381,8 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureOneStopWhileDownloadPending) {
{
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::ABORTED);
+ SetConfigureDoneExpectation(DataTypeManager::ABORTED,
+ DataTypeStatusTable());
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS));
EXPECT_EQ(DataTypeManager::DOWNLOAD_PENDING, dtm_->state());
@@ -336,7 +404,8 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureOneStopWhileStartingModel) {
{
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::ABORTED);
+ SetConfigureDoneExpectation(DataTypeManager::ABORTED,
+ DataTypeStatusTable());
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS));
EXPECT_EQ(DataTypeManager::DOWNLOAD_PENDING, dtm_->state());
@@ -364,7 +433,8 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureOneStopWhileAssociating) {
{
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::ABORTED);
+ SetConfigureDoneExpectation(DataTypeManager::ABORTED,
+ DataTypeStatusTable());
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS));
EXPECT_EQ(DataTypeManager::DOWNLOAD_PENDING, dtm_->state());
@@ -394,7 +464,11 @@ TEST_F(SyncDataTypeManagerImplTest, OneWaitingForCrypto) {
AddController(PASSWORDS);
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK,
+ BuildStatusTable(ModelTypeSet(PASSWORDS),
+ ModelTypeSet(),
+ ModelTypeSet(),
+ ModelTypeSet()));
const ModelTypeSet types(PASSWORDS);
dtm_->set_priority_types(AddHighPriorityTypesTo(types));
@@ -435,7 +509,7 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureOneThenBoth) {
AddController(PREFERENCES);
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK, DataTypeStatusTable());
// Step 1.
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS));
@@ -450,9 +524,9 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureOneThenBoth) {
GetController(BOOKMARKS)->FinishStart(DataTypeController::OK);
EXPECT_EQ(DataTypeManager::CONFIGURED, dtm_->state());
- Mock::VerifyAndClearExpectations(&observer_);
+ observer_.ResetExpectations();
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK, DataTypeStatusTable());
// Step 4.
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS, PREFERENCES));
@@ -488,7 +562,7 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureOneThenSwitch) {
AddController(PREFERENCES);
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK, DataTypeStatusTable());
// Step 1.
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS));
@@ -503,9 +577,9 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureOneThenSwitch) {
GetController(BOOKMARKS)->FinishStart(DataTypeController::OK);
EXPECT_EQ(DataTypeManager::CONFIGURED, dtm_->state());
- Mock::VerifyAndClearExpectations(&observer_);
+ observer_.ResetExpectations();
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK, DataTypeStatusTable());
// Step 4.
Configure(dtm_.get(), ModelTypeSet(PREFERENCES));
@@ -541,7 +615,7 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureWhileOneInFlight) {
AddController(PREFERENCES);
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK, DataTypeStatusTable());
// Step 1.
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS));
@@ -583,7 +657,11 @@ TEST_F(SyncDataTypeManagerImplTest, OneFailingController) {
AddController(BOOKMARKS);
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::UNRECOVERABLE_ERROR);
+ SetConfigureDoneExpectation(DataTypeManager::UNRECOVERABLE_ERROR,
+ BuildStatusTable(ModelTypeSet(),
+ ModelTypeSet(),
+ ModelTypeSet(),
+ ModelTypeSet(BOOKMARKS)));
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS));
EXPECT_EQ(DataTypeManager::DOWNLOAD_PENDING, dtm_->state());
@@ -612,7 +690,11 @@ TEST_F(SyncDataTypeManagerImplTest, SecondControllerFails) {
AddController(PREFERENCES);
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::UNRECOVERABLE_ERROR);
+ SetConfigureDoneExpectation(DataTypeManager::UNRECOVERABLE_ERROR,
+ BuildStatusTable(ModelTypeSet(),
+ ModelTypeSet(),
+ ModelTypeSet(),
+ ModelTypeSet(PREFERENCES)));
// Step 1.
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS, PREFERENCES));
@@ -651,7 +733,11 @@ TEST_F(SyncDataTypeManagerImplTest, OneControllerFailsAssociation) {
AddController(PREFERENCES);
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK,
+ BuildStatusTable(ModelTypeSet(),
+ ModelTypeSet(PREFERENCES),
+ ModelTypeSet(),
+ ModelTypeSet()));
// Step 1.
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS, PREFERENCES));
@@ -696,7 +782,7 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureWhileDownloadPending) {
AddController(PREFERENCES);
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK, DataTypeStatusTable());
// Step 1.
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS));
@@ -742,7 +828,7 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureWhileDownloadPendingWithFailure) {
AddController(PREFERENCES);
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK, DataTypeStatusTable());
// Step 1.
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS));
@@ -780,7 +866,7 @@ TEST_F(SyncDataTypeManagerImplTest, MigrateAll) {
dtm_->set_priority_types(AddHighPriorityTypesTo(ModelTypeSet(BOOKMARKS)));
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK, DataTypeStatusTable());
// Initial setup.
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS));
@@ -789,7 +875,7 @@ TEST_F(SyncDataTypeManagerImplTest, MigrateAll) {
// We've now configured bookmarks and (implicitly) the control types.
EXPECT_EQ(DataTypeManager::CONFIGURED, dtm_->state());
- Mock::VerifyAndClearExpectations(&observer_);
+ observer_.ResetExpectations();
// Pretend we were told to migrate all types.
ModelTypeSet to_migrate;
@@ -797,7 +883,7 @@ TEST_F(SyncDataTypeManagerImplTest, MigrateAll) {
to_migrate.PutAll(syncer::ControlTypes());
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK, DataTypeStatusTable());
dtm_->PurgeForMigration(to_migrate,
syncer::CONFIGURE_REASON_MIGRATION);
EXPECT_EQ(DataTypeManager::DOWNLOAD_PENDING, dtm_->state());
@@ -805,11 +891,11 @@ TEST_F(SyncDataTypeManagerImplTest, MigrateAll) {
// The DTM will call ConfigureDataTypes(), even though it is unnecessary.
FinishDownload(*dtm_, ModelTypeSet(), ModelTypeSet());
EXPECT_EQ(DataTypeManager::CONFIGURED, dtm_->state());
- Mock::VerifyAndClearExpectations(&observer_);
+ observer_.ResetExpectations();
// Re-enable the migrated types.
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK, DataTypeStatusTable());
Configure(dtm_.get(), to_migrate);
FinishDownload(*dtm_, to_migrate, ModelTypeSet());
GetController(BOOKMARKS)->FinishStart(DataTypeController::OK);
@@ -823,20 +909,20 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureDuringPurge) {
// Initial configure.
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK, DataTypeStatusTable());
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS));
FinishDownload(*dtm_, ModelTypeSet(), ModelTypeSet());
FinishDownload(*dtm_, ModelTypeSet(BOOKMARKS), ModelTypeSet());
GetController(BOOKMARKS)->FinishStart(DataTypeController::OK);
EXPECT_EQ(DataTypeManager::CONFIGURED, dtm_->state());
- Mock::VerifyAndClearExpectations(&observer_);
+ observer_.ResetExpectations();
// Purge the Nigori type.
SetConfigureStartExpectation();
dtm_->PurgeForMigration(ModelTypeSet(NIGORI),
syncer::CONFIGURE_REASON_MIGRATION);
EXPECT_EQ(DataTypeManager::DOWNLOAD_PENDING, dtm_->state());
- Mock::VerifyAndClearExpectations(&observer_);
+ observer_.ResetExpectations();
// Before the backend configuration completes, ask for a different
// set of types. This request asks for
@@ -849,9 +935,9 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureDuringPurge) {
// Invoke the callback we've been waiting for since we asked to purge NIGORI.
FinishDownload(*dtm_, ModelTypeSet(), ModelTypeSet());
- Mock::VerifyAndClearExpectations(&observer_);
+ observer_.ResetExpectations();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK, DataTypeStatusTable());
EXPECT_EQ(DataTypeManager::DOWNLOAD_PENDING, dtm_->state());
// Now invoke the callback for the second configure request.
@@ -871,11 +957,11 @@ TEST_F(SyncDataTypeManagerImplTest, PrioritizedConfiguration) {
AddController(PREFERENCES);
dtm_->set_priority_types(
- AddHighPriorityTypesTo(syncer::ModelTypeSet(PREFERENCES)));
+ AddHighPriorityTypesTo(ModelTypeSet(PREFERENCES)));
// Initial configure.
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK, DataTypeStatusTable());
// Initially only PREFERENCES is configured.
configurer_.set_expected_configure_types(
@@ -902,11 +988,11 @@ TEST_F(SyncDataTypeManagerImplTest, PrioritizedConfigurationReconfigure) {
AddController(APPS);
dtm_->set_priority_types(
- AddHighPriorityTypesTo(syncer::ModelTypeSet(PREFERENCES)));
+ AddHighPriorityTypesTo(ModelTypeSet(PREFERENCES)));
// Initial configure.
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK, DataTypeStatusTable());
// Reconfigure while associating PREFERENCES and downloading BOOKMARKS.
configurer_.set_expected_configure_types(
@@ -949,11 +1035,11 @@ TEST_F(SyncDataTypeManagerImplTest, PrioritizedConfigurationStop) {
AddController(PREFERENCES);
dtm_->set_priority_types(
- AddHighPriorityTypesTo(syncer::ModelTypeSet(PREFERENCES)));
+ AddHighPriorityTypesTo(ModelTypeSet(PREFERENCES)));
// Initial configure.
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::ABORTED);
+ SetConfigureDoneExpectation(DataTypeManager::ABORTED, DataTypeStatusTable());
// Initially only PREFERENCES is configured.
configurer_.set_expected_configure_types(
@@ -984,11 +1070,15 @@ TEST_F(SyncDataTypeManagerImplTest, PrioritizedConfigurationDownloadError) {
AddController(PREFERENCES);
dtm_->set_priority_types(
- AddHighPriorityTypesTo(syncer::ModelTypeSet(PREFERENCES)));
+ AddHighPriorityTypesTo(ModelTypeSet(PREFERENCES)));
// Initial configure.
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::UNRECOVERABLE_ERROR);
+ SetConfigureDoneExpectation(DataTypeManager::UNRECOVERABLE_ERROR,
+ BuildStatusTable(ModelTypeSet(),
+ ModelTypeSet(),
+ ModelTypeSet(),
+ ModelTypeSet(BOOKMARKS)));
// Initially only PREFERENCES is configured.
configurer_.set_expected_configure_types(
@@ -1020,11 +1110,15 @@ TEST_F(SyncDataTypeManagerImplTest, HighPriorityAssociationFailure) {
AddController(BOOKMARKS); // Will succeed.
dtm_->set_priority_types(
- AddHighPriorityTypesTo(syncer::ModelTypeSet(PREFERENCES)));
+ AddHighPriorityTypesTo(ModelTypeSet(PREFERENCES)));
// Initial configure.
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK,
+ BuildStatusTable(ModelTypeSet(),
+ ModelTypeSet(PREFERENCES),
+ ModelTypeSet(),
+ ModelTypeSet()));
// Initially only PREFERENCES is configured.
configurer_.set_expected_configure_types(
@@ -1072,11 +1166,15 @@ TEST_F(SyncDataTypeManagerImplTest, LowPriorityAssociationFailure) {
AddController(BOOKMARKS); // Will fail.
dtm_->set_priority_types(
- AddHighPriorityTypesTo(syncer::ModelTypeSet(PREFERENCES)));
+ AddHighPriorityTypesTo(ModelTypeSet(PREFERENCES)));
// Initial configure.
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK,
+ BuildStatusTable(ModelTypeSet(),
+ ModelTypeSet(BOOKMARKS),
+ ModelTypeSet(),
+ ModelTypeSet()));
// Initially only PREFERENCES is configured.
configurer_.set_expected_configure_types(
@@ -1125,9 +1223,9 @@ TEST_F(SyncDataTypeManagerImplTest, FilterDesiredTypes) {
dtm_->set_priority_types(AddHighPriorityTypesTo(types));
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK, DataTypeStatusTable());
- syncer::ModelTypeSet expected_types = syncer::ControlTypes();
+ ModelTypeSet expected_types = syncer::ControlTypes();
expected_types.Put(BOOKMARKS);
// APPS is filtered out because there's no controller for it.
configurer_.set_expected_configure_types(expected_types);
@@ -1144,7 +1242,6 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureForBackupRollback) {
SetConfigureStartExpectation();
-
ModelTypeSet expected_types = syncer::ControlTypes();
expected_types.Put(BOOKMARKS);
configurer_.set_expected_configure_types(expected_types);
@@ -1155,32 +1252,32 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureForBackupRollback) {
}
TEST_F(SyncDataTypeManagerImplTest, ReenableAfterDataTypeError) {
- syncer::SyncError error(FROM_HERE,
- syncer::SyncError::DATATYPE_ERROR,
- "Datatype disabled",
- syncer::BOOKMARKS);
- std::map<syncer::ModelType, syncer::SyncError> errors;
- errors[syncer::BOOKMARKS] = error;
- data_type_status_table_.UpdateFailedDataTypes(errors);
-
AddController(PREFERENCES); // Will succeed.
AddController(BOOKMARKS); // Will be disabled due to datatype error.
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK,
+ BuildStatusTable(ModelTypeSet(),
+ ModelTypeSet(BOOKMARKS),
+ ModelTypeSet(),
+ ModelTypeSet()));
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS, PREFERENCES));
FinishDownload(*dtm_, ModelTypeSet(), ModelTypeSet());
- FinishDownload(*dtm_, ModelTypeSet(PREFERENCES), ModelTypeSet());
+ FinishDownload(*dtm_, ModelTypeSet(PREFERENCES, BOOKMARKS), ModelTypeSet());
GetController(PREFERENCES)->FinishStart(DataTypeController::OK);
+ GetController(BOOKMARKS)
+ ->FinishStart(DataTypeController::ASSOCIATION_FAILED);
+ FinishDownload(*dtm_, ModelTypeSet(), ModelTypeSet()); // Reconfig for error.
+ FinishDownload(*dtm_, ModelTypeSet(), ModelTypeSet()); // Reconfig for error.
EXPECT_EQ(DataTypeManager::CONFIGURED, dtm_->state());
EXPECT_EQ(DataTypeController::RUNNING, GetController(PREFERENCES)->state());
EXPECT_EQ(DataTypeController::NOT_RUNNING, GetController(BOOKMARKS)->state());
- Mock::VerifyAndClearExpectations(&observer_);
+ observer_.ResetExpectations();
// Re-enable bookmarks.
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK, DataTypeStatusTable());
dtm_->ReenableType(syncer::BOOKMARKS);
EXPECT_EQ(DataTypeManager::DOWNLOAD_PENDING, dtm_->state());
@@ -1202,17 +1299,21 @@ TEST_F(SyncDataTypeManagerImplTest, UnreadyType) {
// Bookmarks is never started due to being unready.
SetConfigureStartExpectation();
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK,
+ BuildStatusTable(ModelTypeSet(),
+ ModelTypeSet(),
+ ModelTypeSet(BOOKMARKS),
+ ModelTypeSet()));
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS));
FinishDownload(*dtm_, ModelTypeSet(), ModelTypeSet());
EXPECT_EQ(DataTypeController::NOT_RUNNING, GetController(BOOKMARKS)->state());
EXPECT_EQ(DataTypeManager::CONFIGURED, dtm_->state());
EXPECT_EQ(0U, configurer_.activated_types().Size());
- Mock::VerifyAndClearExpectations(&observer_);
+ observer_.ResetExpectations();
// Bookmarks should start normally now.
GetController(BOOKMARKS)->SetReadyForStart(true);
- SetConfigureDoneExpectation(DataTypeManager::OK);
+ SetConfigureDoneExpectation(DataTypeManager::OK, DataTypeStatusTable());
dtm_->ReenableType(BOOKMARKS);
EXPECT_EQ(DataTypeManager::DOWNLOAD_PENDING, dtm_->state());
@@ -1225,7 +1326,7 @@ TEST_F(SyncDataTypeManagerImplTest, UnreadyType) {
EXPECT_EQ(1U, configurer_.activated_types().Size());
// Should do nothing.
- Mock::VerifyAndClearExpectations(&observer_);
+ observer_.ResetExpectations();
dtm_->ReenableType(BOOKMARKS);
dtm_->Stop();
« no previous file with comments | « components/sync_driver/data_type_manager_impl.cc ('k') | components/sync_driver/data_type_manager_mock.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698