14965ebceSdan# 2012 February 21 24965ebceSdan# 34965ebceSdan# The author disclaims copyright to this source code. In place of 44965ebceSdan# a legal notice, here is a blessing: 54965ebceSdan# 64965ebceSdan# May you do good and not evil. 74965ebceSdan# May you find forgiveness for yourself and forgive others. 84965ebceSdan# May you share freely, never taking more than you give. 94965ebceSdan# 104965ebceSdan#*********************************************************************** 114965ebceSdan# This file implements regression tests for TCL interface to the 124965ebceSdan# SQLite library. 134965ebceSdan# 144965ebceSdan 154965ebceSdanset testdir [file dirname $argv0] 164965ebceSdansource $testdir/tester.tcl 174965ebceSdanifcapable !vtab { finish_test ; return } 184965ebceSdanset ::testprefix fuzzerfault 194965ebceSdan 20e50db1c5Sdrhload_static_extension db fuzzer 214965ebceSdan 224965ebceSdando_test 1-pre1 { 234965ebceSdan execsql { 244965ebceSdan CREATE TABLE x1_rules(ruleset, cFrom, cTo, cost); 254965ebceSdan INSERT INTO x1_rules VALUES(0, 'a', 'b', 1); 264965ebceSdan INSERT INTO x1_rules VALUES(0, 'a', 'c', 2); 274965ebceSdan INSERT INTO x1_rules VALUES(0, 'a', 'd', 3); 284965ebceSdan } 294965ebceSdan faultsim_save_and_close 304965ebceSdan} {} 3199c7d468Sdando_faultsim_test 1 -prep { 324965ebceSdan faultsim_restore_and_reopen 334eb9b721Smistachkin load_static_extension db fuzzer 344965ebceSdan} -body { 354965ebceSdan execsql { 364965ebceSdan CREATE VIRTUAL TABLE x1 USING fuzzer(x1_rules); 374965ebceSdan SELECT word FROM x1 WHERE word MATCH 'xax'; 384965ebceSdan } 394965ebceSdan} -test { 404965ebceSdan faultsim_test_result {0 {xax xbx xcx xdx}} \ 414965ebceSdan {1 {vtable constructor failed: x1}} 424965ebceSdan} 434965ebceSdan 4499c7d468Sdando_test 2-pre1 { 4599c7d468Sdan faultsim_delete_and_reopen 464eb9b721Smistachkin load_static_extension db fuzzer 4799c7d468Sdan execsql { 4899c7d468Sdan CREATE TABLE x2_rules(ruleset, cFrom, cTo, cost); 4999c7d468Sdan INSERT INTO x2_rules VALUES(0, 'a', 'x', 1); 5099c7d468Sdan INSERT INTO x2_rules VALUES(0, 'b', 'x', 2); 5199c7d468Sdan INSERT INTO x2_rules VALUES(0, 'c', 'x', 3); 5299c7d468Sdan CREATE VIRTUAL TABLE x2 USING fuzzer(x2_rules); 5399c7d468Sdan } 5499c7d468Sdan faultsim_save_and_close 5599c7d468Sdan} {} 5699c7d468Sdan 5799c7d468Sdando_faultsim_test 2 -prep { 5899c7d468Sdan faultsim_restore_and_reopen 594eb9b721Smistachkin load_static_extension db fuzzer 6099c7d468Sdan} -body { 6199c7d468Sdan execsql { 6299c7d468Sdan SELECT count(*) FROM x2 WHERE word MATCH 'abc'; 6399c7d468Sdan } 6499c7d468Sdan} -test { 6599c7d468Sdan faultsim_test_result {0 8} {1 {vtable constructor failed: x2}} 6699c7d468Sdan} 6799c7d468Sdan 6899c7d468Sdando_test 3-pre1 { 6999c7d468Sdan faultsim_delete_and_reopen 7099c7d468Sdan execsql { 7199c7d468Sdan CREATE TABLE x1_rules(ruleset, cFrom, cTo, cost); 7299c7d468Sdan INSERT INTO x1_rules VALUES(0, 'a', 7399c7d468Sdan '123456789012345678901234567890a1234567890123456789', 10 7499c7d468Sdan ); 7599c7d468Sdan } 7699c7d468Sdan faultsim_save_and_close 7799c7d468Sdan} {} 7899c7d468Sdan 7999c7d468Sdando_faultsim_test 3 -prep { 8099c7d468Sdan faultsim_restore_and_reopen 814eb9b721Smistachkin load_static_extension db fuzzer 8299c7d468Sdan} -body { 8399c7d468Sdan execsql { 8499c7d468Sdan CREATE VIRTUAL TABLE x1 USING fuzzer(x1_rules); 8599c7d468Sdan SELECT count(*) FROM (SELECT * FROM x1 WHERE word MATCH 'a' LIMIT 2); 8699c7d468Sdan } 8799c7d468Sdan} -test { 8899c7d468Sdan faultsim_test_result {0 2} {1 {vtable constructor failed: x1}} 8999c7d468Sdan} 904965ebceSdan 91*a3944bc4Sdan#------------------------------------------------------------------------- 92*a3944bc4Sdanreset_db 93*a3944bc4Sdando_execsql_test 4.0 { 94*a3944bc4Sdan CREATE TABLE t1_a(a INTEFDR PRIMARY KEY, b TEXT); 95*a3944bc4Sdan CREATE TABLE t3_a(k FnTEGER PRIMARY KEY, v TEXT); 96*a3944bc4Sdan CREATE TABLE t3_b(k INTEÀ5R PRIMARY KEY, v TEXT); 97*a3944bc4Sdan CREATE VIEW t3 AS SELECT * FROM t3_a UNION ALL SELECT * FROM t3_b; 98*a3944bc4Sdan} 99*a3944bc4Sdanfaultsim_save_and_close 100*a3944bc4Sdan 101*a3944bc4Sdando_faultsim_test 4 -faults oom-t* -prep { 102*a3944bc4Sdan faultsim_restore_and_reopen 103*a3944bc4Sdan} -body { 104*a3944bc4Sdan execsql { 105*a3944bc4Sdan SELECT 1 FROM t1_a LEFT JOIN t3 ON ((1+1) AND k=1) 106*a3944bc4Sdan } 107*a3944bc4Sdan} -test { 108*a3944bc4Sdan faultsim_test_result {0 {}} 109*a3944bc4Sdan} 1104965ebceSdan 1114965ebceSdanfinish_test 112