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 |