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 1.1.1.1 2003/11/20 22:13:56 toshok 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
}
|