/
niceSOFT
/
sqlite
Обзор
Документация
Войти
/
niceSOFT
/
sqlite
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
version-3.50.2
test/diskfull.test
115 строк
3 KB
mistachkin
Add retry logic for AV defense to winOpen. Also, refactor test suite to allow the key Tcl file operations (e.g. copy and delete) to be retried.
02 авг 2011, 04:57
02 авг 2011, 04:57
fda06be
Код
Авторство
О чём код?
# 2001 October 12 # # 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. # #*********************************************************************** # This file implements regression tests for SQLite library. The # focus of this file is testing for correct handling of disk full # errors. # # $Id: diskfull.test,v 1.8 2008/07/12 14:52:20 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl set sqlite_io_error_persist 0 set sqlite_io_error_hit 0 set sqlite_io_error_pending 0 do_test diskfull-1.1 { execsql { CREATE TABLE t1(x); INSERT INTO t1 VALUES(randstr(1000,1000)); INSERT INTO t1 SELECT * FROM t1; INSERT INTO t1 SELECT * FROM t1; INSERT INTO t1 SELECT * FROM t1; INSERT INTO t1 SELECT * FROM t1; CREATE INDEX t1i1 ON t1(x); CREATE TABLE t2 AS SELECT x AS a, x AS b FROM t1; CREATE INDEX t2i1 ON t2(b); } } {} set sqlite_diskfull_pending 0 integrity_check diskfull-1.2 do_test diskfull-1.3 { set sqlite_diskfull_pending 1 catchsql { INSERT INTO t1 SELECT * FROM t1; } } {1 {database or disk is full}} set sqlite_diskfull_pending 0 integrity_check diskfull-1.4 do_test diskfull-1.5 { set sqlite_diskfull_pending 1 catchsql { DELETE FROM t1; } } {1 {database or disk is full}} set sqlite_diskfull_pending 0 set sqlite_io_error_hit 0 integrity_check diskfull-1.6 proc do_diskfull_test {prefix sql} { set ::go 1 set ::sql $sql set ::i 1 while {$::go} { incr ::i do_test ${prefix}.$::i.1 { set ::sqlite_diskfull_pending $::i set ::sqlite_diskfull 0 set r [catchsql $::sql] if {!$::sqlite_diskfull} { set r {1 {database or disk is full}} set ::go 0 } if {$r=="1 {disk I/O error}"} { set r {1 {database or disk is full}} } set r } {1 {database or disk is full}} set ::sqlite_diskfull_pending 0 db close sqlite3 db test.db integrity_check ${prefix}.$::i.2 } } do_diskfull_test diskfull-2 VACUUM # db close # forcedelete test.db # forcedelete test.db-journal # sqlite3 db test.db # # do_test diskfull-3.1 { # execsql { # PRAGMA default_cache_size = 10; # CREATE TABLE t3(a, b, UNIQUE(a, b)); # INSERT INTO t3 VALUES( randstr(100, 100), randstr(100, 100) ); # INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3; # INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3; # INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3; # INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3; # INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3; # INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3; # INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3; # UPDATE t3 # SET b = (SELECT a FROM t3 WHERE rowid = (SELECT max(rowid)-1 FROM t3)) # WHERE rowid = (SELECT max(rowid) FROM t3); # PRAGMA cache_size; # } # } {10} # # do_diskfull_test diskfull-3.2 { # BEGIN; # INSERT INTO t3 VALUES( randstr(100, 100), randstr(100, 100) ); # UPDATE t3 SET a = b; # COMMIT; # } finish_test