Annotation of embedaddon/sqlite3/test/diskfull.test, revision 1.1.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>