AryaWu/sqlite
0
1# 2012 February 212#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# This file implements regression tests for TCL interface to the12# SQLite library. 13#14 15set testdir [file dirname $argv0]16source $testdir/tester.tcl17ifcapable !vtab { finish_test ; return }18set ::testprefix fuzzerfault19 20load_static_extension db fuzzer21 22do_test 1-pre1 {23 execsql {24 CREATE TABLE x1_rules(ruleset, cFrom, cTo, cost);25 INSERT INTO x1_rules VALUES(0, 'a', 'b', 1);26 INSERT INTO x1_rules VALUES(0, 'a', 'c', 2);27 INSERT INTO x1_rules VALUES(0, 'a', 'd', 3);28 }29 faultsim_save_and_close30} {}31do_faultsim_test 1 -prep {32 faultsim_restore_and_reopen33 load_static_extension db fuzzer34} -body {35 execsql { 36 CREATE VIRTUAL TABLE x1 USING fuzzer(x1_rules);37 SELECT word FROM x1 WHERE word MATCH 'xax';38 }39} -test {40 faultsim_test_result {0 {xax xbx xcx xdx}} \41 {1 {vtable constructor failed: x1}}42}43 44do_test 2-pre1 {45 faultsim_delete_and_reopen46 load_static_extension db fuzzer47 execsql {48 CREATE TABLE x2_rules(ruleset, cFrom, cTo, cost);49 INSERT INTO x2_rules VALUES(0, 'a', 'x', 1);50 INSERT INTO x2_rules VALUES(0, 'b', 'x', 2);51 INSERT INTO x2_rules VALUES(0, 'c', 'x', 3);52 CREATE VIRTUAL TABLE x2 USING fuzzer(x2_rules);53 }54 faultsim_save_and_close55} {}56 57do_faultsim_test 2 -prep {58 faultsim_restore_and_reopen59 load_static_extension db fuzzer60} -body {61 execsql { 62 SELECT count(*) FROM x2 WHERE word MATCH 'abc';63 }64} -test {65 faultsim_test_result {0 8} {1 {vtable constructor failed: x2}}66}67 68do_test 3-pre1 {69 faultsim_delete_and_reopen70 execsql {71 CREATE TABLE x1_rules(ruleset, cFrom, cTo, cost);72 INSERT INTO x1_rules VALUES(0, 'a', 73 '123456789012345678901234567890a1234567890123456789', 1074 );75 }76 faultsim_save_and_close77} {}78 79do_faultsim_test 3 -prep {80 faultsim_restore_and_reopen81 load_static_extension db fuzzer82} -body {83 execsql { 84 CREATE VIRTUAL TABLE x1 USING fuzzer(x1_rules);85 SELECT count(*) FROM (SELECT * FROM x1 WHERE word MATCH 'a' LIMIT 2);86 }87} -test {88 faultsim_test_result {0 2} {1 {vtable constructor failed: x1}}89}90 91#-------------------------------------------------------------------------92reset_db93do_execsql_test 4.0 {94 CREATE TABLE t1_a(a INTEFDR PRIMARY KEY, b TEXT);95 CREATE TABLE t3_a(k FnTEGER PRIMARY KEY, v TEXT);96 CREATE TABLE t3_b(k INTEÀ5R PRIMARY KEY, v TEXT);97 CREATE VIEW t3 AS SELECT * FROM t3_a UNION ALL SELECT * FROM t3_b;98}99faultsim_save_and_close100 101do_faultsim_test 4 -faults oom-t* -prep {102 faultsim_restore_and_reopen103} -body {104 execsql { 105 SELECT 1 FROM t1_a LEFT JOIN t3 ON ((1+1) AND k=1)106 }107} -test {108 faultsim_test_result {0 {}} 109}110 111finish_test112 