File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / test / crash6.test
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:04:16 2012 UTC (12 years, 10 months ago) by misho
Branches: sqlite3, MAIN
CVS tags: v3_7_10, HEAD
sqlite3

    1: # 2001 September 15
    2: #
    3: # The author disclaims copyright to this source code.  In place of
    4: # a legal notice, here is a blessing:
    5: #
    6: #    May you do good and not evil.
    7: #    May you find forgiveness for yourself and forgive others.
    8: #    May you share freely, never taking more than you give.
    9: #
   10: #***********************************************************************
   11: # This file tests that rollback journals for databases that use a 
   12: # page-size other than the default page-size can be rolled back Ok.
   13: #
   14: # $Id: crash6.test,v 1.1.1.1 2012/02/21 17:04:16 misho Exp $
   15: 
   16: set testdir [file dirname $argv0]
   17: source $testdir/tester.tcl
   18: 
   19: ifcapable !crashtest {
   20:   finish_test
   21:   return
   22: }
   23: 
   24: for {set ii 0} {$ii < 10} {incr ii} {
   25:   catch {db close}
   26:   forcedelete test.db test.db-journal
   27:   crashsql -delay 2 -file test.db {
   28:     PRAGMA auto_vacuum=OFF;
   29:     PRAGMA page_size=4096;
   30:     BEGIN;
   31:     CREATE TABLE abc AS SELECT 1 AS a, 2 AS b, 3 AS c;
   32:     COMMIT;
   33:     BEGIN;
   34:     CREATE TABLE def AS SELECT 1 AS d, 2 AS e, 3 AS f;
   35:     COMMIT;
   36:   }
   37:   sqlite3 db test.db
   38:   integrity_check crash6-1.$ii
   39: }
   40: 
   41: for {set ii 0} {$ii < 10} {incr ii} {
   42:   catch {db close}
   43:   forcedelete test.db test.db-journal
   44:   sqlite3 db test.db
   45:   execsql {
   46:     PRAGMA auto_vacuum=OFF;
   47:     PRAGMA page_size=2048;
   48:     BEGIN;
   49:     CREATE TABLE abc AS SELECT 1 AS a, 2 AS b, 3 AS c;
   50:     COMMIT;
   51:   }
   52:   db close
   53:   crashsql -delay 1 -file test.db {
   54:     INSERT INTO abc VALUES(5, 6, 7);
   55:   }
   56:   sqlite3 db test.db
   57:   integrity_check crash6-2.$ii
   58: }
   59: 
   60: proc signature {} {
   61:   return [db eval {SELECT count(*), md5sum(a), md5sum(b), md5sum(c) FROM abc}]
   62: }
   63: 
   64: # Test case for crashing during database sync with page-size values 
   65: # from 1024 to 8192.
   66: #
   67: for {set ii 0} {$ii < 30} {incr ii} {
   68:   db close
   69:   forcedelete test.db
   70:   sqlite3 db test.db
   71: 
   72:   set pagesize [expr 1024 << ($ii % 4)]
   73:   if {$pagesize>$::SQLITE_MAX_PAGE_SIZE} {
   74:     set pagesize $::SQLITE_MAX_PAGE_SIZE
   75:   }
   76:   do_test crash6-3.$ii.0 {
   77:     execsql "pragma page_size = $pagesize"
   78:     execsql "pragma page_size"
   79:   } $pagesize
   80: 
   81:   do_test crash6-3.$ii.1 {
   82:   
   83:     execsql BEGIN
   84:     execsql {CREATE TABLE abc(a, b, c)}
   85:     for {set n 0} {$n < 1000} {incr n} {
   86:       execsql "INSERT INTO abc VALUES($n, [expr 2*$n], [expr 3*$n])"
   87:     }
   88:     execsql {
   89:       INSERT INTO abc SELECT * FROM abc;
   90:       INSERT INTO abc SELECT * FROM abc;
   91:       INSERT INTO abc SELECT * FROM abc;
   92:       INSERT INTO abc SELECT * FROM abc;
   93:       INSERT INTO abc SELECT * FROM abc;
   94:     }
   95:     execsql COMMIT
   96:     expr ([file size test.db] / 1024) > 450
   97:   } {1}
   98: 
   99:   set sig [signature]
  100:   db close
  101: 
  102:   do_test crash6-3.$ii.2 {
  103:      crashsql -file test.db "
  104:        BEGIN;
  105:        SELECT random() FROM abc LIMIT $ii;
  106:        INSERT INTO abc SELECT randstr(10,10), 0, 0 FROM abc WHERE random()%2==0;
  107:        DELETE FROM abc WHERE random()%2!=0;
  108:        COMMIT;
  109:      "
  110:   } {1 {child process exited abnormally}}
  111: 
  112:   do_test crash6-3.$ii.3 {
  113:     sqlite3 db test.db
  114:     signature
  115:   } $sig
  116: } 
  117: 
  118: finish_test

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>