test.tcl
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:29k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. # See the file LICENSE for redistribution information.
  2. #
  3. # Copyright (c) 1996, 1997, 1998, 1999, 2000
  4. # Sleepycat Software.  All rights reserved.
  5. #
  6. # $Id: test.tcl,v 11.114 2001/01/09 21:28:52 sue Exp $
  7. source ./include.tcl
  8. # Load DB's TCL API.
  9. load $tcllib
  10. if { [file exists $testdir] != 1 } {
  11. file mkdir $testdir
  12. }
  13. global __debug_print
  14. global __debug_on
  15. global util_path
  16. #
  17. # Test if utilities work to figure out the path.  Most systems
  18. # use ., but QNX has a problem with execvp of shell scripts which
  19. # causes it to break.
  20. #
  21. set stat [catch {exec ./db_printlog -?} ret]
  22. if { [string first "exec format error" $ret] != -1 } {
  23. set util_path ./.libs
  24. } else {
  25. set util_path .
  26. }
  27. set __debug_print 0
  28. set __debug_on 0
  29. # This is where the test numbering and parameters now live.
  30. source $test_path/testparams.tcl
  31. for { set i 1 } { $i <= $deadtests } {incr i} {
  32. set name [format "dead%03d.tcl" $i]
  33. source $test_path/$name
  34. }
  35. for { set i 1 } { $i <= $envtests } {incr i} {
  36. set name [format "env%03d.tcl" $i]
  37. source $test_path/$name
  38. }
  39. for { set i 1 } { $i <= $recdtests } {incr i} {
  40. set name [format "recd%03d.tcl" $i]
  41. source $test_path/$name
  42. }
  43. for { set i 1 } { $i <= $rpctests } {incr i} {
  44. set name [format "rpc%03d.tcl" $i]
  45. source $test_path/$name
  46. }
  47. for { set i 1 } { $i <= $rsrctests } {incr i} {
  48. set name [format "rsrc%03d.tcl" $i]
  49. source $test_path/$name
  50. }
  51. for { set i 1 } { $i <= $runtests } {incr i} {
  52. set name [format "test%03d.tcl" $i]
  53. # Test numbering may be sparse.
  54. if { [file exists $test_path/$name] == 1 } {
  55. source $test_path/$name
  56. }
  57. }
  58. for { set i 1 } { $i <= $subdbtests } {incr i} {
  59. set name [format "sdb%03d.tcl" $i]
  60. source $test_path/$name
  61. }
  62. source $test_path/archive.tcl
  63. source $test_path/byteorder.tcl
  64. source $test_path/dbm.tcl
  65. source $test_path/hsearch.tcl
  66. source $test_path/join.tcl
  67. source $test_path/lock001.tcl
  68. source $test_path/lock002.tcl
  69. source $test_path/lock003.tcl
  70. source $test_path/log.tcl
  71. source $test_path/logtrack.tcl
  72. source $test_path/mpool.tcl
  73. source $test_path/mutex.tcl
  74. source $test_path/ndbm.tcl
  75. source $test_path/sdbtest001.tcl
  76. source $test_path/sdbtest002.tcl
  77. source $test_path/sdbutils.tcl
  78. source $test_path/testutils.tcl
  79. source $test_path/txn.tcl
  80. source $test_path/upgrade.tcl
  81. set dict $test_path/wordlist
  82. set alphabet "abcdefghijklmnopqrstuvwxyz"
  83. # Random number seed.
  84. global rand_init
  85. set rand_init 1013
  86. # Default record length and padding character for
  87. # fixed record length access method(s)
  88. set fixed_len 20
  89. set fixed_pad 0
  90. set recd_debug 0
  91. set log_log_record_types 0
  92. set ohandles {}
  93. # Set up any OS-specific values
  94. global tcl_platform
  95. set is_windows_test [is_substr $tcl_platform(os) "Win"]
  96. set is_hp_test [is_substr $tcl_platform(os) "HP-UX"]
  97. set is_qnx_test [is_substr $tcl_platform(os) "QNX"]
  98. # From here on out, test.tcl contains the procs that are used to
  99. # run all or part of the test suite.
  100. proc run_am { } {
  101. global runtests
  102. source ./include.tcl
  103. fileremove -f ALL.OUT
  104. # Access method tests.
  105. #
  106. # XXX
  107. # Broken up into separate tclsh instantiations so we don't require
  108. # so much memory.
  109. foreach i "btree rbtree hash queue queueext recno frecno rrecno" {
  110. puts "Running $i tests"
  111. for { set j 1 } { $j <= $runtests } {incr j} {
  112. if [catch {exec $tclsh_path 
  113.     << "source $test_path/test.tcl; 
  114.     run_method -$i $j $j" >>& ALL.OUT } res] {
  115. set o [open ALL.OUT a]
  116. puts $o "FAIL: [format "test%03d" $j] $i"
  117. close $o
  118. }
  119. }
  120. if [catch {exec $tclsh_path 
  121.     << "source $test_path/test.tcl; 
  122.     subdb -$i 0 1" >>& ALL.OUT } res] {
  123. set o [open ALL.OUT a]
  124. puts $o "FAIL: subdb -$i test"
  125. close $o
  126. }
  127. }
  128. }
  129. proc run_std { args } {
  130. global runtests
  131. global subdbtests
  132. source ./include.tcl
  133. set exflgs [eval extractflags $args]
  134. set args [lindex $exflgs 0]
  135. set flags [lindex $exflgs 1]
  136. set display 1
  137. set run 1
  138. set am_only 0
  139. set std_only 1
  140. set rflags {--}
  141. foreach f $flags {
  142. switch $f {
  143. A {
  144. set std_only 0
  145. }
  146. m {
  147. set am_only 1
  148. puts "run_std: access method tests only."
  149. }
  150. n {
  151. set display 1
  152. set run 0
  153. set rflags [linsert $rflags 0 "-n"]
  154. }
  155. }
  156. }
  157. if { $std_only == 1 } {
  158. fileremove -f ALL.OUT
  159. set o [open ALL.OUT a]
  160. if { $run == 1 } {
  161. puts -nonewline "Test suite run started at: "
  162. puts [clock format [clock seconds] -format "%H:%M %D"]
  163. puts [berkdb version -string]
  164. puts -nonewline $o "Test suite run started at: "
  165. puts $o [clock format [clock seconds] -format "%H:%M %D"]
  166. puts $o [berkdb version -string]
  167. }
  168. close $o
  169. }
  170. set test_list {
  171. {"environment" "env"}
  172. {"archive" "archive"}
  173. {"locking" "lock"}
  174. {"logging" "log"}
  175. {"memory pool" "mpool"}
  176. {"mutex" "mutex"}
  177. {"transaction" "txn"}
  178. {"deadlock detection" "dead"}
  179. {"subdatabase" "subdb_gen"}
  180. {"byte-order" "byte"}
  181. {"recno backing file" "rsrc"}
  182. {"DBM interface" "dbm"}
  183. {"NDBM interface" "ndbm"}
  184. {"Hsearch interface" "hsearch"}
  185. }
  186. if { $am_only == 0 } {
  187. foreach pair $test_list {
  188. set msg [lindex $pair 0]
  189. set cmd [lindex $pair 1]
  190. puts "Running $msg tests"
  191. if [catch {exec $tclsh_path 
  192.     << "source $test_path/test.tcl; r $rflags $cmd" 
  193.     >>& ALL.OUT } res] {
  194. set o [open ALL.OUT a]
  195. puts $o "FAIL: $cmd test"
  196. close $o
  197. }
  198. }
  199. # Run recovery tests.
  200. #
  201. # XXX These too are broken into separate tclsh instantiations
  202. # so we don't require so much memory, but I think it's cleaner
  203. # and more useful to do it down inside proc r than here,
  204. # since "r recd" gets done a lot and needs to work.
  205. puts "Running recovery tests"
  206. if [catch {exec $tclsh_path 
  207.     << "source $test_path/test.tcl; 
  208. r $rflags recd" >>& ALL.OUT } res] {
  209. set o [open ALL.OUT a]
  210. puts $o "FAIL: recd test"
  211. close $o
  212. }
  213. # Run join test
  214. #
  215. # XXX
  216. # Broken up into separate tclsh instantiations so we don't
  217. # require so much memory.
  218. puts "Running join test"
  219. foreach i "join1 join2 join3 join4 join5 join6" {
  220. if [catch {exec $tclsh_path 
  221.     << "source $test_path/test.tcl; r $rflags $i" 
  222.     >>& ALL.OUT } res] {
  223. set o [open ALL.OUT a]
  224. puts $o "FAIL: $i test"
  225. close $o
  226. }
  227. }
  228. }
  229. # Access method tests.
  230. #
  231. # XXX
  232. # Broken up into separate tclsh instantiations so we don't require
  233. # so much memory.
  234. foreach i "btree rbtree hash queue queueext recno frecno rrecno" {
  235. puts "Running $i tests"
  236. for { set j 1 } { $j <= $runtests } {incr j} {
  237. if { $run == 0 } {
  238. set o [open ALL.OUT a]
  239. run_method -$i $j $j $display $run $o
  240. close $o
  241. }
  242. if { $run } {
  243. if [catch {exec $tclsh_path 
  244.     << "source $test_path/test.tcl; 
  245.     run_method -$i $j $j $display $run" 
  246.     >>& ALL.OUT } res] {
  247. set o [open ALL.OUT a]
  248. puts $o 
  249.     "FAIL: [format "test%03d" $j] $i"
  250. close $o
  251. }
  252. }
  253. }
  254. if [catch {exec $tclsh_path 
  255.     << "source $test_path/test.tcl; 
  256.     subdb -$i $display $run" >>& ALL.OUT } res] {
  257. set o [open ALL.OUT a]
  258. puts $o "FAIL: subdb -$i test"
  259. close $o
  260. }
  261. }
  262. # If not actually running, no need to check for failure.
  263. # If running in the context of the larger 'run_all' we don't
  264. # check for failure here either.
  265. if { $run == 0 || $std_only == 0 } {
  266. return
  267. }
  268. set failed 0
  269. set o [open ALL.OUT r]
  270. while { [gets $o line] >= 0 } {
  271. if { [regexp {^FAIL} $line] != 0 } {
  272. set failed 1
  273. }
  274. }
  275. close $o
  276. set o [open ALL.OUT a]
  277. if { $failed == 0 } {
  278. puts "Regression Tests Succeeded"
  279. puts $o "Regression Tests Succeeded"
  280. } else {
  281. puts "Regression Tests Failed; see ALL.OUT for log"
  282. puts $o "Regression Tests Failed"
  283. }
  284. puts -nonewline "Test suite run completed at: "
  285. puts [clock format [clock seconds] -format "%H:%M %D"]
  286. puts -nonewline $o "Test suite run completed at: "
  287. puts $o [clock format [clock seconds] -format "%H:%M %D"]
  288. close $o
  289. }
  290. proc r { args } {
  291. global envtests
  292. global recdtests
  293. global subdbtests
  294. global deadtests
  295. source ./include.tcl
  296. set exflgs [eval extractflags $args]
  297. set args [lindex $exflgs 0]
  298. set flags [lindex $exflgs 1]
  299. set display 1
  300. set run 1
  301. set saveflags "--"
  302. foreach f $flags {
  303. switch $f {
  304. n {
  305. set display 1
  306. set run 0
  307. set saveflags "-n $saveflags"
  308. }
  309. }
  310. }
  311. if {[catch {
  312. set l [ lindex $args 0 ]
  313. switch $l {
  314. archive {
  315. if { $display } {
  316. puts "eval archive [lrange $args 1 end]"
  317. }
  318. if { $run } {
  319. check_handles
  320. eval archive [lrange $args 1 end]
  321. }
  322. }
  323. byte {
  324. foreach method 
  325. "-hash -btree -recno -queue -queueext -frecno" {
  326. if { $display } {
  327. puts "byteorder $method"
  328. }
  329. if { $run } {
  330. check_handles
  331. byteorder $method
  332. }
  333. }
  334. }
  335. dbm {
  336. if { $display } {
  337. puts "dbm"
  338. }
  339. if { $run } {
  340. check_handles
  341. dbm
  342. }
  343. }
  344. dead {
  345. for { set i 1 } { $i <= $deadtests } 
  346.     { incr i } {
  347. if { $display } {
  348. puts "eval dead00$i
  349.     [lrange $args 1 end]"
  350. }
  351. if { $run } {
  352. check_handles
  353. eval dead00$i
  354.     [lrange $args 1 end]
  355. }
  356. }
  357. }
  358. env {
  359. for { set i 1 } { $i <= $envtests } {incr i} {
  360. if { $display } {
  361. puts "eval env00$i"
  362. }
  363. if { $run } {
  364. check_handles
  365. eval env00$i
  366. }
  367. }
  368. }
  369. hsearch {
  370. if { $display } { puts "hsearch" }
  371. if { $run } {
  372. check_handles
  373. hsearch
  374. }
  375. }
  376. join {
  377. eval r $saveflags join1
  378. eval r $saveflags join2
  379. eval r $saveflags join3
  380. eval r $saveflags join4
  381. eval r $saveflags join5
  382. eval r $saveflags join6
  383. }
  384. join1 {
  385. if { $display } { puts jointest }
  386. if { $run } { 
  387. check_handles
  388. jointest
  389. }
  390. }
  391. joinbench {
  392. puts "[timestamp]"
  393. eval r $saveflags join1
  394. eval r $saveflags join2
  395. puts "[timestamp]"
  396. }
  397. join2 {
  398. if { $display } { puts "jointest 512" }
  399. if { $run } {
  400. check_handles
  401. jointest 512
  402. }
  403. }
  404. join3 {
  405. if { $display } {
  406. puts "jointest 8192 0 -join_item"
  407. }
  408. if { $run } {
  409. check_handles
  410. jointest 8192 0 -join_item
  411. }
  412. }
  413. join4 {
  414. if { $display } { puts "jointest 8192 2" }
  415. if { $run } {
  416. check_handles
  417. jointest 8192 2
  418. }
  419. }
  420. join5 {
  421. if { $display } { puts "jointest 8192 3" }
  422. if { $run } {
  423. check_handles
  424. jointest 8192 3
  425. }
  426. }
  427. join6 {
  428. if { $display } { puts "jointest 512 3" }
  429. if { $run } {
  430. check_handles
  431. jointest 512 3
  432. }
  433. }
  434. lock {
  435. if { $display } {
  436. puts 
  437.     "eval locktest [lrange $args 1 end]"
  438. }
  439. if { $run } {
  440. check_handles
  441. eval locktest [lrange $args 1 end]
  442. }
  443. }
  444. log {
  445. if { $display } {
  446. puts "eval logtest [lrange $args 1 end]"
  447. }
  448. if { $run } {
  449. check_handles
  450. eval logtest [lrange $args 1 end]
  451. }
  452. }
  453. mpool {
  454. eval r $saveflags mpool1
  455. eval r $saveflags mpool2
  456. eval r $saveflags mpool3
  457. }
  458. mpool1 {
  459. if { $display } {
  460. puts "eval mpool [lrange $args 1 end]"
  461. }
  462. if { $run } {
  463. check_handles
  464. eval mpool [lrange $args 1 end]
  465. }
  466. }
  467. mpool2 {
  468. if { $display } {
  469. puts "eval mpool
  470.     -mem system [lrange $args 1 end]"
  471. }
  472. if { $run } {
  473. check_handles
  474. eval mpool
  475.     -mem system [lrange $args 1 end]
  476. }
  477. }
  478. mpool3 {
  479. if { $display } {
  480. puts "eval mpool
  481.     -mem private [lrange $args 1 end]"
  482. }
  483. if { $run } {
  484. eval mpool
  485.     -mem private [lrange $args 1 end]
  486. }
  487. }
  488. mutex {
  489. if { $display } {
  490. puts "eval mutex [lrange $args 1 end]"
  491. }
  492. if { $run } {
  493. check_handles
  494. eval mutex [lrange $args 1 end]
  495. }
  496. }
  497. ndbm {
  498. if { $display } { puts ndbm }
  499. if { $run } {
  500. check_handles
  501. ndbm
  502. }
  503. }
  504. recd {
  505. if { $display } { puts run_recds }
  506. if { $run } {
  507. check_handles
  508. run_recds
  509. }
  510. }
  511. rpc {
  512. # RPC must be run as one unit due to server,
  513. # so just print "r rpc" in the display case.
  514. if { $display } { puts "r rpc" }
  515. if { $run } {
  516. check_handles
  517. eval rpc001
  518. check_handles
  519. eval rpc002
  520. if { [catch {run_rpcmethod -txn} ret]
  521.     != 0 } {
  522. puts $ret
  523. }
  524. foreach method 
  525. "hash queue queueext recno frecno rrecno rbtree btree" {
  526. if { [catch {run_rpcmethod 
  527.     -$method} ret] != 0 } {
  528. puts $ret
  529. }
  530. }
  531. }
  532. }
  533. rsrc {
  534. if { $display } { puts "rsrc001nrsrc002" }
  535. if { $run } {
  536. check_handles
  537. rsrc001
  538. check_handles
  539. rsrc002
  540. }
  541. }
  542. subdb {
  543. eval r $saveflags subdb_gen
  544. foreach method 
  545. "btree rbtree hash queue queueext recno frecno rrecno" {
  546. check_handles
  547. eval subdb -$method $display $run
  548. }
  549. }
  550. subdb_gen {
  551. if { $display } {
  552. puts "subdbtest001 ; verify_dir"
  553. puts "subdbtest002 ; verify_dir"
  554. }
  555. if { $run } {
  556. check_handles
  557. eval subdbtest001
  558. verify_dir
  559. check_handles
  560. eval subdbtest002
  561. verify_dir
  562. }
  563. }
  564. txn {
  565. if { $display } {
  566. puts "txntest [lrange $args 1 end]"
  567. }
  568. if { $run } {
  569. check_handles
  570. eval txntest [lrange $args 1 end]
  571. }
  572. }
  573. btree -
  574. rbtree -
  575. hash -
  576. queue -
  577. queueext -
  578. recno -
  579. frecno -
  580. rrecno {
  581. eval run_method [lindex $args 0] 
  582.     1 0 $display $run [lrange $args 1 end]
  583. }
  584. default {
  585. error 
  586.     "FAIL:[timestamp] r: $args: unknown command"
  587. }
  588. }
  589. flush stdout
  590. flush stderr
  591. } res] != 0} {
  592. global errorInfo;
  593. set fnl [string first "n" $errorInfo]
  594. set theError [string range $errorInfo 0 [expr $fnl - 1]]
  595. if {[string first FAIL $errorInfo] == -1} {
  596. error "FAIL:[timestamp] r: $args: $theError"
  597. } else {
  598. error $theError;
  599. }
  600. }
  601. }
  602. proc run_method { method {start 1} {stop 0} {display 0} {run 1} 
  603.     { outfile stdout } args } {
  604. global __debug_on
  605. global __debug_print
  606. global parms
  607. global runtests
  608. source ./include.tcl
  609. if { $stop == 0 } {
  610. set stop $runtests
  611. }
  612. if { $run == 1 } {
  613. puts $outfile "run_method: $method $start $stop $args"
  614. }
  615. if {[catch {
  616. for { set i $start } { $i <= $stop } {incr i} {
  617. set name [format "test%03d" $i]
  618. if { [info exists parms($name)] != 1 } {
  619. puts "[format Test%03d $i] disabled in
  620.     testparams.tcl; skipping."
  621. continue
  622. }
  623. if { $display } {
  624. puts -nonewline $outfile "eval $name $method"
  625. puts -nonewline $outfile " $parms($name) $args"
  626. puts $outfile " ; verify_dir $testdir "" 1"
  627. }
  628. if { $run } {
  629. check_handles $outfile
  630. puts $outfile "[timestamp]"
  631. eval $name $method $parms($name) $args
  632. if { $__debug_print != 0 } {
  633. puts $outfile ""
  634. }
  635. # verify all databases the test leaves behind
  636. verify_dir $testdir "" 1
  637. if { $__debug_on != 0 } {
  638. debug
  639. }
  640. }
  641. flush stdout
  642. flush stderr
  643. }
  644. } res] != 0} {
  645. global errorInfo;
  646. set fnl [string first "n" $errorInfo]
  647. set theError [string range $errorInfo 0 [expr $fnl - 1]]
  648. if {[string first FAIL $errorInfo] == -1} {
  649. error "FAIL:[timestamp]
  650.     run_method: $method $i: $theError"
  651. } else {
  652. error $theError;
  653. }
  654. }
  655. }
  656. proc run_rpcmethod { type {start 1} {stop 0} {largs ""} } {
  657. global __debug_on
  658. global __debug_print
  659. global parms
  660. global runtests
  661. source ./include.tcl
  662. if { $stop == 0 } {
  663. set stop $runtests
  664. }
  665. puts "run_rpcmethod: $type $start $stop $largs"
  666. set save_largs $largs
  667. if { [string compare $rpc_server "localhost"] == 0 } {
  668.        set dpid [exec $util_path/berkeley_db_svc -h $rpc_testdir &]
  669. } else {
  670.        set dpid [exec rsh $rpc_server $rpc_path/berkeley_db_svc 
  671.    -h $rpc_testdir &]
  672. }
  673. puts "tRun_rpcmethod.a: starting server, pid $dpid"
  674. tclsleep 2
  675. remote_cleanup $rpc_server $rpc_testdir $testdir
  676. set home [file tail $rpc_testdir]
  677. set txn ""
  678. set use_txn 0
  679. if { [string first "txn" $type] != -1 } {
  680. set use_txn 1
  681. }
  682. if { $use_txn == 1 } {
  683. if { $start == 1 } {
  684. set ntxns 32
  685. } else {
  686. set ntxns $start
  687. }
  688. set i 1
  689. check_handles
  690. remote_cleanup $rpc_server $rpc_testdir $testdir
  691. set env [eval {berkdb env -create -mode 0644 -home $home 
  692.     -server $rpc_server -client_timeout 10000} -txn]
  693. error_check_good env_open [is_valid_env $env] TRUE
  694. set stat [catch {eval txn001_suba $ntxns $env} res]
  695. if { $stat == 0 } {
  696. set stat [catch {eval txn001_subb $ntxns $env} res]
  697. }
  698. error_check_good envclose [$env close] 0
  699. } else {
  700. set stat [catch {
  701. for { set i $start } { $i <= $stop } {incr i} {
  702. check_handles
  703. set name [format "test%03d" $i]
  704. if { [info exists parms($name)] != 1 } {
  705. puts "[format Test%03d $i] disabled in
  706.     testparams.tcl; skipping."
  707. continue
  708. }
  709. remote_cleanup $rpc_server $rpc_testdir $testdir
  710. #
  711. # Set server cachesize to 1Mb.  Otherwise some
  712. # tests won't fit (like test084 -btree).
  713. #
  714. set env [eval {berkdb env -create -mode 0644 
  715.     -home $home -server $rpc_server 
  716.     -client_timeout 10000 
  717.     -cachesize {0 1048576 1} }]
  718. error_check_good env_open 
  719.     [is_valid_env $env] TRUE
  720. append largs " -env $env "
  721. puts "[timestamp]"
  722. eval $name $type $parms($name) $largs
  723. if { $__debug_print != 0 } {
  724. puts ""
  725. }
  726. if { $__debug_on != 0 } {
  727. debug
  728. }
  729. flush stdout
  730. flush stderr
  731. set largs $save_largs
  732. error_check_good envclose [$env close] 0
  733. }
  734. } res]
  735. }
  736. if { $stat != 0} {
  737. global errorInfo;
  738. set fnl [string first "n" $errorInfo]
  739. set theError [string range $errorInfo 0 [expr $fnl - 1]]
  740. exec $KILL $dpid
  741. if {[string first FAIL $errorInfo] == -1} {
  742. error "FAIL:[timestamp]
  743.     run_rpcmethod: $type $i: $theError"
  744. } else {
  745. error $theError;
  746. }
  747. }
  748. exec $KILL $dpid
  749. }
  750. proc run_rpcnoserver { type {start 1} {stop 0} {largs ""} } {
  751. global __debug_on
  752. global __debug_print
  753. global parms
  754. global runtests
  755. source ./include.tcl
  756. if { $stop == 0 } {
  757. set stop $runtests
  758. }
  759. puts "run_rpcnoserver: $type $start $stop $largs"
  760. set save_largs $largs
  761. remote_cleanup $rpc_server $rpc_testdir $testdir
  762. set home [file tail $rpc_testdir]
  763. set txn ""
  764. set use_txn 0
  765. if { [string first "txn" $type] != -1 } {
  766. set use_txn 1
  767. }
  768. if { $use_txn == 1 } {
  769. if { $start == 1 } {
  770. set ntxns 32
  771. } else {
  772. set ntxns $start
  773. }
  774. set i 1
  775. check_handles
  776. remote_cleanup $rpc_server $rpc_testdir $testdir
  777. set env [eval {berkdb env -create -mode 0644 -home $home 
  778.     -server $rpc_server -client_timeout 10000} -txn]
  779. error_check_good env_open [is_valid_env $env] TRUE
  780. set stat [catch {eval txn001_suba $ntxns $env} res]
  781. if { $stat == 0 } {
  782. set stat [catch {eval txn001_subb $ntxns $env} res]
  783. }
  784. error_check_good envclose [$env close] 0
  785. } else {
  786. set stat [catch {
  787. for { set i $start } { $i <= $stop } {incr i} {
  788. check_handles
  789. set name [format "test%03d" $i]
  790. if { [info exists parms($name)] != 1 } {
  791. puts "[format Test%03d $i] disabled in
  792.     testparams.tcl; skipping."
  793. continue
  794. }
  795. remote_cleanup $rpc_server $rpc_testdir $testdir
  796. #
  797. # Set server cachesize to 1Mb.  Otherwise some
  798. # tests won't fit (like test084 -btree).
  799. #
  800. set env [eval {berkdb env -create -mode 0644 
  801.     -home $home -server $rpc_server 
  802.     -client_timeout 10000 
  803.     -cachesize {0 1048576 1} }]
  804. error_check_good env_open 
  805.     [is_valid_env $env] TRUE
  806. append largs " -env $env "
  807. puts "[timestamp]"
  808. eval $name $type $parms($name) $largs
  809. if { $__debug_print != 0 } {
  810. puts ""
  811. }
  812. if { $__debug_on != 0 } {
  813. debug
  814. }
  815. flush stdout
  816. flush stderr
  817. set largs $save_largs
  818. error_check_good envclose [$env close] 0
  819. }
  820. } res]
  821. }
  822. if { $stat != 0} {
  823. global errorInfo;
  824. set fnl [string first "n" $errorInfo]
  825. set theError [string range $errorInfo 0 [expr $fnl - 1]]
  826. if {[string first FAIL $errorInfo] == -1} {
  827. error "FAIL:[timestamp]
  828.     run_rpcnoserver: $type $i: $theError"
  829. } else {
  830. error $theError;
  831. }
  832. }
  833. }
  834. #
  835. # Run method tests in one environment.  (As opposed to run_envmethod1
  836. # which runs each test in its own, new environment.)
  837. #
  838. proc run_envmethod { type {start 1} {stop 0} {largs ""} } {
  839. global __debug_on
  840. global __debug_print
  841. global parms
  842. global runtests
  843. source ./include.tcl
  844. if { $stop == 0 } {
  845. set stop $runtests
  846. }
  847. puts "run_envmethod: $type $start $stop $largs"
  848. set save_largs $largs
  849. env_cleanup $testdir
  850. set txn ""
  851. set stat [catch {
  852. for { set i $start } { $i <= $stop } {incr i} {
  853. check_handles
  854. set env [eval {berkdb env -create -mode 0644 
  855.     -home $testdir}]
  856. error_check_good env_open [is_valid_env $env] TRUE
  857. append largs " -env $env "
  858. puts "[timestamp]"
  859. set name [format "test%03d" $i]
  860. if { [info exists parms($name)] != 1 } {
  861. puts "[format Test%03d $i] disabled in
  862.     testparams.tcl; skipping."
  863. continue
  864. }
  865. eval $name $type $parms($name) $largs
  866. if { $__debug_print != 0 } {
  867. puts ""
  868. }
  869. if { $__debug_on != 0 } {
  870. debug
  871. }
  872. flush stdout
  873. flush stderr
  874. set largs $save_largs
  875. error_check_good envclose [$env close] 0
  876. error_check_good envremove [berkdb envremove 
  877.     -home $testdir] 0
  878. }
  879. } res]
  880. if { $stat != 0} {
  881. global errorInfo;
  882. set fnl [string first "n" $errorInfo]
  883. set theError [string range $errorInfo 0 [expr $fnl - 1]]
  884. if {[string first FAIL $errorInfo] == -1} {
  885. error "FAIL:[timestamp]
  886.     run_envmethod: $type $i: $theError"
  887. } else {
  888. error $theError;
  889. }
  890. }
  891. }
  892. proc subdb { method display run {outfile stdout} args} {
  893. global subdbtests testdir
  894. global parms
  895. for { set i 1 } {$i <= $subdbtests} {incr i} {
  896. set name [format "subdb%03d" $i]
  897. if { [info exists parms($name)] != 1 } {
  898. puts "[format Subdb%03d $i] disabled in
  899.     testparams.tcl; skipping."
  900. continue
  901. }
  902. if { $display } {
  903. puts -nonewline $outfile "eval $name $method"
  904. puts -nonewline $outfile " $parms($name) $args;"
  905. puts $outfile "verify_dir $testdir "" 1"
  906. }
  907. if { $run } {
  908. check_handles $outfile
  909. eval $name $method $parms($name) $args
  910. verify_dir $testdir "" 1
  911. }
  912. flush stdout
  913. flush stderr
  914. }
  915. }
  916. proc run_recd { method {start 1} {stop 0} args } {
  917. global __debug_on
  918. global __debug_print
  919. global parms
  920. global recdtests
  921. global log_log_record_types
  922. source ./include.tcl
  923. if { $stop == 0 } {
  924. set stop $recdtests
  925. }
  926. puts "run_recd: $method $start $stop $args"
  927. if {[catch {
  928. for { set i $start } { $i <= $stop } {incr i} {
  929. check_handles
  930. puts "[timestamp]"
  931. set name [format "recd%03d" $i]
  932. # By redirecting stdout to stdout, we make exec
  933. # print output rather than simply returning it.
  934. exec $tclsh_path << "source $test_path/test.tcl; 
  935.     set log_log_record_types $log_log_record_types; 
  936.     eval $name $method" >@ stdout
  937. if { $__debug_print != 0 } {
  938. puts ""
  939. }
  940. if { $__debug_on != 0 } {
  941. debug
  942. }
  943. flush stdout
  944. flush stderr
  945. }
  946. } res] != 0} {
  947. global errorInfo;
  948. set fnl [string first "n" $errorInfo]
  949. set theError [string range $errorInfo 0 [expr $fnl - 1]]
  950. if {[string first FAIL $errorInfo] == -1} {
  951. error "FAIL:[timestamp]
  952.     run_recd: $method $i: $theError"
  953. } else {
  954. error $theError;
  955. }
  956. }
  957. }
  958. proc run_recds { } {
  959. global log_log_record_types
  960. set log_log_record_types 1
  961. logtrack_init
  962. foreach method 
  963.     "btree rbtree hash queue queueext recno frecno rrecno" {
  964. check_handles
  965. if { [catch 
  966.     {run_recd -$method} ret ] != 0 } {
  967. puts $ret
  968. }
  969. }
  970. logtrack_summary
  971. set log_log_record_types 0
  972. }
  973. proc run_all { args } {
  974. global runtests
  975. global subdbtests
  976. source ./include.tcl
  977. fileremove -f ALL.OUT
  978. set exflgs [eval extractflags $args]
  979. set flags [lindex $exflgs 1]
  980. set display 1
  981. set run 1
  982. set am_only 0
  983. set rflags {--}
  984. foreach f $flags {
  985. switch $f {
  986. m {
  987. set am_only 1
  988. }
  989. n {
  990. set display 1
  991. set run 0
  992. set rflags [linsert $rflags 0 "-n"]
  993. }
  994. }
  995. }
  996. set o [open ALL.OUT a]
  997. if { $run == 1 } {
  998. puts -nonewline "Test suite run started at: "
  999. puts [clock format [clock seconds] -format "%H:%M %D"]
  1000. puts [berkdb version -string]
  1001. puts -nonewline $o "Test suite run started at: "
  1002. puts $o [clock format [clock seconds] -format "%H:%M %D"]
  1003. puts $o [berkdb version -string]
  1004. }
  1005. close $o
  1006. #
  1007. # First run standard tests.  Send in a -A to let run_std know
  1008. # that it is part of the "run_all" run, so that it doesn't
  1009. # print out start/end times.
  1010. #
  1011. lappend args -A
  1012. eval {run_std} $args
  1013. set test_pagesizes { 512 8192 65536 }
  1014. set args [lindex $exflgs 0]
  1015. set save_args $args
  1016. foreach pgsz $test_pagesizes {
  1017. set args $save_args
  1018. append args " -pagesize $pgsz"
  1019. if { $am_only == 0 } {
  1020. # Run recovery tests.
  1021. #
  1022. # XXX These too are broken into separate tclsh
  1023. # instantiations so we don't require so much 
  1024. # memory, but I think it's cleaner
  1025. # and more useful to do it down inside proc r than here,
  1026. # since "r recd" gets done a lot and needs to work.
  1027. puts "Running recovery tests with pagesize $pgsz"
  1028. if [catch {exec $tclsh_path 
  1029.     << "source $test_path/test.tcl; 
  1030. r $rflags recd $args" >>& ALL.OUT } res] {
  1031. set o [open ALL.OUT a]
  1032. puts $o "FAIL: recd test"
  1033. close $o
  1034. }
  1035. }
  1036. # Access method tests.
  1037. #
  1038. # XXX
  1039. # Broken up into separate tclsh instantiations so 
  1040. # we don't require so much memory.
  1041. foreach i 
  1042.    "btree rbtree hash queue queueext recno frecno rrecno" {
  1043. puts "Running $i tests with pagesize $pgsz"
  1044. for { set j 1 } { $j <= $runtests } {incr j} {
  1045. if { $run == 0 } {
  1046. set o [open ALL.OUT a]
  1047. run_method -$i $j $j $display 
  1048.     $run $o $args
  1049. close $o
  1050. }
  1051. if { $run } {
  1052. if [catch {exec $tclsh_path 
  1053.     << "source $test_path/test.tcl; 
  1054.     run_method -$i $j $j $display 
  1055.     $run stdout $args" 
  1056.     >>& ALL.OUT } res] {
  1057. set o [open ALL.OUT a]
  1058. puts $o 
  1059.     "FAIL: [format 
  1060.     "test%03d" $j] $i"
  1061. close $o
  1062. }
  1063. }
  1064. }
  1065. #
  1066. # Run subdb tests with varying pagesizes too.
  1067. #
  1068. if { $run == 0 } {
  1069. set o [open ALL.OUT a]
  1070. subdb -$i $display $run $o $args
  1071. close $o
  1072. }
  1073. if { $run == 1 } {
  1074. if [catch {exec $tclsh_path 
  1075.     << "source $test_path/test.tcl; 
  1076.     subdb -$i $display $run stdout $args" 
  1077.     >>& ALL.OUT } res] {
  1078. set o [open ALL.OUT a]
  1079. puts $o "FAIL: subdb -$i test"
  1080. close $o
  1081. }
  1082. }
  1083. }
  1084. }
  1085. set args $save_args
  1086. #
  1087. # Run access method tests at default page size in one env.
  1088. #
  1089. foreach i "btree rbtree hash queue queueext recno frecno rrecno" {
  1090. puts "Running $i tests in an env"
  1091. if { $run == 0 } {
  1092. set o [open ALL.OUT a]
  1093. run_envmethod1 -$i 1 $runtests $display 
  1094.     $run $o $args
  1095. close $o
  1096. }
  1097. if { $run } {
  1098. if [catch {exec $tclsh_path 
  1099.     << "source $test_path/test.tcl; 
  1100.     run_envmethod1 -$i 1 $runtests $display 
  1101.     $run stdout $args" 
  1102.     >>& ALL.OUT } res] {
  1103. set o [open ALL.OUT a]
  1104. puts $o 
  1105.     "FAIL: run_envmethod1 $i"
  1106. close $o
  1107. }
  1108. }
  1109. }
  1110. # If not actually running, no need to check for failure.
  1111. if { $run == 0 } {
  1112. return
  1113. }
  1114. set failed 0
  1115. set o [open ALL.OUT r]
  1116. while { [gets $o line] >= 0 } {
  1117. if { [regexp {^FAIL} $line] != 0 } {
  1118. set failed 1
  1119. }
  1120. }
  1121. close $o
  1122. set o [open ALL.OUT a]
  1123. if { $failed == 0 } {
  1124. puts "Regression Tests Succeeded"
  1125. puts $o "Regression Tests Succeeded"
  1126. } else {
  1127. puts "Regression Tests Failed; see ALL.OUT for log"
  1128. puts $o "Regression Tests Failed"
  1129. }
  1130. puts -nonewline "Test suite run completed at: "
  1131. puts [clock format [clock seconds] -format "%H:%M %D"]
  1132. puts -nonewline $o "Test suite run completed at: "
  1133. puts $o [clock format [clock seconds] -format "%H:%M %D"]
  1134. close $o
  1135. }
  1136. #
  1137. # Run method tests in one environment.  (As opposed to run_envmethod
  1138. # which runs each test in its own, new environment.)
  1139. #
  1140. proc run_envmethod1 { method {start 1} {stop 0} {display 0} {run 1} 
  1141.     { outfile stdout } args } {
  1142. global __debug_on
  1143. global __debug_print
  1144. global parms
  1145. global runtests
  1146. source ./include.tcl
  1147. if { $stop == 0 } {
  1148. set stop $runtests
  1149. }
  1150. if { $run == 1 } {
  1151. puts "run_envmethod1: $method $start $stop $args"
  1152. }
  1153. set txn ""
  1154. if { $run == 1 } {
  1155. check_handles
  1156. env_cleanup $testdir
  1157. error_check_good envremove [berkdb envremove -home $testdir] 0
  1158. set env [eval {berkdb env -create -mode 0644 -home $testdir}]
  1159. error_check_good env_open [is_valid_env $env] TRUE
  1160. append largs " -env $env "
  1161. }
  1162. set stat [catch {
  1163. for { set i $start } { $i <= $stop } {incr i} {
  1164. set name [format "test%03d" $i]
  1165. if { [info exists parms($name)] != 1 } {
  1166. puts "[format Test%03d $i] disabled in
  1167.                                     testparams.tcl; skipping."  
  1168. continue
  1169. }
  1170. if { $display } {
  1171. puts -nonewline $outfile "eval $name $method"
  1172. puts -nonewline $outfile " $parms($name) $args"
  1173. puts $outfile " ; verify_dir $testdir "" 1"
  1174. }
  1175. if { $run } {
  1176. check_handles $outfile
  1177. puts $outfile "[timestamp]"
  1178. eval $name $method $parms($name) $largs
  1179. if { $__debug_print != 0 } {
  1180. puts $outfile ""
  1181. }
  1182. if { $__debug_on != 0 } {
  1183. debug
  1184. }
  1185. }
  1186. flush stdout
  1187. flush stderr
  1188. }
  1189. } res]
  1190. if { $run == 1 } {
  1191. error_check_good envclose [$env close] 0
  1192. }
  1193. if { $stat != 0} {
  1194. global errorInfo;
  1195. set fnl [string first "n" $errorInfo]
  1196. set theError [string range $errorInfo 0 [expr $fnl - 1]]
  1197. if {[string first FAIL $errorInfo] == -1} {
  1198. error "FAIL:[timestamp]
  1199.     run_envmethod1: $method $i: $theError"
  1200. } else {
  1201. error $theError;
  1202. }
  1203. }
  1204. }