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

Unified Diff: webkit/quota/quota_database_unittest.cc

Issue 7057006: Add Dump{Quota,LastAccessTime}Table (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: 'Move Assign*** and Rename AccessTable' Created 9 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
« webkit/quota/quota_database.cc ('K') | « webkit/quota/quota_database.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/quota/quota_database_unittest.cc
diff --git a/webkit/quota/quota_database_unittest.cc b/webkit/quota/quota_database_unittest.cc
index 6e80c851555619ac1025fff2c8c6d43ded08aad4..3fe93a2365ef2eb71564597f7ccb95c192f5b64d 100644
--- a/webkit/quota/quota_database_unittest.cc
+++ b/webkit/quota/quota_database_unittest.cc
@@ -7,6 +7,10 @@
#include <set>
#include "app/sql/connection.h"
+#include "app/sql/statement.h"
+#include "app/sql/transaction.h"
+#include "base/bind.h"
+#include "base/callback.h"
#include "base/file_util.h"
#include "base/scoped_temp_dir.h"
#include "googleurl/src/gurl.h"
@@ -25,13 +29,81 @@ class TestErrorDelegate : public sql::ErrorDelegate {
return error;
}
};
-
} // namespace
namespace quota {
class QuotaDatabaseTest : public testing::Test {
protected:
+ typedef QuotaDatabase::QuotaTableEntry QuotaTableEntry;
+ typedef QuotaDatabase::QuotaTableCallback QuotaTableCallback;
+ typedef QuotaDatabase::LastAccessTimeTableEntry LastAccessTimeTableEntry;
+ typedef QuotaDatabase::LastAccessTimeTableCallback
+ LastAccessTimeTableCallback;
+
+ template<typename Iterator>
+ bool AssignQuotaTable(
+ QuotaDatabase* quota_database, Iterator itr, Iterator end) {
+ if (!quota_database->LazyOpen(true))
+ return false;
+
+ sql::Transaction transaction(quota_database->db_.get());
+ if (!transaction.Begin())
+ return false;
+
+ for (;itr != end; ++itr) {
+ const char* kSql =
+ "INSERT INTO HostQuotaTable"
+ " (host, type, quota)"
+ " VALUES (?, ?, ?)";
+ sql::Statement statement;
+ statement.Assign(
+ quota_database->db_->GetCachedStatement(
+ SQL_FROM_HERE, kSql));
+ EXPECT_TRUE(statement.is_valid());
+
+ statement.BindString(0, itr->host);
+ statement.BindInt(1, static_cast<int>(itr->type));
+ statement.BindInt64(2, itr->quota);
+ if (!statement.Run())
+ return false;
+ }
+
+ return transaction.Commit();
+ }
+
+ template<typename Iterator>
+ bool AssignLastAccessTimeTable(
+ QuotaDatabase* quota_database, Iterator itr, Iterator end) {
+ if (!quota_database->LazyOpen(true))
+ return false;
+
+ sql::Transaction transaction(quota_database->db_.get());
+ if (!transaction.Begin())
+ return false;
+
+ for (;itr != end; ++itr) {
+ const char* kSql =
+ "INSERT INTO OriginLastAccessTable"
+ " (origin, type, used_count, last_access_time)"
+ " VALUES (?, ?, ?, ?)";
+ sql::Statement statement;
+ statement.Assign(
+ quota_database->db_->GetCachedStatement(
+ SQL_FROM_HERE, kSql));
+ EXPECT_TRUE(statement.is_valid());
+
+ statement.BindString(0, itr->origin.spec());
+ statement.BindInt(1, static_cast<int>(itr->type));
+ statement.BindInt(2, itr->used_count);
+ statement.BindInt64(3, itr->last_access_time.ToInternalValue());
+ if (!statement.Run())
+ return false;
+ }
+
+ return transaction.Commit();
+ }
+
void LazyOpen(const FilePath& kDbFile) {
QuotaDatabase db(kDbFile);
EXPECT_FALSE(db.LazyOpen(false));
@@ -192,6 +264,63 @@ class QuotaDatabaseTest : public testing::Test {
&used_count));
EXPECT_EQ(1, used_count);
}
+
+ template<typename EntryType>
+ struct EntryVerifier {
+ std::set<EntryType> table;
+
+ template<typename Iterator>
+ EntryVerifier(Iterator itr, Iterator end)
+ :table(itr, end) {}
+
+ bool Run(const EntryType& entry) {
+ EXPECT_EQ(1u, table.erase(entry));
+ return true;
+ }
+ };
+
+ void DumpQuotaTable(const FilePath& kDbFile) {
+ QuotaTableEntry kTableEntries[] = {
+ {"http://go/", kStorageTypeTemporary, 1},
+ {"http://oo/", kStorageTypeTemporary, 2},
+ {"http://gle/", kStorageTypePersistent, 3}
+ };
+ QuotaTableEntry* begin = kTableEntries;
+ QuotaTableEntry* end = kTableEntries + ARRAYSIZE_UNSAFE(kTableEntries);
+
+ QuotaDatabase db(kDbFile);
+ EXPECT_TRUE(AssignQuotaTable(&db, begin, end));
+
+ typedef EntryVerifier<QuotaTableEntry> Verifier;
+ Verifier verifier(begin, end);
+ QuotaTableCallback callback = base::Bind(&Verifier::Run,
+ base::Unretained(&verifier));
+ EXPECT_TRUE(db.DumpQuotaTable(&callback));
+ EXPECT_TRUE(verifier.table.empty());
+ }
+
+ void DumpLastAccessTimeTable(const FilePath& kDbFile) {
+ base::Time now(base::Time::Now());
+ LastAccessTimeTableEntry kTableEntries[] = {
+ {GURL("http://go/"), kStorageTypeTemporary, 2147483647, now},
+ {GURL("http://oo/"), kStorageTypeTemporary, 0, now},
+ {GURL("http://gle/"), kStorageTypeTemporary, 1, now},
+ };
+ LastAccessTimeTableEntry* begin = kTableEntries;
+ LastAccessTimeTableEntry* end = kTableEntries +
+ ARRAYSIZE_UNSAFE(kTableEntries);
+
+ QuotaDatabase db(kDbFile);
+ EXPECT_TRUE(AssignLastAccessTimeTable(&db, begin, end));
+
+ typedef EntryVerifier<LastAccessTimeTableEntry> Verifier;
+ Verifier verifier(begin, end);
+ LastAccessTimeTableCallback callback =
+ base::Bind(&Verifier::Run,
+ base::Unretained(&verifier));
+ EXPECT_TRUE(db.DumpLastAccessTimeTable(&callback));
+ EXPECT_TRUE(verifier.table.empty());
+ }
};
TEST_F(QuotaDatabaseTest, LazyOpen) {
@@ -247,4 +376,20 @@ TEST_F(QuotaDatabaseTest, RegisterOrigins) {
RegisterOrigins(kDbFile);
RegisterOrigins(FilePath());
}
+
+TEST_F(QuotaDatabaseTest, DumpQuotaTable) {
+ ScopedTempDir data_dir;
+ ASSERT_TRUE(data_dir.CreateUniqueTempDir());
+ const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db");
+ DumpQuotaTable(kDbFile);
+ DumpQuotaTable(FilePath());
+}
+
+TEST_F(QuotaDatabaseTest, DumpLastAccessTimeTable) {
+ ScopedTempDir data_dir;
+ ASSERT_TRUE(data_dir.CreateUniqueTempDir());
+ const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db");
+ DumpLastAccessTimeTable(kDbFile);
+ DumpLastAccessTimeTable(FilePath());
+}
} // namespace quota
« webkit/quota/quota_database.cc ('K') | « webkit/quota/quota_database.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698