123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- // Copyright 2014 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 "components/value_store/value_store_frontend.h"
- #include <memory>
- #include <utility>
- #include "base/bind.h"
- #include "base/files/file_util.h"
- #include "base/files/scoped_temp_dir.h"
- #include "base/path_service.h"
- #include "base/test/task_environment.h"
- #include "base/threading/thread_task_runner_handle.h"
- #include "components/value_store/test_value_store_factory.h"
- #include "components/value_store/value_store_task_runner.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace value_store {
- class ValueStoreFrontendTest : public testing::Test {
- public:
- ValueStoreFrontendTest() {}
- void SetUp() override {
- ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
- base::FilePath test_data_dir;
- ASSERT_TRUE(base::PathService::Get(base::DIR_SOURCE_ROOT, &test_data_dir));
- base::FilePath src_db(
- test_data_dir.AppendASCII("components/test/data/value_store"));
- db_path_ = temp_dir_.GetPath().AppendASCII("temp_db");
- base::CopyDirectory(src_db, db_path_, true);
- factory_ = new TestValueStoreFactory(db_path_);
- ResetStorage();
- }
- void TearDown() override {
- RunUntilIdle();
- storage_.reset();
- }
- // Reset the value store, reloading the DB from disk.
- void ResetStorage() {
- storage_ = std::make_unique<ValueStoreFrontend>(
- factory_, base::FilePath(FILE_PATH_LITERAL("Test dir")),
- "test_uma_name", base::ThreadTaskRunnerHandle::Get(),
- value_store::GetValueStoreTaskRunner());
- }
- bool Get(const std::string& key, std::unique_ptr<base::Value>* output) {
- storage_->Get(key, base::BindOnce(&ValueStoreFrontendTest::GetAndWait,
- base::Unretained(this), output));
- RunUntilIdle();
- return !!output->get();
- }
- protected:
- void RunUntilIdle() { task_environment_.RunUntilIdle(); }
- void GetAndWait(std::unique_ptr<base::Value>* output,
- std::unique_ptr<base::Value> result) {
- *output = std::move(result);
- }
- base::test::TaskEnvironment task_environment_;
- scoped_refptr<TestValueStoreFactory> factory_;
- std::unique_ptr<ValueStoreFrontend> storage_;
- base::ScopedTempDir temp_dir_;
- base::FilePath db_path_;
- };
- TEST_F(ValueStoreFrontendTest, GetExistingData) {
- std::unique_ptr<base::Value> value;
- ASSERT_FALSE(Get("key0", &value));
- // Test existing keys in the DB.
- {
- ASSERT_TRUE(Get("key1", &value));
- ASSERT_TRUE(value->is_string());
- EXPECT_EQ("value1", value->GetString());
- }
- {
- ASSERT_TRUE(Get("key2", &value));
- ASSERT_TRUE(value->is_int());
- EXPECT_EQ(2, value->GetInt());
- }
- }
- TEST_F(ValueStoreFrontendTest, ChangesPersistAfterReload) {
- storage_->Set("key0", std::make_unique<base::Value>(0));
- storage_->Set("key1", std::make_unique<base::Value>("new1"));
- storage_->Remove("key2");
- // Reload the DB and test our changes.
- ResetStorage();
- std::unique_ptr<base::Value> value;
- {
- ASSERT_TRUE(Get("key0", &value));
- ASSERT_TRUE(value->is_int());
- EXPECT_EQ(0, value->GetInt());
- }
- {
- ASSERT_TRUE(Get("key1", &value));
- ASSERT_TRUE(value->is_string());
- EXPECT_EQ("new1", value->GetString());
- }
- ASSERT_FALSE(Get("key2", &value));
- }
- } // namespace value_store
|