📄 test.tcl
字号:
# See the file LICENSE for redistribution information.## Copyright (c) 1996-2002# Sleepycat Software. All rights reserved.## $Id: test.tcl,v 11.225 2002/09/10 18:51:38 sue Exp $source ./include.tcl# Load DB's TCL API.load $tcllibif { [file exists $testdir] != 1 } { file mkdir $testdir}global __debug_printglobal __debug_onglobal __debug_testglobal util_path## Test if utilities work to figure out the path. Most systems# use ., but QNX has a problem with execvp of shell scripts which# causes it to break.#set stat [catch {exec ./db_printlog -?} ret]if { [string first "exec format error" $ret] != -1 } { set util_path ./.libs} else { set util_path .}set __debug_print 0set encrypt 0set old_encrypt 0set passwd test_passwd# This is where the test numbering and parameters now live.source $test_path/testparams.tcl# Error stream that (should!) always go to the console, even if we're# redirecting to ALL.OUT.set consoleerr stderrforeach sub $subs { if { [info exists num_test($sub)] != 1 } { puts stderr "Subsystem $sub has no number of tests specified in\ testparams.tcl; skipping." continue } set end $num_test($sub) for { set i 1 } { $i <= $end } {incr i} { set name [format "%s%03d.tcl" $sub $i] source $test_path/$name }}source $test_path/archive.tclsource $test_path/byteorder.tclsource $test_path/dbm.tclsource $test_path/hsearch.tclsource $test_path/join.tclsource $test_path/logtrack.tclsource $test_path/ndbm.tclsource $test_path/parallel.tclsource $test_path/reputils.tclsource $test_path/sdbutils.tclsource $test_path/shelltest.tclsource $test_path/sindex.tclsource $test_path/testutils.tclsource $test_path/upgrade.tclset dict $test_path/wordlistset alphabet "abcdefghijklmnopqrstuvwxyz"set datastr "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"# Random number seed.global rand_initset rand_init 101301# Default record length and padding character for# fixed record length access method(s)set fixed_len 20set fixed_pad 0set recd_debug 0set log_log_record_types 0set ohandles {}# Normally, we're not running an all-tests-in-one-env run. This matters# for error stream/error prefix settings in berkdb_open.global is_envmethodset is_envmethod 0# For testing locker id wrap around.global lock_curidglobal lock_maxidset lock_curid 0set lock_maxid 2147483647global txn_curidglobal txn_maxidset txn_curid 2147483648set txn_maxid 4294967295# Set up any OS-specific valuesglobal tcl_platformset is_windows_test [is_substr $tcl_platform(os) "Win"]set is_hp_test [is_substr $tcl_platform(os) "HP-UX"]set is_qnx_test [is_substr $tcl_platform(os) "QNX"]# From here on out, test.tcl contains the procs that are used to# run all or part of the test suite.proc run_std { args } { global num_test source ./include.tcl set exflgs [eval extractflags $args] set args [lindex $exflgs 0] set flags [lindex $exflgs 1] set display 1 set run 1 set am_only 0 set no_am 0 set std_only 1 set rflags {--} foreach f $flags { switch $f { A { set std_only 0 } M { set no_am 1 puts "run_std: all but access method tests." } m { set am_only 1 puts "run_std: access method tests only." } n { set display 1 set run 0 set rflags [linsert $rflags 0 "-n"] } } } if { $std_only == 1 } { fileremove -f ALL.OUT set o [open ALL.OUT a] if { $run == 1 } { puts -nonewline "Test suite run started at: " puts [clock format [clock seconds] -format "%H:%M %D"] puts [berkdb version -string] puts -nonewline $o "Test suite run started at: " puts $o [clock format [clock seconds] -format "%H:%M %D"] puts $o [berkdb version -string] } close $o } set test_list { {"environment" "env"} {"archive" "archive"} {"locking" "lock"} {"logging" "log"} {"memory pool" "memp"} {"mutex" "mutex"} {"transaction" "txn"} {"deadlock detection" "dead"} {"subdatabase" "sdb"} {"byte-order" "byte"} {"recno backing file" "rsrc"} {"DBM interface" "dbm"} {"NDBM interface" "ndbm"} {"Hsearch interface" "hsearch"} {"secondary index" "sindex"} } if { $am_only == 0 } { foreach pair $test_list { set msg [lindex $pair 0] set cmd [lindex $pair 1] puts "Running $msg tests" if [catch {exec $tclsh_path \ << "source $test_path/test.tcl; r $rflags $cmd" \ >>& ALL.OUT } res] { set o [open ALL.OUT a] puts $o "FAIL: $cmd test" close $o } } # Run recovery tests. # # XXX These too are broken into separate tclsh instantiations # so we don't require so much memory, but I think it's cleaner # and more useful to do it down inside proc r than here, # since "r recd" gets done a lot and needs to work. # # Note that we still wrap the test in an exec so that # its output goes to ALL.OUT. run_recd will wrap each test # so that both error streams go to stdout (which here goes # to ALL.OUT); information that run_recd wishes to print # to the "real" stderr, but outside the wrapping for each test, # such as which tests are being skipped, it can still send to # stderr. puts "Running recovery tests" if [catch { exec $tclsh_path \ << "source $test_path/test.tcl; r $rflags recd" \ 2>@ stderr >> ALL.OUT } res] { set o [open ALL.OUT a] puts $o "FAIL: recd tests" close $o } # Run join test # # XXX # Broken up into separate tclsh instantiations so we don't # require so much memory. puts "Running join test" foreach i "join1 join2 join3 join4 join5 join6" { if [catch {exec $tclsh_path \ << "source $test_path/test.tcl; r $rflags $i" \ >>& ALL.OUT } res] { set o [open ALL.OUT a] puts $o "FAIL: $i test" close $o } } } if { $no_am == 0 } { # Access method tests. # # XXX # Broken up into separate tclsh instantiations so we don't # require so much memory. foreach i \ "btree hash queue queueext recno rbtree frecno rrecno" { puts "Running $i tests" for { set j 1 } { $j <= $num_test(test) } {incr j} { if { $run == 0 } { set o [open ALL.OUT a] run_method -$i $j $j $display $run $o close $o } if { $run } { if [catch {exec $tclsh_path \ << "source $test_path/test.tcl; \ run_method -$i $j $j $display $run"\ >>& ALL.OUT } res] { set o [open ALL.OUT a] puts $o "FAIL:\ [format "test%03d" $j] $i" close $o } } } } } # If not actually running, no need to check for failure. # If running in the context of the larger 'run_all' we don't # check for failure here either. if { $run == 0 || $std_only == 0 } { return } set failed [check_failed_run ALL.OUT] set o [open ALL.OUT a] if { $failed == 0 } { puts "Regression Tests Succeeded" puts $o "Regression Tests Succeeded" } else { puts "Regression Tests Failed; see ALL.OUT for log" puts $o "Regression Tests Failed" } puts -nonewline "Test suite run completed at: " puts [clock format [clock seconds] -format "%H:%M %D"] puts -nonewline $o "Test suite run completed at: " puts $o [clock format [clock seconds] -format "%H:%M %D"] close $o}proc check_failed_run { file {text "^FAIL"}} { set failed 0 set o [open $file r] while { [gets $o line] >= 0 } { set ret [regexp $text $line] if { $ret != 0 } { set failed 1 } } close $o return $failed}proc r { args } { global num_test source ./include.tcl set exflgs [eval extractflags $args] set args [lindex $exflgs 0] set flags [lindex $exflgs 1] set display 1 set run 1 set saveflags "--" foreach f $flags { switch $f { n { set display 1 set run 0 set saveflags "-n $saveflags" } } } if {[catch { set sub [ lindex $args 0 ] switch $sub { byte { if { $display } { puts "run_test byteorder" } if { $run } { check_handles run_test byteorder } } archive - dbm - hsearch - ndbm - shelltest - sindex { if { $display } { puts "r $sub" } if { $run } { check_handles $sub } } bigfile - dead - env - lock - log - memp - mutex - rsrc - sdbtest - txn { if { $display } { run_subsystem $sub 1 0 } if { $run } { run_subsystem $sub } } join { eval r $saveflags join1 eval r $saveflags join2 eval r $saveflags join3 eval r $saveflags join4 eval r $saveflags join5 eval r $saveflags join6 } join1 { if { $display } { puts jointest } if { $run } { check_handles jointest } } joinbench { puts "[timestamp]" eval r $saveflags join1 eval r $saveflags join2 puts "[timestamp]" } join2 { if { $display } { puts "jointest 512" } if { $run } { check_handles jointest 512 } } join3 { if { $display } { puts "jointest 8192 0 -join_item" } if { $run } { check_handles jointest 8192 0 -join_item } } join4 { if { $display } { puts "jointest 8192 2" } if { $run } { check_handles jointest 8192 2 } } join5 { if { $display } { puts "jointest 8192 3" } if { $run } { check_handles jointest 8192 3 } } join6 { if { $display } { puts "jointest 512 3" } if { $run } { check_handles jointest 512 3 } } recd { check_handles run_recds $run $display [lrange $args 1 end] } rep { for { set j 1 } { $j <= $num_test(test) } \ { incr j } { if { $display } { puts "eval run_test \ run_repmethod 0 $j $j" } if { $run } { eval run_test \ run_repmethod 0 $j $j } } for { set i 1 } \ { $i <= $num_test(rep) } {incr i} { set test [format "%s%03d" $sub $i] if { $i == 2 } { if { $run } { puts "Skipping rep002 \ (waiting on SR #6195)" } continue } if { $display } { puts "run_test $test" } if { $run } { run_test $test } } } rpc { if { $display } { puts "r $sub" } global rpc_svc svc_list set old_rpc_src $rpc_svc foreach rpc_svc $svc_list { if { !$run || \ ![file exist $util_path/$rpc_svc] } { continue } run_subsystem rpc if { [catch {run_rpcmethod -txn} ret] != 0 } { puts $ret } run_test run_rpcmethod } set rpc_svc $old_rpc_src } sec { if { $display } { run_subsystem $sub 1 0 } if { $run } { run_subsystem $sub 0 1 } for { set j 1 } { $j <= $num_test(test) } \ { incr j } { if { $display } { puts "eval run_test \ run_secmethod $j $j" puts "eval run_test \ run_secenv $j $j" } if { $run } { eval run_test \ run_secmethod $j $j eval run_test \ run_secenv $j $j } } } sdb { if { $display } { puts "eval r $saveflags sdbtest" for { set j 1 } \ { $j <= $num_test(sdb) } \ { incr j } { puts "eval run_test \ subdb $j $j" } } if { $run } { eval r $saveflags sdbtest for { set j 1 } \ { $j <= $num_test(sdb) } \ { incr j } { eval run_test subdb $j $j } } } btree - rbtree - hash - queue - queueext - recno - frecno - rrecno { eval run_method [lindex $args 0] \ 1 0 $display $run [lrange $args 1 end] } default { error \ "FAIL:[timestamp] r: $args: unknown command" } } flush stdout flush stderr } res] != 0} { global errorInfo; set fnl [string first "\n" $errorInfo] set theError [string range $errorInfo 0 [expr $fnl - 1]] if {[string first FAIL $errorInfo] == -1} { error "FAIL:[timestamp] r: $args: $theError" } else { error $theError; } }}proc run_subsystem { prefix { display 0 } { run 1} } { global num_test if { [info exists num_test($prefix)] != 1 } { puts stderr "Subsystem $sub has no number of tests specified in\ testparams.tcl; skipping." return } for { set i 1 } { $i <= $num_test($prefix) } {incr i} { set name [format "%s%03d" $prefix $i] if { $display } { puts "eval $name" } if { $run } { check_handles catch {eval $name} } }}proc run_test { testname args } { source ./include.tcl foreach method "hash queue queueext recno rbtree frecno rrecno btree" { check_handles eval $testname -$method $args verify_dir $testdir "" 1 }}proc run_method { method {start 1} {stop 0} {display 0} {run 1} \ { outfile stdout } args } { global __debug_on global __debug_print global num_test global parms source ./include.tcl if { $stop == 0 } { set stop $num_test(test) } if { $run == 1 } { puts $outfile "run_method: $method $start $stop $args" } if {[catch { for { set i $start } { $i <= $stop } {incr i} { set name [format "test%03d" $i] if { [info exists parms($name)] != 1 } { puts stderr "[format Test%03d $i] disabled in\ testparams.tcl; skipping." continue } if { $display } { puts -nonewline $outfile "eval $name $method" puts -nonewline $outfile " $parms($name) $args" puts $outfile " ; verify_dir $testdir \"\" 1" } if { $run } { check_handles $outfile puts $outfile "[timestamp]" eval $name $method $parms($name) $args if { $__debug_print != 0 } { puts $outfile "" } # verify all databases the test leaves behind verify_dir $testdir "" 1 if { $__debug_on != 0 } { debug } } flush stdout flush stderr
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -