1273f3f0dSdan# 2010 June 15 2273f3f0dSdan# 3273f3f0dSdan# The author disclaims copyright to this source code. In place of 4273f3f0dSdan# a legal notice, here is a blessing: 5273f3f0dSdan# 6273f3f0dSdan# May you do good and not evil. 7273f3f0dSdan# May you find forgiveness for yourself and forgive others. 8273f3f0dSdan# May you share freely, never taking more than you give. 9273f3f0dSdan# 10273f3f0dSdan#*********************************************************************** 11273f3f0dSdan# 12273f3f0dSdan# The tests in this file test the pager modules response to various 13273f3f0dSdan# fault conditions (OOM, IO error, disk full etc.). They are similar 14273f3f0dSdan# to those in file pagerfault1.test. 15273f3f0dSdan# 16273f3f0dSdan# More specifically, the tests in this file are those deemed too slow to 17273f3f0dSdan# run as part of pagerfault1.test. 18273f3f0dSdan# 19273f3f0dSdan 20273f3f0dSdanset testdir [file dirname $argv0] 21273f3f0dSdansource $testdir/tester.tcl 22273f3f0dSdansource $testdir/lock_common.tcl 23273f3f0dSdansource $testdir/malloc_common.tcl 24273f3f0dSdan 25*b3f4351fSdanif {[permutation] == "inmemory_journal"} { 26*b3f4351fSdan finish_test 27*b3f4351fSdan return 28*b3f4351fSdan} 29*b3f4351fSdan 30c396d4afSdansqlite3_memdebug_vfs_oom_test 0 31c396d4afSdan 32273f3f0dSdanset a_string_counter 1 33273f3f0dSdanproc a_string {n} { 34273f3f0dSdan global a_string_counter 35273f3f0dSdan incr a_string_counter 36273f3f0dSdan string range [string repeat "${a_string_counter}." $n] 1 $n 37273f3f0dSdan} 38273f3f0dSdandb func a_string a_string 39273f3f0dSdan 40273f3f0dSdando_test pagerfault2-1-pre1 { 41273f3f0dSdan faultsim_delete_and_reopen 42273f3f0dSdan db func a_string a_string 43273f3f0dSdan execsql { 44f43d7fceSdan PRAGMA auto_vacuum = 0; 45273f3f0dSdan PRAGMA journal_mode = DELETE; 46c396d4afSdan PRAGMA page_size = 1024; 47273f3f0dSdan CREATE TABLE t1(a, b); 48273f3f0dSdan INSERT INTO t1 VALUES(a_string(401), a_string(402)); 49273f3f0dSdan } 50c396d4afSdan for {set ii 0} {$ii < 13} {incr ii} { 51273f3f0dSdan execsql { INSERT INTO t1 SELECT a_string(401), a_string(402) FROM t1 } 52273f3f0dSdan } 53273f3f0dSdan faultsim_save_and_close 54c396d4afSdan file size test.db 55c396d4afSdan} [expr 1024 * 8268] 56c396d4afSdan 57c396d4afSdando_faultsim_test pagerfault2-1 -faults oom-transient -prep { 58273f3f0dSdan faultsim_restore_and_reopen 59c396d4afSdan sqlite3_db_config_lookaside db 0 256 4096 60273f3f0dSdan execsql { 61273f3f0dSdan BEGIN; 62c396d4afSdan SELECT * FROM t1; 63273f3f0dSdan INSERT INTO t1 VALUES(5, 6); 64273f3f0dSdan SAVEPOINT abc; 65c396d4afSdan UPDATE t1 SET a = a||'x' WHERE rowid<3700; 66273f3f0dSdan } 67273f3f0dSdan} -body { 68c396d4afSdan execsql { UPDATE t1 SET a = a||'x' WHERE rowid>=3700 AND rowid<=4200 } 69273f3f0dSdan execsql { ROLLBACK TO abc } 70273f3f0dSdan} -test { 71273f3f0dSdan faultsim_test_result {0 {}} 72273f3f0dSdan} 73273f3f0dSdan 74c396d4afSdando_test pagerfault2-2-pre1 { 75c396d4afSdan faultsim_restore_and_reopen 76c396d4afSdan execsql { DELETE FROM t1 } 77c396d4afSdan faultsim_save_and_close 78c396d4afSdan} {} 79c396d4afSdan 80c396d4afSdando_faultsim_test pagerfault2-2 -faults oom-transient -prep { 81c396d4afSdan faultsim_restore_and_reopen 82c396d4afSdan sqlite3_db_config_lookaside db 0 256 4096 83c396d4afSdan db func a_string a_string 84c396d4afSdan 85c396d4afSdan execsql { 86c396d4afSdan PRAGMA cache_size = 20; 87c396d4afSdan BEGIN; 88c396d4afSdan INSERT INTO t1 VALUES(a_string(401), a_string(402)); 89c396d4afSdan SAVEPOINT abc; 90c396d4afSdan } 91c396d4afSdan} -body { 92c396d4afSdan execsql { INSERT INTO t1 VALUES (a_string(2000000), a_string(2500000)) } 93c396d4afSdan} -test { 94c396d4afSdan faultsim_test_result {0 {}} 95c396d4afSdan} 96c396d4afSdan 97c396d4afSdansqlite3_memdebug_vfs_oom_test 1 98273f3f0dSdanfinish_test 99