diff options
author | Jesse Morgan <jesse@jesterpm.net> | 2016-12-17 21:28:53 -0800 |
---|---|---|
committer | Jesse Morgan <jesse@jesterpm.net> | 2016-12-17 21:28:53 -0800 |
commit | 54df2afaa61c6a03cbb4a33c9b90fa572b6d07b8 (patch) | |
tree | 18147b92b969d25ffbe61935fb63035cac820dd0 /db-4.8.30/test/sdb019.tcl |
Berkeley DB 4.8 with rust build script for linux.
Diffstat (limited to 'db-4.8.30/test/sdb019.tcl')
-rw-r--r-- | db-4.8.30/test/sdb019.tcl | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/db-4.8.30/test/sdb019.tcl b/db-4.8.30/test/sdb019.tcl new file mode 100644 index 0000000..760366d --- /dev/null +++ b/db-4.8.30/test/sdb019.tcl @@ -0,0 +1,139 @@ +# See the file LICENSE for redistribution information. +# +# Copyright (c) 1999-2009 Oracle. All rights reserved. +# +# $Id$ +# +# TEST sdb019 +# TEST Tests in-memory subdatabases. +# TEST Create an in-memory subdb. Test for persistence after +# TEST overflowing the cache. Test for conflicts when we have +# TEST two in-memory files. + +proc sdb019 { method { nentries 100 } args } { + source ./include.tcl + + set tnum "019" + set args [convert_args $method $args] + set omethod [convert_method $method] + + if { [is_queueext $method] == 1 } { + puts "Subdb$tnum: skipping for method $method" + return + } + puts "Subdb$tnum: $method ($args) in-memory subdb tests" + + # If we are using an env, then skip this test. It needs its own. + set eindex [lsearch -exact $args "-env"] + if { $eindex != -1 } { + set env NULL + incr eindex + set env [lindex $args $eindex] + puts "Subdb019 skipping for env $env" + return + } + + # In-memory dbs never go to disk, so we can't do checksumming. + # If the test module sent in the -chksum arg, get rid of it. + set chkindex [lsearch -exact $args "-chksum"] + if { $chkindex != -1 } { + set args [lreplace $args $chkindex $chkindex] + } + + # The standard cachesize isn't big enough for 64k pages. + set csize "0 262144 1" + set pgindex [lsearch -exact $args "-pagesize"] + if { $pgindex != -1 } { + incr pgindex + set pagesize [lindex $args $pgindex] + if { $pagesize > 16384 } { + set cache [expr 8 * $pagesize] + set csize "0 $cache 1" + } + } + + # Create the env. + env_cleanup $testdir + set env [eval berkdb_env -create {-cachesize $csize} \ + -home $testdir -txn] + error_check_good dbenv [is_valid_env $env] TRUE + + # Set filename to NULL; this allows us to create an in-memory + # named database. + set testfile "" + + # Create two in-memory subdb and test for conflicts. Try all the + # combinations of named (NULL/NAME) and purely temporary + # (NULL/NULL) databases. + # + foreach s1 { S1 "" } { + foreach s2 { S2 "" } { + puts "\tSubdb$tnum.a:\ + 2 in-memory subdbs (NULL/$s1, NULL/$s2)." + set sdb1 [eval {berkdb_open -create -mode 0644} \ + $args -env $env {$omethod $testfile $s1}] + error_check_good sdb1_open [is_valid_db $sdb1] TRUE + set sdb2 [eval {berkdb_open -create -mode 0644} \ + $args -env $env {$omethod $testfile $s2}] + error_check_good sdb1_open [is_valid_db $sdb2] TRUE + + # Subdatabases are open, now put something in. + set string1 STRING1 + set string2 STRING2 + for { set i 1 } { $i <= $nentries } { incr i } { + set key $i + error_check_good sdb1_put [$sdb1 put $key \ + [chop_data $method $string1.$key]] 0 + error_check_good sdb2_put [$sdb2 put $key \ + [chop_data $method $string2.$key]] 0 + } + + # If the subs are both NULL/NULL, we have two handles + # on the same db. Skip testing the contents. + if { $s1 != "" || $s2 != "" } { + # This can't work when both subs are NULL/NULL. + # Check contents. + for { set i 1 } { $i <= $nentries } { incr i } { + set key $i + set ret1 [lindex \ + [lindex [$sdb1 get $key] 0] 1] + error_check_good sdb1_get $ret1 \ + [pad_data $method $string1.$key] + set ret2 [lindex \ + [lindex [$sdb2 get $key] 0] 1] + error_check_good sdb2_get $ret2 \ + [pad_data $method $string2.$key] + } + + error_check_good sdb1_close [$sdb1 close] 0 + error_check_good sdb2_close [$sdb2 close] 0 + + # Reopen, make sure we get the right data. + set sdb1 [eval {berkdb_open -mode 0644} \ + $args -env $env {$omethod $testfile $s1}] + error_check_good \ + sdb1_open [is_valid_db $sdb1] TRUE + set sdb2 [eval {berkdb_open -mode 0644} \ + $args -env $env {$omethod $testfile $s2}] + error_check_good \ + sdb1_open [is_valid_db $sdb2] TRUE + + for { set i 1 } { $i <= $nentries } { incr i } { + set key $i + set ret1 [lindex \ + [lindex [$sdb1 get $key] 0] 1] + error_check_good sdb1_get $ret1 \ + [pad_data $method $string1.$key] + set ret2 [lindex \ + [lindex [$sdb2 get $key] 0] 1] + error_check_good sdb2_get $ret2 \ + [pad_data $method $string2.$key] + } + } + error_check_good sdb1_close [$sdb1 close] 0 + error_check_good sdb2_close [$sdb2 close] 0 + } + } + error_check_good env_close [$env close] 0 +} + |