CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
tempfault.test135 linesDownload Raw Back to test
1# 2016 April 112#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 tests for fault-injection when SQLite is used with13# a temp file database.14#15 16set testdir [file dirname $argv0]17source $testdir/tester.tcl18source $testdir/malloc_common.tcl19set testprefix tempfault20 21# sqlite3_memdebug_vfs_oom_test 022 23do_faultsim_test 1 -faults * -prep {24  sqlite3 db ""25  db eval {26    PRAGMA page_size = 1024;27    CREATE TABLE t1(a, b);28    INSERT INTO t1 VALUES(1, 2);29    INSERT INTO t1 VALUES(3, 4);30  }31} -body {32  execsql { INSERT INTO t1 VALUES(5, 6) }33} -test {34  faultsim_test_result {0 {}}35  set rc [catch { execsql { SELECT * FROM t1 } } msg]36  if {$rc==0 && $msg != "1 2 3 4 5 6" && $msg != "1 2 3 4"} {37    error "data mismatch 1: $msg"38  }39  if {$testrc==0 && $msg != "1 2 3 4 5 6"} {40    error "data mismatch 2: $msg"41  }42  faultsim_integrity_check43}44 45do_faultsim_test 2 -faults * -prep {46  sqlite3 db ""47  db eval {48    PRAGMA page_size = 1024;49    PRAGMA cache_size = 10;50    CREATE TABLE t1(a, b);51    CREATE INDEX i1 ON t1(b, a);52    WITH x(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM x WHERE i<100)53    INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM x;54  }55} -body {56  execsql { UPDATE t1 SET a = randomblob(99) }57} -test {58  faultsim_test_result {0 {}}59  faultsim_integrity_check db60}61 62catch { db close }63do_faultsim_test 2.1 -faults * -prep {64  if {[info commands db]==""} {65    sqlite3 db ""66    execsql {67      PRAGMA page_size = 1024;68      PRAGMA cache_size = 10;69      CREATE TABLE t1(a, b);70      CREATE INDEX i1 ON t1(b, a);71      WITH x(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM x WHERE i<100)72          INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM x;73    }74  } 75} -body {76  execsql { UPDATE t1 SET a = randomblob(99) }77} -test {78  faultsim_test_result {0 {}}79  faultsim_integrity_check db80}81 82do_faultsim_test 3 -faults * -prep {83  sqlite3 db ""84  db eval {85    PRAGMA page_size = 1024;86    PRAGMA cache_size = 10;87    CREATE TABLE t1(a, b);88    CREATE INDEX i1 ON t1(b, a);89    WITH x(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM x WHERE i<50)90    INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM x;91  }92} -body {93  execsql { 94    BEGIN;95      UPDATE t1 SET a = randomblob(99);96      SAVEPOINT abc;97        UPDATE t1 SET a = randomblob(98) WHERE (rowid%10)==0;98      ROLLBACK TO abc;99        UPDATE t1 SET a = randomblob(97) WHERE (rowid%5)==0;100      ROLLBACK TO abc;101    COMMIT;102  }103} -test {104  faultsim_test_result {0 {}}105  faultsim_integrity_check db106}107 108do_faultsim_test 4 -faults * -prep {109  sqlite3 db ""110  db eval {111    PRAGMA page_size = 1024;112    PRAGMA cache_size = 10;113    CREATE TABLE t1(a, b);114    CREATE INDEX i1 ON t1(b, a);115    WITH x(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM x WHERE i<50)116    INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM x;117  }118} -body {119  execsql { 120    BEGIN;121      UPDATE t1 SET a = randomblob(99);122      SAVEPOINT abc;123        UPDATE t1 SET a = randomblob(98) WHERE (rowid%10)==0;124      ROLLBACK TO abc;125        UPDATE t1 SET a = randomblob(97) WHERE (rowid%5)==0;126      ROLLBACK TO abc;127    COMMIT;128  }129} -test {130  faultsim_test_result {0 {}}131}132 133sqlite3_memdebug_vfs_oom_test 1134finish_test135