diff --git a/src/server/testsuite/config/unix.exp b/src/server/testsuite/config/unix.exp index 0c4973eb5343a81a773a90278ea40fe5e4ef4ed5..510d9fed1e0bd3728d13706a90bb3a651e578ee0 100644 --- a/src/server/testsuite/config/unix.exp +++ b/src/server/testsuite/config/unix.exp @@ -1,7 +1,16 @@ +# Set this to 1 to cause the test suite to wait while you attach to +# the process that is being tested. +set attach 0 + +# Set this to 1 if test-l2g was linked with Electric Fence. +set efence 0 + +# Some useful constants. set nl "\r?\n" set any "\[ -�\]" set deep_any "\\\[ -�\\\]" set hollerith "\[0-9\]*H$any*" +set any_time "\[0-9\]* \[0-9\]* \[0-9\]* \[0-9\]* \[0-9\]* \[0-9\]* \[0-9\]* \[0-9\]* \[0-9\]*" set maxint 2147483647 @@ -10,9 +19,12 @@ set maxint 2147483647 set clientport 53262 set muxport 53263 +# Fix the tty settings for minimum impact on the data flow. set stty_init "-echo -onlcr -ocrnl -istrip" -set efence 0 +# State variables. +set line_leader "" +set meta_line_leader "" proc efence_blurb {} { global efence @@ -28,8 +40,18 @@ proc l2g_start {} { global spawn_id global l2g global efence + global l2g_id + global deep_any + global nl spawn $l2g + set l2g_id $spawn_id + set expect_active($l2g_id) \ + " -i $l2g_id eof { fail \"\$test (eof on l2g); wait\" } -re \"^($deep_any*)$nl\" { fail \"\$test (unexpected line '\$expect_out(1,string)')\" } -re \"($deep_any*)l2g> \" { fail \"\$test (unexpected incomplete line '\$expect_out(1,string)')\" } " + set expect_always($l2g_id) \ + " -i $l2g_id buffer_full { fail \"\$test (buffer_full on l2g)\" }" + + talk_to l2g if {$efence} { l2g_send "I9" @@ -53,26 +75,47 @@ proc l2g_send {str} { send "$str\n" } -proc simple_expect {regex {testname ""}} { +proc fix_expect_after {} { + global expect_always + global expect_active + global spawn_id + + set stmt "expect_after" + + foreach k [array names expect_always] { + set stmt "$stmt $expect_always($k)" + } + + if {[info exists spawn_id] && [info exists expect_active($spawn_id)]} { + set stmt "$stmt $expect_active($spawn_id)" + } + + set stmt "$stmt timeout { fail \"\$test (timeout)\" }" + verbose "evaluating $stmt" 2 + eval $stmt +} + +proc simple_expect {regex {testname ""} {is_meta ""}} { global test global any global nl + global line_leader + global meta_line_leader + if {$is_meta == "meta"} { + set ll $meta_line_leader + } else { + set ll $line_leader + } set test $testname if {$test == ""} { set test "looking for $regex" } expect { - -re "^$regex$nl" {pass "$test"} + -re "^$ll$regex$nl" {pass "$test"} timeout {fail "$test (timeout)"} eof {fail "$test (eof)"; wait} buffer_full {fail "$test (buffer_full)"} - -re "($any*)$nl" { - fail "$test (unexpected line '$expect_out(1,string)' waiting for '$regex')" - } - -re "($any*)l2g> " { - fail "$test (unexpected incomplete line '$expect_out(1,string)' waiting for '$regex')" - } } unset test } @@ -89,11 +132,11 @@ proc unanchored_expect {regex testname} { buffer_full {fail "$test (buffer_full)"} eof {fail "$test (eof)"; wait} -re "($any*)$nl" { - fail "$test (unexpected line '$expect_out(1,string)' waiting for '$regex')" + fail "$test (unexpected line '\$expect_out(1,string)' waiting for '$regex')" exp_continue } -re "($any*)l2g>" { - fail "$test (unexpected incomplete line '$expect_out(1,string)' waiting for '$regex')" + fail "$test (unexpected incomplete line '\$expect_out(1,string)' waiting for '$regex')" } } unset test @@ -104,11 +147,17 @@ proc lyskomd_start {} { global server_id global test global nl + global attach + global timeout - spawn ../lyskomd -d config/lyskomd-config + set pid [spawn ../lyskomd -d config/lyskomd-config] set server_id $spawn_id set expect_active($server_id) "" set expect_always($server_id) "" + set expect_active($server_id) \ + " -i $server_id eof { fail \"\$test (eof on lyskomd); wait\" }" + set expect_always($server_id) \ + " -i $server_id buffer_full { fail \"\$test (buffer_full on lyskomd)\" }" talk_to lyskomd set test "server started" @@ -118,6 +167,15 @@ proc lyskomd_start {} { buffer_full {fail "$test (buffer_full)"} eof {fail "$test (eof)"; wait} } + + if {$attach} { + send_user "Please attach to lyskomd process $pid and press RETURN\n" + set timeout 3600 + expect_user { + -re . + } + send_user "Continuing with timeout set to $timeout\n" + } } proc lyskomd_death {} { @@ -141,25 +199,33 @@ proc client_start {nr} { global spawn_id global test global nl + global expect_always + global expect_active + global srcdir - spawn tcpconnect -rv localhost $clientport + spawn python $srcdir/tcpconnect.py localhost $clientport MRK:client$nr set client_id($nr) $spawn_id + set expect_active($client_id($nr)) " " + set expect_always($client_id($nr)) \ + " -i $client_id($nr) eof { fail \"\$test (eof on client$nr); wait\" } -i $client_id($nr) buffer_full { fail \"\$test (buffer_full on client$nr)\" } " talk_to client $nr - set test "client $nr started" - expect { - -re ".Connected to..*port $clientport.$nl" {pass "$test"} - timeout {fail "$test (timeout)"} - eof {fail "$test (eof)"} - buffer_full {fail "$test (buffer_full)"} - } + simple_expect "Connecting to localhost $clientport" \ + "client connects" meta + simple_expect "Connected" "client connected" meta } proc talk_to {what {nr ""}} { global spawn_id global server_id global client_id + global l2g_id + global line_leader + global meta_line_leader + + set line_leader "" + set meta_line_leader "" switch $what { lyskomd { @@ -167,13 +233,23 @@ proc talk_to {what {nr ""}} { } client { set spawn_id $client_id($nr) + set line_leader "MRK:client$nr" + } + l2g { + set spawn_id $l2g_id } default { error "attempting to talk to $what" } } + if {$line_leader != ""} { + set meta_line_leader "${line_leader}meta: " + set line_leader "${line_leader}: " + } + verbose "TALKING TO $spawn_id $what $nr" + fix_expect_after } proc holl {str} {