Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Side by Side Diff: sql/recovery_unittest.cc

Issue 1757653002: [sqlite] sql::Recovery working under USE_SYSTEM_SQLITE. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@zzzzsql_ios_recover_review1
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 } 165 }
166 EXPECT_FALSE(db().is_open()); 166 EXPECT_FALSE(db().is_open());
167 ASSERT_TRUE(Reopen()); 167 ASSERT_TRUE(Reopen());
168 EXPECT_TRUE(db().is_open()); 168 EXPECT_TRUE(db().is_open());
169 ASSERT_EQ("CREATE TABLE x (t TEXT)", GetSchema(&db())); 169 ASSERT_EQ("CREATE TABLE x (t TEXT)", GetSchema(&db()));
170 170
171 ASSERT_EQ("This is a test", 171 ASSERT_EQ("This is a test",
172 ExecuteWithResults(&db(), kXSql, "|", "\n")); 172 ExecuteWithResults(&db(), kXSql, "|", "\n"));
173 } 173 }
174 174
175 // The recovery virtual table is only supported for Chromium's SQLite.
176 #if !defined(USE_SYSTEM_SQLITE)
177
178 // Test operation of the virtual table used by sql::Recovery. 175 // Test operation of the virtual table used by sql::Recovery.
179 TEST_F(SQLRecoveryTest, VirtualTable) { 176 TEST_F(SQLRecoveryTest, VirtualTable) {
180 const char kCreateSql[] = "CREATE TABLE x (t TEXT)"; 177 const char kCreateSql[] = "CREATE TABLE x (t TEXT)";
181 ASSERT_TRUE(db().Execute(kCreateSql)); 178 ASSERT_TRUE(db().Execute(kCreateSql));
182 ASSERT_TRUE(db().Execute("INSERT INTO x VALUES ('This is a test')")); 179 ASSERT_TRUE(db().Execute("INSERT INTO x VALUES ('This is a test')"));
183 ASSERT_TRUE(db().Execute("INSERT INTO x VALUES ('That was a test')")); 180 ASSERT_TRUE(db().Execute("INSERT INTO x VALUES ('That was a test')"));
184 181
185 // Successfully recover the database. 182 // Successfully recover the database.
186 { 183 {
187 scoped_ptr<sql::Recovery> recovery = sql::Recovery::Begin(&db(), db_path()); 184 scoped_ptr<sql::Recovery> recovery = sql::Recovery::Begin(&db(), db_path());
(...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after
707 ASSERT_TRUE(Reopen()); 704 ASSERT_TRUE(Reopen());
708 ASSERT_EQ(expected_schema, GetSchema(&db())); 705 ASSERT_EQ(expected_schema, GetSchema(&db()));
709 ASSERT_EQ(expected_data, ExecuteWithResults(&db(), kXSql, "|", "\n")); 706 ASSERT_EQ(expected_data, ExecuteWithResults(&db(), kXSql, "|", "\n"));
710 } 707 }
711 708
712 // Recover a golden file where an interior page has been manually modified so 709 // Recover a golden file where an interior page has been manually modified so
713 // that the number of cells is greater than will fit on a single page. This 710 // that the number of cells is greater than will fit on a single page. This
714 // case happened in <http://crbug.com/387868>. 711 // case happened in <http://crbug.com/387868>.
715 TEST_F(SQLRecoveryTest, Bug387868) { 712 TEST_F(SQLRecoveryTest, Bug387868) {
716 base::FilePath golden_path; 713 base::FilePath golden_path;
717 ASSERT_TRUE(PathService::Get(sql::test::DIR_TEST_DATA, &golden_path)); 714 ASSERT_TRUE(PathService::Get(sql::test::DIR_TEST_DATA, &golden_path));
Scott Hess - ex-Googler 2016/03/02 01:00:32 This is failing on iOS. I'm guessing something ab
Scott Hess - ex-Googler 2016/03/07 21:50:13 OK, I think this needs to be disabled. DIR_SOURCE
Scott Hess - ex-Googler 2016/03/07 23:11:15 OK, figured it out by poking around with base_unit
718 golden_path = golden_path.AppendASCII("recovery_387868"); 715 golden_path = golden_path.AppendASCII("recovery_387868");
719 db().Close(); 716 db().Close();
720 ASSERT_TRUE(base::CopyFile(golden_path, db_path())); 717 ASSERT_TRUE(base::CopyFile(golden_path, db_path()));
721 ASSERT_TRUE(Reopen()); 718 ASSERT_TRUE(Reopen());
722 719
723 { 720 {
724 scoped_ptr<sql::Recovery> recovery = sql::Recovery::Begin(&db(), db_path()); 721 scoped_ptr<sql::Recovery> recovery = sql::Recovery::Begin(&db(), db_path());
725 ASSERT_TRUE(recovery.get()); 722 ASSERT_TRUE(recovery.get());
726 723
727 // Create the new version of the table. 724 // Create the new version of the table.
728 const char kCreateSql[] = 725 const char kCreateSql[] =
729 "CREATE TABLE x (id INTEGER PRIMARY KEY, t0 TEXT)"; 726 "CREATE TABLE x (id INTEGER PRIMARY KEY, t0 TEXT)";
730 ASSERT_TRUE(recovery->db()->Execute(kCreateSql)); 727 ASSERT_TRUE(recovery->db()->Execute(kCreateSql));
731 728
732 size_t rows = 0; 729 size_t rows = 0;
733 EXPECT_TRUE(recovery->AutoRecoverTable("x", &rows)); 730 EXPECT_TRUE(recovery->AutoRecoverTable("x", &rows));
734 EXPECT_EQ(43u, rows); 731 EXPECT_EQ(43u, rows);
735 732
736 // Successfully recovered. 733 // Successfully recovered.
737 EXPECT_TRUE(sql::Recovery::Recovered(std::move(recovery))); 734 EXPECT_TRUE(sql::Recovery::Recovered(std::move(recovery)));
738 } 735 }
739 } 736 }
740 #endif // !defined(USE_SYSTEM_SQLITE)
741 737
742 // Memory-mapped I/O interacts poorly with I/O errors. Make sure the recovery 738 // Memory-mapped I/O interacts poorly with I/O errors. Make sure the recovery
743 // database doesn't accidentally enable it. 739 // database doesn't accidentally enable it.
744 TEST_F(SQLRecoveryTest, NoMmap) { 740 TEST_F(SQLRecoveryTest, NoMmap) {
745 scoped_ptr<sql::Recovery> recovery = sql::Recovery::Begin(&db(), db_path()); 741 scoped_ptr<sql::Recovery> recovery = sql::Recovery::Begin(&db(), db_path());
746 ASSERT_TRUE(recovery.get()); 742 ASSERT_TRUE(recovery.get());
747 743
748 // In the current implementation, the PRAGMA successfully runs with no result 744 // In the current implementation, the PRAGMA successfully runs with no result
749 // rows. Running with a single result of |0| is also acceptable. 745 // rows. Running with a single result of |0| is also acceptable.
750 sql::Statement s(recovery->db()->GetUniqueStatement("PRAGMA mmap_size")); 746 sql::Statement s(recovery->db()->GetUniqueStatement("PRAGMA mmap_size"));
751 EXPECT_TRUE(!s.Step() || !s.ColumnInt64(0)); 747 EXPECT_TRUE(!s.Step() || !s.ColumnInt64(0));
752 } 748 }
753 749
754 } // namespace 750 } // namespace
OLDNEW
« no previous file with comments | « sql/recovery.cc ('k') | third_party/sqlite/BUILD.gn » ('j') | third_party/sqlite/BUILD.gn » ('J')

Powered by Google App Engine
This is Rietveld 408576698