diff options
| author | Hans-Christoph Steiner <hans@eds.org> | 2012-03-30 20:42:12 -0400 | 
|---|---|---|
| committer | Hans-Christoph Steiner <hans@eds.org> | 2012-03-30 20:42:12 -0400 | 
| commit | 7bb481fda9ecb134804b49c2ce77ca28f7eea583 (patch) | |
| tree | 31b520b9914d3e2453968abe375f2c102772c3dc /test/pagerfault2.test | |
Imported Upstream version 2.0.3
Diffstat (limited to 'test/pagerfault2.test')
| -rw-r--r-- | test/pagerfault2.test | 99 | 
1 files changed, 99 insertions, 0 deletions
| diff --git a/test/pagerfault2.test b/test/pagerfault2.test new file mode 100644 index 0000000..6cdb99a --- /dev/null +++ b/test/pagerfault2.test @@ -0,0 +1,99 @@ +# 2010 June 15 +# +# The author disclaims copyright to this source code.  In place of +# a legal notice, here is a blessing: +# +#    May you do good and not evil. +#    May you find forgiveness for yourself and forgive others. +#    May you share freely, never taking more than you give. +# +#*********************************************************************** +# +# The tests in this file test the pager modules response to various +# fault conditions (OOM, IO error, disk full etc.). They are similar +# to those in file pagerfault1.test.  +# +# More specifically, the tests in this file are those deemed too slow to  +# run as part of pagerfault1.test. +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +source $testdir/lock_common.tcl +source $testdir/malloc_common.tcl + +if {[permutation] == "inmemory_journal"} { +  finish_test +  return +} + +sqlite3_memdebug_vfs_oom_test 0 + +set a_string_counter 1 +proc a_string {n} { +  global a_string_counter +  incr a_string_counter +  string range [string repeat "${a_string_counter}." $n] 1 $n +} +db func a_string a_string + +do_test pagerfault2-1-pre1 { +  faultsim_delete_and_reopen +  db func a_string a_string +  execsql { +    PRAGMA auto_vacuum = 0; +    PRAGMA journal_mode = DELETE; +    PRAGMA page_size = 1024; +    CREATE TABLE t1(a, b); +    INSERT INTO t1 VALUES(a_string(401), a_string(402)); +  } +  for {set ii 0} {$ii < 13} {incr ii} { +    execsql { INSERT INTO t1 SELECT a_string(401), a_string(402) FROM t1 } +  } +  faultsim_save_and_close +  file size test.db +} [expr 1024 * 8268] + +do_faultsim_test pagerfault2-1 -faults oom-transient -prep { +  faultsim_restore_and_reopen +  sqlite3_db_config_lookaside db 0 256 4096 +  execsql {  +    BEGIN; +      SELECT * FROM t1; +      INSERT INTO t1 VALUES(5, 6); +      SAVEPOINT abc; +        UPDATE t1 SET a = a||'x' WHERE rowid<3700; +  } +} -body { +  execsql { UPDATE t1 SET a = a||'x' WHERE rowid>=3700 AND rowid<=4200 } +  execsql { ROLLBACK TO abc } +} -test { +  faultsim_test_result {0 {}} +} + +do_test pagerfault2-2-pre1 { +  faultsim_restore_and_reopen +  execsql { DELETE FROM t1 } +  faultsim_save_and_close +} {} + +do_faultsim_test pagerfault2-2 -faults oom-transient -prep { +  faultsim_restore_and_reopen +  sqlite3_db_config_lookaside db 0 256 4096 +  db func a_string a_string + +  execsql {  +    PRAGMA cache_size = 20; +    BEGIN; +      INSERT INTO t1 VALUES(a_string(401), a_string(402)); +      SAVEPOINT abc; +  } +} -body { +  execsql { INSERT INTO t1 VALUES (a_string(2000000), a_string(2500000)) } +} -test { +  faultsim_test_result {0 {}} +} + +sqlite3_memdebug_vfs_oom_test 1 +finish_test + | 
