proc test061 { method args } {
global alphabet
global encrypt
global errorCode
global passwd
source ./include.tcl
set eindex [lsearch -exact $args "-env"]
if { $eindex != -1 } {
incr eindex
set env [lindex $args $eindex]
puts "Test061 skipping for env $env"
return
}
set args [convert_args $method $args]
set omethod [convert_method $method]
if { [is_queueext $method] == 1} {
puts "Test061 skipping for method $method"
return
}
set encargs ""
set args [split_encargs $args encargs]
puts "Test061: Transaction abort and commit test for in-memory data."
puts "Test061: $method $args"
set key "key"
set data "data"
set otherdata "otherdata"
set txn ""
set flags ""
set gflags ""
if { [is_record_based $method] == 1} {
set key 1
set gflags " -recno"
}
puts "\tTest061: Create environment and $method database."
env_cleanup $testdir
set eflags "-create -txn $encargs -home $testdir"
set dbenv [eval {berkdb_env} $eflags]
error_check_good dbenv [is_valid_env $dbenv] TRUE
set flags "-auto_commit -create $args $omethod"
set db [eval {berkdb_open -env} $dbenv $flags]
error_check_good dbopen [is_valid_db $db] TRUE
puts "\tTest061.a: put/abort"
set txn [$dbenv txn]
error_check_good txn_begin [is_valid_txn $txn $dbenv] TRUE
set ret [eval {$db put} -txn $txn {$key [chop_data $method $data]}]
error_check_good db_put $ret 0
set ret [eval {$db get} -txn $txn $gflags {$key}]
error_check_good get $ret [list [list $key [pad_data $method $data]]]
error_check_good txn_abort [$txn abort] 0
set ret [eval {$db get} $gflags {$key}]
error_check_good get $ret {}
puts "\tTest061.b: put/commit"
set txn [$dbenv txn]
error_check_good txn_begin [is_valid_txn $txn $dbenv] TRUE
set ret [eval {$db put} -txn $txn {$key [chop_data $method $data]}]
error_check_good db_put $ret 0
set ret [eval {$db get} -txn $txn $gflags {$key}]
error_check_good get $ret [list [list $key [pad_data $method $data]]]
error_check_good txn_commit [$txn commit] 0
set ret [eval {$db get} $gflags {$key}]
error_check_good get $ret [list [list $key [pad_data $method $data]]]
puts "\tTest061.c: overwrite/abort"
set txn [$dbenv txn]
error_check_good txn_begin [is_valid_txn $txn $dbenv] TRUE
set ret [eval {$db put} -txn $txn {$key [chop_data $method $otherdata]}]
error_check_good db_put $ret 0
set ret [eval {$db get} -txn $txn $gflags {$key}]
error_check_good get $ret \
[list [list $key [pad_data $method $otherdata]]]
error_check_good txn_abort [$txn abort] 0
set ret [eval {$db get} $gflags {$key}]
error_check_good get $ret [list [list $key [pad_data $method $data]]]
puts "\tTest061.d: overwrite/commit"
set txn [$dbenv txn]
error_check_good txn_begin [is_valid_txn $txn $dbenv] TRUE
set ret [eval {$db put} -txn $txn {$key [chop_data $method $otherdata]}]
error_check_good db_put $ret 0
set ret [eval {$db get} -txn $txn $gflags {$key}]
error_check_good get $ret \
[list [list $key [pad_data $method $otherdata]]]
error_check_good txn_commit [$txn commit] 0
set ret [eval {$db get} $gflags {$key}]
error_check_good get $ret \
[list [list $key [pad_data $method $otherdata]]]
puts "\tTest061.e: delete/abort"
set txn [$dbenv txn]
error_check_good txn_begin [is_valid_txn $txn $dbenv] TRUE
set ret [eval {$db del} -txn $txn {$key}]
error_check_good db_put $ret 0
set ret [eval {$db get} -txn $txn $gflags {$key}]
error_check_good get $ret {}
error_check_good txn_abort [$txn abort] 0
set ret [eval {$db get} $gflags {$key}]
error_check_good get $ret \
[list [list $key [pad_data $method $otherdata]]]
puts "\tTest061.f: delete/commit"
set txn [$dbenv txn]
error_check_good txn_begin [is_valid_txn $txn $dbenv] TRUE
set ret [eval {$db del} -txn $txn {$key}]
error_check_good db_put $ret 0
set ret [eval {$db get} -txn $txn $gflags {$key}]
error_check_good get $ret {}
error_check_good txn_commit [$txn commit] 0
set ret [eval {$db get} $gflags {$key}]
error_check_good get $ret {}
error_check_good db_close [eval {$db close}] 0
error_check_good env_close [eval {$dbenv close}] 0
set utilflag ""
if { $encrypt != 0 } {
set utilflag "-P $passwd"
}
puts "\tTest061.g: Running db_recover -h"
set ret [catch {eval {exec} $util_path/db_recover -h $testdir \
$utilflag} res]
if { $ret != 0 } {
puts "FAIL: db_recover outputted $res"
}
error_check_good db_recover $ret 0
puts "\tTest061.h: Running db_recover -c -h"
set ret [catch {eval {exec} $util_path/db_recover -c -h $testdir \
$utilflag} res]
error_check_good db_recover-c $ret 0
}