summaryrefslogtreecommitdiff
path: root/bdb/test/test017.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'bdb/test/test017.tcl')
-rw-r--r--bdb/test/test017.tcl123
1 files changed, 96 insertions, 27 deletions
diff --git a/bdb/test/test017.tcl b/bdb/test/test017.tcl
index 95fe82e081c..1f99aa328fb 100644
--- a/bdb/test/test017.tcl
+++ b/bdb/test/test017.tcl
@@ -1,22 +1,22 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2002
# Sleepycat Software. All rights reserved.
#
-# $Id: test017.tcl,v 11.13 2000/12/11 17:42:18 sue Exp $
-#
-# DB Test 17 {access method}
-# Run duplicates with small page size so that we test off page duplicates.
-# Then after we have an off-page database, test with overflow pages too.
+# $Id: test017.tcl,v 11.23 2002/06/20 19:01:02 sue Exp $
#
+# TEST test017
+# TEST Basic offpage duplicate test.
+# TEST
+# TEST Run duplicates with small page size so that we test off page duplicates.
+# TEST Then after we have an off-page database, test with overflow pages too.
proc test017 { method {contents 0} {ndups 19} {tnum 17} args } {
source ./include.tcl
set args [convert_args $method $args]
set omethod [convert_method $method]
- if { [is_record_based $method] == 1 || \
- [is_rbtree $method] == 1 } {
+ if { [is_record_based $method] == 1 || [is_rbtree $method] == 1 } {
puts "Test0$tnum skipping for method $method"
return
}
@@ -29,9 +29,8 @@ proc test017 { method {contents 0} {ndups 19} {tnum 17} args } {
}
}
- puts "Test0$tnum: $method ($args) Off page duplicate tests with $ndups duplicates"
-
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -43,6 +42,11 @@ proc test017 { method {contents 0} {ndups 19} {tnum 17} args } {
set testfile test0$tnum.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
set t2 $testdir/t2
@@ -52,7 +56,7 @@ proc test017 { method {contents 0} {ndups 19} {tnum 17} args } {
cleanup $testdir $env
set db [eval {berkdb_open \
- -create -truncate -mode 0644 -dup} $args {$omethod $testfile}]
+ -create -mode 0644 -dup} $args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set pflags ""
@@ -60,17 +64,22 @@ proc test017 { method {contents 0} {ndups 19} {tnum 17} args } {
set txn ""
set count 0
+ set file_list [get_file_list 1]
+ if { $txnenv == 1 } {
+ set flen [llength $file_list]
+ reduce_dups flen ndups
+ set file_list [lrange $file_list 0 $flen]
+ }
+ puts "Test0$tnum: $method ($args) Off page duplicate tests with $ndups duplicates"
+
set ovfl ""
# Here is the loop where we put and get each key/data pair
- set dbc [eval {$db cursor} $txn]
- puts -nonewline \
- "\tTest0$tnum.a: Creating duplicates with "
+ puts -nonewline "\tTest0$tnum.a: Creating duplicates with "
if { $contents != 0 } {
puts "file contents as key/data"
} else {
puts "file name as key/data"
}
- set file_list [glob ../*/*.c ./*.lo]
foreach f $file_list {
if { $contents != 0 } {
set fid [open $f r]
@@ -85,9 +94,17 @@ proc test017 { method {contents 0} {ndups 19} {tnum 17} args } {
}
for { set i 1 } { $i <= $ndups } { incr i } {
set datastr $i:$str
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} \
$txn $pflags {$str [chop_data $method $datastr]}]
error_check_good put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
#
@@ -101,6 +118,12 @@ proc test017 { method {contents 0} {ndups 19} {tnum 17} args } {
error_check_bad $f:dbget_dups [llength $ret] 0
error_check_good $f:dbget_dups1 [llength $ret] $ndups
set x 1
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
for {set ret [$dbc get "-set" $str]} \
{[llength $ret] != 0} \
{set ret [$dbc get "-next"] } {
@@ -119,9 +142,12 @@ proc test017 { method {contents 0} {ndups 19} {tnum 17} args } {
incr x
}
error_check_good "Test0$tnum:ndups:$str" [expr $x - 1] $ndups
+ error_check_good cursor_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
incr count
}
- error_check_good cursor_close [$dbc close] 0
# Now we will get each key from the DB and compare the results
# to the original.
@@ -145,19 +171,33 @@ proc test017 { method {contents 0} {ndups 19} {tnum 17} args } {
fileremove $t2.tmp
fileremove $t4.tmp
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dup_check $db $txn $t1 $dlist
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
if {$contents == 0} {
filesort $t1 $t3
- error_check_good Test0$tnum:diff($t3,$t2) \
- [filecmp $t3 $t2] 0
+ error_check_good Test0$tnum:diff($t3,$t2) [filecmp $t3 $t2] 0
# Now compare the keys to see if they match the file names
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dump_file $db $txn $t1 test017.check
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
filesort $t1 $t3
- error_check_good Test0$tnum:diff($t3,$t4) \
- [filecmp $t3 $t4] 0
+ error_check_good Test0$tnum:diff($t3,$t4) [filecmp $t3 $t4] 0
}
error_check_good db_close [$db close] 0
@@ -165,13 +205,20 @@ proc test017 { method {contents 0} {ndups 19} {tnum 17} args } {
error_check_good dbopen [is_valid_db $db] TRUE
puts "\tTest0$tnum.c: Checking file for correct duplicates after close"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dup_check $db $txn $t1 $dlist
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
if {$contents == 0} {
# Now compare the keys to see if they match the filenames
filesort $t1 $t3
- error_check_good Test0$tnum:diff($t3,$t2) \
- [filecmp $t3 $t2] 0
+ error_check_good Test0$tnum:diff($t3,$t2) [filecmp $t3 $t2] 0
}
error_check_good db_close [$db close] 0
@@ -204,6 +251,7 @@ proc test017 { method {contents 0} {ndups 19} {tnum 17} args } {
error_check_good db_close [$db close] 0
return
}
+
puts "\tTest0$tnum.e: Add overflow duplicate entries"
set ovfldup [expr $ndups + 1]
foreach f $ovfl {
@@ -214,20 +262,41 @@ proc test017 { method {contents 0} {ndups 19} {tnum 17} args } {
fconfigure $fid -translation binary
set fdata [read $fid]
close $fid
- set data $ovfldup:$fdata
+ set data $ovfldup:$fdata:$fdata:$fdata:$fdata
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} $txn $pflags {$f $data}]
error_check_good ovfl_put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
+
puts "\tTest0$tnum.f: Verify overflow duplicate entries"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dup_check $db $txn $t1 $dlist $ovfldup
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
filesort $t1 $t3
- error_check_good Test0$tnum:diff($t3,$t2) \
- [filecmp $t3 $t2] 0
+ error_check_good Test0$tnum:diff($t3,$t2) [filecmp $t3 $t2] 0
set stat [$db stat]
- error_check_bad overflow1 \
- [is_substr $stat "{{Overflow pages} 0}"] 1
+ if { [is_hash [$db get_type]] } {
+ error_check_bad overflow1_hash [is_substr $stat \
+ "{{Number of big pages} 0}"] 1
+ } else {
+ error_check_bad \
+ overflow1 [is_substr $stat "{{Overflow pages} 0}"] 1
+ }
error_check_good db_close [$db close] 0
}