1# See the file LICENSE for redistribution information. 2# 3# Copyright (c) 1999,2008 Oracle. All rights reserved. 4# 5# $Id: update.tcl,v 12.6 2008/01/08 20:58:53 bostic Exp $ 6 7source ./include.tcl 8global update_dir 9set update_dir "$test_path/update_test" 10 11proc update { } { 12 source ./include.tcl 13 global update_dir 14 15 foreach version [glob $update_dir/*] { 16 regexp \[^\/\]*$ $version version 17 foreach method [glob $update_dir/$version/*] { 18 regexp \[^\/\]*$ $method method 19 foreach file [glob $update_dir/$version/$method/*] { 20 regexp (\[^\/\]*)\.tar\.gz$ $file dummy name 21 foreach endianness {"le" "be"} { 22 puts "Update:\ 23 $version $method $name $endianness" 24 set ret [catch {_update $update_dir $testdir $version $method $name $endianness 1 1} message] 25 if { $ret != 0 } { 26 puts $message 27 } 28 } 29 } 30 } 31 } 32} 33 34proc _update { source_dir temp_dir \ 35 version method file endianness do_db_load_test do_update_test } { 36 source include.tcl 37 global errorInfo 38 39 cleanup $temp_dir NULL 40 41 exec sh -c \ 42"gzcat $source_dir/$version/$method/$file.tar.gz | (cd $temp_dir && tar xf -)" 43 44 if { $do_db_load_test } { 45 set ret [catch \ 46 {exec $util_path/db_load -f "$temp_dir/$file.dump" \ 47 "$temp_dir/update.db"} message] 48 error_check_good \ 49 "Update load: $version $method $file $message" $ret 0 50 51 set ret [catch \ 52 {exec $util_path/db_dump -f "$temp_dir/update.dump" \ 53 "$temp_dir/update.db"} message] 54 error_check_good \ 55 "Update dump: $version $method $file $message" $ret 0 56 57 error_check_good "Update diff.1.1: $version $method $file" \ 58 [filecmp "$temp_dir/$file.dump" "$temp_dir/update.dump"] 0 59 error_check_good \ 60 "Update diff.1.2: $version $method $file" $ret "" 61 } 62 63 if { $do_update_test } { 64 set ret [catch \ 65 {berkdb open -update "$temp_dir/$file-$endianness.db"} db] 66 if { $ret == 1 } { 67 if { ![is_substr $errorInfo "version upgrade"] } { 68 set fnl [string first "\n" $errorInfo] 69 set theError \ 70 [string range $errorInfo 0 [expr $fnl - 1]] 71 error $theError 72 } 73 } else { 74 error_check_good dbopen [is_valid_db $db] TRUE 75 error_check_good dbclose [$db close] 0 76 77 set ret [catch \ 78 {exec $util_path/db_dump -f \ 79 "$temp_dir/update.dump" \ 80 "$temp_dir/$file-$endianness.db"} message] 81 error_check_good "Update\ 82 dump: $version $method $file $message" $ret 0 83 84 error_check_good \ 85 "Update diff.2: $version $method $file" \ 86 [filecmp "$temp_dir/$file.dump" \ 87 "$temp_dir/update.dump"] 0 88 error_check_good \ 89 "Update diff.2: $version $method $file" $ret "" 90 } 91 } 92} 93