117 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
# 2008 March 20
 | 
						|
#
 | 
						|
# 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.
 | 
						|
#
 | 
						|
#***********************************************************************
 | 
						|
#
 | 
						|
# $Id: crash7.test,v 1.1 2008/04/03 14:36:26 danielk1977 Exp $
 | 
						|
 | 
						|
set testdir [file dirname $argv0]
 | 
						|
source $testdir/tester.tcl
 | 
						|
set testprefix crash7
 | 
						|
 | 
						|
ifcapable !crashtest {
 | 
						|
  finish_test
 | 
						|
  return
 | 
						|
}
 | 
						|
 | 
						|
proc signature {} {
 | 
						|
  return [db eval {SELECT count(*), md5sum(a), md5sum(b), md5sum(c) FROM abc}]
 | 
						|
}
 | 
						|
 | 
						|
foreach f [list test.db test.db-journal] {
 | 
						|
  for {set ii 1} {$ii < 64} {incr ii} {
 | 
						|
    db close
 | 
						|
    delete_file test.db
 | 
						|
    sqlite3 db test.db
 | 
						|
  
 | 
						|
    set from_size [expr 1024 << ($ii&3)]
 | 
						|
    set to_size   [expr 1024 << (($ii>>2)&3)]
 | 
						|
  
 | 
						|
    execsql "
 | 
						|
      PRAGMA page_size = $from_size;
 | 
						|
      BEGIN;
 | 
						|
      CREATE TABLE abc(a PRIMARY KEY, b, c);
 | 
						|
      INSERT INTO abc VALUES(randomblob(100), randomblob(200), randomblob(1000));
 | 
						|
      INSERT INTO abc 
 | 
						|
          SELECT randomblob(1000), randomblob(200), randomblob(100)
 | 
						|
          FROM abc;
 | 
						|
      INSERT INTO abc 
 | 
						|
          SELECT randomblob(100), randomblob(200), randomblob(1000)
 | 
						|
          FROM abc;
 | 
						|
      INSERT INTO abc 
 | 
						|
          SELECT randomblob(100), randomblob(200), randomblob(1000)
 | 
						|
          FROM abc;
 | 
						|
      INSERT INTO abc 
 | 
						|
          SELECT randomblob(100), randomblob(200), randomblob(1000)
 | 
						|
          FROM abc;
 | 
						|
      INSERT INTO abc 
 | 
						|
          SELECT randomblob(100), randomblob(200), randomblob(1000)
 | 
						|
          FROM abc WHERE [expr $ii&16];
 | 
						|
      INSERT INTO abc 
 | 
						|
          SELECT randomblob(25), randomblob(45), randomblob(9456)
 | 
						|
          FROM abc WHERE [expr $ii&32];
 | 
						|
      INSERT INTO abc 
 | 
						|
          SELECT randomblob(100), randomblob(200), randomblob(1000)
 | 
						|
          FROM abc WHERE [expr $ii&8];
 | 
						|
      INSERT INTO abc 
 | 
						|
          SELECT randomblob(25), randomblob(45), randomblob(9456)
 | 
						|
          FROM abc WHERE [expr $ii&4];
 | 
						|
      COMMIT;
 | 
						|
    "
 | 
						|
  
 | 
						|
    set sig [signature]
 | 
						|
    db close
 | 
						|
  
 | 
						|
    do_test crash7-1.$ii.crash {
 | 
						|
       crashsql -file $f "
 | 
						|
         PRAGMA page_size = $to_size;
 | 
						|
         VACUUM;
 | 
						|
       "
 | 
						|
    } {1 {child process exited abnormally}}
 | 
						|
  
 | 
						|
    sqlite3 db test.db
 | 
						|
    integrity_check crash7-1.$ii.integrity
 | 
						|
  } 
 | 
						|
}
 | 
						|
 | 
						|
db close
 | 
						|
forcedelete test.db
 | 
						|
sqlite3 db test.db
 | 
						|
do_execsql_test 2.0 {
 | 
						|
  CREATE TABLE t1(a, b, UNIQUE(a, b));
 | 
						|
  INSERT INTO t1 VALUES(randomblob(100), randomblob(100));
 | 
						|
  INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
 | 
						|
  INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
 | 
						|
  INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
 | 
						|
  INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
 | 
						|
  INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
 | 
						|
  INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
 | 
						|
  INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
 | 
						|
  INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
 | 
						|
  INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
 | 
						|
  INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
 | 
						|
  INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
 | 
						|
  INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
 | 
						|
  INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
 | 
						|
  INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
 | 
						|
  DELETE FROM t1 WHERE rowid%2;
 | 
						|
}
 | 
						|
db_save_and_close
 | 
						|
 | 
						|
for {set i 0} {$i < 20} {incr i} {
 | 
						|
  db_restore_and_reopen
 | 
						|
  do_test 2.[expr $i+1].1 {
 | 
						|
    crashsql -file test.db -seed $i {VACUUM}
 | 
						|
  } {1 {child process exited abnormally}}
 | 
						|
  do_execsql_test 2.[expr $i+1].2 { PRAGMA integrity_check } {ok}
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
finish_test
 |