Imported Upstream version 1.15.1
[platform/upstream/krb5.git] / src / lib / rpc / unit-test / config / unix.exp
1 #
2 # $Id$
3 #
4
5 set kill /bin/kill
6 set sleep /bin/sleep
7 set kinit $KINIT
8 set kdestroy $KDESTROY
9
10 set hostname [exec hostname]
11
12 # Hack around Solaris 9 kernel race condition that causes last output
13 # from a pty to get dropped.
14 if { $PRIOCNTL_HACK } {
15     catch {exec priocntl -s -c FX -m 30 -p 30 -i pid [getpid]}
16     rename spawn oldspawn
17     proc spawn { args } {
18         upvar 1 spawn_id spawn_id
19         set newargs {}
20         set inflags 1
21         set eatnext 0
22         foreach arg $args {
23             if { $arg == "-ignore" \
24                      || $arg == "-open" \
25                      || $arg == "-leaveopen" } {
26                 lappend newargs $arg
27                 set eatnext 1
28                 continue
29             }
30             if [string match "-*" $arg] {
31                 lappend newargs $arg
32                 continue
33             }
34             if { $eatnext } {
35                 set eatnext 0
36                 lappend newargs $arg
37                 continue
38             }
39             if { $inflags } {
40                 set inflags 0
41                 set newargs [concat $newargs {priocntl -e -c FX -p 0}]
42             }
43             lappend newargs $arg
44         }
45         set pid [eval oldspawn $newargs]
46         return $pid
47     }
48 }
49
50 if { [string length $VALGRIND] } {
51     rename spawn valgrind_aux_spawn
52     proc spawn { args } {
53         global VALGRIND
54         upvar 1 spawn_id spawn_id
55         set newargs {}
56         set inflags 1
57         set eatnext 0
58         foreach arg $args {
59             if { $arg == "-ignore" \
60                      || $arg == "-open" \
61                      || $arg == "-leaveopen" } {
62                 lappend newargs $arg
63                 set eatnext 1
64                 continue
65             }
66             if [string match "-*" $arg] {
67                 lappend newargs $arg
68                 continue
69             }
70             if { $eatnext } {
71                 set eatnext 0
72                 lappend newargs $arg
73                 continue
74             }
75             if { $inflags } {
76                 set inflags 0
77                 # Only run valgrind for local programs, not
78                 # system ones.
79 #&&![string match "/bin/sh" $arg] sh is used to start kadmind!
80                 if [string match "/" [string index $arg 0]]&&![string match "/bin/ls" $arg]&&![regexp {/kshd$} $arg] {
81                     set newargs [concat $newargs $VALGRIND]
82                 } elseif [string match "." [string index $arg 0]] {
83                     set newargs [concat $newargs $VALGRIND]
84                 }
85             }
86             lappend newargs $arg
87         }
88         set pid [eval valgrind_aux_spawn $newargs]
89         return $pid
90     }
91 }
92
93 # this will initialize the database and keytab
94 load_lib "helpers.exp"
95
96 proc rpc_test_version {} {
97         global CLIENT
98         global SERVER
99
100         clone_output "$CLIENT version <unknown>"
101         clone_output "$SERVER version <unknown>"
102 }
103
104 proc rpc_test_load {} {
105         #
106 }
107
108 # rpc_test_exit -- clean up and exit
109 proc rpc_test_exit {} {
110         global server_id
111         global server_pid
112         global server_started
113         global kill
114
115         if {[catch {
116                 expect {
117                         -i $server_id
118                         eof { 
119                                 fail "server exited!"
120                                 verbose $expect_out(buffer) 1
121                         }
122                         timeout { pass "server survived" }
123                 }
124         } tmp]} {
125                 fail "server exited! (expect failed)"
126         }
127 }
128
129 #
130 # rpc_test_start -- start the rpc_test server running
131 #
132 proc rpc_test_start { } {
133         global SERVER PROT
134         global server_id
135         global server_pid
136         global server_started
137         global server_port
138         global env
139
140         if [info exists server_pid] { rpc_test_exit }
141
142         set env(KRB5_KTNAME) FILE:$env(RPC_TEST_SRVTAB)
143
144         verbose "% $SERVER" 1
145         set server_pid [spawn $SERVER $PROT]
146         set server_id $spawn_id
147         set server_started 1
148         set server_port -1
149
150         unset env(KRB5_KTNAME)
151
152         set timeout 30
153
154         expect {
155                 -re "port: (\[0-9\]*)\r\n" {
156                         set server_port $expect_out(1,string)
157                 }
158                 "running" { }
159                 eof { 
160                         send_error "server exited!"
161                         verbose $expect_out(buffer) 1
162                 }
163                 timeout { 
164                         send_error "server didn't start in $timeout seconds"
165                         verbose $expect_out(buffer) 1
166                 }
167         }
168
169 }
170
171 set MULTIPASS {
172     {tcp PROT=-t dummy=[rpc_test_start]}
173     {udp PROT=-u dummy=[rpc_test_start]}
174 }