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

MySQL数据库

开发平台:

Visual C++

  1. # See the file LICENSE for redistribution information.
  2. #
  3. # Copyright (c) 1999, 2000
  4. # Sleepycat Software.  All rights reserved.
  5. #
  6. # $Id: env002.tcl,v 11.11 2000/08/25 14:21:50 sue Exp $
  7. #
  8. # Env Test 002
  9. # Test set_lg_dir and env name resolution
  10. # With an environment path specified using -home, and then again
  11. # with it specified by the environment variable DB_HOME:
  12. # 1) Make sure that the set_lg_dir option is respected
  13. # a) as a relative pathname.
  14. # b) as an absolute pathname.
  15. # 2) Make sure that the DB_LOG_DIR db_config argument is respected,
  16. # again as relative and absolute pathnames.
  17. # 3) Make sure that if -both- db_config and a file are present,
  18. # only the file is respected (see doc/env/naming.html).
  19. proc env002 { } {
  20. #   env002 is essentially just a small driver that runs
  21. # env002_body--formerly the entire test--twice;  once, it
  22. # supplies a "home" argument to use with environment opens,
  23. # and the second time it sets DB_HOME instead.
  24. #   Note that env002_body itself calls env002_run_test to run
  25. # the body of the actual test and check for the presence
  26. # of logs.  The nesting, I hope, makes this test's structure simpler.
  27. global env
  28. source ./include.tcl
  29. puts "Env002: set_lg_dir test."
  30. puts "tEnv002: Running with -home argument to berkdb env."
  31. env002_body "-home $testdir"
  32. puts "tEnv002: Running with environment variable DB_HOME set."
  33. set env(DB_HOME) $testdir
  34. env002_body "-use_environ"
  35. unset env(DB_HOME)
  36. puts "tEnv002: Running with both DB_HOME and -home set."
  37. # Should respect -only- -home, so we give it a bogus
  38. # environment variable setting.
  39. set env(DB_HOME) $testdir/bogus_home
  40. env002_body "-use_environ -home $testdir"
  41. unset env(DB_HOME)
  42. }
  43. proc env002_body { home_arg } {
  44. source ./include.tcl
  45. env_cleanup $testdir
  46. set logdir "logs_in_here"
  47. file mkdir $testdir/$logdir
  48. # Set up full path to $logdir for when we test absolute paths.
  49. set curdir [pwd]
  50. cd $testdir/$logdir
  51. set fulllogdir [pwd]
  52. cd $curdir
  53. env002_make_config $logdir
  54. # Run the meat of the test.
  55. env002_run_test a 1 "relative path, config file" $home_arg 
  56. $testdir/$logdir
  57. env_cleanup $testdir
  58. file mkdir $fulllogdir
  59. env002_make_config $fulllogdir
  60. # Run the test again
  61. env002_run_test a 2 "absolute path, config file" $home_arg 
  62. $fulllogdir
  63. env_cleanup $testdir
  64. # Now we try without a config file, but instead with db_config
  65. # relative paths
  66. file mkdir $testdir/$logdir
  67. env002_run_test b 1 "relative path, db_config" "$home_arg 
  68. -log_dir $logdir -data_dir ." 
  69. $testdir/$logdir
  70. env_cleanup $testdir
  71. # absolute
  72. file mkdir $fulllogdir
  73. env002_run_test b 2 "absolute path, db_config" "$home_arg 
  74. -log_dir $fulllogdir -data_dir ." 
  75. $fulllogdir
  76. env_cleanup $testdir
  77. # Now, set db_config -and- have a # DB_CONFIG file, and make
  78. # sure only the latter is honored.
  79. file mkdir $testdir/$logdir
  80. env002_make_config $logdir
  81. # note that we supply a -nonexistent- log dir to db_config
  82. env002_run_test c 1 "relative path, both db_config and file" 
  83. "$home_arg -log_dir $testdir/bogus 
  84. -data_dir ." $testdir/$logdir
  85. env_cleanup $testdir
  86. file mkdir $fulllogdir
  87. env002_make_config $fulllogdir
  88. # note that we supply a -nonexistent- log dir to db_config
  89. env002_run_test c 2 "relative path, both db_config and file" 
  90. "$home_arg -log_dir $fulllogdir/bogus 
  91. -data_dir ." $fulllogdir
  92. }
  93. proc env002_run_test { major minor msg env_args log_path} {
  94. global testdir
  95. set testfile "env002.db"
  96. puts "ttEnv002.$major.$minor: $msg"
  97. # Create an environment, with logging, and scribble some
  98. # stuff in a [btree] database in it.
  99. # puts [concat {berkdb env -create -log -private} $env_args]
  100. set dbenv [eval {berkdb env -create -log -private} $env_args]
  101. error_check_good env_open [is_valid_env $dbenv] TRUE
  102. set db [berkdb_open -env $dbenv -create -btree -mode 0644 $testfile]
  103. error_check_good db_open [is_valid_db $db] TRUE
  104. set key "some_key"
  105. set data "some_data"
  106. error_check_good db_put 
  107. [$db put $key [chop_data btree $data]] 0
  108. error_check_good db_close [$db close] 0
  109. error_check_good env_close [$dbenv close] 0
  110. # Now make sure the log file is where we want it to be.
  111. error_check_good db_exists [file exists $testdir/$testfile] 1
  112. error_check_good log_exists 
  113. [file exists $log_path/log.0000000001] 1
  114. }
  115. proc env002_make_config { logdir } {
  116. global testdir
  117. set cid [open $testdir/DB_CONFIG w]
  118. puts $cid "set_data_dir ."
  119. puts $cid "set_lg_dir $logdir"
  120. close $cid
  121. }