Chromium Code Reviews| Index: sql/connection_unittest.cc |
| diff --git a/sql/connection_unittest.cc b/sql/connection_unittest.cc |
| index a09721a0f73723fc93e29e513eeb45449838f43e..fd040ca99417072767bce56abd2b039349da1bd4 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(CorruptSizeInHeaderOfPath(db_path())); |
| { |
| 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_TRUNCATE_AND_CREATE); |
| + 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_OPEN_AND_APPEND); |
|
Scott Hess - ex-Googler
2015/06/17 19:32:58
"wb" was truncate, but the "rb+" case is read/writ
Elliot Glaysher
2015/06/17 21:59:34
Changed name.
("TYPE_OPEN_AND_APPEND" actually op
|
| // 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(CorruptSizeInHeaderOfPath(db_path())); |
| // 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(CorruptSizeInHeaderOfPath(db_path())); |
| { |
| 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(CorruptSizeInHeaderOfPath(db_path())); |
| { |
| sql::ScopedErrorIgnorer ignore_errors; |