99 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # 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
 | 
