| Index: sql/meta_table_unittest.cc
|
| diff --git a/sql/meta_table_unittest.cc b/sql/meta_table_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..2648acd2d5d114ddcefec6069bc6778697d706c2
|
| --- /dev/null
|
| +++ b/sql/meta_table_unittest.cc
|
| @@ -0,0 +1,226 @@
|
| +// Copyright (c) 2013 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 "sql/meta_table.h"
|
| +
|
| +#include "base/files/file_path.h"
|
| +#include "base/files/scoped_temp_dir.h"
|
| +#include "sql/connection.h"
|
| +#include "sql/statement.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace {
|
| +
|
| +class SQLMetaTableTest : public testing::Test {
|
| + public:
|
| + virtual void SetUp() {
|
| + ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
|
| + ASSERT_TRUE(db_.Open(temp_dir_.path().AppendASCII("SQLMetaTableTest.db")));
|
| + }
|
| +
|
| + virtual void TearDown() {
|
| + db_.Close();
|
| + }
|
| +
|
| + sql::Connection& db() { return db_; }
|
| +
|
| + private:
|
| + base::ScopedTempDir temp_dir_;
|
| + sql::Connection db_;
|
| +};
|
| +
|
| +TEST_F(SQLMetaTableTest, DoesTableExist) {
|
| + EXPECT_FALSE(sql::MetaTable::DoesTableExist(&db()));
|
| +
|
| + {
|
| + sql::MetaTable meta_table;
|
| + EXPECT_TRUE(meta_table.Init(&db(), 1, 1));
|
| + }
|
| +
|
| + EXPECT_TRUE(sql::MetaTable::DoesTableExist(&db()));
|
| +}
|
| +
|
| +TEST_F(SQLMetaTableTest, VersionNumber) {
|
| + // Compatibility versions one less than the main versions to make
|
| + // sure the values aren't being crossed with each other.
|
| + const int kVersionFirst = 2;
|
| + const int kCompatVersionFirst = kVersionFirst - 1;
|
| + const int kVersionSecond = 4;
|
| + const int kCompatVersionSecond = kVersionSecond - 1;
|
| + const int kVersionThird = 6;
|
| + const int kCompatVersionThird = kVersionThird - 1;
|
| +
|
| + // First Init() sets the version info as expected.
|
| + {
|
| + sql::MetaTable meta_table;
|
| + EXPECT_TRUE(meta_table.Init(&db(), kVersionFirst, kCompatVersionFirst));
|
| + EXPECT_EQ(kVersionFirst, meta_table.GetVersionNumber());
|
| + EXPECT_EQ(kCompatVersionFirst, meta_table.GetCompatibleVersionNumber());
|
| + }
|
| +
|
| + // Second Init() does not change the version info.
|
| + {
|
| + sql::MetaTable meta_table;
|
| + EXPECT_TRUE(meta_table.Init(&db(), kVersionSecond, kCompatVersionSecond));
|
| + EXPECT_EQ(kVersionFirst, meta_table.GetVersionNumber());
|
| + EXPECT_EQ(kCompatVersionFirst, meta_table.GetCompatibleVersionNumber());
|
| +
|
| + meta_table.SetVersionNumber(kVersionSecond);
|
| + meta_table.SetCompatibleVersionNumber(kCompatVersionSecond);
|
| + }
|
| +
|
| + // Version info from Set*() calls is seen.
|
| + {
|
| + sql::MetaTable meta_table;
|
| + EXPECT_TRUE(meta_table.Init(&db(), kVersionThird, kCompatVersionThird));
|
| + EXPECT_EQ(kVersionSecond, meta_table.GetVersionNumber());
|
| + EXPECT_EQ(kCompatVersionSecond, meta_table.GetCompatibleVersionNumber());
|
| + }
|
| +}
|
| +
|
| +TEST_F(SQLMetaTableTest, StringValue) {
|
| + const char kKey[] = "String Key";
|
| + const std::string kFirstValue("First Value");
|
| + const std::string kSecondValue("Second Value");
|
| +
|
| + // Initially, the value isn't there until set.
|
| + {
|
| + sql::MetaTable meta_table;
|
| + EXPECT_TRUE(meta_table.Init(&db(), 1, 1));
|
| +
|
| + std::string value;
|
| + EXPECT_FALSE(meta_table.GetValue(kKey, &value));
|
| +
|
| + EXPECT_TRUE(meta_table.SetValue(kKey, kFirstValue));
|
| + EXPECT_TRUE(meta_table.GetValue(kKey, &value));
|
| + EXPECT_EQ(kFirstValue, value);
|
| + }
|
| +
|
| + // Value is persistent across different instances.
|
| + {
|
| + sql::MetaTable meta_table;
|
| + EXPECT_TRUE(meta_table.Init(&db(), 1, 1));
|
| +
|
| + std::string value;
|
| + EXPECT_TRUE(meta_table.GetValue(kKey, &value));
|
| + EXPECT_EQ(kFirstValue, value);
|
| +
|
| + EXPECT_TRUE(meta_table.SetValue(kKey, kSecondValue));
|
| + }
|
| +
|
| + // Existing value was successfully changed.
|
| + {
|
| + sql::MetaTable meta_table;
|
| + EXPECT_TRUE(meta_table.Init(&db(), 1, 1));
|
| +
|
| + std::string value;
|
| + EXPECT_TRUE(meta_table.GetValue(kKey, &value));
|
| + EXPECT_EQ(kSecondValue, value);
|
| + }
|
| +}
|
| +
|
| +TEST_F(SQLMetaTableTest, IntValue) {
|
| + const char kKey[] = "Int Key";
|
| + const int kFirstValue = 17;
|
| + const int kSecondValue = 23;
|
| +
|
| + // Initially, the value isn't there until set.
|
| + {
|
| + sql::MetaTable meta_table;
|
| + EXPECT_TRUE(meta_table.Init(&db(), 1, 1));
|
| +
|
| + int value;
|
| + EXPECT_FALSE(meta_table.GetValue(kKey, &value));
|
| +
|
| + EXPECT_TRUE(meta_table.SetValue(kKey, kFirstValue));
|
| + EXPECT_TRUE(meta_table.GetValue(kKey, &value));
|
| + EXPECT_EQ(kFirstValue, value);
|
| + }
|
| +
|
| + // Value is persistent across different instances.
|
| + {
|
| + sql::MetaTable meta_table;
|
| + EXPECT_TRUE(meta_table.Init(&db(), 1, 1));
|
| +
|
| + int value;
|
| + EXPECT_TRUE(meta_table.GetValue(kKey, &value));
|
| + EXPECT_EQ(kFirstValue, value);
|
| +
|
| + EXPECT_TRUE(meta_table.SetValue(kKey, kSecondValue));
|
| + }
|
| +
|
| + // Existing value was successfully changed.
|
| + {
|
| + sql::MetaTable meta_table;
|
| + EXPECT_TRUE(meta_table.Init(&db(), 1, 1));
|
| +
|
| + int value;
|
| + EXPECT_TRUE(meta_table.GetValue(kKey, &value));
|
| + EXPECT_EQ(kSecondValue, value);
|
| + }
|
| +}
|
| +
|
| +TEST_F(SQLMetaTableTest, Int64Value) {
|
| + const char kKey[] = "Int Key";
|
| + const int64 kFirstValue = GG_LONGLONG(5000000017);
|
| + const int64 kSecondValue = GG_LONGLONG(5000000023);
|
| +
|
| + // Initially, the value isn't there until set.
|
| + {
|
| + sql::MetaTable meta_table;
|
| + EXPECT_TRUE(meta_table.Init(&db(), 1, 1));
|
| +
|
| + int64 value;
|
| + EXPECT_FALSE(meta_table.GetValue(kKey, &value));
|
| +
|
| + EXPECT_TRUE(meta_table.SetValue(kKey, kFirstValue));
|
| + EXPECT_TRUE(meta_table.GetValue(kKey, &value));
|
| + EXPECT_EQ(kFirstValue, value);
|
| + }
|
| +
|
| + // Value is persistent across different instances.
|
| + {
|
| + sql::MetaTable meta_table;
|
| + EXPECT_TRUE(meta_table.Init(&db(), 1, 1));
|
| +
|
| + int64 value;
|
| + EXPECT_TRUE(meta_table.GetValue(kKey, &value));
|
| + EXPECT_EQ(kFirstValue, value);
|
| +
|
| + EXPECT_TRUE(meta_table.SetValue(kKey, kSecondValue));
|
| + }
|
| +
|
| + // Existing value was successfully changed.
|
| + {
|
| + sql::MetaTable meta_table;
|
| + EXPECT_TRUE(meta_table.Init(&db(), 1, 1));
|
| +
|
| + int64 value;
|
| + EXPECT_TRUE(meta_table.GetValue(kKey, &value));
|
| + EXPECT_EQ(kSecondValue, value);
|
| + }
|
| +}
|
| +
|
| +TEST_F(SQLMetaTableTest, DeleteKey) {
|
| + const char kKey[] = "String Key";
|
| + const std::string kValue("String Value");
|
| +
|
| + sql::MetaTable meta_table;
|
| + EXPECT_TRUE(meta_table.Init(&db(), 1, 1));
|
| +
|
| + // Value isn't present.
|
| + std::string value;
|
| + EXPECT_FALSE(meta_table.GetValue(kKey, &value));
|
| +
|
| + // Now value is present.
|
| + EXPECT_TRUE(meta_table.SetValue(kKey, kValue));
|
| + EXPECT_TRUE(meta_table.GetValue(kKey, &value));
|
| + EXPECT_EQ(kValue, value);
|
| +
|
| + // After delete value isn't present.
|
| + EXPECT_TRUE(meta_table.DeleteKey(kKey));
|
| + EXPECT_FALSE(meta_table.GetValue(kKey, &value));
|
| +}
|
| +
|
| +} // namespace
|
|
|