summaryrefslogtreecommitdiff
path: root/db/test/txn.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'db/test/txn.tcl')
-rw-r--r--db/test/txn.tcl181
1 files changed, 181 insertions, 0 deletions
diff --git a/db/test/txn.tcl b/db/test/txn.tcl
new file mode 100644
index 000000000..904ef5fdc
--- /dev/null
+++ b/db/test/txn.tcl
@@ -0,0 +1,181 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Sleepycat Software. All rights reserved.
+#
+# $Id: txn.tcl,v 11.12 2000/12/31 19:26:23 bostic Exp $
+#
+# Options are:
+# -dir <directory in which to store memp>
+# -max <max number of concurrent transactions>
+# -iterations <iterations>
+# -stat
+proc txn_usage {} {
+ puts "txn -dir <directory> -iterations <number of ops> \
+ -max <max number of transactions> -stat"
+}
+
+proc txntest { args } {
+ source ./include.tcl
+
+ # Set defaults
+ set iterations 50
+ set max 1024
+ set dostat 0
+ set flags ""
+ for { set i 0 } { $i < [llength $args] } {incr i} {
+ switch -regexp -- [lindex $args $i] {
+ -d.* { incr i; set testdir [lindex $args $i] }
+ -f.* { incr i; set flags [lindex $args $i] }
+ -i.* { incr i; set iterations [lindex $args $i] }
+ -m.* { incr i; set max [lindex $args $i] }
+ -s.* { set dostat 1 }
+ default {
+ puts -nonewline "FAIL:[timestamp] Usage: "
+ txn_usage
+ return
+ }
+ }
+ }
+ if { $max < $iterations } {
+ set max $iterations
+ }
+
+ # Now run the various functionality tests
+ txn001 $testdir $max $iterations $flags
+ txn002 $testdir $max $iterations
+}
+
+proc txn001 { dir max ntxns flags} {
+ source ./include.tcl
+
+ puts "Txn001: Basic begin, commit, abort"
+
+ # Open environment
+ env_cleanup $dir
+
+ set env [eval {berkdb \
+ env -create -mode 0644 -txn -txn_max $max -home $dir} $flags]
+ error_check_good evn_open [is_valid_env $env] TRUE
+ txn001_suba $ntxns $env
+ txn001_subb $ntxns $env
+ txn001_subc $ntxns $env
+ # Close and unlink the file
+ error_check_good env_close:$env [$env close] 0
+}
+
+proc txn001_suba { ntxns env } {
+ source ./include.tcl
+
+ # We will create a bunch of transactions and commit them.
+ set txn_list {}
+ set tid_list {}
+ puts "Txn001.a: Beginning/Committing $ntxns Transactions in $env"
+ for { set i 0 } { $i < $ntxns } { incr i } {
+ set txn [$env txn]
+ error_check_good txn_begin [is_valid_txn $txn $env] TRUE
+
+ lappend txn_list $txn
+
+ set tid [$txn id]
+ error_check_good tid_check [lsearch $tid_list $tid] -1
+
+ lappend tid_list $tid
+ }
+
+ # Now commit them all
+ foreach t $txn_list {
+ error_check_good txn_commit:$t [$t commit] 0
+ }
+}
+
+proc txn001_subb { ntxns env } {
+ # We will create a bunch of transactions and abort them.
+ set txn_list {}
+ set tid_list {}
+ puts "Txn001.b: Beginning/Aborting Transactions"
+ for { set i 0 } { $i < $ntxns } { incr i } {
+ set txn [$env txn]
+ error_check_good txn_begin [is_valid_txn $txn $env] TRUE
+
+ lappend txn_list $txn
+
+ set tid [$txn id]
+ error_check_good tid_check [lsearch $tid_list $tid] -1
+
+ lappend tid_list $tid
+ }
+
+ # Now abort them all
+ foreach t $txn_list {
+ error_check_good txn_abort:$t [$t abort] 0
+ }
+}
+
+proc txn001_subc { ntxns env } {
+ # We will create a bunch of transactions and commit them.
+ set txn_list {}
+ set tid_list {}
+ puts "Txn001.c: Beginning/Prepare/Committing Transactions"
+ for { set i 0 } { $i < $ntxns } { incr i } {
+ set txn [$env txn]
+ error_check_good txn_begin [is_valid_txn $txn $env] TRUE
+
+ lappend txn_list $txn
+
+ set tid [$txn id]
+ error_check_good tid_check [lsearch $tid_list $tid] -1
+
+ lappend tid_list $tid
+ }
+
+ # Now prepare them all
+ foreach t $txn_list {
+ error_check_good txn_prepare:$t [$t prepare] 0
+ }
+
+ # Now commit them all
+ foreach t $txn_list {
+ error_check_good txn_commit:$t [$t commit] 0
+ }
+
+}
+
+# Verify that read-only transactions do not create any log records
+proc txn002 { dir max ntxns } {
+ source ./include.tcl
+
+ puts "Txn002: Read-only transaction test"
+
+ env_cleanup $dir
+ set env [berkdb \
+ env -create -mode 0644 -txn -txn_max $max -home $dir]
+ error_check_good dbenv [is_valid_env $env] TRUE
+
+ # We will create a bunch of transactions and commit them.
+ set txn_list {}
+ set tid_list {}
+ puts "Txn002.a: Beginning/Committing Transactions"
+ for { set i 0 } { $i < $ntxns } { incr i } {
+ set txn [$env txn]
+ error_check_good txn_begin [is_valid_txn $txn $env] TRUE
+
+ lappend txn_list $txn
+
+ set tid [$txn id]
+ error_check_good tid_check [lsearch $tid_list $tid] -1
+
+ lappend tid_list $tid
+ }
+
+ # Now commit them all
+ foreach t $txn_list {
+ error_check_good txn_commit:$t [$t commit] 0
+ }
+
+ # Now verify that there aren't any log records.
+ set r [$env log_get -first]
+ error_check_good log_get:$r [llength $r] 0
+
+ error_check_good env_close:$r [$env close] 0
+}