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