1# See the file LICENSE for redistribution information. 2# 3# Copyright (c) 2004,2008 Oracle. All rights reserved. 4# 5# $Id: recd020.tcl,v 12.8 2008/01/12 13:42:47 bostic Exp $ 6# 7# TEST recd020 8# TEST Test creation of intermediate directories -- an 9# TEST undocumented, UNIX-only feature. 10# 11proc recd020 { method args } { 12 source ./include.tcl 13 global tcl_platform 14 15 set args [convert_args $method $args] 16 set omethod [convert_method $method] 17 set tnum "020" 18 set nentries 10 19 20 if { $tcl_platform(platform) != "unix" } { 21 puts "Skipping recd$tnum for non-UNIX platform." 22 return 23 } 24 25 puts "Recd$tnum ($method):\ 26 Test creation of intermediate directories in recovery." 27 28 # Create the original intermediate directory. 29 env_cleanup $testdir 30 set intdir INTDIR 31 file mkdir $testdir/$intdir 32 33 set testfile recd$tnum.db 34 set flags "-create -txn -home $testdir" 35 36 puts "\tRecd$tnum.a: Create environment and populate database." 37 set env_cmd "berkdb_env $flags" 38 set env [eval $env_cmd] 39 error_check_good env [is_valid_env $env] TRUE 40 41 set db [eval berkdb_open \ 42 -create $omethod $args -env $env -auto_commit $intdir/$testfile] 43 error_check_good db_open [is_valid_db $db] TRUE 44 45 set txn [$env txn] 46 set data "data" 47 for { set i 1 } { $i <= $nentries } { incr i } { 48 error_check_good db_put [eval \ 49 {$db put} -txn $txn $i [chop_data $method $data.$i]] 0 50 } 51 error_check_good txn_commit [$txn commit] 0 52 error_check_good db_close [$db close] 0 53 error_check_good log_flush [$env log_flush] 0 54 error_check_good env_close [$env close] 0 55 56 puts "\tRecd$tnum.b: Remove intermediate directory." 57 error_check_good directory_there [file exists $testdir/$intdir] 1 58 file delete -force $testdir/$intdir 59 error_check_good directory_gone [file exists $testdir/$intdir] 0 60 61 puts "\tRecd020.c: Run recovery, recreating intermediate directory." 62 set env [eval $env_cmd -set_intermediate_dir_mode "rwxr-x--x" -recover] 63 error_check_good env [is_valid_env $env] TRUE 64 65 puts "\tRecd020.d: Reopen test file to verify success." 66 set db [berkdb_open -env $env $intdir/$testfile] 67 error_check_good db_open [is_valid_db $db] TRUE 68 for { set i 1 } { $i <= $nentries } { incr i } { 69 set ret [$db get $i] 70 set k [lindex [lindex $ret 0] 0] 71 set d [lindex [lindex $ret 0] 1] 72 error_check_good key $k $i 73 error_check_good data $d [pad_data $method $data.$i] 74 } 75 76 # Clean up. 77 error_check_good db_close [$db close] 0 78 error_check_good log_flush [$env log_flush] 0 79 error_check_good env_close [$env close] 0 80 81} 82