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

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: test045.tcl,v 11.17 2000/10/19 23:15:22 ubell Exp $
  7. #
  8. # DB Test 45 Run the random db tester on the specified access method.
  9. # Options are:
  10. # -adds <maximum number of keys before you disable adds>
  11. # -cursors <number of cursors>
  12. # -dataavg <average data size>
  13. # -delete <minimum number of keys before you disable deletes>
  14. # -dups <allow duplicates in file>
  15. # -errpct <Induce errors errpct of the time>
  16. # -init <initial number of entries in database>
  17. # -keyavg <average key size>
  18. proc test045 { method {nops 10000} args } {
  19. source ./include.tcl
  20. if { [is_frecno $method] == 1 } {
  21. puts "tSkipping Test045 for method $method."
  22. return
  23. }
  24. #
  25. # If we are using an env, then skip this test.  It needs its own.
  26. set eindex [lsearch -exact $args "-env"]
  27. if { $eindex != -1 } {
  28. incr eindex
  29. set env [lindex $args $eindex]
  30. puts "Test045 skipping for env $env"
  31. return
  32. }
  33. set args [convert_args $method $args]
  34. set omethod [convert_method $method]
  35. puts "Test045: Random tester on $method for $nops operations"
  36. # Set initial parameters
  37. set adds [expr $nops * 10]
  38. set cursors 5
  39. set dataavg 40
  40. set delete $nops
  41. set dups 0
  42. set errpct 0
  43. set init 0
  44. if { [is_record_based $method] == 1 } {
  45. set keyavg 10
  46. } else {
  47. set keyavg 25
  48. }
  49. # Process arguments
  50. set oargs ""
  51. for { set i 0 } { $i < [llength $args] } {incr i} {
  52. switch -regexp -- [lindex $args $i] {
  53. -adds  { incr i; set adds [lindex $args $i] }
  54. -cursors { incr i; set cursors [lindex $args $i] }
  55. -dataavg { incr i; set dataavg [lindex $args $i] }
  56. -delete  { incr i; set delete [lindex $args $i] }
  57. -dups  { incr i; set dups [lindex $args $i] }
  58. -errpct  { incr i; set errpct [lindex $args $i] }
  59. -init  { incr i; set init [lindex $args $i] }
  60. -keyavg  { incr i; set keyavg [lindex $args $i] }
  61. -extent  { incr i; 
  62.     lappend oargs "-extent" "100" }
  63. default  { lappend oargs [lindex $args $i] }
  64. }
  65. }
  66. # Create the database and and initialize it.
  67. set root $testdir/test045
  68. set f $root.db
  69. env_cleanup $testdir
  70. # Run the script with 3 times the number of initial elements to
  71. # set it up.
  72. set db [eval {berkdb_open 
  73.      -create -truncate -mode 0644 $omethod} $oargs {$f}]
  74. error_check_good dbopen:$f [is_valid_db $db] TRUE
  75. set r [$db close]
  76. error_check_good dbclose:$f $r 0
  77. # We redirect standard out, but leave standard error here so we
  78. # can see errors.
  79. puts "tTest045.a: Initializing database"
  80. if { $init != 0 } {
  81. set n [expr 3 * $init]
  82. exec $tclsh_path 
  83.     $test_path/dbscript.tcl $f $n 
  84.     1 $init $n $keyavg $dataavg $dups 0 -1 
  85.     > $testdir/test045.init
  86. }
  87. # Check for test failure
  88. set e [findfail $testdir/test045.init]
  89. error_check_good "FAIL: error message(s) in init file" $e 0
  90. puts "tTest045.b: Now firing off berkdb rand dbscript, running: "
  91. # Now the database is initialized, run a test
  92. puts "$tclsh_path
  93.     $test_path/dbscript.tcl $f $nops $cursors $delete $adds 
  94.     $keyavg $dataavg $dups $errpct > $testdir/test045.log"
  95. exec $tclsh_path 
  96.     $test_path/dbscript.tcl $f 
  97.     $nops $cursors $delete $adds $keyavg 
  98.     $dataavg $dups $errpct 
  99.     > $testdir/test045.log
  100. # Check for test failure
  101. set e [findfail $testdir/test045.log]
  102. error_check_good "FAIL: error message(s) in log file" $e 0
  103. }