1# See the file LICENSE for redistribution information. 2# 3# Copyright (c) 1996,2008 Oracle. All rights reserved. 4# 5# $Id: rpc005.tcl,v 12.7 2008/01/08 20:58:53 bostic Exp $ 6# 7# TEST rpc005 8# TEST Test RPC server handle ID sharing 9proc rpc005 { } { 10 global __debug_on 11 global __debug_print 12 global errorInfo 13 global rpc_svc 14 global is_hp_test 15 source ./include.tcl 16 17 puts "Rpc005: RPC server handle sharing" 18 puts "Rpc005: Using $rpc_svc" 19 set dpid [rpc_server_start] 20 puts "\tRpc005.a: Started server, pid $dpid" 21 22 # 23 # Wrap the test in a catch statement so we can still kill 24 # the rpc server even if the test fails. 25 # 26 set status [catch { 27 tclsleep 2 28 remote_cleanup $rpc_server $rpc_testdir $testdir 29 puts "\tRpc005.b: Creating environment" 30 31 set testfile "rpc005.db" 32 set testfile1 "rpc005a.db" 33 set subdb1 "subdb1" 34 set subdb2 "subdb2" 35 set home [file tail $rpc_testdir] 36 37 set env [eval {berkdb_env -create -mode 0644 -home $home \ 38 -server $rpc_server -txn}] 39 error_check_good lock_env:open [is_valid_env $env] TRUE 40 41 # You can't open two handles on the same env in 42 # HP-UX, so skip this piece. 43 if { $is_hp_test == 1 } { 44 puts "\tRpc005.c: Skipping for HP-UX." 45 } else { 46 puts "\tRpc005.c: Compare identical and different \ 47 configured envs" 48 set env_ident [eval {berkdb_env -home $home \ 49 -server $rpc_server -txn}] 50 error_check_good \ 51 lock_env:open [is_valid_env $env_ident] TRUE 52 53 set env_diff [eval {berkdb_env -home $home \ 54 -server $rpc_server -txn nosync}] 55 error_check_good \ 56 lock_env:open [is_valid_env $env_diff] TRUE 57 58 error_check_good \ 59 ident:id [$env rpcid] [$env_ident rpcid] 60 error_check_bad \ 61 diff:id [$env rpcid] [$env_diff rpcid] 62 63 error_check_good envclose [$env_diff close] 0 64 error_check_good envclose [$env_ident close] 0 65 } 66 67 puts "\tRpc005.d: Opening a database" 68 set db [eval {berkdb_open -auto_commit -create -btree \ 69 -mode 0644} -env $env $testfile] 70 error_check_good dbopen [is_valid_db $db] TRUE 71 72 puts "\tRpc005.e: Compare identical and different \ 73 configured dbs" 74 set db_ident [eval {berkdb_open -btree} -env $env $testfile] 75 error_check_good dbopen [is_valid_db $db_ident] TRUE 76 77 set db_diff [eval {berkdb_open -btree} -env $env -rdonly \ 78 $testfile] 79 error_check_good dbopen [is_valid_db $db_diff] TRUE 80 81 set db_diff2 [eval {berkdb_open -btree} -env $env -rdonly \ 82 $testfile] 83 error_check_good dbopen [is_valid_db $db_diff2] TRUE 84 85 error_check_good ident:id [$db rpcid] [$db_ident rpcid] 86 error_check_bad diff:id [$db rpcid] [$db_diff rpcid] 87 error_check_good ident2:id [$db_diff rpcid] [$db_diff2 rpcid] 88 89 error_check_good db_close [$db_ident close] 0 90 error_check_good db_close [$db_diff close] 0 91 error_check_good db_close [$db_diff2 close] 0 92 error_check_good db_close [$db close] 0 93 94 puts "\tRpc005.f: Compare with a database and subdatabases" 95 set db [eval {berkdb_open -auto_commit -create -btree \ 96 -mode 0644} -env $env $testfile1 $subdb1] 97 error_check_good dbopen [is_valid_db $db] TRUE 98 set dbid [$db rpcid] 99 100 set db2 [eval {berkdb_open -auto_commit -create -btree \ 101 -mode 0644} -env $env $testfile1 $subdb2] 102 error_check_good dbopen [is_valid_db $db2] TRUE 103 set db2id [$db2 rpcid] 104 error_check_bad 2subdb:id $dbid $db2id 105 106 set db_ident [eval {berkdb_open -btree} -env $env \ 107 $testfile1 $subdb1] 108 error_check_good dbopen [is_valid_db $db_ident] TRUE 109 set identid [$db_ident rpcid] 110 111 set db_ident2 [eval {berkdb_open -btree} -env $env \ 112 $testfile1 $subdb2] 113 error_check_good dbopen [is_valid_db $db_ident2] TRUE 114 set ident2id [$db_ident2 rpcid] 115 116 set db_diff1 [eval {berkdb_open -btree} -env $env -rdonly \ 117 $testfile1 $subdb1] 118 error_check_good dbopen [is_valid_db $db_diff1] TRUE 119 set diff1id [$db_diff1 rpcid] 120 121 set db_diff2 [eval {berkdb_open -btree} -env $env -rdonly \ 122 $testfile1 $subdb2] 123 error_check_good dbopen [is_valid_db $db_diff2] TRUE 124 set diff2id [$db_diff2 rpcid] 125 126 set db_diff [eval {berkdb_open -unknown} -env $env -rdonly \ 127 $testfile1] 128 error_check_good dbopen [is_valid_db $db_diff] TRUE 129 set diffid [$db_diff rpcid] 130 131 set db_diff2a [eval {berkdb_open -btree} -env $env -rdonly \ 132 $testfile1 $subdb2] 133 error_check_good dbopen [is_valid_db $db_diff2a] TRUE 134 set diff2aid [$db_diff2a rpcid] 135 136 error_check_good ident:id $dbid $identid 137 error_check_good ident2:id $db2id $ident2id 138 error_check_bad diff:id $dbid $diffid 139 error_check_bad diff2:id $db2id $diffid 140 error_check_bad diff3:id $diff2id $diffid 141 error_check_bad diff4:id $diff1id $diffid 142 error_check_good diff2a:id $diff2id $diff2aid 143 144 error_check_good db_close [$db_ident close] 0 145 error_check_good db_close [$db_ident2 close] 0 146 error_check_good db_close [$db_diff close] 0 147 error_check_good db_close [$db_diff1 close] 0 148 error_check_good db_close [$db_diff2 close] 0 149 error_check_good db_close [$db_diff2a close] 0 150 error_check_good db_close [$db2 close] 0 151 error_check_good db_close [$db close] 0 152 error_check_good env_close [$env close] 0 153 } res] 154 if { $status != 0 } { 155 puts $res 156 } 157 tclkill $dpid 158} 159