summaryrefslogtreecommitdiffstats
path: root/sql/meta_table_unittest.cc
diff options
context:
space:
mode:
authorshess@chromium.org <shess@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-07 15:48:36 +0000
committershess@chromium.org <shess@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-07 15:48:36 +0000
commit6ed6d14feef570f2b740e898ca640d1d537e4918 (patch)
tree5222f489f5d41ff02746659d06ba209ba2a9998f /sql/meta_table_unittest.cc
parente3ed0c0e3bec4ef1de1e616ee71c4a38022bf100 (diff)
downloadchromium_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.cc226
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