| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SQL_TEST_SQL_TEST_BASE_H_ |
| #define SQL_TEST_SQL_TEST_BASE_H_ |
| |
| #include "base/files/file_path.h" |
| #include "base/files/scoped_temp_dir.h" |
| #include "base/macros.h" |
| #include "sql/connection.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace sql { |
| |
| class Connection; |
| |
| // Base class for SQL tests. |
| // |
| // WARNING: We want to run the same gtest based unit test code both against |
| // chromium (which uses this implementation here), and the mojo code (which |
| // uses a different class named SQLTestBase). These two classes need to have |
| // the same interface because we compile time switch them based on a |
| // #define. We need to have two different implementations because the mojo |
| // version derives from mojo::test::ApplicationTestBase instead of |
| // testing::Test. |
| class SQLTestBase : public testing::Test { |
| public: |
| SQLTestBase(); |
| ~SQLTestBase() override; |
| |
| enum WriteJunkType { |
| TYPE_OVERWRITE_AND_TRUNCATE, |
| TYPE_OVERWRITE |
| }; |
| |
| // Returns the path to the database. |
| base::FilePath db_path(); |
| |
| // Returns a connection to the database at db_path(). |
| sql::Connection& db(); |
| |
| // Closes the current connection to the database and reopens it. |
| bool Reopen(); |
| |
| // Proxying method around base::PathExists. |
| bool GetPathExists(const base::FilePath& path); |
| |
| // SQLite stores the database size in the header, and if the actual |
| // OS-derived size is smaller, the database is considered corrupt. |
| // [This case is actually a common form of corruption in the wild.] |
| // This helper sets the in-header size to one page larger than the |
| // actual file size. The resulting file will return SQLITE_CORRUPT |
| // for most operations unless PRAGMA writable_schema is turned ON. |
| // |
| // Returns false if any error occurs accessing the file. |
| bool CorruptSizeInHeaderOfDB(); |
| |
| // Writes junk to the start of the file. |
| void WriteJunkToDatabase(WriteJunkType type); |
| |
| // Sets the database file size to 0. |
| void TruncateDatabase(); |
| |
| // Overridden from testing::Test: |
| void SetUp() override; |
| void TearDown() override; |
| |
| private: |
| base::ScopedTempDir temp_dir_; |
| sql::Connection db_; |
| |
| DISALLOW_COPY_AND_ASSIGN(SQLTestBase); |
| }; |
| |
| } // namespace sql |
| |
| #endif // SQL_TEST_SQL_TEST_BASE_H_ |