| Index: components/sync/model_impl/model_type_store_backend_unittest.cc
|
| diff --git a/components/sync/model_impl/model_type_store_backend_unittest.cc b/components/sync/model_impl/model_type_store_backend_unittest.cc
|
| index bbc8e121d18a7280064683d61ed8b506516ec2fd..29628e0087fe010df1fda2d40a98c463e52cdf6f 100644
|
| --- a/components/sync/model_impl/model_type_store_backend_unittest.cc
|
| +++ b/components/sync/model_impl/model_type_store_backend_unittest.cc
|
| @@ -6,10 +6,13 @@
|
|
|
| #include <utility>
|
|
|
| +#include "components/sync/protocol/model_type_store_schema_descriptor.pb.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "third_party/leveldatabase/src/include/leveldb/env.h"
|
| #include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
|
|
|
| +using sync_pb::ModelTypeStoreSchemaDescriptor;
|
| +
|
| namespace syncer {
|
|
|
| class ModelTypeStoreBackendTest : public testing::Test {
|
| @@ -48,6 +51,21 @@ class ModelTypeStoreBackendTest : public testing::Test {
|
| std::string GetBackendPath(scoped_refptr<ModelTypeStoreBackend> backend) {
|
| return backend->path_;
|
| }
|
| +
|
| + bool Migrate(scoped_refptr<ModelTypeStoreBackend> backend,
|
| + const ModelTypeStoreSchemaDescriptor& current_metadata,
|
| + const ModelTypeStoreSchemaDescriptor& desired_metadata) {
|
| + return backend->Migrate(current_metadata, desired_metadata);
|
| + }
|
| +
|
| + bool Migrate0To1(scoped_refptr<ModelTypeStoreBackend> backend) {
|
| + return backend->Migrate0To1();
|
| + }
|
| +
|
| + bool GetStoreDescriptor(scoped_refptr<ModelTypeStoreBackend> backend,
|
| + ModelTypeStoreSchemaDescriptor* schema_descriptor) {
|
| + return backend->GetStoreDescriptor(schema_descriptor);
|
| + }
|
| };
|
|
|
| // Test that after record is written to backend it can be read back even after
|
| @@ -189,4 +207,47 @@ TEST_F(ModelTypeStoreBackendTest, TwoDifferentBackendTest) {
|
| ASSERT_FALSE(BackendExistsForPath("/test_db2"));
|
| }
|
|
|
| +// Test that initializing the database migrates it to the latest schema version.
|
| +TEST_F(ModelTypeStoreBackendTest, MigrateNoSchemaVersionToLatestVersionTest) {
|
| + scoped_refptr<ModelTypeStoreBackend> backend = GetOrCreateBackend();
|
| +
|
| + ModelTypeStoreSchemaDescriptor schema_descriptor;
|
| + ASSERT_TRUE(GetStoreDescriptor(backend, &schema_descriptor));
|
| + ASSERT_EQ(schema_descriptor.version_number(), kLatestSchemaVersion);
|
| +}
|
| +
|
| +// Test that the 0 to 1 migration succeeds and sets the schema version to 1.
|
| +TEST_F(ModelTypeStoreBackendTest, Migrate0To1Test) {
|
| + scoped_refptr<ModelTypeStoreBackend> backend = GetOrCreateBackend();
|
| +
|
| + std::unique_ptr<leveldb::WriteBatch> write_batch(new leveldb::WriteBatch());
|
| + write_batch->Delete(kDBSchemaDescriptorRecordId);
|
| + ModelTypeStore::Result result =
|
| + backend->WriteModifications(std::move(write_batch));
|
| + ASSERT_EQ(ModelTypeStore::Result::SUCCESS, result);
|
| +
|
| + ASSERT_TRUE(Migrate0To1(backend));
|
| +
|
| + ModelTypeStoreSchemaDescriptor schema_descriptor;
|
| + ASSERT_TRUE(GetStoreDescriptor(backend, &schema_descriptor));
|
| + ASSERT_EQ(schema_descriptor.version_number(), 1);
|
| +}
|
| +
|
| +// Test that migration to an unknown version fails
|
| +TEST_F(ModelTypeStoreBackendTest, MigrateToBogusVersionFails) {
|
| + scoped_refptr<ModelTypeStoreBackend> backend = GetOrCreateBackend();
|
| +
|
| + std::unique_ptr<leveldb::WriteBatch> write_batch(new leveldb::WriteBatch());
|
| + write_batch->Delete(kDBSchemaDescriptorRecordId);
|
| + ModelTypeStore::Result result =
|
| + backend->WriteModifications(std::move(write_batch));
|
| + ASSERT_EQ(ModelTypeStore::Result::SUCCESS, result);
|
| +
|
| + ModelTypeStoreSchemaDescriptor current_metadata;
|
| + current_metadata.set_version_number(0);
|
| + ModelTypeStoreSchemaDescriptor bogus_desired_metadata;
|
| + bogus_desired_metadata.set_version_number(999);
|
| + ASSERT_FALSE(Migrate(backend, current_metadata, bogus_desired_metadata));
|
| +}
|
| +
|
| } // namespace syncer
|
|
|