# # $Id: unix.exp 19916 2007-09-04 22:59:44Z raeburn $ # 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 " clone_output "$SERVER version " } 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 env if [info exists server_pid] { rpc_test_exit } set env(KRB5_KTNAME) FILE:$env(RPC_TEST_SRVTAB) verbose "% $SERVER" 1 set server_pid [spawn $SERVER $PROT] set server_id $spawn_id unset env(KRB5_KTNAME) set timeout 30 expect { "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]} }