| Index: sql/recovery_unittest.cc
|
| diff --git a/sql/recovery_unittest.cc b/sql/recovery_unittest.cc
|
| index 80e03544d1f850b5302a47874da4509cb4c65354..111a610450a169923f2fab7165225f39b9a015f6 100644
|
| --- a/sql/recovery_unittest.cc
|
| +++ b/sql/recovery_unittest.cc
|
| @@ -805,6 +805,35 @@ TEST_F(SQLRecoveryTest, RecoverDatabase) {
|
| EXPECT_EQ("trailer", ExecuteWithResults(&db(), kVSql, "|", "\n"));
|
| }
|
|
|
| +// When RecoverDatabase() encounters SQLITE_NOTADB, the database is deleted.
|
| +TEST_F(SQLRecoveryTest, RecoverDatabaseDelete) {
|
| + // Create a valid database, then write junk over the header. This should lead
|
| + // to SQLITE_NOTADB, which will cause ATTACH to fail.
|
| + ASSERT_TRUE(db().Execute("CREATE TABLE x (t TEXT)"));
|
| + ASSERT_TRUE(db().Execute("INSERT INTO x VALUES ('This is a test')"));
|
| + db().Close();
|
| + WriteJunkToDatabase(SQLTestBase::TYPE_OVERWRITE);
|
| +
|
| + {
|
| + sql::test::ScopedErrorExpecter expecter;
|
| + expecter.ExpectError(SQLITE_NOTADB);
|
| +
|
| + // Reopen() here because it will see SQLITE_NOTADB.
|
| + ASSERT_TRUE(Reopen());
|
| +
|
| + // This should "recover" the database by making it valid, but empty.
|
| + sql::Recovery::RecoverDatabase(&db(), db_path());
|
| +
|
| + ASSERT_TRUE(expecter.SawExpectedErrors());
|
| + }
|
| +
|
| + // Recovery poisoned the handle, must re-open.
|
| + db().Close();
|
| + ASSERT_TRUE(Reopen());
|
| +
|
| + EXPECT_EQ("", GetSchema(&db()));
|
| +}
|
| +
|
| // Test histograms recorded when the invalid database cannot be attached.
|
| TEST_F(SQLRecoveryTest, AttachFailure) {
|
| // Create a valid database, then write junk over the header. This should lead
|
|
|