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