#
# $Id$
#
source runenv.exp
set kill /bin/kill
set sleep /bin/sleep
set kinit $KINIT
set kdestroy $KDESTROY
set hostname [exec hostname]
# Hack around Solaris 9 kernel race condition that causes last output
# from a pty to get dropped.
if { $PRIOCNTL_HACK } {
catch {exec priocntl -s -c FX -m 30 -p 30 -i pid [getpid]}
rename spawn oldspawn
proc spawn { args } {
upvar 1 spawn_id spawn_id
set newargs {}
set inflags 1
set eatnext 0
foreach arg $args {
if { $arg == "-ignore" \
|| $arg == "-open" \
|| $arg == "-leaveopen" } {
lappend newargs $arg
set eatnext 1
continue
}
if [string match "-*" $arg] {
lappend newargs $arg
continue
}
if { $eatnext } {
set eatnext 0
lappend newargs $arg
continue
}
if { $inflags } {
set inflags 0
set newargs [concat $newargs {priocntl -e -c FX -p 0}]
}
lappend newargs $arg
}
set pid [eval oldspawn $newargs]
return $pid
}
}
if { [string length $VALGRIND] } {
rename spawn valgrind_aux_spawn
proc spawn { args } {
global VALGRIND
upvar 1 spawn_id spawn_id
set newargs {}
set inflags 1
set eatnext 0
foreach arg $args {
if { $arg == "-ignore" \
|| $arg == "-open" \
|| $arg == "-leaveopen" } {
lappend newargs $arg
set eatnext 1
continue
}
if [string match "-*" $arg] {
lappend newargs $arg
continue
}
if { $eatnext } {
set eatnext 0
lappend newargs $arg
continue
}
if { $inflags } {
set inflags 0
# Only run valgrind for local programs, not
# system ones.
#&&![string match "/bin/sh" $arg] sh is used to start kadmind!
if [string match "/" [string index $arg 0]]&&![string match "/bin/ls" $arg]&&![regexp {/kshd$} $arg] {
set newargs [concat $newargs $VALGRIND]
} elseif [string match "." [string index $arg 0]] {
set newargs [concat $newargs $VALGRIND]
}
}
lappend newargs $arg
}
set pid [eval valgrind_aux_spawn $newargs]
return $pid
}
}
# this will initialize the database and keytab
load_lib "helpers.exp"
proc rpc_test_version {} {
global CLIENT
global SERVER
clone_output "$CLIENT version <unknown>"
clone_output "$SERVER version <unknown>"
}
proc rpc_test_load {} {
#
}
# rpc_test_exit -- clean up and exit
proc rpc_test_exit {} {
global server_id
global server_pid
global server_started
global kill
if {[catch {
expect {
-i $server_id
eof {
fail "server exited!"
verbose $expect_out(buffer) 1
}
timeout { pass "server survived" }
}
} tmp]} {
fail "server exited! (expect failed)"
}
}
#
# rpc_test_start -- start the rpc_test server running
#
proc rpc_test_start { } {
global SERVER PROT
global server_id
global server_pid
global server_started
global server_port
global env
if [info exists server_pid] { rpc_test_exit }
set env(KRB5_KTNAME) FILE:$env(RPC_TEST_KEYTAB)
verbose "% $SERVER" 1
set server_pid [spawn $SERVER $PROT]
set server_id $spawn_id
set server_started 1
set server_port -1
unset env(KRB5_KTNAME)
set timeout 30
expect {
-re "port: (\[0-9\]*)\r\n" {
set server_port $expect_out(1,string)
}
"running" { }
eof {
send_error "server exited!"
verbose $expect_out(buffer) 1
}
timeout {
send_error "server didn't start in $timeout seconds"
verbose $expect_out(buffer) 1
}
}
}
set MULTIPASS {
{tcp PROT=-t dummy=[rpc_test_start]}
{udp PROT=-u dummy=[rpc_test_start]}
}