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
|
# See the file LICENSE for redistribution information.
#
# Copyright (c) 1999-2009 Oracle. All rights reserved.
#
# $Id$
#
# 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
}
|