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 34f7e734247256ed34f590d0ae91c24252424c2d..a0d285fd9732865d138581b0e1bb039a191a92d1 100644 |
--- a/components/sync/model_impl/model_type_store_backend_unittest.cc |
+++ b/components/sync/model_impl/model_type_store_backend_unittest.cc |
@@ -7,10 +7,13 @@ |
#include <utility> |
#include "base/memory/ptr_util.h" |
+#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 { |
@@ -49,6 +52,28 @@ class ModelTypeStoreBackendTest : public testing::Test { |
std::string GetBackendPath(scoped_refptr<ModelTypeStoreBackend> backend) { |
return backend->path_; |
} |
+ |
+ ModelTypeStore::Result Migrate(scoped_refptr<ModelTypeStoreBackend> backend, |
+ int64_t current_version, |
+ int64_t desired_version) { |
+ return backend->Migrate(current_version, desired_version); |
+ } |
+ |
+ bool Migrate0To1(scoped_refptr<ModelTypeStoreBackend> backend) { |
+ return backend->Migrate0To1(); |
+ } |
+ |
+ int64_t GetStoreVersion(scoped_refptr<ModelTypeStoreBackend> backend) { |
+ return backend->GetStoreVersion(); |
+ } |
+ |
+ int64_t LatestVersion() { |
+ return ModelTypeStoreBackend::kLatestSchemaVersion; |
+ } |
+ |
+ const char* SchemaId() { |
+ return ModelTypeStoreBackend::kDBSchemaDescriptorRecordId; |
+ } |
}; |
// Test that after record is written to backend it can be read back even after |
@@ -190,4 +215,33 @@ 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(); |
+ |
+ ASSERT_EQ(LatestVersion(), GetStoreVersion(backend)); |
+} |
+ |
+// 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(SchemaId()); |
+ ModelTypeStore::Result result = |
+ backend->WriteModifications(std::move(write_batch)); |
+ ASSERT_EQ(ModelTypeStore::Result::SUCCESS, result); |
+ |
+ ASSERT_TRUE(Migrate0To1(backend)); |
+ ASSERT_EQ(1, GetStoreVersion(backend)); |
+} |
+ |
+// Test that migration to an unknown version fails |
+TEST_F(ModelTypeStoreBackendTest, MigrateWithHigherExistingVersionFails) { |
+ scoped_refptr<ModelTypeStoreBackend> backend = GetOrCreateBackend(); |
+ |
+ ASSERT_EQ(Migrate(backend, LatestVersion() + 1, LatestVersion()), |
+ ModelTypeStore::Result::SCHEMA_VERSION_TOO_HIGH); |
+} |
+ |
} // namespace syncer |