proc fop003 { } {
global errorInfo
source ./include.tcl
env_cleanup $testdir
set tnum "003"
set testfile fop$tnum.db
puts "Fop$tnum: Test of required behavior for sendmail."
puts "\tFop$tnum.a: -truncate is not allowed within\
txn or locking env."
set envflags "lock txn"
foreach flag $envflags {
set env [berkdb_env_noerr -create -home $testdir -$flag]
set db [berkdb_open_noerr -create -btree -env $env $testfile]
error_check_good db_open [is_valid_db $db] TRUE
error_check_good db_close [$db close] 0
catch {[berkdb_open_noerr -truncate -btree -env $env \
$testfile]} res
error_check_good "$flag env not allowed" [is_substr $res \
"DB_TRUNCATE illegal with locking specified"] 1
error_check_good dbremove [$env dbremove $testfile] 0
error_check_good env_close [$env close] 0
error_check_good envremove [berkdb envremove -home $testdir] 0
}
puts "\tFop$tnum.b: -create is allowed on open of existing\
zero-length file."
set fd [open $testdir/foo w]
close $fd
catch {set db [berkdb_open_noerr -create -btree $testdir/foo]} res
error_check_good open_fail [is_substr $errorInfo \
"unexpected file type or format"] 1
error_check_good db_open [is_valid_db $db] TRUE
error_check_good db_close [$db close] 0
puts "\tFop$tnum.c: -create is ignored on open of existing\
non-zero-length file."
set key "key"
set data "data"
set file "file.db"
set db [berkdb_open -create -btree $testdir/$file]
error_check_good db_open [is_valid_db $db] TRUE
error_check_good db_put [$db put $key $data] 0
error_check_good db_close [$db close] 0
set db [berkdb_open -create -btree $testdir/$file]
error_check_good db_open2 [is_valid_db $db] TRUE
set ret [$db get $key]
error_check_good db_get [lindex [lindex $ret 0] 1] $data
error_check_good db_close2 [$db close] 0
puts "\tFop$tnum.d: -create is allowed on open -truncate of\
existing non-zero-length file."
set db [berkdb_open -create -truncate -btree $testdir/$file]
error_check_good db_open3 [is_valid_db $db] TRUE
set ret [$db get $key]
error_check_good db_get [lindex [lindex $ret 0] 1] ""
error_check_good db_close3 [$db close] 0
}