]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add extra crash test cases that stress the savepoint mechanism to savepoint4.test...
authordanielk1977 <danielk1977@noemail.net>
Fri, 19 Dec 2008 18:45:52 +0000 (18:45 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Fri, 19 Dec 2008 18:45:52 +0000 (18:45 +0000)
FossilOrigin-Name: e06a968aa5b17ce12ea179b36a99ad74d274fd2c

manifest
manifest.uuid
test/savepoint4.test

index 1f2b42f9040b98fd6b599b91228ba94617e303a6..3b47a6f3d294eaf4341004a907d7646b413f1914 100644 (file)
--- 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
index fc7ec4e23106259bbbde3e2ddd14fc5012c6bae6..301575622d721e5047e6779eba61a8605cbfaf1a 100644 (file)
@@ -1 +1 @@
-6f36c16678b6e3baa5a9d9ceba1a756a8034f3e1
\ No newline at end of file
+e06a968aa5b17ce12ea179b36a99ad74d274fd2c
\ No newline at end of file
index ebb3786220d02630836657f728e8dd01a6cc97d1..dd84dcb7f6e68d2ae3960e9e3152c6aa6895cdd5 100644 (file)
 #
 #***********************************************************************
 #
-# $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;
     }
   } {}
 }