| // 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_ |