| Index: third_party/sqlite/src/test/snapshot_fault.test
|
| diff --git a/third_party/sqlite/src/test/snapshot_fault.test b/third_party/sqlite/src/test/snapshot_fault.test
|
| index 3ac13daefd42400fb7060b7ad49562dfac45c27f..5c6cf40a6f1d19ab4f7e66875dcc1543a6cb03c5 100644
|
| --- a/third_party/sqlite/src/test/snapshot_fault.test
|
| +++ b/third_party/sqlite/src/test/snapshot_fault.test
|
| @@ -146,7 +146,7 @@ do_faultsim_test 3.0 -prep {
|
| error $msg
|
| }
|
| } -test {
|
| - faultsim_test_result {0 {}} {1 SQLITE_IOERR} \
|
| + faultsim_test_result {0 {}} {1 SQLITE_IOERR} {1 SQLITE_NOMEM} \
|
| {1 SQLITE_IOERR_NOMEM} {1 SQLITE_IOERR_READ}
|
| if {$testrc==0} {
|
| set res [db eval {
|
| @@ -159,6 +159,68 @@ do_faultsim_test 3.0 -prep {
|
| sqlite3_snapshot_free $::snapshot
|
| }
|
|
|
| +#-------------------------------------------------------------------------
|
| +# Test the handling of faults that occur within sqlite3_snapshot_recover().
|
| +#
|
| +reset_db
|
| +do_execsql_test 4.0 {
|
| + PRAGMA journal_mode = wal;
|
| + CREATE TABLE t1(zzz);
|
| + INSERT INTO t1 VALUES('abc');
|
| + INSERT INTO t1 VALUES('def');
|
| +} {wal}
|
| +faultsim_save_and_close
|
| +
|
| +do_test 4.0.1 {
|
| + faultsim_restore_and_reopen
|
| + db eval { SELECT * FROM sqlite_master }
|
| + sqlite3_snapshot_recover db main
|
| +} {}
|
| +db close
|
| +
|
| +do_faultsim_test 4.0 -faults oom* -prep {
|
| + faultsim_restore_and_reopen
|
| + db eval { SELECT * FROM sqlite_master }
|
| +} -body {
|
| + sqlite3_snapshot_recover db main
|
| +} -test {
|
| + faultsim_test_result {0 {}} {1 SQLITE_NOMEM} {1 SQLITE_IOERR_NOMEM}
|
| +}
|
| +
|
| +# The following test cases contrive to call sqlite3_snapshot_recover()
|
| +# before all pages of the *-shm file have been mapped. This tests an
|
| +# extra branch of error handling logic in snapshot_recover().
|
| +#
|
| +reset_db
|
| +do_execsql_test 4.1.0 {
|
| + PRAGMA page_size = 512;
|
| + PRAGMA journal_mode = wal;
|
| + PRAGMA wal_autocheckpoint = 0;
|
| + CREATE TABLE t1(zzz);
|
| + INSERT INTO t1 VALUES(randomblob( 500 * 9500 ));
|
| + PRAGMA user_version = 211;
|
| +} {wal 0}
|
| +
|
| +do_test 4.1.1 {
|
| + list [file size test.db-shm] [file size test.db]
|
| +} {98304 512}
|
| +
|
| +faultsim_save_and_close
|
| +do_faultsim_test 4.1 -faults shm* -prep {
|
| + catch { db2 close }
|
| + catch { db close }
|
| + faultsim_restore_and_reopen
|
| + sqlite3 db2 test.db
|
| + db2 eval { SELECT * FROM sqlite_master }
|
| + db eval BEGIN
|
| + sqlite3_snapshot_get_blob db main
|
| + db eval COMMIT
|
| +} -body {
|
| + sqlite3_snapshot_recover db main
|
| +} -test {
|
| + faultsim_test_result {0 {}} {1 SQLITE_IOERR}
|
| +}
|
| +
|
|
|
|
|
| finish_test
|
|
|