# See the file LICENSE for redistribution information. # # Copyright (c) 2000,2008 Oracle. All rights reserved. # # $Id: fop005.tcl,v 12.6 2008/01/08 20:58:53 bostic Exp $ # # TEST fop005 # TEST Test of DB->remove() # TEST Formerly test080. # TEST Test use of dbremove with and without envs, with absolute # TEST and relative paths, and with subdirectories. proc fop005 { method args } { source ./include.tcl set tnum "005" set args [convert_args $method $args] set omethod [convert_method $method] puts "Fop$tnum: ($method $args): Test of DB->remove()" # Determine full path set curdir [pwd] cd $testdir set fulldir [pwd] cd $curdir set reldir $testdir # If we are using an env, then skip this test. # It needs its own. set eindex [lsearch -exact $args "-env"] if { $eindex != -1 } { incr eindex set env [lindex $args $eindex] puts "Skipping fop$tnum for env $env" return } cleanup $testdir NULL # Set up absolute and relative pathnames, and a subdirectory. set subdira A set filename fop$tnum.db set extentname __dbq.$filename.0 set paths [list $fulldir $reldir] set files [list "$filename $extentname"\ "$subdira/$filename $subdira/$extentname"] foreach path $paths { foreach fileset $files { set filename [lindex $fileset 0] set extentname [lindex $fileset 1] # Loop through test using the following options: # 1. no environment, not in transaction # 2. with environment, not in transaction # 3. remove with auto-commit # 4. remove in committed transaction # 5. remove in aborted transaction foreach op "noenv env auto commit abort" { file mkdir $testdir/$subdira if { $op == "noenv" } { set file $path/$filename set extentfile $path/$extentname set env NULL set envargs "" } else { set file $filename set extentfile $extentname set largs " -txn" if { $op == "env" } { set largs "" } set env [eval {berkdb_env -create \ -home $path} $largs] set envargs " -env $env " error_check_good \ env_open [is_valid_env $env] TRUE } puts "\tFop$tnum: dbremove with $op\ in path $path" puts "\t\tFop$tnum.a.1: Create file $file" set db [eval {berkdb_open -create -mode 0644} \ $omethod $envargs $args {$file}] error_check_good db_open [is_valid_db $db] TRUE # Use a numeric key so record-based methods # don't need special treatment. set key 1 set data [pad_data $method data] error_check_good dbput \ [$db put $key [chop_data $method $data]] 0 error_check_good dbclose [$db close] 0 check_file_exist $file $env $path 1 if { [is_queueext $method] == 1 } { check_file_exist \ $extentfile $env $path 1 } # Use berkdb dbremove for non-txn tests # and $env dbremove for transactional tests puts "\t\tFop$tnum.a.2: Remove file" if { $op == "noenv" || $op == "env" } { error_check_good remove_$op \ [eval {berkdb dbremove} \ $envargs $file] 0 } elseif { $op == "auto" } { error_check_good remove_$op \ [eval {$env dbremove} \ -auto_commit $file] 0 } else { # $op is "abort" or "commit" set txn [$env txn] error_check_good remove_$op \ [eval {$env dbremove} \ -txn $txn $file] 0 error_check_good txn_$op [$txn $op] 0 } puts "\t\tFop$tnum.a.3: Check that file is gone" # File should now be gone, unless the op is an # abort. Check extent files if necessary. if { $op != "abort" } { check_file_exist $file $env $path 0 if { [is_queueext $method] == 1 } { check_file_exist \ $extentfile $env $path 0 } } else { check_file_exist $file $env $path 1 if { [is_queueext $method] == 1 } { check_file_exist \ $extentfile $env $path 1 } } if { $env != "NULL" } { error_check_good envclose [$env close] 0 } env_cleanup $path check_file_exist $file $env $path 0 } } } }