CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
cffault.test159 linesDownload Raw Back to test
1# 2011 November 162#3# The author disclaims copyright to this source code.  In place of4# 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#12# This file contains fault-injection test cases for the 13# sqlite3_db_cacheflush API.14#15 16set testdir [file dirname $argv0]17source $testdir/tester.tcl18set testprefix cffault19source $testdir/malloc_common.tcl20 21# Run the supplied SQL on a copy of the database currently stored on 22# disk in file $dbfile.23proc diskquery {dbfile sql} {24  forcecopy $dbfile dq.db25  sqlite3 dq dq.db26  set res [execsql $sql dq]27  dq close28  set res29}30 31do_execsql_test 1.0 {32  CREATE TABLE t1(a PRIMARY KEY, b);33  CREATE INDEX i1 ON t1(b);34  INSERT INTO t1 VALUES(1, 2);35  INSERT INTO t1 VALUES(3, 4);36  INSERT INTO t1 VALUES(5, 6);37  INSERT INTO t1 VALUES(7, 8);38}39faultsim_save_and_close40 41do_faultsim_test 1.1 -prep {42  faultsim_restore_and_reopen43  db eval {44    BEGIN;45      UPDATE t1 SET b=b+1;46  }47} -body {48  sqlite3_db_cacheflush db49} -test {50  if {[sqlite3_get_autocommit db]} { error "Transaction rolled back!" }51  faultsim_test_result {0 {}} {1 {disk I/O error}}52  catch { db eval COMMIT }53  faultsim_integrity_check54}55 56do_faultsim_test 1.2 -prep {57  faultsim_restore_and_reopen58  db eval {59    BEGIN;60      UPDATE t1 SET b=b+1;61  }62} -body {63  set result [list]64  db eval { SELECT * FROM t1 } {65    if {$a==5} { catch { sqlite3_db_cacheflush db } }66    lappend result $a $b67  }68  set result69} -test {70  faultsim_test_result {0 {1 3 3 5 5 7 7 9}} {1 {disk I/O error}}71  catch { db eval COMMIT }72  faultsim_integrity_check73}74 75#-------------------------------------------------------------------------76reset_db77do_execsql_test 2.0 {78  CREATE TABLE t1(a PRIMARY KEY, b, c);79  CREATE INDEX i1 ON t1(b);80  CREATE INDEX i2 ON t1(c, b);81  INSERT INTO t1 VALUES(1, 2,  randomblob(600));82  INSERT INTO t1 VALUES(3, 4,  randomblob(600));83  INSERT INTO t1 VALUES(5, 6,  randomblob(600));84  INSERT INTO t1 VALUES(7, 8,  randomblob(600));85  INSERT INTO t1 VALUES(9, 10, randomblob(600));86}87faultsim_save_and_close88 89do_faultsim_test 2.1 -prep {90  faultsim_restore_and_reopen91  db eval {92    BEGIN;93      UPDATE t1 SET b=b+1;94  }95} -body {96  set result [list]97  db eval { SELECT * FROM t1 } {98    if {$a==5} { catch { sqlite3_db_cacheflush db } }99    lappend result $a $b100  }101  set result102} -test {103  faultsim_test_result {0 {1 3 3 5 5 7 7 9 9 11}} {1 {disk I/O error}}104  catch { db eval { INSERT INTO t1 VALUES(11, 12, randomblob(600)) } }105  catch { db eval COMMIT }106  faultsim_integrity_check107}108 109do_faultsim_test 2.2 -prep {110  faultsim_restore_and_reopen111  db eval {112    BEGIN;113      UPDATE t1 SET b=b+1;114  }115} -body {116  sqlite3_db_cacheflush db117} -test {118  if {[sqlite3_get_autocommit db]} { error "Transaction rolled back!" }119  faultsim_test_result {0 {}} {1 {disk I/O error}}120  catch { db eval { SELECT * FROM t1 } }121  catch { db eval COMMIT }122  faultsim_integrity_check123}124 125do_faultsim_test 2.3 -prep {126  faultsim_restore_and_reopen127  db eval {128    BEGIN;129      UPDATE t1 SET b=b-1;130  }131} -body {132  sqlite3_db_cacheflush db133} -test {134  if {[sqlite3_get_autocommit db]} { error "Transaction rolled back!" }135  faultsim_test_result {0 {}} {1 {disk I/O error}}136  catch { db eval { INSERT INTO t1 VALUES(11, 12, randomblob(600)) } }137  catch { db eval COMMIT }138  faultsim_integrity_check139}140 141do_faultsim_test 2.4 -prep {142  faultsim_restore_and_reopen143  db eval {144    BEGIN;145      UPDATE t1 SET b=b-1;146  }147} -body {148  catch { sqlite3_db_cacheflush db }149  catch { sqlite3_db_release_memory db }150  catch { sqlite3_db_cacheflush db }151  execsql { SELECT a, b FROM t1 }152} -test {153  faultsim_test_result {0 {1 1 3 3 5 5 7 7 9 9}} {1 {disk I/O error}}154  catchsql ROLLBACK155  faultsim_integrity_check156}157 158finish_test159