diff options
Diffstat (limited to 'libdb/test/parallel.tcl')
| -rw-r--r-- | libdb/test/parallel.tcl | 295 |
1 files changed, 0 insertions, 295 deletions
diff --git a/libdb/test/parallel.tcl b/libdb/test/parallel.tcl deleted file mode 100644 index 690d47fdb..000000000 --- a/libdb/test/parallel.tcl +++ /dev/null @@ -1,295 +0,0 @@ -# Code to load up the tests in to the Queue database -# $Id$ -proc load_queue { file {dbdir RUNQUEUE} nitems } { - - puts -nonewline "Loading run queue with $nitems items..." - flush stdout - - set env [berkdb_env -create -lock -home $dbdir] - error_check_good dbenv [is_valid_env $env] TRUE - - set db [eval {berkdb_open -env $env -create -truncate \ - -mode 0644 -len 120 -queue queue.db} ] - error_check_good dbopen [is_valid_db $db] TRUE - - set fid [open $file] - - set count 0 - - while { [gets $fid str] != -1 } { - set testarr($count) $str - incr count - } - - # Randomize array of tests. - set rseed [pid] - berkdb srand $rseed - puts -nonewline "randomizing..." - flush stdout - for { set i 0 } { $i < $count } { incr i } { - set j [berkdb random_int $i [expr $count - 1]] - - set tmp $testarr($i) - set testarr($i) $testarr($j) - set testarr($j) $tmp - } - - if { [string compare ALL $nitems] != 0 } { - set maxload $nitems - } else { - set maxload $count - } - - puts "loading..." - flush stdout - for { set i 0 } { $i < $maxload } { incr i } { - set str $testarr($i) - set ret [eval {$db put -append $str} ] - error_check_good put:$db $ret [expr $i + 1] - } - - puts "Loaded $maxload records (out of $count)." - close $fid - $db close - $env close -} - -proc init_runqueue { {dbdir RUNQUEUE} nitems list} { - - if { [file exists $dbdir] != 1 } { - file mkdir $dbdir - } - puts "Creating test list..." - $list -n - load_queue ALL.OUT $dbdir $nitems - file delete TEST.LIST - file rename ALL.OUT TEST.LIST -# file delete ALL.OUT -} - -proc run_parallel { nprocs {list run_all} {nitems ALL} } { - set basename ./PARALLEL_TESTDIR - set queuedir ./RUNQUEUE - source ./include.tcl - - mkparalleldirs $nprocs $basename $queuedir - - init_runqueue $queuedir $nitems $list - - set basedir [pwd] - set pidlist {} - set queuedir ../../[string range $basedir \ - [string last "/" $basedir] end]/$queuedir - - for { set i 1 } { $i <= $nprocs } { incr i } { - fileremove -f ALL.OUT.$i - set ret [catch { - set p [exec $tclsh_path << \ - "source $test_path/test.tcl;\ - run_queue $i $basename.$i $queuedir $nitems" &] - lappend pidlist $p - set f [open $testdir/begin.$p w] - close $f - } res] - } - watch_procs $pidlist 300 360000 - - set failed 0 - for { set i 1 } { $i <= $nprocs } { incr i } { - if { [check_failed_run ALL.OUT.$i] != 0 } { - set failed 1 - puts "Regression tests failed in process $i." - } - } - if { $failed == 0 } { - puts "Regression tests succeeded." - } -} - -proc run_queue { i rundir queuedir nitems } { - set builddir [pwd] - file delete $builddir/ALL.OUT.$i - cd $rundir - - puts "Parallel run_queue process $i (pid [pid]) starting." - - source ./include.tcl - global env - - set dbenv [berkdb_env -create -lock -home $queuedir] - error_check_good dbenv [is_valid_env $dbenv] TRUE - - set db [eval {berkdb_open -env $dbenv \ - -mode 0644 -len 120 -queue queue.db} ] - error_check_good dbopen [is_valid_db $db] TRUE - - set dbc [eval $db cursor] - error_check_good cursor [is_valid_cursor $dbc $db] TRUE - - set count 0 - set waitcnt 0 - - while { $waitcnt < 5 } { - set line [$db get -consume] - if { [ llength $line ] > 0 } { - set cmd [lindex [lindex $line 0] 1] - set num [lindex [lindex $line 0] 0] - set o [open $builddir/ALL.OUT.$i a] - puts $o "\nExecuting record $num ([timestamp -w]):\n" - set tdir "TESTDIR.$i" - regsub {TESTDIR} $cmd $tdir cmd - puts $o $cmd - close $o - if { [expr {$num % 10} == 0] } { - puts "Starting test $num of $nitems" - } - #puts "Process $i, record $num:\n$cmd" - set env(PURIFYOPTIONS) \ - "-log-file=./test$num.%p -follow-child-processes -messages=first" - set env(PURECOVOPTIONS) \ - "-counts-file=./cov.pcv -log-file=./cov.log -follow-child-processes" - if [catch {exec $tclsh_path \ - << "source $test_path/test.tcl; $cmd" \ - >>& $builddir/ALL.OUT.$i } res] { - set o [open $builddir/ALL.OUT.$i a] - puts $o "FAIL: '$cmd': $res" - close $o - } - env_cleanup $testdir - set o [open $builddir/ALL.OUT.$i a] - puts $o "\nEnding record $num ([timestamp])\n" - close $o - incr count - } else { - incr waitcnt - tclsleep 1 - } - } - - puts "Process $i: $count commands executed" - - $dbc close - $db close - $dbenv close - - # - # We need to put the pid file in the builddir's idea - # of testdir, not this child process' local testdir. - # Therefore source builddir's include.tcl to get its - # testdir. - # !!! This resets testdir, so don't do anything else - # local to the child after this. - source $builddir/include.tcl - - set f [open $builddir/$testdir/end.[pid] w] - close $f -} - -proc mkparalleldirs { nprocs basename queuedir } { - source ./include.tcl - set dir [pwd] - - if { $is_windows_test != 1 } { - set EXE "" - } else { - set EXE ".exe" - } - for { set i 1 } { $i <= $nprocs } { incr i } { - set destdir $basename.$i - catch {file mkdir $destdir} - puts "Created $destdir" - if { $is_windows_test == 1 } { - catch {file mkdir $destdir/Debug} - catch {eval file copy \ - [eval glob {$dir/Debug/*.dll}] $destdir/Debug} - } - catch {eval file copy \ - [eval glob {$dir/{.libs,include.tcl}}] $destdir} - # catch {eval file copy $dir/$queuedir $destdir} - catch {eval file copy \ - [eval glob {$dir/db_{checkpoint,deadlock}$EXE} \ - {$dir/db_{dump,load,printlog,recover,stat,upgrade}$EXE} \ - {$dir/db_{archive,verify}$EXE}] \ - $destdir} - - # Create modified copies of include.tcl in parallel - # directories so paths still work. - - set infile [open ./include.tcl r] - set d [read $infile] - close $infile - - regsub {test_path } $d {test_path ../} d - regsub {src_root } $d {src_root ../} d - set tdir "TESTDIR.$i" - regsub -all {TESTDIR} $d $tdir d - regsub {KILL \.} $d {KILL ..} d - set outfile [open $destdir/include.tcl w] - puts $outfile $d - close $outfile - - global svc_list - foreach svc_exe $svc_list { - if { [file exists $dir/$svc_exe] } { - catch {eval file copy $dir/$svc_exe $destdir} - } - } - } -} - -proc run_ptest { nprocs test args } { - global parms - set basename ./PARALLEL_TESTDIR - set queuedir NULL - source ./include.tcl - - mkparalleldirs $nprocs $basename $queuedir - - if { [info exists parms($test)] } { - foreach method \ - "hash queue queueext recno rbtree frecno rrecno btree" { - if { [eval exec_ptest $nprocs $basename \ - $test $method $args] != 0 } { - break - } - } - } else { - eval exec_ptest $nprocs $basename $test $args - } -} - -proc exec_ptest { nprocs basename test args } { - source ./include.tcl - - set basedir [pwd] - set pidlist {} - puts "Running $nprocs parallel runs of $test" - for { set i 1 } { $i <= $nprocs } { incr i } { - set outf ALL.OUT.$i - fileremove -f $outf - set ret [catch { - set p [exec $tclsh_path << \ - "cd $basename.$i;\ - source ../$test_path/test.tcl;\ - $test $args" >& $outf &] - lappend pidlist $p - set f [open $testdir/begin.$p w] - close $f - } res] - } - watch_procs $pidlist 30 36000 - set failed 0 - for { set i 1 } { $i <= $nprocs } { incr i } { - if { [check_failed_run ALL.OUT.$i] != 0 } { - set failed 1 - puts "Test $test failed in process $i." - } - } - if { $failed == 0 } { - puts "Test $test succeeded all processes" - return 0 - } else { - puts "Test failed: stopping" - return 1 - } -} |
