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-10-08 02:19:17 +0000
committershess@chromium.org <shess@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-08 02:19:17 +0000
commitfe4e3de5276edc05c36979ee5383cddb425e35f1 (patch)
treef20c3e55a6f935b0b35fffe4cbaffe6eb38387b8 /sql/meta_table_unittest.cc
parentf8feb29903155d73053e7ea5cca63c523c2bd215 (diff)
downloadchromium_src-fe4e3de5276edc05c36979ee5383cddb425e35f1.zip
chromium_src-fe4e3de5276edc05c36979ee5383cddb425e35f1.tar.gz
chromium_src-fe4e3de5276edc05c36979ee5383cddb425e35f1.tar.bz2
Deprecate old Favicons database versions.
Histograms show a non-zero number of users with very old databases at startup. These old databases likely result from some sort of corruption or filesystem problem, and are unlikely to spontaneously progress forward. Since the number of databases involved is very low (<.03% of users), just delete them in hopes that that allows forward progress. Arbitrarily set a 2-year deprecation deadline for this database. This is a few weeks early, as version 5 landed on 2011-10-12. BUG=240396 Review URL: https://codereview.chromium.org/24443002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@227433 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'sql/meta_table_unittest.cc')
-rw-r--r--sql/meta_table_unittest.cc47
1 files changed, 47 insertions, 0 deletions
diff --git a/sql/meta_table_unittest.cc b/sql/meta_table_unittest.cc
index 3fbc499..2ffb4bd 100644
--- a/sql/meta_table_unittest.cc
+++ b/sql/meta_table_unittest.cc
@@ -41,6 +41,53 @@ TEST_F(SQLMetaTableTest, DoesTableExist) {
EXPECT_TRUE(sql::MetaTable::DoesTableExist(&db()));
}
+TEST_F(SQLMetaTableTest, RazeIfDeprecated) {
+ const int kDeprecatedVersion = 1;
+ const int kVersion = 2;
+
+ // Setup a current database.
+ {
+ sql::MetaTable meta_table;
+ EXPECT_TRUE(meta_table.Init(&db(), kVersion, kVersion));
+ EXPECT_TRUE(db().Execute("CREATE TABLE t(c)"));
+ EXPECT_TRUE(db().DoesTableExist("t"));
+ }
+
+ // Table should should still exist if the database version is new enough.
+ sql::MetaTable::RazeIfDeprecated(&db(), kDeprecatedVersion);
+ EXPECT_TRUE(db().DoesTableExist("t"));
+
+ // TODO(shess): It may make sense to Raze() if meta isn't present or
+ // version isn't present. See meta_table.h TODO on RazeIfDeprecated().
+
+ // Table should still exist if the version is not available.
+ EXPECT_TRUE(db().Execute("DELETE FROM meta WHERE key = 'version'"));
+ {
+ sql::MetaTable meta_table;
+ EXPECT_TRUE(meta_table.Init(&db(), kVersion, kVersion));
+ EXPECT_EQ(0, meta_table.GetVersionNumber());
+ }
+ sql::MetaTable::RazeIfDeprecated(&db(), kDeprecatedVersion);
+ EXPECT_TRUE(db().DoesTableExist("t"));
+
+ // Table should still exist if meta table is missing.
+ EXPECT_TRUE(db().Execute("DROP TABLE meta"));
+ sql::MetaTable::RazeIfDeprecated(&db(), kDeprecatedVersion);
+ EXPECT_TRUE(db().DoesTableExist("t"));
+
+ // Setup meta with deprecated version.
+ {
+ sql::MetaTable meta_table;
+ EXPECT_TRUE(meta_table.Init(&db(), kDeprecatedVersion, kDeprecatedVersion));
+ }
+
+ // Deprecation check should remove the table.
+ EXPECT_TRUE(db().DoesTableExist("t"));
+ sql::MetaTable::RazeIfDeprecated(&db(), kDeprecatedVersion);
+ EXPECT_FALSE(sql::MetaTable::DoesTableExist(&db()));
+ EXPECT_FALSE(db().DoesTableExist("t"));
+}
+
TEST_F(SQLMetaTableTest, VersionNumber) {
// Compatibility versions one less than the main versions to make
// sure the values aren't being crossed with each other.