diff options
Diffstat (limited to 'test/test106.tcl')
-rw-r--r-- | test/test106.tcl | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/test/test106.tcl b/test/test106.tcl new file mode 100644 index 0000000..a9177bd --- /dev/null +++ b/test/test106.tcl @@ -0,0 +1,113 @@ +# See the file LICENSE for redistribution information. +# +# Copyright (c) 2003-2009 Oracle. All rights reserved. +# +# $Id$ +# +# TEST test106 +# TEST +# TEST +# TEST +proc test106 { method {nitems 100} {niter 200} {tnum "106"} args } { + source ./include.tcl + global dict + global rand_init + + # Set random seed for use in t106script procs op2 and create_data. + error_check_good set_random_seed [berkdb srand $rand_init] 0 + + set args [convert_args $method $args] + set omethod [convert_method $method] + set pageargs "" + split_pageargs $args pageargs + + if { [is_btree $method] != 1 } { + puts "\tTest$tnum: Skipping for method $method." + return + } + + # Skip for specified pagesizes. This test runs at the native + # pagesize. (For SR #7964 testing, we may need to force + # to 8192.) + set pgindex [lsearch -exact $args "-pagesize"] + if { $pgindex != -1 } { + puts "Test$tnum: Skipping for specific pagesizes" + return + } + + # This test needs a txn-enabled environment. If one is not + # provided, create it. + # + set eindex [lsearch -exact $args "-env"] + if { $eindex == -1 } { + set env \ + [eval {berkdb_env -create -home $testdir -txn} $pageargs] + } else { + incr eindex + set env [lindex $args $eindex] + set txnenv [is_txnenv $env] + if { $txnenv != 1 } { + puts "Skipping test$tnum for non-txn environment." + return + } + set testdir [get_home $env] + } + + cleanup $testdir $env + + # The bulk of the work of this test is done in t106script.tcl. + # Here we kick off one consumer, then five producers, then sit + # back and wait for them to finish. + foreach order { ordered random } { + set nproducers 5 + + puts "\tTest$tnum.a: Start deadlock detector ($order)." + set dpid [exec $util_path/db_deadlock -a o -v -t 5\ + -h $testdir >& $testdir/dd.out &] + + puts "\tTest$tnum.b: Start consumer process ($order)." + sentinel_init + set pidlist {} + set cpid [exec $tclsh_path $test_path/wrap.tcl t106script.tcl \ + $testdir/t106script.log.cons.$order.1 $testdir WAIT \ + 0 $nproducers $testdir/CONSUMERLOG 1 $tnum $order $niter \ + $args &] + lappend pidlist $cpid + + puts "\tTest$tnum.c: Initialize producers ($order)." + for { set p 1 } { $p <= $nproducers } { incr p } { + set ppid [exec $tclsh_path $test_path/wrap.tcl \ + t106script.tcl \ + $testdir/t106script.log.init.$order.$p \ + $testdir INITIAL $nitems $nproducers \ + $testdir/INITLOG.$p $p $tnum \ + $order $niter $args &] + lappend pidlist $ppid + } + + # Wait for all producers to be initialized before continuing + # to the RMW portion of the test. + watch_procs $pidlist 10 + + sentinel_init + set pidlist {} + puts "\tTest$tnum.d: Run producers in RMW mode ($order)." + for { set p 1 } { $p <= $nproducers } { incr p } { + set ppid [exec $tclsh_path $test_path/wrap.tcl \ + t106script.tcl \ + $testdir/t106script.log.prod.$order.$p \ + $testdir PRODUCE $nitems $nproducers \ + $testdir/PRODUCERLOG.$p $p $tnum \ + $order $niter $args &] + lappend pidlist $ppid + } + + watch_procs $pidlist 10 + tclkill $dpid + } + + # If this test created the env, close it. + if { $eindex == -1 } { + error_check_good env_close [$env close] 0 + } +} |