OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "sql/recovery.h" | 5 #include "sql/recovery.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <string> | 10 #include <string> |
11 #include <utility> | 11 #include <utility> |
12 | 12 |
13 #include "base/bind.h" | 13 #include "base/bind.h" |
14 #include "base/files/file_path.h" | 14 #include "base/files/file_path.h" |
15 #include "base/files/file_util.h" | 15 #include "base/files/file_util.h" |
16 #include "base/files/scoped_temp_dir.h" | 16 #include "base/files/scoped_temp_dir.h" |
17 #include "base/path_service.h" | 17 #include "base/path_service.h" |
18 #include "base/strings/string_number_conversions.h" | 18 #include "base/strings/string_number_conversions.h" |
19 #include "sql/connection.h" | 19 #include "sql/connection.h" |
20 #include "sql/meta_table.h" | 20 #include "sql/meta_table.h" |
21 #include "sql/statement.h" | 21 #include "sql/statement.h" |
22 #include "sql/test/paths.h" | 22 #include "sql/test/paths.h" |
23 #include "sql/test/scoped_error_ignorer.h" | 23 #include "sql/test/scoped_error_expecter.h" |
24 #include "sql/test/sql_test_base.h" | 24 #include "sql/test/sql_test_base.h" |
25 #include "sql/test/test_helpers.h" | 25 #include "sql/test/test_helpers.h" |
26 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
27 #include "third_party/sqlite/sqlite3.h" | 27 #include "third_party/sqlite/sqlite3.h" |
28 | 28 |
29 namespace { | 29 namespace { |
30 | 30 |
31 // Execute |sql|, and stringify the results with |column_sep| between | 31 // Execute |sql|, and stringify the results with |column_sep| between |
32 // columns and |row_sep| between rows. | 32 // columns and |row_sep| between rows. |
33 // TODO(shess): Promote this to a central testing helper. | 33 // TODO(shess): Promote this to a central testing helper. |
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
415 EXPECT_FALSE(recovery->GetMetaVersionNumber(&version)); | 415 EXPECT_FALSE(recovery->GetMetaVersionNumber(&version)); |
416 EXPECT_EQ(0, version); | 416 EXPECT_EQ(0, version); |
417 | 417 |
418 sql::Recovery::Rollback(std::move(recovery)); | 418 sql::Recovery::Rollback(std::move(recovery)); |
419 } | 419 } |
420 ASSERT_TRUE(Reopen()); // Handle was poisoned. | 420 ASSERT_TRUE(Reopen()); // Handle was poisoned. |
421 | 421 |
422 // Test meta table missing. | 422 // Test meta table missing. |
423 EXPECT_TRUE(db().Execute("DROP TABLE meta")); | 423 EXPECT_TRUE(db().Execute("DROP TABLE meta")); |
424 { | 424 { |
425 sql::ScopedErrorIgnorer ignore_errors; | 425 sql::test::ScopedErrorExpecter expecter; |
426 ignore_errors.IgnoreError(SQLITE_CORRUPT); // From virtual table. | 426 expecter.ExpectError(SQLITE_CORRUPT); // From virtual table. |
427 std::unique_ptr<sql::Recovery> recovery = | 427 std::unique_ptr<sql::Recovery> recovery = |
428 sql::Recovery::Begin(&db(), db_path()); | 428 sql::Recovery::Begin(&db(), db_path()); |
429 EXPECT_FALSE(recovery->SetupMeta()); | 429 EXPECT_FALSE(recovery->SetupMeta()); |
430 ASSERT_TRUE(ignore_errors.CheckIgnoredErrors()); | 430 ASSERT_TRUE(expecter.SawExpectedErrors()); |
431 } | 431 } |
432 } | 432 } |
433 | 433 |
434 // Baseline AutoRecoverTable() test. | 434 // Baseline AutoRecoverTable() test. |
435 TEST_F(SQLRecoveryTest, AutoRecoverTable) { | 435 TEST_F(SQLRecoveryTest, AutoRecoverTable) { |
436 // BIGINT and VARCHAR to test type affinity. | 436 // BIGINT and VARCHAR to test type affinity. |
437 const char kCreateSql[] = "CREATE TABLE x (id BIGINT, t TEXT, v VARCHAR)"; | 437 const char kCreateSql[] = "CREATE TABLE x (id BIGINT, t TEXT, v VARCHAR)"; |
438 ASSERT_TRUE(db().Execute(kCreateSql)); | 438 ASSERT_TRUE(db().Execute(kCreateSql)); |
439 ASSERT_TRUE(db().Execute("INSERT INTO x VALUES (11, 'This is', 'a test')")); | 439 ASSERT_TRUE(db().Execute("INSERT INTO x VALUES (11, 'This is', 'a test')")); |
440 ASSERT_TRUE(db().Execute("INSERT INTO x VALUES (5, 'That was', 'a test')")); | 440 ASSERT_TRUE(db().Execute("INSERT INTO x VALUES (5, 'That was', 'a test')")); |
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
761 sql::Recovery::Begin(&db(), db_path()); | 761 sql::Recovery::Begin(&db(), db_path()); |
762 ASSERT_TRUE(recovery.get()); | 762 ASSERT_TRUE(recovery.get()); |
763 | 763 |
764 // In the current implementation, the PRAGMA successfully runs with no result | 764 // In the current implementation, the PRAGMA successfully runs with no result |
765 // rows. Running with a single result of |0| is also acceptable. | 765 // rows. Running with a single result of |0| is also acceptable. |
766 sql::Statement s(recovery->db()->GetUniqueStatement("PRAGMA mmap_size")); | 766 sql::Statement s(recovery->db()->GetUniqueStatement("PRAGMA mmap_size")); |
767 EXPECT_TRUE(!s.Step() || !s.ColumnInt64(0)); | 767 EXPECT_TRUE(!s.Step() || !s.ColumnInt64(0)); |
768 } | 768 } |
769 | 769 |
770 } // namespace | 770 } // namespace |
OLD | NEW |