Fix a problem causing the recovery extension to use excessive memory and CPU time...
[sqlite.git] / test / fuzzerfault.test
blobe281cb592e6c0acd5dc400e032489e43e297b260
1 # 2012 February 21
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
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.
10 #***********************************************************************
11 # This file implements regression tests for TCL interface to the
12 # SQLite library. 
15 set testdir [file dirname $argv0]
16 source $testdir/tester.tcl
17 ifcapable !vtab { finish_test ; return }
18 set ::testprefix fuzzerfault
20 load_static_extension db fuzzer
22 do_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_close
30 } {}
31 do_faultsim_test 1 -prep {
32   faultsim_restore_and_reopen
33   load_static_extension db fuzzer
34 } -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}}
44 do_test 2-pre1 {
45   faultsim_delete_and_reopen
46   load_static_extension db fuzzer
47   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_close
55 } {}
57 do_faultsim_test 2 -prep {
58   faultsim_restore_and_reopen
59   load_static_extension db fuzzer
60 } -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}}
68 do_test 3-pre1 {
69   faultsim_delete_and_reopen
70   execsql {
71     CREATE TABLE x1_rules(ruleset, cFrom, cTo, cost);
72     INSERT INTO x1_rules VALUES(0, 'a', 
73       '123456789012345678901234567890a1234567890123456789', 10
74     );
75   }
76   faultsim_save_and_close
77 } {}
79 do_faultsim_test 3 -prep {
80   faultsim_restore_and_reopen
81   load_static_extension db fuzzer
82 } -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}}
91 #-------------------------------------------------------------------------
92 reset_db
93 do_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;
99 faultsim_save_and_close
101 do_faultsim_test 4 -faults oom-t* -prep {
102   faultsim_restore_and_reopen
103 } -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 {}} 
111 finish_test