Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(255)

Unified Diff: content/browser/appcache/appcache_database_unittest.cc

Issue 879393002: Expire appcaches that fail to update for "too long". (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/appcache/appcache_database_unittest.cc
diff --git a/content/browser/appcache/appcache_database_unittest.cc b/content/browser/appcache/appcache_database_unittest.cc
index 11aa683c87ab03414f03326006b9b88aef6ee6b6..5eb576574253edb71a3f7b9e10b7cd4576d24559 100644
--- a/content/browser/appcache/appcache_database_unittest.cc
+++ b/content/browser/appcache/appcache_database_unittest.cc
@@ -435,6 +435,79 @@ TEST(AppCacheDatabaseTest, GroupRecords) {
ASSERT_TRUE(ignore_errors.CheckIgnoredErrors());
}
+TEST(AppCacheDatabaseTest, GroupAccessAndEvictionTimes) {
+ const base::FilePath kEmptyPath;
+ AppCacheDatabase db(kEmptyPath);
+ EXPECT_TRUE(db.LazyOpen(true));
+
+ const GURL kManifestUrl("http://blah/manifest");
+ const GURL kOrigin(kManifestUrl.GetOrigin());
+ const base::Time kDayOne =
+ base::Time() + base::TimeDelta::FromDays(1);
+ const base::Time kDayTwo = kDayOne + base::TimeDelta::FromDays(1);
+
+ // See that the methods behave as expected with an empty db.
+ // To accomodate lazy updating, for consistency, none of them fail
+ // given ids not found in the db.
+ EXPECT_TRUE(db.UpdateEvictionTimes(1, kDayOne, kDayTwo));
+ EXPECT_TRUE(db.UpdateLastAccessTime(1, kDayOne));
+ EXPECT_TRUE(db.CommitLazyLastAccessTimes());
+ EXPECT_TRUE(db.LazyUpdateLastAccessTime(1, kDayTwo));
+ EXPECT_TRUE(db.CommitLazyLastAccessTimes());
+
+ // Insert a group at DAY1
+ AppCacheDatabase::GroupRecord record;
+ record.group_id = 1;
+ record.manifest_url = kManifestUrl;
+ record.origin = kOrigin;
+ record.creation_time = kDayOne;
+ record.last_access_time = kDayOne;
+ record.last_full_update_check_time = kDayOne;
+ record.first_evictable_error_time = kDayOne;
+ EXPECT_TRUE(db.InsertGroup(&record));
+
+ // Verify the round trip.
+ record = AppCacheDatabase::GroupRecord();
+ EXPECT_TRUE(db.FindGroup(1, &record));
+ EXPECT_EQ(kDayOne, record.last_access_time);
+ EXPECT_EQ(kDayOne, record.last_full_update_check_time);
+ EXPECT_EQ(kDayOne, record.first_evictable_error_time);
+
+ // Update the times to DAY2 and verify.
+ EXPECT_TRUE(db.UpdateEvictionTimes(1, kDayTwo, kDayTwo));
+ EXPECT_TRUE(db.UpdateLastAccessTime(1, kDayTwo));
+ record = AppCacheDatabase::GroupRecord();
+ EXPECT_TRUE(db.FindGroup(1, &record));
+ EXPECT_EQ(kDayTwo, record.last_access_time);
+ EXPECT_EQ(kDayTwo, record.last_full_update_check_time);
+ EXPECT_EQ(kDayTwo, record.first_evictable_error_time);
+
+ // Lazy update back to DAY1 and verify its reflected without having committed.
+ EXPECT_TRUE(db.lazy_last_access_times_.empty());
+ EXPECT_TRUE(db.LazyUpdateLastAccessTime(1, kDayOne));
+ EXPECT_FALSE(db.lazy_last_access_times_.empty());
+ record = AppCacheDatabase::GroupRecord();
+ EXPECT_TRUE(db.FindGroup(1, &record));
+ EXPECT_EQ(kDayOne, record.last_access_time);
+
+ // Commit the lazy value and verify is sticks.
palmer 2015/06/01 21:09:02 Typo: "...it sticks."
+ EXPECT_TRUE(db.CommitLazyLastAccessTimes());
+ EXPECT_TRUE(db.lazy_last_access_times_.empty());
+ record = AppCacheDatabase::GroupRecord();
+ EXPECT_TRUE(db.FindGroup(1, &record));
+ EXPECT_EQ(kDayOne, record.last_access_time);
+
+ // Verify a bad lazy group id doesn't fail to commit the good ones on DAY2.
+ EXPECT_TRUE(db.LazyUpdateLastAccessTime(1, kDayTwo));
+ EXPECT_TRUE(db.LazyUpdateLastAccessTime(2, kDayTwo));
+ EXPECT_EQ(2u, db.lazy_last_access_times_.size());
+ EXPECT_TRUE(db.CommitLazyLastAccessTimes());
+ EXPECT_TRUE(db.lazy_last_access_times_.empty());
+ record = AppCacheDatabase::GroupRecord();
+ EXPECT_TRUE(db.FindGroup(1, &record));
+ EXPECT_EQ(kDayTwo, record.last_access_time);
+}
+
TEST(AppCacheDatabaseTest, NamespaceRecords) {
const base::FilePath kEmptyPath;
AppCacheDatabase db(kEmptyPath);
@@ -745,31 +818,42 @@ TEST(AppCacheDatabaseTest, OriginUsage) {
#if defined(APPCACHE_USE_SIMPLE_CACHE)
// There is no such upgrade path in this case.
#else
-TEST(AppCacheDatabaseTest, UpgradeSchema3to5) {
michaeln 2015/05/29 01:24:50 The diffs here are confusing. I've removed the Upg
+TEST(AppCacheDatabaseTest, UpgradeSchema4to7) {
// Real file on disk for this test.
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
- const base::FilePath kDbFile = temp_dir.path().AppendASCII("upgrade3.db");
+ const base::FilePath kDbFile = temp_dir.path().AppendASCII("upgrade4.db");
const GURL kMockOrigin("http://mockorigin/");
const char kNamespaceUrlFormat[] = "namespace%d";
+ const char kWhitelistUrlFormat[] = "whitelist%d";
const char kTargetUrlFormat[] = "target%d";
const int kNumNamespaces = 10;
+ const int kWhitelistCacheId = 1;
- // Create a v3 schema based database containing some fallback records.
+ // Create a v4 schema based database containing some fallback records.
{
- const int kVersion3 = 3;
+ const int kVersion4 = 4;
const char kGroupsTable[] = "Groups";
const char kCachesTable[] = "Caches";
const char kEntriesTable[] = "Entries";
- const char kFallbackNameSpacesTable[] = "FallbackNameSpaces";
+ const char kNamespacesTable[] = "Namespaces";
const char kOnlineWhiteListsTable[] = "OnlineWhiteLists";
const char kDeletableResponseIdsTable[] = "DeletableResponseIds";
- const struct {
+ struct TableInfo {
+ const char* table_name;
+ const char* columns;
+ };
+
+ struct IndexInfo {
+ const char* index_name;
const char* table_name;
const char* columns;
- } kTables3[] = {
+ bool unique;
+ };
+
+ const TableInfo kTables4[] = {
{ kGroupsTable,
"(group_id INTEGER PRIMARY KEY,"
" origin TEXT,"
@@ -791,11 +875,12 @@ TEST(AppCacheDatabaseTest, UpgradeSchema3to5) {
" response_id INTEGER,"
" response_size INTEGER)" },
- { kFallbackNameSpacesTable,
+ { kNamespacesTable,
"(cache_id INTEGER,"
" origin TEXT," // intentionally not normalized
+ " type INTEGER,"
" namespace_url TEXT,"
- " fallback_entry_url TEXT)" },
+ " target_url TEXT)" },
{ kOnlineWhiteListsTable,
"(cache_id INTEGER,"
@@ -805,12 +890,7 @@ TEST(AppCacheDatabaseTest, UpgradeSchema3to5) {
"(response_id INTEGER NOT NULL)" },
};
- const struct {
- const char* index_name;
- const char* table_name;
- const char* columns;
- bool unique;
- } kIndexes3[] = {
+ const IndexInfo kIndexes4[] = {
{ "GroupsOriginIndex",
kGroupsTable,
"(origin)",
@@ -841,18 +921,18 @@ TEST(AppCacheDatabaseTest, UpgradeSchema3to5) {
"(response_id)",
true },
- { "FallbackNameSpacesCacheIndex",
- kFallbackNameSpacesTable,
+ { "NamespacesCacheIndex",
+ kNamespacesTable,
"(cache_id)",
false },
- { "FallbackNameSpacesOriginIndex",
- kFallbackNameSpacesTable,
+ { "NamespacesOriginIndex",
+ kNamespacesTable,
"(origin)",
false },
- { "FallbackNameSpacesCacheAndUrlIndex",
- kFallbackNameSpacesTable,
+ { "NamespacesCacheAndUrlIndex",
+ kNamespacesTable,
"(cache_id, namespace_url)",
true },
@@ -867,8 +947,8 @@ TEST(AppCacheDatabaseTest, UpgradeSchema3to5) {
true },
};
- const int kTableCount3 = arraysize(kTables3);
- const int kIndexCount3 = arraysize(kIndexes3);
+ const int kTableCount4 = arraysize(kTables4);
+ const int kIndexCount4 = arraysize(kIndexes4);
sql::Connection connection;
EXPECT_TRUE(connection.Open(kDbFile));
@@ -877,35 +957,34 @@ TEST(AppCacheDatabaseTest, UpgradeSchema3to5) {
EXPECT_TRUE(transaction.Begin());
sql::MetaTable meta_table;
- EXPECT_TRUE(meta_table.Init(&connection, kVersion3, kVersion3));
+ EXPECT_TRUE(meta_table.Init(&connection, kVersion4, kVersion4));
- for (int i = 0; i < kTableCount3; ++i) {
+ for (int i = 0; i < kTableCount4; ++i) {
std::string sql("CREATE TABLE ");
- sql += kTables3[i].table_name;
- sql += kTables3[i].columns;
+ sql += kTables4[i].table_name;
+ sql += kTables4[i].columns;
EXPECT_TRUE(connection.Execute(sql.c_str()));
}
- for (int i = 0; i < kIndexCount3; ++i) {
+ for (int i = 0; i < kIndexCount4; ++i) {
std::string sql;
- if (kIndexes3[i].unique)
+ if (kIndexes4[i].unique)
sql += "CREATE UNIQUE INDEX ";
else
sql += "CREATE INDEX ";
- sql += kIndexes3[i].index_name;
+ sql += kIndexes4[i].index_name;
sql += " ON ";
- sql += kIndexes3[i].table_name;
- sql += kIndexes3[i].columns;
+ sql += kIndexes4[i].table_name;
+ sql += kIndexes4[i].columns;
EXPECT_TRUE(connection.Execute(sql.c_str()));
}
- const char* kSql =
- "INSERT INTO FallbackNameSpaces"
- " (cache_id, origin, namespace_url, fallback_entry_url)"
- " VALUES (?, ?, ?, ?)";
-
+ const char* kNamespacesSql =
+ "INSERT INTO Namespaces"
+ " (cache_id, origin, type, namespace_url, target_url)"
+ " VALUES (?, ?, ?, ?, ?)";
sql::Statement statement;
- statement.Assign(connection.GetUniqueStatement(kSql));
+ statement.Assign(connection.GetUniqueStatement(kNamespacesSql));
EXPECT_TRUE(statement.is_valid());
for (int i = 0; i < kNumNamespaces; ++i) {
GURL namespace_url(
@@ -914,8 +993,24 @@ TEST(AppCacheDatabaseTest, UpgradeSchema3to5) {
kMockOrigin.Resolve(base::StringPrintf(kTargetUrlFormat, i)));
statement.BindInt64(0, i);
statement.BindString(1, kMockOrigin.spec().c_str());
- statement.BindString(2, namespace_url.spec().c_str());
- statement.BindString(3, target_url.spec().c_str());
+ statement.BindInt(2, APPCACHE_FALLBACK_NAMESPACE);
+ statement.BindString(3, namespace_url.spec().c_str());
+ statement.BindString(4, target_url.spec().c_str());
+ ASSERT_TRUE(statement.Run());
+ statement.Reset(true);
+ }
+
+ const char* kWhitelistsSql =
+ "INSERT INTO OnlineWhiteLists"
+ " (cache_id, namespace_url)"
+ " VALUES (?, ?)";
+ statement.Assign(connection.GetUniqueStatement(kWhitelistsSql));
+ EXPECT_TRUE(statement.is_valid());
+ for (int i = 0; i < kNumNamespaces; ++i) {
+ GURL namespace_url(
+ kMockOrigin.Resolve(base::StringPrintf(kWhitelistUrlFormat, i)));
+ statement.BindInt64(0, kWhitelistCacheId);
+ statement.BindString(1, namespace_url.spec().c_str());
ASSERT_TRUE(statement.Run());
statement.Reset(true);
}
@@ -923,24 +1018,17 @@ TEST(AppCacheDatabaseTest, UpgradeSchema3to5) {
EXPECT_TRUE(transaction.Commit());
}
- // Open that database and verify that it got updated.
+ // Open that database and verify that it got upgraded to v7.
AppCacheDatabase db(kDbFile);
EXPECT_TRUE(db.LazyOpen(true));
-
- EXPECT_FALSE(db.db_->DoesTableExist("FallbackNameSpaces"));
- EXPECT_FALSE(db.db_->DoesIndexExist("FallbackNamesSpacesCacheIndex"));
- EXPECT_FALSE(db.db_->DoesIndexExist("FallbackNameSpacesOriginIndex"));
- EXPECT_FALSE(db.db_->DoesIndexExist("FallbackNameSpacesCacheAndUrlIndex"));
-
- EXPECT_TRUE(db.db_->DoesTableExist("Namespaces"));
- EXPECT_TRUE(db.db_->DoesIndexExist("NamespacesCacheIndex"));
- EXPECT_TRUE(db.db_->DoesIndexExist("NamespacesOriginIndex"));
- EXPECT_TRUE(db.db_->DoesIndexExist("NamespacesCacheAndUrlIndex"));
EXPECT_TRUE(db.db_->DoesColumnExist("Namespaces", "is_pattern"));
EXPECT_TRUE(db.db_->DoesColumnExist("OnlineWhiteLists", "is_pattern"));
-
- EXPECT_EQ(5, db.meta_table_->GetVersionNumber());
- EXPECT_EQ(5, db.meta_table_->GetCompatibleVersionNumber());
+ EXPECT_TRUE(db.db_->DoesColumnExist("Groups",
+ "last_full_update_check_time"));
+ EXPECT_TRUE(db.db_->DoesColumnExist("Groups",
+ "first_evictable_error_time"));
+ EXPECT_EQ(7, db.meta_table_->GetVersionNumber());
+ EXPECT_EQ(7, db.meta_table_->GetCompatibleVersionNumber());
michaeln 2015/05/29 01:24:51 The four expectations ^^^ are what has changed in
std::vector<AppCacheDatabase::NamespaceRecord> intercepts;
std::vector<AppCacheDatabase::NamespaceRecord> fallbacks;
@@ -949,11 +1037,17 @@ TEST(AppCacheDatabaseTest, UpgradeSchema3to5) {
EXPECT_TRUE(intercepts.empty());
EXPECT_EQ(kNumNamespaces, static_cast<int>(fallbacks.size()));
+ std::vector<AppCacheDatabase::OnlineWhiteListRecord> whitelists;
+ EXPECT_TRUE(db.FindOnlineWhiteListForCache(kWhitelistCacheId, &whitelists));
+ EXPECT_EQ(kNumNamespaces, static_cast<int>(whitelists.size()));
+
for (int i = 0; i < kNumNamespaces; ++i) {
GURL expected_namespace_url(
kMockOrigin.Resolve(base::StringPrintf(kNamespaceUrlFormat, i)));
GURL expected_target_url(
kMockOrigin.Resolve(base::StringPrintf(kTargetUrlFormat, i)));
+ GURL expected_whitelist_url(
+ kMockOrigin.Resolve(base::StringPrintf(kWhitelistUrlFormat, i)));
EXPECT_EQ(i, fallbacks[i].cache_id);
EXPECT_EQ(APPCACHE_FALLBACK_NAMESPACE, fallbacks[i].namespace_.type);
@@ -961,29 +1055,34 @@ TEST(AppCacheDatabaseTest, UpgradeSchema3to5) {
EXPECT_EQ(expected_namespace_url, fallbacks[i].namespace_.namespace_url);
EXPECT_EQ(expected_target_url, fallbacks[i].namespace_.target_url);
EXPECT_FALSE(fallbacks[i].namespace_.is_pattern);
+ EXPECT_EQ(expected_whitelist_url, whitelists[i].namespace_url);
+ EXPECT_FALSE(whitelists[i].is_pattern);
}
}
#endif // !APPCACHE_USE_SIMPLE_CACHE
-#if defined(APPCACHE_USE_SIMPLE_CACHE)
-// There is no such upgrade path in this case.
-#else
-TEST(AppCacheDatabaseTest, UpgradeSchema4to5) {
+// Verify last_full_update_check_time and first_evictable_error_time.
+TEST(AppCacheDatabaseTest, UpgradeSchema5or6to7) {
michaeln 2015/05/29 01:24:50 This entire test is brand new.
// Real file on disk for this test.
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
- const base::FilePath kDbFile = temp_dir.path().AppendASCII("upgrade4.db");
+ const base::FilePath kDbFile =
+ temp_dir.path().AppendASCII("upgrade5or6to7.db");
const GURL kMockOrigin("http://mockorigin/");
- const char kNamespaceUrlFormat[] = "namespace%d";
- const char kWhitelistUrlFormat[] = "whitelist%d";
- const char kTargetUrlFormat[] = "target%d";
- const int kNumNamespaces = 10;
- const int kWhitelistCacheId = 1;
+ const base::Time kMockTime = base::Time::Now();
- // Create a v4 schema based database containing some fallback records.
+ // Create a v5or6 schema based database containing two groups, one
+ // that has an associated cache as expected, and one which erroneously
+ // is missing its cache record.
{
- const int kVersion4 = 4;
+ // The SQL schema is the same in these two cases.
+#if defined(APPCACHE_USE_SIMPLE_CACHE)
+ const int kVersionN = 6;
+#else
+ const int kVersionN = 5;
+#endif // !APPCACHE_USE_SIMPLE_CACHE
+
const char kGroupsTable[] = "Groups";
const char kCachesTable[] = "Caches";
const char kEntriesTable[] = "Entries";
@@ -1003,7 +1102,7 @@ TEST(AppCacheDatabaseTest, UpgradeSchema4to5) {
bool unique;
};
- const TableInfo kTables4[] = {
+ const TableInfo kTables5[] = {
{ kGroupsTable,
"(group_id INTEGER PRIMARY KEY,"
" origin TEXT,"
@@ -1030,17 +1129,19 @@ TEST(AppCacheDatabaseTest, UpgradeSchema4to5) {
" origin TEXT," // intentionally not normalized
" type INTEGER,"
" namespace_url TEXT,"
- " target_url TEXT)" },
+ " target_url TEXT,"
+ " is_pattern INTEGER CHECK(is_pattern IN (0, 1)))" },
{ kOnlineWhiteListsTable,
"(cache_id INTEGER,"
- " namespace_url TEXT)" },
+ " namespace_url TEXT,"
+ " is_pattern INTEGER CHECK(is_pattern IN (0, 1)))" },
{ kDeletableResponseIdsTable,
"(response_id INTEGER NOT NULL)" },
};
- const IndexInfo kIndexes4[] = {
+ const IndexInfo kIndexes5[] = {
{ "GroupsOriginIndex",
kGroupsTable,
"(origin)",
@@ -1097,8 +1198,8 @@ TEST(AppCacheDatabaseTest, UpgradeSchema4to5) {
true },
};
- const int kTableCount4 = arraysize(kTables4);
- const int kIndexCount4 = arraysize(kIndexes4);
+ const int kTableCount5 = arraysize(kTables5);
+ const int kIndexCount5 = arraysize(kIndexes5);
sql::Connection connection;
EXPECT_TRUE(connection.Open(kDbFile));
@@ -1107,104 +1208,88 @@ TEST(AppCacheDatabaseTest, UpgradeSchema4to5) {
EXPECT_TRUE(transaction.Begin());
sql::MetaTable meta_table;
- EXPECT_TRUE(meta_table.Init(&connection, kVersion4, kVersion4));
+ EXPECT_TRUE(meta_table.Init(&connection, kVersionN, kVersionN));
- for (int i = 0; i < kTableCount4; ++i) {
+ for (int i = 0; i < kTableCount5; ++i) {
std::string sql("CREATE TABLE ");
- sql += kTables4[i].table_name;
- sql += kTables4[i].columns;
+ sql += kTables5[i].table_name;
+ sql += kTables5[i].columns;
EXPECT_TRUE(connection.Execute(sql.c_str()));
}
- for (int i = 0; i < kIndexCount4; ++i) {
+ for (int i = 0; i < kIndexCount5; ++i) {
std::string sql;
- if (kIndexes4[i].unique)
+ if (kIndexes5[i].unique)
sql += "CREATE UNIQUE INDEX ";
else
sql += "CREATE INDEX ";
- sql += kIndexes4[i].index_name;
+ sql += kIndexes5[i].index_name;
sql += " ON ";
- sql += kIndexes4[i].table_name;
- sql += kIndexes4[i].columns;
+ sql += kIndexes5[i].table_name;
+ sql += kIndexes5[i].columns;
EXPECT_TRUE(connection.Execute(sql.c_str()));
}
- const char* kNamespacesSql =
- "INSERT INTO Namespaces"
- " (cache_id, origin, type, namespace_url, target_url)"
- " VALUES (?, ?, ?, ?, ?)";
sql::Statement statement;
- statement.Assign(connection.GetUniqueStatement(kNamespacesSql));
- EXPECT_TRUE(statement.is_valid());
- for (int i = 0; i < kNumNamespaces; ++i) {
- GURL namespace_url(
- kMockOrigin.Resolve(base::StringPrintf(kNamespaceUrlFormat, i)));
- GURL target_url(
- kMockOrigin.Resolve(base::StringPrintf(kTargetUrlFormat, i)));
- statement.BindInt64(0, i);
- statement.BindString(1, kMockOrigin.spec().c_str());
- statement.BindInt(2, APPCACHE_FALLBACK_NAMESPACE);
- statement.BindString(3, namespace_url.spec().c_str());
- statement.BindString(4, target_url.spec().c_str());
- ASSERT_TRUE(statement.Run());
- statement.Reset(true);
- }
- const char* kWhitelistsSql =
- "INSERT INTO OnlineWhiteLists"
- " (cache_id, namespace_url)"
- " VALUES (?, ?)";
- statement.Assign(connection.GetUniqueStatement(kWhitelistsSql));
+ const GURL kMockManifestUrl(kMockOrigin.Resolve("mockmanifest"));
+ const GURL kMockManifest2Url(kMockOrigin.Resolve("mockmanifest2"));
+
+ const char* kInsertGroup =
+ "INSERT INTO Groups"
+ " (group_id, origin, manifest_url, creation_time, last_access_time)"
+ " VALUES (?, ?, ?, ?, ?)";
+ statement.Assign(connection.GetUniqueStatement(kInsertGroup));
EXPECT_TRUE(statement.is_valid());
- for (int i = 0; i < kNumNamespaces; ++i) {
- GURL namespace_url(
- kMockOrigin.Resolve(base::StringPrintf(kWhitelistUrlFormat, i)));
- statement.BindInt64(0, kWhitelistCacheId);
- statement.BindString(1, namespace_url.spec().c_str());
- ASSERT_TRUE(statement.Run());
- statement.Reset(true);
- }
+ statement.BindInt64(0, 1);
+ statement.BindString(1, kMockOrigin.spec().c_str());
+ statement.BindString(2, kMockManifestUrl.spec().c_str());
+ statement.BindInt64(3, kMockTime.ToInternalValue());
+ statement.BindInt64(4, kMockTime.ToInternalValue());
+ ASSERT_TRUE(statement.Run());
+ statement.Reset(true);
+ statement.BindInt64(0, 2);
+ statement.BindString(1, kMockOrigin.spec().c_str());
+ statement.BindString(2, kMockManifest2Url.spec().c_str());
+ statement.BindInt64(3, kMockTime.ToInternalValue());
+ statement.BindInt64(4, kMockTime.ToInternalValue());
+ ASSERT_TRUE(statement.Run());
+ statement.Reset(true);
+
+ const char* kInsertCache =
+ "INSERT INTO Caches"
+ " (cache_id, group_id, online_wildcard, update_time, cache_size)"
+ " VALUES (?, ?, ?, ?, ?)";
+ statement.Assign(connection.GetUniqueStatement(kInsertCache));
+ EXPECT_TRUE(statement.is_valid());
+ statement.BindInt64(0, 1);
+ statement.BindInt64(1, 1);
+ statement.BindInt(2, 0);
+ statement.BindInt64(3, kMockTime.ToInternalValue());
+ statement.BindInt64(4, 1000);
+ ASSERT_TRUE(statement.Run());
+ statement.Reset(true);
EXPECT_TRUE(transaction.Commit());
}
- // Open that database and verify that it got upgraded to v5.
+ // Open that database and verify that it got upgraded to v7.
AppCacheDatabase db(kDbFile);
EXPECT_TRUE(db.LazyOpen(true));
- EXPECT_TRUE(db.db_->DoesColumnExist("Namespaces", "is_pattern"));
- EXPECT_TRUE(db.db_->DoesColumnExist("OnlineWhiteLists", "is_pattern"));
- EXPECT_EQ(5, db.meta_table_->GetVersionNumber());
- EXPECT_EQ(5, db.meta_table_->GetCompatibleVersionNumber());
-
- std::vector<AppCacheDatabase::NamespaceRecord> intercepts;
- std::vector<AppCacheDatabase::NamespaceRecord> fallbacks;
- EXPECT_TRUE(db.FindNamespacesForOrigin(kMockOrigin, &intercepts,
- &fallbacks));
- EXPECT_TRUE(intercepts.empty());
- EXPECT_EQ(kNumNamespaces, static_cast<int>(fallbacks.size()));
-
- std::vector<AppCacheDatabase::OnlineWhiteListRecord> whitelists;
- EXPECT_TRUE(db.FindOnlineWhiteListForCache(kWhitelistCacheId, &whitelists));
- EXPECT_EQ(kNumNamespaces, static_cast<int>(whitelists.size()));
-
- for (int i = 0; i < kNumNamespaces; ++i) {
- GURL expected_namespace_url(
- kMockOrigin.Resolve(base::StringPrintf(kNamespaceUrlFormat, i)));
- GURL expected_target_url(
- kMockOrigin.Resolve(base::StringPrintf(kTargetUrlFormat, i)));
- GURL expected_whitelist_url(
- kMockOrigin.Resolve(base::StringPrintf(kWhitelistUrlFormat, i)));
-
- EXPECT_EQ(i, fallbacks[i].cache_id);
- EXPECT_EQ(APPCACHE_FALLBACK_NAMESPACE, fallbacks[i].namespace_.type);
- EXPECT_EQ(kMockOrigin, fallbacks[i].origin);
- EXPECT_EQ(expected_namespace_url, fallbacks[i].namespace_.namespace_url);
- EXPECT_EQ(expected_target_url, fallbacks[i].namespace_.target_url);
- EXPECT_FALSE(fallbacks[i].namespace_.is_pattern);
- EXPECT_EQ(expected_whitelist_url, whitelists[i].namespace_url);
- EXPECT_FALSE(whitelists[i].is_pattern);
- }
+ EXPECT_TRUE(db.db_->DoesColumnExist("Groups",
+ "last_full_update_check_time"));
+ EXPECT_TRUE(db.db_->DoesColumnExist("Groups",
+ "first_evictable_error_time"));
+ EXPECT_EQ(7, db.meta_table_->GetVersionNumber());
+ EXPECT_EQ(7, db.meta_table_->GetCompatibleVersionNumber());
+
+ AppCacheDatabase::GroupRecord group;
+ EXPECT_TRUE(db.FindGroup(1, &group));
+ EXPECT_EQ(kMockTime, group.last_full_update_check_time);
+ EXPECT_EQ(kZeroTime, group.first_evictable_error_time);
+ EXPECT_TRUE(db.FindGroup(2, &group));
+ EXPECT_EQ(kZeroTime, group.last_full_update_check_time);
+ EXPECT_EQ(kZeroTime, group.first_evictable_error_time);
}
-#endif // !APPCACHE_USE_SIMPLE_CACHE
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698