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..4d88c1590a7eae1d942b5285ac1541005eeb4c93 |
--- /dev/null |
+++ b/sql/meta_table_unittest.cc |
@@ -0,0 +1,229 @@ |
+// 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()); |
+ db_path_ = temp_dir_.path().AppendASCII("SQLMetaTableTest.db"); |
+ ASSERT_TRUE(db_.Open(db_path_)); |
+ } |
+ |
+ virtual void TearDown() { |
+ db_.Close(); |
+ } |
+ |
+ sql::Connection& db() { return db_; } |
+ const base::FilePath& db_path() { return db_path_; } |
+ |
+ private: |
+ base::FilePath db_path_; |
+ sql::Connection db_; |
+ base::ScopedTempDir temp_dir_; |
+}; |
+ |
+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 = 5000000017LLU; |
+ const int64 kSecondValue = 5000000023LLU; |
+ |
+ // 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 |