| Index: sql/recovery_unittest.cc
|
| diff --git a/sql/recovery_unittest.cc b/sql/recovery_unittest.cc
|
| index ce3884bbc08013e3936a6784d606369c72400bce..201966d0811eed7a999ccb2af1615d7dbbf19f3c 100644
|
| --- a/sql/recovery_unittest.cc
|
| +++ b/sql/recovery_unittest.cc
|
| @@ -5,13 +5,16 @@
|
| #include <string>
|
|
|
| #include "base/bind.h"
|
| +#include "base/file_util.h"
|
| #include "base/files/file_path.h"
|
| #include "base/files/scoped_temp_dir.h"
|
| +#include "base/path_service.h"
|
| #include "base/strings/string_number_conversions.h"
|
| #include "sql/connection.h"
|
| #include "sql/meta_table.h"
|
| #include "sql/recovery.h"
|
| #include "sql/statement.h"
|
| +#include "sql/test/paths.h"
|
| #include "sql/test/scoped_error_ignorer.h"
|
| #include "sql/test/test_helpers.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| @@ -683,6 +686,35 @@ TEST_F(SQLRecoveryTest, AutoRecoverTableExtendColumns) {
|
| ASSERT_EQ(orig_schema, GetSchema(&db()));
|
| ASSERT_EQ(orig_data, ExecuteWithResults(&db(), kXSql, "|", "\n"));
|
| }
|
| +
|
| +// Recover a golden file where an interior page has been manually modified so
|
| +// that the number of cells is greater than will fit on a single page. This
|
| +// case happened in <http://crbug.com/387868>.
|
| +TEST_F(SQLRecoveryTest, Bug387868) {
|
| + base::FilePath golden_path;
|
| + ASSERT_TRUE(PathService::Get(sql::test::DIR_TEST_DATA, &golden_path));
|
| + golden_path = golden_path.AppendASCII("recovery_387868");
|
| + db().Close();
|
| + ASSERT_TRUE(base::CopyFile(golden_path, db_path()));
|
| + ASSERT_TRUE(Reopen());
|
| +
|
| + {
|
| + scoped_ptr<sql::Recovery> recovery = sql::Recovery::Begin(&db(), db_path());
|
| + ASSERT_TRUE(recovery.get());
|
| +
|
| + // Create the new version of the table.
|
| + const char kCreateSql[] =
|
| + "CREATE TABLE x (id INTEGER PRIMARY KEY, t0 TEXT)";
|
| + ASSERT_TRUE(recovery->db()->Execute(kCreateSql));
|
| +
|
| + size_t rows = 0;
|
| + EXPECT_TRUE(recovery->AutoRecoverTable("x", 0, &rows));
|
| + EXPECT_EQ(43u, rows);
|
| +
|
| + // Successfully recovered.
|
| + EXPECT_TRUE(sql::Recovery::Recovered(recovery.Pass()));
|
| + }
|
| +}
|
| #endif // !defined(USE_SYSTEM_SQLITE)
|
|
|
| } // namespace
|
|
|