From: danielk1977 Date: Fri, 19 Dec 2008 18:45:52 +0000 (+0000) Subject: Add extra crash test cases that stress the savepoint mechanism to savepoint4.test... X-Git-Tag: version-3.6.10~140 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=47e23024b1b0eea2dab090f083c10a8f6440f5e3;p=thirdparty%2Fsqlite.git Add extra crash test cases that stress the savepoint mechanism to savepoint4.test. Currently, these tests are causing database corruption which (obviously) needs to be fixed. (CVS 6044) FossilOrigin-Name: e06a968aa5b17ce12ea179b36a99ad74d274fd2c --- diff --git a/manifest b/manifest index 1f2b42f904..3b47a6f3d2 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\ssome\scrash-tests\sfor\ssavepoint.\sFix\sa\sbug\srevealed\sby\sthese\stests.\s(CVS\s6043) -D 2008-12-19T16:31:11 +C Add\sextra\scrash\stest\scases\sthat\sstress\sthe\ssavepoint\smechanism\sto\ssavepoint4.test.\sCurrently,\sthese\stests\sare\scausing\sdatabase\scorruption\swhich\s(obviously)\sneeds\sto\sbe\sfixed.\s(CVS\s6044) +D 2008-12-19T18:45:53 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in f7e4c81c347b04f7b0f1c1b081a168645d7b8af7 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -494,7 +494,7 @@ F test/safety.test b69e2b2dd5d52a3f78e216967086884bbc1a09c6 F test/savepoint.test 24b7d67971c0b7a8d22ba1cabbfd846e72f21594 F test/savepoint2.test 65fed3f179cff053e0a75864b1afc13e100fce1f F test/savepoint3.test b3c9aa5af3f777ccb8b9e15597c75c93eb5bc369 -F test/savepoint4.test 327937672df4511d8a61fd20fd6f21661119a45b +F test/savepoint4.test 1dfe4e6a089a44e50bdfaa5a723603d0973eb1a8 F test/schema.test a8b000723375fd42c68d310091bdbd744fde647c F test/schema2.test 35e1c9696443d6694c8980c411497c2b5190d32e F test/select1.test d0a4cad954fd41c030ec16ffbd2d08a4c0548742 @@ -683,7 +683,7 @@ F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81 F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e -P ed81ad5a5d22304a4d96e778e8e9094f74c461c0 -R 8635252259ed45c0604b104373f9fbca +P 6f36c16678b6e3baa5a9d9ceba1a756a8034f3e1 +R 2a5a11863cbc6dc85f1a72ca45278583 U danielk1977 -Z 13ba02f495748ab97267c0a69d578609 +Z f91b2e50bc859a782a332b4d8be666cb diff --git a/manifest.uuid b/manifest.uuid index fc7ec4e231..301575622d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6f36c16678b6e3baa5a9d9ceba1a756a8034f3e1 \ No newline at end of file +e06a968aa5b17ce12ea179b36a99ad74d274fd2c \ No newline at end of file diff --git a/test/savepoint4.test b/test/savepoint4.test index ebb3786220..dd84dcb7f6 100644 --- a/test/savepoint4.test +++ b/test/savepoint4.test @@ -9,69 +9,153 @@ # #*********************************************************************** # -# $Id: savepoint4.test,v 1.1 2008/12/19 16:31:12 danielk1977 Exp $ +# $Id: savepoint4.test,v 1.2 2008/12/19 18:45:53 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl proc signature {} { - return [db eval {SELECT count(*), md5sum(x) FROM t3}] + return [db eval {SELECT count(*), md5sum(x) FROM t1}] } +set ITERATIONS 3 + expr srand(0) do_test savepoint4-1 { execsql { PRAGMA cache_size=10; BEGIN; - CREATE TABLE t3(x TEXT); - INSERT INTO t3 VALUES(randstr(10,400)); - INSERT INTO t3 VALUES(randstr(10,400)); - INSERT INTO t3 SELECT randstr(10,400) FROM t3; - INSERT INTO t3 SELECT randstr(10,400) FROM t3; - INSERT INTO t3 SELECT randstr(10,400) FROM t3; - INSERT INTO t3 SELECT randstr(10,400) FROM t3; - INSERT INTO t3 SELECT randstr(10,400) FROM t3; - INSERT INTO t3 SELECT randstr(10,400) FROM t3; - INSERT INTO t3 SELECT randstr(10,400) FROM t3; - INSERT INTO t3 SELECT randstr(10,400) FROM t3; - INSERT INTO t3 SELECT randstr(10,400) FROM t3; + CREATE TABLE t1(x TEXT); + INSERT INTO t1 VALUES(randstr(10,400)); + INSERT INTO t1 VALUES(randstr(10,400)); + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; COMMIT; - SELECT count(*) FROM t3; + SELECT count(*) FROM t1; } } {1024} unset -nocomplain ::sig -for {set ii 1} {$ii<25} {incr ii} { +for {set ii 1} {$ii<=$ITERATIONS} {incr ii} { set ::sig [signature] - set crashed 1 - for {set iDelay 1} {$crashed} {incr iDelay} { - do_test savepoint4-$ii.1.$iDelay { + for {set iDelay 1 ; set crashed 1} {$crashed} {incr iDelay} { + + do_test savepoint4-1.$ii.1.$iDelay { set ret [crashsql -delay $iDelay -file test.db-journal { PRAGMA cache_size = 20; SAVEPOINT one; - DELETE FROM t3 WHERE random()%2==0; + DELETE FROM t1 WHERE random()%2==0; SAVEPOINT two; - INSERT INTO t3 SELECT randstr(10,10)||x FROM t3; + INSERT INTO t1 SELECT randstr(10,10)||x FROM t1; ROLLBACK TO two; - UPDATE t3 SET x = randstr(10, 400) WHERE random()%10; + UPDATE t1 SET x = randstr(10, 400) WHERE random()%10; RELEASE two; ROLLBACK TO one; + RELEASE one; }] signature } $::sig + set crashed [lindex $ret 0] - integrity_check savepoint4-$ii.1.$iDelay.integrity + integrity_check savepoint4-1.$ii.1.$iDelay.integrity + } + + do_test savepoint4-1.$ii.2 { + execsql { + DELETE FROM t1 WHERE random()%10==0; + INSERT INTO t1 SELECT randstr(10,10)||x FROM t1 WHERE random()%9==0; + } + } {} +} + +do_test savepoint4-2 { + execsql { + PRAGMA cache_size=10; + DROP TABLE IF EXISTS t1; + BEGIN; + CREATE TABLE t1(x TEXT); + CREATE INDEX i1 ON t1(x); + INSERT INTO t1 VALUES(randstr(10,400)); + INSERT INTO t1 VALUES(randstr(10,400)); + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + COMMIT; + SELECT count(*) FROM t1; + } +} {256} + +for {set ii 1} {$ii<=$ITERATIONS} {incr ii} { + set ::sig [signature] + set file test.db-journal + + for {set iDelay 1 ; set crashed 1} {$crashed} {incr iDelay} { + + do_test savepoint4-2.$ii.1.$iDelay { + + set ret [crashsql -delay $iDelay -file $file { + SAVEPOINT one; + INSERT INTO t1 SELECT * FROM t1 WHERE rowid<50; + ROLLBACK TO one; + INSERT INTO t1 SELECT * FROM t1 WHERE rowid<50; + SAVEPOINT two; + DELETE FROM t1 WHERE (random()%10)==0; + SAVEPOINT three; + DELETE FROM t1 WHERE (random()%10)==0; + SAVEPOINT four; + DELETE FROM t1 WHERE (random()%10)==0; + RELEASE two; + + SAVEPOINT three; + UPDATE t1 SET x = x||x WHERE (rowid%12)==0; + SAVEPOINT four; + UPDATE t1 SET x = x||x WHERE (rowid%14)==0; + ROLLBACK TO three; + UPDATE t1 SET x = x||x WHERE (rowid%13)==0; + RELEASE three; + + DELETE FROM t1 WHERE rowid > (SELECT rowid FROM t1 LIMIT 1 OFFSET 256); + RELEASE one; + }] + + set crashed [lindex $ret 0] + if {$crashed} { + signature + } else { + set ::sig + } + } $::sig + + integrity_check savepoint4-2.$ii.1.$iDelay.integrity + + if {$crashed == 0 && $file == "test.db-journal"} { + set crashed 1 + set iDelay 0 + set file test.db + set ::sig [signature] + } } - do_test savepoint4-$ii.2 { + do_test savepoint4-2.$ii.2 { execsql { - DELETE FROM t3 WHERE random()%10==0; - INSERT INTO t3 SELECT randstr(10,10)||x FROM t3 WHERE random()%9==0; + DELETE FROM t1 WHERE random()%10==0; + INSERT INTO t1 SELECT randstr(10,10)||x FROM t1 WHERE random()%9==0; } } {} }