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

Unified Diff: sql/connection_unittest.cc

Issue 1176653002: mandoline filesystem: add a sqlite3 vfs to proxy filesystem usage. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix win 8 Created 5 years, 6 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
« no previous file with comments | « sql/connection.cc ('k') | sql/correct_sql_test_base.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sql/connection_unittest.cc
diff --git a/sql/connection_unittest.cc b/sql/connection_unittest.cc
index a09721a0f73723fc93e29e513eeb45449838f43e..c7d9080c8f904a0a83195c0589dd7c61b5c649fd 100644
--- a/sql/connection_unittest.cc
+++ b/sql/connection_unittest.cc
@@ -10,6 +10,7 @@
#include "base/metrics/statistics_recorder.h"
#include "base/test/histogram_tester.h"
#include "sql/connection.h"
+#include "sql/correct_sql_test_base.h"
#include "sql/meta_table.h"
#include "sql/proxy.h"
#include "sql/statement.h"
@@ -207,33 +208,21 @@ class ScopedUmaskSetter {
};
#endif
-class SQLConnectionTest : public testing::Test {
+class SQLConnectionTest : public sql::SQLTestBase {
public:
void SetUp() override {
// Any macro histograms which fire before the recorder is initialized cannot
// be tested. So this needs to be ahead of Open().
base::StatisticsRecorder::Initialize();
- ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
- db_path_ = temp_dir_.path().AppendASCII("SQLConnectionTest.db");
- ASSERT_TRUE(db_.Open(db_path_));
+ SQLTestBase::SetUp();
}
- void TearDown() override { db_.Close(); }
-
- sql::Connection& db() { return db_; }
- const base::FilePath& db_path() { return db_path_; }
-
// Handle errors by blowing away the database.
void RazeErrorCallback(int expected_error, int error, sql::Statement* stmt) {
EXPECT_EQ(expected_error, error);
- db_.RazeAndClose();
+ db().RazeAndClose();
}
-
- private:
- sql::Connection db_;
- base::FilePath db_path_;
- base::ScopedTempDir temp_dir_;
};
TEST_F(SQLConnectionTest, Execute) {
@@ -366,7 +355,7 @@ TEST_F(SQLConnectionTest, ScopedIgnoreUntracked) {
db().Close();
// Corrupt the database so that nothing works, including PRAGMAs.
- ASSERT_TRUE(sql::test::CorruptSizeInHeader(db_path()));
+ ASSERT_TRUE(CorruptSizeInHeaderOfDB());
{
sql::ScopedErrorIgnorer ignore_errors;
@@ -534,6 +523,8 @@ TEST_F(SQLConnectionTest, RazeMultiple) {
ASSERT_EQ(0, SqliteMasterCount(&other_db));
}
+// TODO(erg): Enable this in the next patch once I add locking.
+#if !defined(MOJO_APPTEST_IMPL)
TEST_F(SQLConnectionTest, RazeLocked) {
const char* kCreateSql = "CREATE TABLE foo (id INTEGER PRIMARY KEY, value)";
ASSERT_TRUE(db().Execute(kCreateSql));
@@ -568,6 +559,7 @@ TEST_F(SQLConnectionTest, RazeLocked) {
ASSERT_FALSE(s.Step());
ASSERT_TRUE(db().Raze());
}
+#endif
// Verify that Raze() can handle an empty file. SQLite should treat
// this as an empty database.
@@ -576,12 +568,7 @@ TEST_F(SQLConnectionTest, RazeEmptyDB) {
ASSERT_TRUE(db().Execute(kCreateSql));
db().Close();
- {
- base::ScopedFILE file(base::OpenFile(db_path(), "rb+"));
- ASSERT_TRUE(file.get() != NULL);
- ASSERT_EQ(0, fseek(file.get(), 0, SEEK_SET));
- ASSERT_TRUE(base::TruncateFile(file.get()));
- }
+ TruncateDatabase();
ASSERT_TRUE(db().Open(db_path()));
ASSERT_TRUE(db().Raze());
@@ -592,16 +579,10 @@ TEST_F(SQLConnectionTest, RazeEmptyDB) {
TEST_F(SQLConnectionTest, RazeNOTADB) {
db().Close();
sql::Connection::Delete(db_path());
- ASSERT_FALSE(base::PathExists(db_path()));
+ ASSERT_FALSE(GetPathExists(db_path()));
- {
- base::ScopedFILE file(base::OpenFile(db_path(), "wb"));
- ASSERT_TRUE(file.get() != NULL);
-
- const char* kJunk = "This is the hour of our discontent.";
- fputs(kJunk, file.get());
- }
- ASSERT_TRUE(base::PathExists(db_path()));
+ WriteJunkToDatabase(SQLTestBase::TYPE_OVERWRITE_AND_TRUNCATE);
+ ASSERT_TRUE(GetPathExists(db_path()));
// SQLite will successfully open the handle, but fail when running PRAGMA
// statements that access the database.
@@ -635,14 +616,7 @@ TEST_F(SQLConnectionTest, RazeNOTADB2) {
ASSERT_EQ(1, SqliteMasterCount(&db()));
db().Close();
- {
- base::ScopedFILE file(base::OpenFile(db_path(), "rb+"));
- ASSERT_TRUE(file.get() != NULL);
- ASSERT_EQ(0, fseek(file.get(), 0, SEEK_SET));
-
- const char* kJunk = "This is the hour of our discontent.";
- fputs(kJunk, file.get());
- }
+ WriteJunkToDatabase(SQLTestBase::TYPE_OVERWRITE);
// SQLite will successfully open the handle, but will fail with
// SQLITE_NOTADB on pragma statemenets which attempt to read the
@@ -672,7 +646,7 @@ TEST_F(SQLConnectionTest, RazeCallbackReopen) {
db().Close();
// Corrupt the database so that nothing works, including PRAGMAs.
- ASSERT_TRUE(sql::test::CorruptSizeInHeader(db_path()));
+ ASSERT_TRUE(CorruptSizeInHeaderOfDB());
// Open() will succeed, even though the PRAGMA calls within will
// fail with SQLITE_CORRUPT, as will this PRAGMA.
@@ -817,15 +791,17 @@ TEST_F(SQLConnectionTest, Delete) {
// Should have both a main database file and a journal file because
// of journal_mode TRUNCATE.
base::FilePath journal(db_path().value() + FILE_PATH_LITERAL("-journal"));
- ASSERT_TRUE(base::PathExists(db_path()));
- ASSERT_TRUE(base::PathExists(journal));
+ ASSERT_TRUE(GetPathExists(db_path()));
+ ASSERT_TRUE(GetPathExists(journal));
sql::Connection::Delete(db_path());
- EXPECT_FALSE(base::PathExists(db_path()));
- EXPECT_FALSE(base::PathExists(journal));
+ EXPECT_FALSE(GetPathExists(db_path()));
+ EXPECT_FALSE(GetPathExists(journal));
}
-#if defined(OS_POSIX)
+// This test manually sets on disk permissions; this doesn't apply to the mojo
+// fork.
+#if defined(OS_POSIX) && !defined(MOJO_APPTEST_IMPL)
// Test that set_restrict_to_user() trims database permissions so that
// only the owner (and root) can read.
TEST_F(SQLConnectionTest, UserPermission) {
@@ -835,7 +811,7 @@ TEST_F(SQLConnectionTest, UserPermission) {
// Temporarily provide a more permissive umask.
db().Close();
sql::Connection::Delete(db_path());
- ASSERT_FALSE(base::PathExists(db_path()));
+ ASSERT_FALSE(GetPathExists(db_path()));
ScopedUmaskSetter permissive_umask(S_IWGRP | S_IWOTH);
ASSERT_TRUE(db().Open(db_path()));
@@ -849,8 +825,8 @@ TEST_F(SQLConnectionTest, UserPermission) {
// Given a permissive umask, the database is created with permissive
// read access for the database and journal.
- ASSERT_TRUE(base::PathExists(db_path()));
- ASSERT_TRUE(base::PathExists(journal));
+ ASSERT_TRUE(GetPathExists(db_path()));
+ ASSERT_TRUE(GetPathExists(journal));
mode = base::FILE_PERMISSION_MASK;
EXPECT_TRUE(base::GetPosixFilePermissions(db_path(), &mode));
ASSERT_NE((mode & base::FILE_PERMISSION_USER_MASK), mode);
@@ -863,8 +839,8 @@ TEST_F(SQLConnectionTest, UserPermission) {
db().Close();
db().set_restrict_to_user();
ASSERT_TRUE(db().Open(db_path()));
- ASSERT_TRUE(base::PathExists(db_path()));
- ASSERT_TRUE(base::PathExists(journal));
+ ASSERT_TRUE(GetPathExists(db_path()));
+ ASSERT_TRUE(GetPathExists(journal));
mode = base::FILE_PERMISSION_MASK;
EXPECT_TRUE(base::GetPosixFilePermissions(db_path(), &mode));
ASSERT_EQ((mode & base::FILE_PERMISSION_USER_MASK), mode);
@@ -876,15 +852,15 @@ TEST_F(SQLConnectionTest, UserPermission) {
db().Close();
sql::Connection::Delete(db_path());
ASSERT_TRUE(db().Open(db_path()));
- ASSERT_TRUE(base::PathExists(db_path()));
- ASSERT_FALSE(base::PathExists(journal));
+ ASSERT_TRUE(GetPathExists(db_path()));
+ ASSERT_FALSE(GetPathExists(journal));
mode = base::FILE_PERMISSION_MASK;
EXPECT_TRUE(base::GetPosixFilePermissions(db_path(), &mode));
ASSERT_EQ((mode & base::FILE_PERMISSION_USER_MASK), mode);
// Verify that journal creation inherits the restriction.
EXPECT_TRUE(db().Execute("CREATE TABLE x (x)"));
- ASSERT_TRUE(base::PathExists(journal));
+ ASSERT_TRUE(GetPathExists(journal));
mode = base::FILE_PERMISSION_MASK;
EXPECT_TRUE(base::GetPosixFilePermissions(journal, &mode));
ASSERT_EQ((mode & base::FILE_PERMISSION_USER_MASK), mode);
@@ -990,7 +966,7 @@ TEST_F(SQLConnectionTest, Basic_QuickIntegrityCheck) {
EXPECT_TRUE(db().QuickIntegrityCheck());
db().Close();
- ASSERT_TRUE(sql::test::CorruptSizeInHeader(db_path()));
+ ASSERT_TRUE(CorruptSizeInHeaderOfDB());
{
sql::ScopedErrorIgnorer ignore_errors;
@@ -1012,7 +988,7 @@ TEST_F(SQLConnectionTest, Basic_FullIntegrityCheck) {
EXPECT_EQ(kOk, messages[0]);
db().Close();
- ASSERT_TRUE(sql::test::CorruptSizeInHeader(db_path()));
+ ASSERT_TRUE(CorruptSizeInHeaderOfDB());
{
sql::ScopedErrorIgnorer ignore_errors;
« no previous file with comments | « sql/connection.cc ('k') | sql/correct_sql_test_base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698