Annotation of embedaddon/sqlite3/test/diskfull.test, revision 1.1

1.1     ! misho       1: # 2001 October 12
        !             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 implements regression tests for SQLite library.  The
        !            12: # focus of this file is testing for correct handling of disk full
        !            13: # errors.
        !            14: # 
        !            15: # $Id: diskfull.test,v 1.8 2008/07/12 14:52:20 drh Exp $
        !            16: 
        !            17: set testdir [file dirname $argv0]
        !            18: source $testdir/tester.tcl
        !            19: 
        !            20: set sqlite_io_error_persist 0
        !            21: set sqlite_io_error_hit 0
        !            22: set sqlite_io_error_pending 0
        !            23: do_test diskfull-1.1 {
        !            24:   execsql {
        !            25:     CREATE TABLE t1(x);
        !            26:     INSERT INTO t1 VALUES(randstr(1000,1000));
        !            27:     INSERT INTO t1 SELECT * FROM t1;
        !            28:     INSERT INTO t1 SELECT * FROM t1;
        !            29:     INSERT INTO t1 SELECT * FROM t1;
        !            30:     INSERT INTO t1 SELECT * FROM t1;
        !            31:     CREATE INDEX t1i1 ON t1(x);
        !            32:     CREATE TABLE t2 AS SELECT x AS a, x AS b FROM t1;
        !            33:     CREATE INDEX t2i1 ON t2(b);
        !            34:   }
        !            35: } {}
        !            36: set sqlite_diskfull_pending 0
        !            37: integrity_check diskfull-1.2
        !            38: do_test diskfull-1.3 {
        !            39:   set sqlite_diskfull_pending 1
        !            40:   catchsql {
        !            41:     INSERT INTO t1 SELECT * FROM t1;
        !            42:   }
        !            43: } {1 {database or disk is full}}
        !            44: set sqlite_diskfull_pending 0
        !            45: integrity_check diskfull-1.4
        !            46: do_test diskfull-1.5 {
        !            47:   set sqlite_diskfull_pending 1
        !            48:   catchsql {
        !            49:     DELETE FROM t1;
        !            50:   }
        !            51: } {1 {database or disk is full}}
        !            52: set sqlite_diskfull_pending 0
        !            53: set sqlite_io_error_hit 0
        !            54: integrity_check diskfull-1.6
        !            55: 
        !            56: proc do_diskfull_test {prefix sql} {
        !            57:   set ::go 1
        !            58:   set ::sql $sql
        !            59:   set ::i 1
        !            60:   while {$::go} {
        !            61:     incr ::i
        !            62:     do_test ${prefix}.$::i.1 {
        !            63:       set ::sqlite_diskfull_pending $::i
        !            64:       set ::sqlite_diskfull 0
        !            65:       set r [catchsql $::sql]
        !            66:       if {!$::sqlite_diskfull} {
        !            67:         set r {1 {database or disk is full}}
        !            68:         set ::go 0
        !            69:       }
        !            70:       if {$r=="1 {disk I/O error}"} {
        !            71:         set r {1 {database or disk is full}}
        !            72:       }
        !            73:       set r
        !            74:     } {1 {database or disk is full}}
        !            75:     set ::sqlite_diskfull_pending 0
        !            76:     db close
        !            77:     sqlite3 db test.db
        !            78:     integrity_check ${prefix}.$::i.2
        !            79:   }
        !            80: }
        !            81: 
        !            82: do_diskfull_test diskfull-2 VACUUM
        !            83: 
        !            84: # db close
        !            85: # forcedelete test.db
        !            86: # forcedelete test.db-journal
        !            87: # sqlite3 db test.db
        !            88: # 
        !            89: # do_test diskfull-3.1 {
        !            90: #   execsql {
        !            91: #     PRAGMA default_cache_size = 10;
        !            92: #     CREATE TABLE t3(a, b, UNIQUE(a, b));
        !            93: #     INSERT INTO t3 VALUES( randstr(100, 100), randstr(100, 100) );
        !            94: #     INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3;
        !            95: #     INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3;
        !            96: #     INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3;
        !            97: #     INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3;
        !            98: #     INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3;
        !            99: #     INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3;
        !           100: #     INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3;
        !           101: #     UPDATE t3 
        !           102: #     SET b = (SELECT a FROM t3 WHERE rowid = (SELECT max(rowid)-1 FROM t3))
        !           103: #     WHERE rowid = (SELECT max(rowid) FROM t3);
        !           104: #     PRAGMA cache_size;
        !           105: #   }
        !           106: # } {10}
        !           107: # 
        !           108: # do_diskfull_test diskfull-3.2 {
        !           109: #   BEGIN;
        !           110: #     INSERT INTO t3 VALUES( randstr(100, 100), randstr(100, 100) );
        !           111: #     UPDATE t3 SET a = b;
        !           112: #   COMMIT;
        !           113: # }
        !           114: 
        !           115: finish_test

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