1# See the file LICENSE for redistribution information. 2# 3# Copyright (c) 2006,2008 Oracle. All rights reserved. 4# 5# $Id: env015.tcl,v 12.8 2008/01/08 20:58:53 bostic Exp $ 6# 7# TEST env015 8# TEST Rename the underlying directory of an env, make sure everything 9# TEST still works. Test runs with regular named databases and with 10# TEST in-memory named databases. 11proc env015 { } { 12 source ./include.tcl 13 14 env_cleanup $testdir 15 set newdir NEWDIR 16 17 puts "Env015: Test of renaming env directories." 18 19 foreach dbtype { inmem ondisk } { 20 puts "\tEnv015.a: Create env." 21 set env [berkdb_env -create -mode 0644 -home $testdir] 22 error_check_good env [is_valid_env $env] TRUE 23 24 puts "\tEnv015.b: Create $dbtype db." 25 if { $dbtype == "inmem" } { 26 set testfile { "" file1.db } 27 } else { 28 set testfile file1.db 29 } 30 set db [eval {berkdb_open} -create -env $env -btree $testfile] 31 error_check_good db_open [is_valid_db $db] TRUE 32 for { set i 0 } { $i < 10 } { incr i } { 33 error_check_good db_put [$db put $i $i] 0 34 } 35 36 # When the database is on disk, we have a file handle open 37 # during the attempt to rename the directory. As far as we 38 # can tell, Windows doesn't allow this (that is, Windows 39 # doesn't allow directories to be renamed when there is an 40 # open handle inside them). 41 puts "\tEnv015.b: Rename directory." 42 if { $is_windows_test } { 43 file mkdir $newdir 44 eval file rename -force [glob $testdir/*] $newdir 45 fileremove -force $testdir 46 } else { 47 file rename -force $testdir $newdir 48 } 49 50 puts "\tEnv015.c: Database is still available in new directory." 51 for { set i 0 } { $i < 10 } { incr i } { 52 set ret [$db get $i] 53 error_check_good db_get [lindex [lindex $ret 0] 1] $i 54 } 55 56 puts "\tEnv015.d: Can't open database in old directory." 57 catch {set db2 [eval \ 58 {berkdb_open} -env $env -btree $testdir/$testfile]} db2 59 error_check_bad open_fails [is_valid_db $db2] TRUE 60 61 puts \ 62 "\tEnv015.e: Recreate directory with original name and use it." 63 file mkdir $testdir 64 set newenv [berkdb_env -create -mode 0644 -home $testdir] 65 error_check_good newenv [is_valid_env $env] TRUE 66 67 set newdb [berkdb_open -create -env $newenv -btree foo.db] 68 error_check_good newdb_open [is_valid_db $newdb] TRUE 69 70 # There should not be any data in the new db. 71 for { set i 0 } { $i < 10 } { incr i } { 72 set ret [$newdb get $i] 73 error_check_good db_get [llength $ret] 0 74 } 75 76 # Clean up. 77 error_check_good db_close [$db close] 0 78 error_check_good newdb_close [$newdb close] 0 79 error_check_good envclose [$env close] 0 80 error_check_good newenvclose [$newenv close] 0 81 fileremove -f $newdir 82 } 83} 84