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.4 2007/03/15 12:51:17 drh Exp $ 16 17set testdir [file dirname $argv0] 18source $testdir/tester.tcl 19 20set sqlite_io_error_persist 0 21set sqlite_io_error_hit 0 22set sqlite_io_error_pending 0 23do_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} {} 36set sqlite_diskfull_pending 0 37integrity_check diskfull-1.2 38do_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}} 44set sqlite_diskfull_pending 0 45integrity_check diskfull-1.4 46do_test diskfull-1.5 { 47 set sqlite_diskfull_pending 1 48 catchsql { 49 DELETE FROM t1; 50 } 51} {1 {database or disk is full}} 52set sqlite_diskfull_pending 0 53set sqlite_io_error_hit 0 54integrity_check diskfull-1.6 55 56set go 1 57set i 0 58while {$go} { 59 incr i 60 do_test diskfull-2.$i.1 { 61 set sqlite_diskfull_pending $i 62 set sqlite_diskfull 0 63 set r [catchsql {VACUUM}] 64 if {!$sqlite_diskfull} { 65 set r {1 {database or disk is full}} 66 set go 0 67 } 68 if {$r=="1 {disk I/O error}"} { 69 set r {1 {database or disk is full}} 70 } 71 set r 72 } {1 {database or disk is full}} 73 set sqlite_diskfull_pending 0 74 db close 75 sqlite3 db test.db 76 integrity_check diskfull-2.$i.2 77} 78 79finish_test 80