1# 2014 October 22 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# 12 13if {![info exists testdir]} { 14 set testdir [file join [file dirname [info script]] .. .. test] 15} 16source $testdir/tester.tcl 17source $testdir/malloc_common.tcl 18set ::testprefix rbufault2 19 20forcedelete rbu.db 21do_execsql_test 1.0 { 22 CREATE TABLE target(x UNIQUE, y, z, PRIMARY KEY(y)); 23 INSERT INTO target VALUES(1, 2, 3); 24 INSERT INTO target VALUES(4, 5, 6); 25 26 ATTACH 'rbu.db' AS rbu; 27 CREATE TABLE rbu.data_target(x, y, z, rbu_control); 28 INSERT INTO data_target VALUES(7, 8, 9, 0); 29 INSERT INTO data_target VALUES(1, 11, 12, 0); 30 DETACH rbu; 31} 32db close 33 34forcecopy test.db test.db-bak 35forcecopy rbu.db rbu.db-bak 36 37do_faultsim_test 1 -faults oom* -prep { 38 forcecopy test.db-bak test.db 39 forcecopy rbu.db-bak rbu.db 40 forcedelete test.db-oal test.db-wal rbu.db-journal 41 sqlite3rbu rbu test.db rbu.db 42} -body { 43 while {[rbu step]=="SQLITE_OK"} { } 44 rbu close 45} -test { 46 faultsim_test_result \ 47 {1 {SQLITE_CONSTRAINT - UNIQUE constraint failed: target.x}} \ 48 {1 SQLITE_CONSTRAINT} \ 49 {1 SQLITE_NOMEM} \ 50 {1 {SQLITE_NOMEM - unable to open a temporary database file for storing temporary tables}} \ 51 {1 {SQLITE_NOMEM - out of memory}} 52} 53 54 55sqlite3rbu_create_vfs -default rbu "" 56sqlite3 db test.db 57set ::vfsname [file_control_vfsname db] 58do_faultsim_test 2 -faults oom* -prep { 59} -body { 60 file_control_vfsname db 61} 62db close 63sqlite3rbu_destroy_vfs rbu 64 65 66finish_test 67