Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add additional randomness to crash tests. (CVS 4694) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
3ccce1f58be46787f8a35f0fa6d738ed |
User & Date: | drh 2008-01-08 15:18:52.000 |
Context
2008-01-08
| ||
16:03 | Add crash4.test with additional crash testing. (CVS 4695) (check-in: 87b4ac4b73 user: drh tags: trunk) | |
15:18 | Add additional randomness to crash tests. (CVS 4694) (check-in: 3ccce1f58b user: drh tags: trunk) | |
02:57 | Progress toward registerification of the constraint checking logic for INSERT and UPDATE. (CVS 4693) (check-in: b9bf509e39 user: drh tags: trunk) | |
Changes
Changes to test/crash.test.
︙ | ︙ | |||
13 14 15 16 17 18 19 | # The focus of this file is testing the ability of the database to # uses its rollback journal to recover intact (no database corruption) # from a power failure during the middle of a COMMIT. The OS interface # modules are overloaded using the modified I/O routines found in test6.c. # These routines allow us to simulate the kind of file damage that # occurs after a power failure. # | | | 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | # The focus of this file is testing the ability of the database to # uses its rollback journal to recover intact (no database corruption) # from a power failure during the middle of a COMMIT. The OS interface # modules are overloaded using the modified I/O routines found in test6.c. # These routines allow us to simulate the kind of file damage that # occurs after a power failure. # # $Id: crash.test,v 1.27 2008/01/08 15:18:52 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl ifcapable !crashtest { finish_test return |
︙ | ︙ | |||
63 64 65 66 67 68 69 | CREATE TABLE abc(a, b, c); INSERT INTO abc VALUES(1, 2, 3); INSERT INTO abc VALUES(4, 5, 6); } set ::sig [signature] expr 0 } {0} | > > | | | > | 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | CREATE TABLE abc(a, b, c); INSERT INTO abc VALUES(1, 2, 3); INSERT INTO abc VALUES(4, 5, 6); } set ::sig [signature] expr 0 } {0} for {set i 0} {$i<10} {incr i} { set seed [expr {int(abs(rand()*10000))}] do_test crash-1.2.$i { crashsql -delay 1 -file test.db-journal -seed $seed { DELETE FROM abc WHERE a = 1; } } {1 {child process exited abnormally}} do_test crash-1.3.$i { signature } $::sig } do_test crash-1.4 { crashsql -delay 1 -file test.db { DELETE FROM abc WHERE a = 1; } } {1 {child process exited abnormally}} do_test crash-1.5 { signature |
︙ | ︙ | |||
181 182 183 184 185 186 187 | INSERT INTO abc SELECT * FROM abc; } expr ([file size test.db] / 1024) > 450 } {1} for {set i 1} {$i < $repeats} {incr i} { set sig [signature] do_test crash-3.$i.1 { | > | | 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 | INSERT INTO abc SELECT * FROM abc; } expr ([file size test.db] / 1024) > 450 } {1} for {set i 1} {$i < $repeats} {incr i} { set sig [signature] do_test crash-3.$i.1 { set seed [expr {int(abs(rand()*10000))}] crashsql -delay [expr $i%5 + 1] -file test.db-journal -seed $seed " BEGIN; SELECT random() FROM abc LIMIT $i; INSERT INTO abc VALUES(randstr(10,10), 0, 0); DELETE FROM abc WHERE random()%10!=0; COMMIT; " } {1 {child process exited abnormally}} |
︙ | ︙ | |||
219 220 221 222 223 224 225 226 227 228 | CREATE TABLE aux.abc2 AS SELECT 2*a as a, 2*b as b, 2*c as c FROM abc; } expr ([file size test2.db] / 1024) > 450 } {1} set fin 0 for {set i 1} {$i<$repeats} {incr i} { set sig [signature] set sig2 [signature2] do_test crash-4.1.$i.1 { | > | | 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 | CREATE TABLE aux.abc2 AS SELECT 2*a as a, 2*b as b, 2*c as c FROM abc; } expr ([file size test2.db] / 1024) > 450 } {1} set fin 0 for {set i 1} {$i<$repeats} {incr i} { set seed [expr {int(abs(rand()*10000))}] set sig [signature] set sig2 [signature2] do_test crash-4.1.$i.1 { set c [crashsql -delay $i -file test.db-journal -seed $::seed " ATTACH 'test2.db' AS aux; BEGIN; SELECT randstr($i,$i) FROM abc LIMIT $i; INSERT INTO abc VALUES(randstr(10,10), 0, 0); DELETE FROM abc WHERE random()%10!=0; INSERT INTO abc2 VALUES(randstr(10,10), 0, 0); DELETE FROM abc2 WHERE random()%10!=0; |
︙ | ︙ | |||
249 250 251 252 253 254 255 256 257 258 259 | do_test crash-4.1.$i.3 { signature2 } $sig2 } set i 0 set fin 0 while {[incr i]} { set sig [signature] set sig2 [signature2] set ::fin 0 do_test crash-4.2.$i.1 { | > | | 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 | do_test crash-4.1.$i.3 { signature2 } $sig2 } set i 0 set fin 0 while {[incr i]} { set seed [expr {int(abs(rand()*10000))}] set sig [signature] set sig2 [signature2] set ::fin 0 do_test crash-4.2.$i.1 { set c [crashsql -delay $i -file test2.db-journal -seed $::seed " ATTACH 'test2.db' AS aux; BEGIN; SELECT randstr($i,$i) FROM abc LIMIT $i; INSERT INTO abc VALUES(randstr(10,10), 0, 0); DELETE FROM abc WHERE random()%10!=0; INSERT INTO abc2 VALUES(randstr(10,10), 0, 0); DELETE FROM abc2 WHERE random()%10!=0; |
︙ | ︙ |
Changes to test/tester.tcl.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2001 September 15 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements some common TCL routines used for regression # testing the SQLite library # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2001 September 15 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements some common TCL routines used for regression # testing the SQLite library # # $Id: tester.tcl,v 1.97 2008/01/08 15:18:52 drh Exp $ set tcl_precision 15 set sqlite_pending_byte 0x0010000 # # Check the command-line arguments for a default soft-heap-limit. |
︙ | ︙ | |||
348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 | proc crashsql {args} { if {$::tcl_platform(platform)!="unix"} { error "crashsql should only be used on unix" } set blocksize "" set crashdelay 1 set crashfile "" set dc "" set sql [lindex $args end] for {set ii 0} {$ii < [llength $args]-1} {incr ii 2} { set z [lindex $args $ii] set n [string length $z] set z2 [lindex $args [expr $ii+1]] if {$n>1 && [string first $z -delay]==0} {set crashdelay $z2} \ elseif {$n>1 && [string first $z -file]==0} {set crashfile $z2} \ elseif {$n>1 && [string first $z -blocksize]==0} {set blocksize "-s $z2" } \ elseif {$n>1 && [string first $z -characteristics]==0} {set dc "-c {$z2}" } \ else { error "Unrecognized option: $z" } } if {$crashfile eq ""} { | > > | 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 | proc crashsql {args} { if {$::tcl_platform(platform)!="unix"} { error "crashsql should only be used on unix" } set blocksize "" set crashdelay 1 set prngseed 0 set crashfile "" set dc "" set sql [lindex $args end] for {set ii 0} {$ii < [llength $args]-1} {incr ii 2} { set z [lindex $args $ii] set n [string length $z] set z2 [lindex $args [expr $ii+1]] if {$n>1 && [string first $z -delay]==0} {set crashdelay $z2} \ elseif {$n>1 && [string first $z -seed]==0} {set prngseed $z2} \ elseif {$n>1 && [string first $z -file]==0} {set crashfile $z2} \ elseif {$n>1 && [string first $z -blocksize]==0} {set blocksize "-s $z2" } \ elseif {$n>1 && [string first $z -characteristics]==0} {set dc "-c {$z2}" } \ else { error "Unrecognized option: $z" } } if {$crashfile eq ""} { |
︙ | ︙ | |||
382 383 384 385 386 387 388 389 390 391 392 393 394 395 | # This block sets the cache size of the main database to 10 # pages. This is done in case the build is configured to omit # "PRAGMA cache_size". puts $f {db eval {SELECT * FROM sqlite_master;}} puts $f {set bt [btree_from_db db]} puts $f {btree_set_cache_size $bt 10} puts $f "db eval {" puts $f "$sql" puts $f "}" close $f set r [catch { | > > > > > | 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 | # This block sets the cache size of the main database to 10 # pages. This is done in case the build is configured to omit # "PRAGMA cache_size". puts $f {db eval {SELECT * FROM sqlite_master;}} puts $f {set bt [btree_from_db db]} puts $f {btree_set_cache_size $bt 10} if {$prngseed} { set seed [expr {$prngseed%10007+1}] # puts seed=$seed puts $f "db eval {SELECT randomblob($seed)}" } puts $f "db eval {" puts $f "$sql" puts $f "}" close $f set r [catch { |
︙ | ︙ |