Index: sync/internal_api/model_type_store_backend_unittest.cc |
diff --git a/sync/internal_api/model_type_store_backend_unittest.cc b/sync/internal_api/model_type_store_backend_unittest.cc |
deleted file mode 100644 |
index 87d540680048f062a35380adb74f2e9927893495..0000000000000000000000000000000000000000 |
--- a/sync/internal_api/model_type_store_backend_unittest.cc |
+++ /dev/null |
@@ -1,190 +0,0 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "sync/internal_api/public/model_type_store_backend.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" |
- |
-namespace syncer_v2 { |
- |
-class ModelTypeStoreBackendTest : public testing::Test { |
- public: |
- scoped_refptr<ModelTypeStoreBackend> GetOrCreateBackend() { |
- std::string path = "/test_db"; |
- return GetOrCreateBackendWithPath(path); |
- } |
- |
- scoped_refptr<ModelTypeStoreBackend> GetOrCreateBackendWithPath( |
- std::string custom_path) { |
- std::unique_ptr<leveldb::Env> in_memory_env = |
- ModelTypeStoreBackend::CreateInMemoryEnv(); |
- std::string path; |
- in_memory_env->GetTestDirectory(&path); |
- path += custom_path; |
- |
- ModelTypeStore::Result result; |
- // In-memory store backend works on the same thread as test. |
- scoped_refptr<ModelTypeStoreBackend> backend = |
- ModelTypeStoreBackend::GetOrCreateBackend( |
- path, std::move(in_memory_env), &result); |
- EXPECT_TRUE(backend.get()); |
- EXPECT_EQ(result, ModelTypeStore::Result::SUCCESS); |
- return backend; |
- } |
- |
- bool BackendExistsForPath(std::string path) { |
- if (ModelTypeStoreBackend::backend_map_.Get().end() == |
- ModelTypeStoreBackend::backend_map_.Get().find(path)) { |
- return false; |
- } |
- return true; |
- } |
- |
- std::string GetBackendPath(scoped_refptr<ModelTypeStoreBackend> backend) { |
- return backend->path_; |
- } |
-}; |
- |
-// Test that after record is written to backend it can be read back even after |
-// backend is destroyed and recreated in the same environment. |
-TEST_F(ModelTypeStoreBackendTest, WriteThenRead) { |
- scoped_refptr<ModelTypeStoreBackend> backend = GetOrCreateBackend(); |
- |
- // Write record. |
- std::unique_ptr<leveldb::WriteBatch> write_batch(new leveldb::WriteBatch()); |
- write_batch->Put("prefix:id1", "data1"); |
- ModelTypeStore::Result result = |
- backend->WriteModifications(std::move(write_batch)); |
- ASSERT_EQ(ModelTypeStore::Result::SUCCESS, result); |
- |
- // Read all records with prefix. |
- ModelTypeStore::RecordList record_list; |
- result = backend->ReadAllRecordsWithPrefix("prefix:", &record_list); |
- ASSERT_EQ(ModelTypeStore::Result::SUCCESS, result); |
- ASSERT_EQ(1ul, record_list.size()); |
- ASSERT_EQ("id1", record_list[0].id); |
- ASSERT_EQ("data1", record_list[0].value); |
- record_list.clear(); |
- |
- // Recreate backend and read all records with prefix. |
- backend = GetOrCreateBackend(); |
- result = backend->ReadAllRecordsWithPrefix("prefix:", &record_list); |
- ASSERT_EQ(ModelTypeStore::Result::SUCCESS, result); |
- ASSERT_EQ(1ul, record_list.size()); |
- ASSERT_EQ("id1", record_list[0].id); |
- ASSERT_EQ("data1", record_list[0].value); |
-} |
- |
-// Test that ReadAllRecordsWithPrefix correclty filters records by prefix. |
-TEST_F(ModelTypeStoreBackendTest, ReadAllRecordsWithPrefix) { |
- scoped_refptr<ModelTypeStoreBackend> backend = GetOrCreateBackend(); |
- |
- std::unique_ptr<leveldb::WriteBatch> write_batch(new leveldb::WriteBatch()); |
- write_batch->Put("prefix1:id1", "data1"); |
- write_batch->Put("prefix2:id2", "data2"); |
- ModelTypeStore::Result result = |
- backend->WriteModifications(std::move(write_batch)); |
- ASSERT_EQ(ModelTypeStore::Result::SUCCESS, result); |
- |
- ModelTypeStore::RecordList record_list; |
- result = backend->ReadAllRecordsWithPrefix("prefix1:", &record_list); |
- ASSERT_EQ(ModelTypeStore::Result::SUCCESS, result); |
- ASSERT_EQ(1UL, record_list.size()); |
- ASSERT_EQ("id1", record_list[0].id); |
- ASSERT_EQ("data1", record_list[0].value); |
-} |
- |
-// Test that deleted records are correctly marked as milling in results of |
-// ReadRecordsWithPrefix. |
-TEST_F(ModelTypeStoreBackendTest, ReadDeletedRecord) { |
- scoped_refptr<ModelTypeStoreBackend> backend = GetOrCreateBackend(); |
- |
- // Create records, ensure they are returned by ReadRecordsWithPrefix. |
- std::unique_ptr<leveldb::WriteBatch> write_batch(new leveldb::WriteBatch()); |
- write_batch->Put("prefix:id1", "data1"); |
- write_batch->Put("prefix:id2", "data2"); |
- ModelTypeStore::Result result = |
- backend->WriteModifications(std::move(write_batch)); |
- ASSERT_EQ(ModelTypeStore::Result::SUCCESS, result); |
- |
- ModelTypeStore::IdList id_list; |
- ModelTypeStore::IdList missing_id_list; |
- ModelTypeStore::RecordList record_list; |
- id_list.push_back("id1"); |
- id_list.push_back("id2"); |
- result = backend->ReadRecordsWithPrefix("prefix:", id_list, &record_list, |
- &missing_id_list); |
- ASSERT_EQ(ModelTypeStore::Result::SUCCESS, result); |
- ASSERT_EQ(2UL, record_list.size()); |
- ASSERT_TRUE(missing_id_list.empty()); |
- |
- // Delete one record. |
- write_batch.reset(new leveldb::WriteBatch()); |
- write_batch->Delete("prefix:id2"); |
- result = backend->WriteModifications(std::move(write_batch)); |
- ASSERT_EQ(ModelTypeStore::Result::SUCCESS, result); |
- |
- // Ensure deleted record id is returned in missing_id_list. |
- record_list.clear(); |
- missing_id_list.clear(); |
- result = backend->ReadRecordsWithPrefix("prefix:", id_list, &record_list, |
- &missing_id_list); |
- ASSERT_EQ(ModelTypeStore::Result::SUCCESS, result); |
- ASSERT_EQ(1UL, record_list.size()); |
- ASSERT_EQ("id1", record_list[0].id); |
- ASSERT_EQ(1UL, missing_id_list.size()); |
- ASSERT_EQ("id2", missing_id_list[0]); |
-} |
- |
-// Test that only one backend got create when we ask two backend with same path, |
-// and after de-reference the backend, the backend will be deleted. |
-TEST_F(ModelTypeStoreBackendTest, TwoSameBackendTest) { |
- // Create two backend with same path, check if they are reference to same |
- // address. |
- scoped_refptr<ModelTypeStoreBackend> backend = GetOrCreateBackend(); |
- scoped_refptr<ModelTypeStoreBackend> backend_second = GetOrCreateBackend(); |
- std::string path = GetBackendPath(backend); |
- ASSERT_EQ(backend.get(), backend_second.get()); |
- |
- // Delete one reference, check the real backend still here. |
- backend = nullptr; |
- ASSERT_FALSE(backend.get()); |
- ASSERT_TRUE(backend_second.get()); |
- ASSERT_TRUE(backend_second->HasOneRef()); |
- |
- // Delete another reference, check the real backend is deleted. |
- backend_second = nullptr; |
- ASSERT_FALSE(backend_second.get()); |
- ASSERT_FALSE(BackendExistsForPath(path)); |
-} |
- |
-// Test that two backend got create when we ask two backend with different path, |
-// and after de-reference two backend, the both backend will be deleted. |
-TEST_F(ModelTypeStoreBackendTest, TwoDifferentBackendTest) { |
- // Create two backend with different path, check if they are reference to |
- // different address. |
- scoped_refptr<ModelTypeStoreBackend> backend = GetOrCreateBackend(); |
- scoped_refptr<ModelTypeStoreBackend> backend_second = |
- GetOrCreateBackendWithPath("/test_db2"); |
- std::string path = GetBackendPath(backend); |
- ASSERT_NE(backend.get(), backend_second.get()); |
- ASSERT_TRUE(backend->HasOneRef()); |
- ASSERT_TRUE(backend_second->HasOneRef()); |
- |
- // delete one backend, check only one got deleted. |
- backend = nullptr; |
- ASSERT_FALSE(backend.get()); |
- ASSERT_TRUE(backend_second.get()); |
- ASSERT_TRUE(backend_second->HasOneRef()); |
- ASSERT_FALSE(BackendExistsForPath(path)); |
- |
- // delete another backend. |
- backend_second = nullptr; |
- ASSERT_FALSE(backend_second.get()); |
- ASSERT_FALSE(BackendExistsForPath("/test_db2")); |
-} |
- |
-} // namespace syncer_v2 |