summaryrefslogtreecommitdiff
path: root/db-4.8.30/test/fop003.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'db-4.8.30/test/fop003.tcl')
-rw-r--r--db-4.8.30/test/fop003.tcl94
1 files changed, 94 insertions, 0 deletions
diff --git a/db-4.8.30/test/fop003.tcl b/db-4.8.30/test/fop003.tcl
new file mode 100644
index 0000000..8785a3b
--- /dev/null
+++ b/db-4.8.30/test/fop003.tcl
@@ -0,0 +1,94 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2003-2009 Oracle. All rights reserved.
+#
+# $Id$
+#
+# TEST fop003
+# TEST
+# TEST Test behavior of create and truncate for compatibility
+# TEST with sendmail.
+# TEST 1. DB_TRUNCATE is not allowed with locking or transactions.
+# TEST 2. Can -create into zero-length existing file.
+# TEST 3. Can -create into non-zero-length existing file if and
+# TEST only if DB_TRUNCATE is specified.
+proc fop003 { method args } {
+ global errorInfo
+ source ./include.tcl
+ env_cleanup $testdir
+
+ if { [is_btree $method] != 1 } {
+ puts "Skipping fop003 for method $method"
+ return
+ }
+
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+
+ set tnum "003"
+ set testfile fop$tnum.db
+ puts "Fop$tnum ($method): 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 [eval {berkdb_open_noerr -create} \
+ $omethod $args -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 $omethod $args -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."
+ # Create an empty file, then open with -create. We get an
+ # error message warning us that this does not look like a
+ # DB file, but the open should succeed.
+ set fd [open $testdir/foo w]
+ close $fd
+ catch {set db [eval \
+ {berkdb_open_noerr -create} $omethod $args $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."
+ # Create a db file. Close and reopen with -create. Make
+ # sure that we still have the same file by checking the contents.
+ set key 1
+ set data "data"
+ set file "file.db"
+ set db [eval {berkdb_open -create $omethod} $args $testdir/$file]
+ error_check_good db_open [is_valid_db $db] TRUE
+ error_check_good db_put [$db put $key [chop_data $method $data]] 0
+ error_check_good db_close [$db close] 0
+ set db [eval {berkdb_open -create $omethod} $args $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] [pad_data $method $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."
+ # Use the file we already have with -truncate flag. The open
+ # should be successful, and when we query for the key that
+ # used to be there, we should get nothing.
+ set db [eval \
+ {berkdb_open -create -truncate $omethod} $args $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
+
+}