diff options
author | shess@chromium.org <shess@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-07 15:48:36 +0000 |
---|---|---|
committer | shess@chromium.org <shess@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-07 15:48:36 +0000 |
commit | 6ed6d14feef570f2b740e898ca640d1d537e4918 (patch) | |
tree | 5222f489f5d41ff02746659d06ba209ba2a9998f /sql/meta_table_unittest.cc | |
parent | e3ed0c0e3bec4ef1de1e616ee71c4a38022bf100 (diff) | |
download | chromium_src-6ed6d14feef570f2b740e898ca640d1d537e4918.zip chromium_src-6ed6d14feef570f2b740e898ca640d1d537e4918.tar.gz chromium_src-6ed6d14feef570f2b740e898ca640d1d537e4918.tar.bz2 |
Unit tests for sql::MetaTable.
BUG=273203
Review URL: https://chromiumcodereview.appspot.com/23649002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@221922 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'sql/meta_table_unittest.cc')
-rw-r--r-- | sql/meta_table_unittest.cc | 226 |
1 files changed, 226 insertions, 0 deletions
diff --git a/sql/meta_table_unittest.cc b/sql/meta_table_unittest.cc new file mode 100644 index 0000000..3fbc499 --- /dev/null +++ b/sql/meta_table_unittest.cc @@ -0,0 +1,226 @@ +// Copyright 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 |