summaryrefslogtreecommitdiff
path: root/test/tcl/test147.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'test/tcl/test147.tcl')
-rw-r--r--test/tcl/test147.tcl206
1 files changed, 206 insertions, 0 deletions
diff --git a/test/tcl/test147.tcl b/test/tcl/test147.tcl
new file mode 100644
index 00000000..8dec2449
--- /dev/null
+++ b/test/tcl/test147.tcl
@@ -0,0 +1,206 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2013, 2015 Oracle and/or its affiliates. All rights reserved.
+#
+# $Id$
+#
+# TEST test147
+# TEST Test db_stat and db_printlog with all allowed options.
+proc test147 { method {tnum "147"} args } {
+ source ./include.tcl
+ global encrypt
+ global passwd
+ global EXE
+
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+
+ # db_stat and db_printlog do not support partition callback yet.
+ set ptcbindex [lsearch -exact $args "-partition_callback"]
+ if { $ptcbindex != -1 } {
+ puts "Test$tnum: skip partition callback mode."
+ return
+ }
+
+ # hpargs will contain arguments for homedir and password.
+ set hpargs ""
+
+ # Set up environment and home folder.
+ set env NULL
+ set secenv 0
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex != -1 } {
+ incr eindex
+ set env [lindex $args $eindex]
+ set testdir [get_home $env]
+ set secenv [is_secenv $env]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testfile test$tnum.db
+ } else {
+ append args " -cachesize {0 1048576 3} "
+ set testfile $testdir/test$tnum.db
+ }
+ set hpargs "-h $testdir"
+
+ cleanup $testdir $env
+
+ puts "Test$tnum: $method ($args) Test of db_stat and db_printlog."
+ # Append password arg.
+ if { $encrypt != 0 || $secenv != 0 } {
+ append hpargs " -P $passwd"
+ }
+
+ # stat_file_args contains arguments used in command 'db_stat -d file'.
+ set stat_file_args "-d test$tnum.db"
+
+ # Create db and fill it with data.
+ set db [eval {berkdb_open -create -mode 0644} $args\
+ $omethod $testfile]
+ error_check_good db_open [is_valid_db $db] TRUE
+
+ error_check_good db_fill [populate $db $method "" 1000 0 0] 0
+ error_check_good db_close [$db close] 0
+
+ puts "Test$tnum: testing db_stat with -d args."
+
+ set binname db_stat
+ set std_redirect "> /dev/null"
+ if { $is_windows_test } {
+ set std_redirect "> /nul"
+ append binname $EXE
+ }
+
+ # Run the db_stat command for a specified file without extra options.
+ test147_execmd "$binname $stat_file_args $hpargs $std_redirect"
+
+ # Test for statistics.
+ test147_execmd "$binname $stat_file_args -f $hpargs $std_redirect"
+
+ # Do not acquire shared region mutexes while running.
+ test147_execmd "$binname $stat_file_args -N $hpargs $std_redirect"
+
+ puts "Test$tnum: testing db_stat without -d arg."
+
+ # These flags can be used with -aNZ in the end.
+ set flaglist [list "V" "L A"]
+ set flaglist_env [list "E" "C A" "M A" "X A"]
+ set end_flags [list "" "-a" "-N" "-Z"]
+
+ foreach stflag $flaglist {
+ if { $env != "NULL" && $stflag == "L A" && ![is_logenv $env] } {
+ puts "\tTest$tnum: skip '-L A' in non-log env."
+ continue
+ }
+ foreach endflag $end_flags {
+ set combinearg $hpargs
+ if { $endflag != "" } {
+ set combinearg " $endflag $hpargs"
+ }
+ test147_execmd\
+ "$binname -$stflag $combinearg $std_redirect"
+ }
+ }
+
+ # Skip these flags when db is not in environment.
+ foreach stflag $flaglist_env {
+ if { $env == "NULL" } {
+ break
+ }
+ if { $stflag == "C A" && ![is_lockenv $env] } {
+ puts "\tTest$tnum: skip '-C A' in non-lock env."
+ continue
+ }
+ foreach endflag $end_flags {
+ set combinearg $hpargs
+ if { $endflag != "" } {
+ set combinearg " $endflag $hpargs"
+ }
+ test147_execmd\
+ "$binname -$stflag $combinearg $std_redirect"
+ }
+ }
+
+ # These flags can not be used with -aNZ in the end.
+ set flaglist2_env [list "c" "e" "m" "r" "t" "x"\
+ "C c" "C l" "C o" "C p" "R A"]
+ set flaglist2 [list "l"]
+
+ foreach stflag $flaglist2 {
+ if { $env != "NULL" && $stflag == "l" && ![is_logenv $env] } {
+ puts "\tTest$tnum: skip '-l' in non-log env."
+ continue
+ }
+ test147_execmd "$binname -$stflag $hpargs $std_redirect"
+ }
+
+ foreach stflag $flaglist2_env {
+ if { $env == "NULL" } {
+ break
+ }
+ if { $stflag == "r" && ![is_repenv $env] } {
+ puts "\tTest$tnum: skip '-r' in non-rep env."
+ continue
+ }
+ if { $stflag == "R A" && ![is_repenv $env] } {
+ puts "\tTest$tnum: skip '-R A' in non-rep env."
+ continue
+ }
+ if { $stflag == "c" && ![is_lockenv $env] } {
+ puts "\tTest$tnum: skip '-c' in non-lock env."
+ continue
+ }
+ if { [is_substr $stflag "C "] && ![is_lockenv $env] } {
+ puts "\tTest$tnum: skip '-$stflag' in non-lock env."
+ continue
+ }
+ if { $stflag == "t" && ![is_txnenv $env] } {
+ puts "\tTest$tnum: skip '-t' in non-txn env."
+ continue
+ }
+ test147_execmd "$binname -$stflag $hpargs $std_redirect"
+ }
+
+ # Check usage info is contained in error message.
+ set execmd "$util_path/$binname $std_redirect"
+ puts "\tTest$tnum: $execmd"
+ catch {eval exec [split $execmd " "]} result
+ error_check_good db_stat [is_substr $result "usage:"] 1
+
+ if { $env != "NULL" && ![is_logenv $env] } {
+ puts "Test$tnum: skip test db_printlog in non-log env."
+ return
+ }
+
+ puts "Test$tnum: testing db_printlog."
+
+ set binname db_printlog
+ if { $is_windows_test } {
+ append binname $EXE
+ }
+
+ set flaglist [list "-N" "-r" "-V" ""]
+ foreach lgpflag $flaglist {
+ set combinearg $hpargs
+ if { $lgpflag != "" } {
+ set combinearg " $lgpflag $hpargs"
+ }
+ test147_execmd "$binname $combinearg $std_redirect"
+ # Test with given start and end LSN.
+ test147_execmd "$binname -b 1/0 $combinearg $std_redirect"
+ test147_execmd\
+ "$binname -e 1/1000 $combinearg $std_redirect"
+ test147_execmd\
+ "$binname -b 1/0 -e 1/1000 $combinearg $std_redirect"
+ }
+}
+
+proc test147_execmd { execmd } {
+ source ./include.tcl
+ puts "\tTest147: $util_path/$execmd"
+ if { [catch {eval exec $util_path/$execmd} result] } {
+ puts "FAIL: got $result while executing '$execmd'"
+ }
+}