Index: sql/test/sql_test_base.h |
diff --git a/sql/test/sql_test_base.h b/sql/test/sql_test_base.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3252238bb3d053fcc1d8c6b7bb1fb39050cd5c22 |
--- /dev/null |
+++ b/sql/test/sql_test_base.h |
@@ -0,0 +1,78 @@ |
+// 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/memory/scoped_ptr.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 something other than mojo::test::ApplicationTestBase |
Scott Hess - ex-Googler
2015/06/17 19:32:59
s/something other than//;
Elliot Glaysher
2015/06/17 21:59:35
Done, and fixed in the mojo version too.
|
+// instead of testing::Test. |
+class SQLTestBase : public testing::Test { |
+ public: |
+ SQLTestBase(); |
+ ~SQLTestBase() override; |
+ |
+ enum WriteJunkType { |
+ TYPE_TRUNCATE_AND_CREATE, |
+ TYPE_OPEN_AND_APPEND |
+ }; |
+ |
+ // 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 CorruptSizeInHeaderOfPath(const base::FilePath& path); |
Scott Hess - ex-Googler
2015/06/17 19:32:58
Should this assume db_path()?
[I was going to say
Elliot Glaysher
2015/06/17 21:59:35
Done.
|
+ |
+ // 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_ |