summaryrefslogtreecommitdiff
path: root/bdb/test/env007.tcl
blob: 5748d2dbc897fcdde209c4c4ac21df00b014ef83 (plain)
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
# See the file LICENSE for redistribution information.
#
# Copyright (c) 1999-2002
#	Sleepycat Software.  All rights reserved.
#
# $Id: env007.tcl,v 11.21 2002/08/12 20:49:36 sandstro Exp $
#
# TEST	env007
# TEST	Test various DB_CONFIG config file options.
# TEST	1) Make sure command line option is respected
# TEST	2) Make sure that config file option is respected
# TEST	3) Make sure that if -both- DB_CONFIG and the set_<whatever>
# TEST		method is used,	only the file is respected.
# TEST	Then test all known config options.
proc env007 { } {
	global errorInfo

	#   env007 is essentially just a small driver that runs
	# env007_body twice.  First, it supplies a "set" argument
	# to use with environment opens, and the second time it sets
	# DB_CONFIG instead.
	#   Note that env007_body itself calls env007_run_test to run
	# the body of the actual test.

	source ./include.tcl

	puts "Env007: DB_CONFIG test."

	#
	# Test only those options we can easily check via stat
	#
	set rlist {
	{ " -txn_max " "set_tx_max" "19" "31" "Env007.a: Txn Max"
	    "txn_stat" "Max Txns"}
	{ " -lock_max_locks " "set_lk_max_locks" "17" "29" "Env007.b: Lock Max"
	    "lock_stat" "Maximum locks"}
	{ " -lock_max_lockers " "set_lk_max_lockers" "1500" "2000"
	    "Env007.c: Max Lockers" "lock_stat" "Maximum lockers"}
	{ " -lock_max_objects " "set_lk_max_objects" "1500" "2000"
	    "Env007.d: Max Objects" "lock_stat" "Maximum objects"}
	{ " -log_buffer " "set_lg_bsize" "65536" "131072" "Env007.e: Log Bsize"
	    "log_stat" "Log record cache size"}
	{ " -log_max " "set_lg_max" "8388608" "9437184" "Env007.f: Log Max"
	    "log_stat" "Current log file size"}
	}

	set e "berkdb_env -create -mode 0644 -home $testdir -log -lock -txn "
	foreach item $rlist {
		set envarg [lindex $item 0]
		set configarg [lindex $item 1]
		set envval [lindex $item 2]
		set configval [lindex $item 3]
		set msg [lindex $item 4]
		set statcmd [lindex $item 5]
		set statstr [lindex $item 6]

		env_cleanup $testdir
		# First verify using just env args
		puts "\t$msg Environment argument only"
		set env [eval $e $envarg $envval]
		error_check_good envopen:0 [is_valid_env $env] TRUE
		env007_check $env $statcmd $statstr $envval
		error_check_good envclose:0 [$env close] 0

		env_cleanup $testdir
		env007_make_config $configarg $configval

		#  verify using just config file
		puts "\t$msg Config file only"
		set env [eval $e]
		error_check_good envopen:1 [is_valid_env $env] TRUE
		env007_check $env $statcmd $statstr $configval
		error_check_good envclose:1 [$env close] 0

		# First verify using just env args
		puts "\t$msg Environment arg and config file"
		set env [eval $e $envarg $envval]
		error_check_good envopen:2 [is_valid_env $env] TRUE
		env007_check $env $statcmd $statstr $configval
		error_check_good envclose:2 [$env close] 0
	}

	#
	# Test all options.  For all config options, write it out
	# to the file and make sure we can open the env.  We cannot
	# necessarily check via stat that it worked but this execs
	# the config file code itself.
	#
	set cfglist {
	{ "set_cachesize" "0 1048576 0" }
	{ "set_data_dir" "." }
	{ "set_flags" "db_cdb_alldb" }
	{ "set_flags" "db_direct_db" }
	{ "set_flags" "db_direct_log" }
	{ "set_flags" "db_nolocking" }
	{ "set_flags" "db_nommap" }
	{ "set_flags" "db_nopanic" }
	{ "set_flags" "db_overwrite" }
	{ "set_flags" "db_region_init" }
	{ "set_flags" "db_txn_nosync" }
	{ "set_flags" "db_txn_write_nosync" }
	{ "set_flags" "db_yieldcpu" }
	{ "set_lg_bsize" "65536" }
	{ "set_lg_dir" "." }
	{ "set_lg_max" "8388608" }
	{ "set_lg_regionmax" "65536" }
	{ "set_lk_detect" "db_lock_default" }
	{ "set_lk_detect" "db_lock_expire" }
	{ "set_lk_detect" "db_lock_maxlocks" }
	{ "set_lk_detect" "db_lock_minlocks" }
	{ "set_lk_detect" "db_lock_minwrite" }
	{ "set_lk_detect" "db_lock_oldest" }
	{ "set_lk_detect" "db_lock_random" }
	{ "set_lk_detect" "db_lock_youngest" }
	{ "set_lk_max" "50" }
	{ "set_lk_max_lockers" "1500" }
	{ "set_lk_max_locks" "29" }
	{ "set_lk_max_objects" "1500" }
	{ "set_lock_timeout" "100" }
	{ "set_mp_mmapsize" "12582912" }
	{ "set_region_init" "1" }
	{ "set_shm_key" "15" }
	{ "set_tas_spins" "15" }
	{ "set_tmp_dir" "." }
	{ "set_tx_max" "31" }
	{ "set_txn_timeout" "100" }
	{ "set_verbose" "db_verb_chkpoint" }
	{ "set_verbose" "db_verb_deadlock" }
	{ "set_verbose" "db_verb_recovery" }
	{ "set_verbose" "db_verb_waitsfor" }
	}

	puts "\tEnv007.g: Config file settings"
	set e "berkdb_env -create -mode 0644 -home $testdir -log -lock -txn "
	foreach item $cfglist {
		env_cleanup $testdir
		set configarg [lindex $item 0]
		set configval [lindex $item 1]

		env007_make_config $configarg $configval

		#  verify using just config file
		puts "\t\t $configarg $configval"
		set env [eval $e]
		error_check_good envvalid:1 [is_valid_env $env] TRUE
		error_check_good envclose:1 [$env close] 0
	}

	set cfglist {
	{ "set_cachesize" "1048576" }
	{ "set_flags" "db_xxx" }
	{ "set_flags" "1" }
	{ "set_flags" "db_txn_nosync x" }
	{ "set_lg_bsize" "db_xxx" }
	{ "set_lg_max" "db_xxx" }
	{ "set_lg_regionmax" "db_xxx" }
	{ "set_lk_detect" "db_xxx" }
	{ "set_lk_detect" "1" }
	{ "set_lk_detect" "db_lock_youngest x" }
	{ "set_lk_max" "db_xxx" }
	{ "set_lk_max_locks" "db_xxx" }
	{ "set_lk_max_lockers" "db_xxx" }
	{ "set_lk_max_objects" "db_xxx" }
	{ "set_mp_mmapsize" "db_xxx" }
	{ "set_region_init" "db_xxx" }
	{ "set_shm_key" "db_xxx" }
	{ "set_tas_spins" "db_xxx" }
	{ "set_tx_max" "db_xxx" }
	{ "set_verbose" "db_xxx" }
	{ "set_verbose" "1" }
	{ "set_verbose" "db_verb_recovery x" }
	}
	puts "\tEnv007.h: Config value errors"
	set e "berkdb_env_noerr -create -mode 0644 \
	    -home $testdir -log -lock -txn "
	foreach item $cfglist {
		set configarg [lindex $item 0]
		set configval [lindex $item 1]

		env007_make_config $configarg $configval

		#  verify using just config file
		puts "\t\t $configarg $configval"
		set stat [catch {eval $e} ret]
		error_check_good envopen $stat 1
		error_check_good error [is_substr $errorInfo \
		    "incorrect arguments for name-value pair"] 1
	}

	puts "\tEnv007.i: Config name error set_xxx"
	set e "berkdb_env_noerr -create -mode 0644 \
	    -home $testdir -log -lock -txn "
	env007_make_config "set_xxx" 1
	set stat [catch {eval $e} ret]
	error_check_good envopen $stat 1
	error_check_good error [is_substr $errorInfo \
		    "unrecognized name-value pair"] 1
}

proc env007_check { env statcmd statstr testval } {
	set stat [$env $statcmd]
	set checked 0
	foreach statpair $stat {
		if {$checked == 1} {
			break
		}
		set statmsg [lindex $statpair 0]
		set statval [lindex $statpair 1]
		if {[is_substr $statmsg $statstr] != 0} {
			set checked 1
			error_check_good $statstr:ck $statval $testval
		}
	}
	error_check_good $statstr:test $checked 1
}

proc env007_make_config { carg cval } {
	global testdir

	set cid [open $testdir/DB_CONFIG w]
	puts $cid "$carg $cval"
	close $cid
}