summaryrefslogtreecommitdiff
path: root/test/fop005.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'test/fop005.tcl')
-rw-r--r--test/fop005.tcl147
1 files changed, 147 insertions, 0 deletions
diff --git a/test/fop005.tcl b/test/fop005.tcl
new file mode 100644
index 00000000..ccb5eea9
--- /dev/null
+++ b/test/fop005.tcl
@@ -0,0 +1,147 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2000-2009 Oracle. All rights reserved.
+#
+# $Id$
+#
+# 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
+ }
+ }
+ }
+}