| OLD | NEW |
| 1 # 2007 May 05 | 1 # 2007 May 05 |
| 2 # | 2 # |
| 3 # The author disclaims copyright to this source code. In place of | 3 # The author disclaims copyright to this source code. In place of |
| 4 # a legal notice, here is a blessing: | 4 # a legal notice, here is a blessing: |
| 5 # | 5 # |
| 6 # May you do good and not evil. | 6 # May you do good and not evil. |
| 7 # May you find forgiveness for yourself and forgive others. | 7 # May you find forgiveness for yourself and forgive others. |
| 8 # May you share freely, never taking more than you give. | 8 # May you share freely, never taking more than you give. |
| 9 # | 9 # |
| 10 #*********************************************************************** | 10 #*********************************************************************** |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 global FAULTSIM | 122 global FAULTSIM |
| 123 | 123 |
| 124 foreach n [array names FAULTSIM] { | 124 foreach n [array names FAULTSIM] { |
| 125 if {$n != "interrupt"} {lappend DEFAULT(-faults) $n} | 125 if {$n != "interrupt"} {lappend DEFAULT(-faults) $n} |
| 126 } | 126 } |
| 127 set DEFAULT(-prep) "" | 127 set DEFAULT(-prep) "" |
| 128 set DEFAULT(-body) "" | 128 set DEFAULT(-body) "" |
| 129 set DEFAULT(-test) "" | 129 set DEFAULT(-test) "" |
| 130 set DEFAULT(-install) "" | 130 set DEFAULT(-install) "" |
| 131 set DEFAULT(-uninstall) "" | 131 set DEFAULT(-uninstall) "" |
| 132 set DEFAULT(-start) 1 |
| 133 set DEFAULT(-end) 0 |
| 132 | 134 |
| 133 fix_testname name | 135 fix_testname name |
| 134 | 136 |
| 135 array set O [array get DEFAULT] | 137 array set O [array get DEFAULT] |
| 136 array set O $args | 138 array set O $args |
| 137 foreach o [array names O] { | 139 foreach o [array names O] { |
| 138 if {[info exists DEFAULT($o)]==0} { error "unknown option: $o" } | 140 if {[info exists DEFAULT($o)]==0} { error "unknown option: $o" } |
| 139 } | 141 } |
| 140 | 142 |
| 141 set faultlist [list] | 143 set faultlist [list] |
| 142 foreach f $O(-faults) { | 144 foreach f $O(-faults) { |
| 143 set flist [array names FAULTSIM $f] | 145 set flist [array names FAULTSIM $f] |
| 144 if {[llength $flist]==0} { error "unknown fault: $f" } | 146 if {[llength $flist]==0} { error "unknown fault: $f" } |
| 145 set faultlist [concat $faultlist $flist] | 147 set faultlist [concat $faultlist $flist] |
| 146 } | 148 } |
| 147 | 149 |
| 148 set testspec [list -prep $O(-prep) -body $O(-body) \ | 150 set testspec [list -prep $O(-prep) -body $O(-body) \ |
| 149 -test $O(-test) -install $O(-install) -uninstall $O(-uninstall) | 151 -test $O(-test) -install $O(-install) -uninstall $O(-uninstall) \ |
| 152 -start $O(-start) -end $O(-end) |
| 150 ] | 153 ] |
| 151 foreach f [lsort -unique $faultlist] { | 154 foreach f [lsort -unique $faultlist] { |
| 152 eval do_one_faultsim_test "$name-$f" $FAULTSIM($f) $testspec | 155 eval do_one_faultsim_test "$name-$f" $FAULTSIM($f) $testspec |
| 153 } | 156 } |
| 154 } | 157 } |
| 155 | 158 |
| 156 | 159 |
| 157 #------------------------------------------------------------------------- | 160 #------------------------------------------------------------------------- |
| 158 # Procedures to save and restore the current file-system state: | 161 # Procedures to save and restore the current file-system state: |
| 159 # | 162 # |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 282 } | 285 } |
| 283 | 286 |
| 284 # This command is not called directly. It is used by the | 287 # This command is not called directly. It is used by the |
| 285 # [faultsim_test_result] command created by [do_faultsim_test] and used | 288 # [faultsim_test_result] command created by [do_faultsim_test] and used |
| 286 # by -test scripts. | 289 # by -test scripts. |
| 287 # | 290 # |
| 288 proc faultsim_test_result_int {args} { | 291 proc faultsim_test_result_int {args} { |
| 289 upvar testrc testrc testresult testresult testnfail testnfail | 292 upvar testrc testrc testresult testresult testnfail testnfail |
| 290 set t [list $testrc $testresult] | 293 set t [list $testrc $testresult] |
| 291 set r $args | 294 set r $args |
| 292 if { ($testnfail==0 && $t != [lindex $r 0]) || [lsearch $r $t]<0 } { | 295 if { ($testnfail==0 && $t != [lindex $r 0]) || [lsearch -exact $r $t]<0 } { |
| 293 error "nfail=$testnfail rc=$testrc result=$testresult list=$r" | 296 error "nfail=$testnfail rc=$testrc result=$testresult list=$r" |
| 294 } | 297 } |
| 295 } | 298 } |
| 296 | 299 |
| 297 #-------------------------------------------------------------------------- | 300 #-------------------------------------------------------------------------- |
| 298 # Usage do_one_faultsim_test NAME ?OPTIONS...? | 301 # Usage do_one_faultsim_test NAME ?OPTIONS...? |
| 299 # | 302 # |
| 300 # The first argument, <test number>, is used as a prefix of the test names | 303 # The first argument, <test number>, is used as a prefix of the test names |
| 301 # taken by tests executed by this command. Options are as follows. All | 304 # taken by tests executed by this command. Options are as follows. All |
| 302 # options take a single argument. | 305 # options take a single argument. |
| 303 # | 306 # |
| 304 # -injectstart Script to enable fault-injection. | 307 # -injectstart Script to enable fault-injection. |
| 305 # | 308 # |
| 306 # -injectstop Script to disable fault-injection. | 309 # -injectstop Script to disable fault-injection. |
| 307 # | 310 # |
| 308 # -injecterrlist List of generally acceptable test results (i.e. error | 311 # -injecterrlist List of generally acceptable test results (i.e. error |
| 309 # messages). Example: [list {1 {out of memory}}] | 312 # messages). Example: [list {1 {out of memory}}] |
| 310 # | 313 # |
| 311 # -injectinstall | 314 # -injectinstall |
| 312 # | 315 # |
| 313 # -injectuninstall | 316 # -injectuninstall |
| 314 # | 317 # |
| 315 # -prep Script to execute before -body. | 318 # -prep Script to execute before -body. |
| 316 # | 319 # |
| 317 # -body Script to execute (with fault injection). | 320 # -body Script to execute (with fault injection). |
| 318 # | 321 # |
| 319 # -test Script to execute after -body. | 322 # -test Script to execute after -body. |
| 320 # | 323 # |
| 324 # -start Index of first fault to inject (default 1) |
| 325 # |
| 321 proc do_one_faultsim_test {testname args} { | 326 proc do_one_faultsim_test {testname args} { |
| 322 | 327 |
| 323 set DEFAULT(-injectstart) "expr" | 328 set DEFAULT(-injectstart) "expr" |
| 324 set DEFAULT(-injectstop) "expr 0" | 329 set DEFAULT(-injectstop) "expr 0" |
| 325 set DEFAULT(-injecterrlist) [list] | 330 set DEFAULT(-injecterrlist) [list] |
| 326 set DEFAULT(-injectinstall) "" | 331 set DEFAULT(-injectinstall) "" |
| 327 set DEFAULT(-injectuninstall) "" | 332 set DEFAULT(-injectuninstall) "" |
| 328 set DEFAULT(-prep) "" | 333 set DEFAULT(-prep) "" |
| 329 set DEFAULT(-body) "" | 334 set DEFAULT(-body) "" |
| 330 set DEFAULT(-test) "" | 335 set DEFAULT(-test) "" |
| 331 set DEFAULT(-install) "" | 336 set DEFAULT(-install) "" |
| 332 set DEFAULT(-uninstall) "" | 337 set DEFAULT(-uninstall) "" |
| 338 set DEFAULT(-start) 1 |
| 339 set DEFAULT(-end) 0 |
| 333 | 340 |
| 334 array set O [array get DEFAULT] | 341 array set O [array get DEFAULT] |
| 335 array set O $args | 342 array set O $args |
| 336 foreach o [array names O] { | 343 foreach o [array names O] { |
| 337 if {[info exists DEFAULT($o)]==0} { error "unknown option: $o" } | 344 if {[info exists DEFAULT($o)]==0} { error "unknown option: $o" } |
| 338 } | 345 } |
| 339 | 346 |
| 340 proc faultsim_test_proc {testrc testresult testnfail} $O(-test) | 347 proc faultsim_test_proc {testrc testresult testnfail} $O(-test) |
| 341 proc faultsim_test_result {args} " | 348 proc faultsim_test_result {args} " |
| 342 uplevel faultsim_test_result_int \$args [list $O(-injecterrlist)] | 349 uplevel faultsim_test_result_int \$args [list $O(-injecterrlist)] |
| 343 " | 350 " |
| 344 | 351 |
| 345 eval $O(-injectinstall) | 352 eval $O(-injectinstall) |
| 346 eval $O(-install) | 353 eval $O(-install) |
| 347 | 354 |
| 348 set stop 0 | 355 set stop 0 |
| 349 for {set iFail 1} {!$stop} {incr iFail} { | 356 for {set iFail $O(-start)} \ |
| 357 {!$stop && ($O(-end)==0 || $iFail<=$O(-end))} \ |
| 358 {incr iFail} \ |
| 359 { |
| 350 | 360 |
| 351 # Evaluate the -prep script. | 361 # Evaluate the -prep script. |
| 352 # | 362 # |
| 353 eval $O(-prep) | 363 eval $O(-prep) |
| 354 | 364 |
| 355 # Start the fault-injection. Run the -body script. Stop the fault | 365 # Start the fault-injection. Run the -body script. Stop the fault |
| 356 # injection. Local var $nfail is set to the total number of faults | 366 # injection. Local var $nfail is set to the total number of faults |
| 357 # injected into the system this trial. | 367 # injected into the system this trial. |
| 358 # | 368 # |
| 359 eval $O(-injectstart) $iFail | 369 eval $O(-injectstart) $iFail |
| (...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 678 if {[lsearch $answers $res]>=0} { | 688 if {[lsearch $answers $res]>=0} { |
| 679 set res $str | 689 set res $str |
| 680 } | 690 } |
| 681 do_test $name.$zName.$iFail [list set {} $res] $str | 691 do_test $name.$zName.$iFail [list set {} $res] $str |
| 682 set cksum2 [db one $cksumsql] | 692 set cksum2 [db one $cksumsql] |
| 683 if {$cksum1 != $cksum2} return | 693 if {$cksum1 != $cksum2} return |
| 684 } | 694 } |
| 685 } | 695 } |
| 686 } | 696 } |
| 687 } | 697 } |
| OLD | NEW |