summaryrefslogtreecommitdiff
path: root/db-4.8.30/test/sdb019.tcl
diff options
context:
space:
mode:
authorJesse Morgan <jesse@jesterpm.net>2016-12-17 21:28:53 -0800
committerJesse Morgan <jesse@jesterpm.net>2016-12-17 21:28:53 -0800
commit54df2afaa61c6a03cbb4a33c9b90fa572b6d07b8 (patch)
tree18147b92b969d25ffbe61935fb63035cac820dd0 /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.tcl139
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
+}
+