summaryrefslogtreecommitdiffstats
path: root/tests/socket.test
diff options
context:
space:
mode:
Diffstat (limited to 'tests/socket.test')
-rw-r--r--tests/socket.test814
1 files changed, 395 insertions, 419 deletions
diff --git a/tests/socket.test b/tests/socket.test
index 421d359..abfe169 100644
--- a/tests/socket.test
+++ b/tests/socket.test
@@ -1,16 +1,16 @@
# Commands tested in this file: socket.
#
-# This file contains a collection of tests for one or more of the Tcl
-# built-in commands. Sourcing this file into Tcl runs the tests and
-# generates output for errors. No output means no errors were found.
+# This file contains a collection of tests for one or more of the Tcl built-in
+# commands. Sourcing this file into Tcl runs the tests and generates output
+# for errors. No output means no errors were found.
#
# Copyright (c) 1994-1996 Sun Microsystems, Inc.
# Copyright (c) 1998-2000 Ajuba Solutions.
#
-# See the file "license.terms" for information on usage and redistribution
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+# See the file "license.terms" for information on usage and redistribution of
+# this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# RCS: @(#) $Id: socket.test,v 1.41 2008/03/11 22:23:33 das Exp $
+# RCS: @(#) $Id: socket.test,v 1.42 2008/09/02 15:49:25 dkf Exp $
# Running socket tests with a remote server:
# ------------------------------------------
@@ -43,8 +43,8 @@
#
# When the server starts, it prints out a detailed message containing its
# configuration information, and it will block until killed with a Ctrl-C.
-# Once the remote server exists, you can run the tests in socket.test with
-# the server by setting two Tcl variables:
+# Once the remote server exists, you can run the tests in socket.test with the
+# server by setting two Tcl variables:
#
# % set remoteServerIP <name or address of machine on which server runs>
# % set remoteServerPort 2048
@@ -69,8 +69,8 @@ namespace import -force ::tcltest::*
testConstraint testthread [llength [info commands testthread]]
testConstraint exec [llength [info commands exec]]
-# If remoteServerIP or remoteServerPort are not set, check in the
-# environment variables for externally set values.
+# If remoteServerIP or remoteServerPort are not set, check in the environment
+# variables for externally set values.
#
if {![info exists remoteServerIP]} {
@@ -100,12 +100,12 @@ if {($doTestsWithRemoteServer == 1) && (![info exists remoteServerPort])} {
set remoteServerPort 2048
}
-# Attempt to connect to a remote server if one is already running. If it
-# is not running or for some other reason the connect fails, attempt to
-# start the remote server on the local host listening on port 2048. This
-# is only done on platforms that support exec (i.e. not on the Mac). On
-# platforms that do not support exec, the remote server must be started
-# by the user before running the tests.
+# Attempt to connect to a remote server if one is already running. If it is
+# not running or for some other reason the connect fails, attempt to start the
+# remote server on the local host listening on port 2048. This is only done on
+# platforms that support exec (i.e. not on the Mac). On platforms that do not
+# support exec, the remote server must be started by the user before running
+# the tests.
set remoteProcChan ""
set commandSocket ""
@@ -156,8 +156,7 @@ if {!$doTestsWithRemoteServer} {
}
#
-# If we do the tests, define a command to send a command to the
-# remote server.
+# If we do the tests, define a command to send a command to the remote server.
#
if {[testConstraint doTestsWithRemoteServer]} {
@@ -192,53 +191,55 @@ if {[testConstraint doTestsWithRemoteServer]} {
}
}
}
-
-test socket-1.1 {arg parsing for socket command} {socket} {
- list [catch {socket -server} msg] $msg
-} {1 {no argument given for -server option}}
-test socket-1.2 {arg parsing for socket command} {socket} {
- list [catch {socket -server foo} msg] $msg
-} {1 {wrong # args: should be "socket ?-myaddr addr? ?-myport myport? ?-async? host port" or "socket -server command ?-myaddr addr? port"}}
-test socket-1.3 {arg parsing for socket command} {socket} {
- list [catch {socket -myaddr} msg] $msg
-} {1 {no argument given for -myaddr option}}
-test socket-1.4 {arg parsing for socket command} {socket} {
- list [catch {socket -myaddr 127.0.0.1} msg] $msg
-} {1 {wrong # args: should be "socket ?-myaddr addr? ?-myport myport? ?-async? host port" or "socket -server command ?-myaddr addr? port"}}
-test socket-1.5 {arg parsing for socket command} {socket} {
- list [catch {socket -myport} msg] $msg
-} {1 {no argument given for -myport option}}
-test socket-1.6 {arg parsing for socket command} {socket} {
- list [catch {socket -myport xxxx} msg] $msg
-} {1 {expected integer but got "xxxx"}}
-test socket-1.7 {arg parsing for socket command} {socket} {
- list [catch {socket -myport 2522} msg] $msg
-} {1 {wrong # args: should be "socket ?-myaddr addr? ?-myport myport? ?-async? host port" or "socket -server command ?-myaddr addr? port"}}
-test socket-1.8 {arg parsing for socket command} {socket} {
- list [catch {socket -froboz} msg] $msg
-} {1 {bad option "-froboz": must be -async, -myaddr, -myport, or -server}}
-test socket-1.9 {arg parsing for socket command} {socket} {
- list [catch {socket -server foo -myport 2521 3333} msg] $msg
-} {1 {option -myport is not valid for servers}}
-test socket-1.10 {arg parsing for socket command} {socket} {
- list [catch {socket host 2528 -junk} msg] $msg
-} {1 {wrong # args: should be "socket ?-myaddr addr? ?-myport myport? ?-async? host port" or "socket -server command ?-myaddr addr? port"}}
-test socket-1.11 {arg parsing for socket command} {socket} {
- list [catch {socket -server callback 2520 --} msg] $msg
-} {1 {wrong # args: should be "socket ?-myaddr addr? ?-myport myport? ?-async? host port" or "socket -server command ?-myaddr addr? port"}}
-test socket-1.12 {arg parsing for socket command} {socket} {
- list [catch {socket foo badport} msg] $msg
-} {1 {expected integer but got "badport"}}
-test socket-1.13 {arg parsing for socket command} {socket} {
-list [catch {socket -async -server} msg] $msg
-} {1 {cannot set -async option for server sockets}}
-test socket-1.14 {arg parsing for socket command} {socket} {
-list [catch {socket -server foo -async} msg] $msg
-} {1 {cannot set -async option for server sockets}}
+
+# ----------------------------------------------------------------------
+
+test socket-1.1 {arg parsing for socket command} -constraints socket -body {
+ socket -server
+} -returnCodes error -result {no argument given for -server option}
+test socket-1.2 {arg parsing for socket command} -constraints socket -body {
+ socket -server foo
+} -returnCodes error -result {wrong # args: should be "socket ?-myaddr addr? ?-myport myport? ?-async? host port" or "socket -server command ?-myaddr addr? port"}
+test socket-1.3 {arg parsing for socket command} -constraints socket -body {
+ socket -myaddr
+} -returnCodes error -result {no argument given for -myaddr option}
+test socket-1.4 {arg parsing for socket command} -constraints socket -body {
+ socket -myaddr 127.0.0.1
+} -returnCodes error -result {wrong # args: should be "socket ?-myaddr addr? ?-myport myport? ?-async? host port" or "socket -server command ?-myaddr addr? port"}
+test socket-1.5 {arg parsing for socket command} -constraints socket -body {
+ socket -myport
+} -returnCodes error -result {no argument given for -myport option}
+test socket-1.6 {arg parsing for socket command} -constraints socket -body {
+ socket -myport xxxx
+} -returnCodes error -result {expected integer but got "xxxx"}
+test socket-1.7 {arg parsing for socket command} -constraints socket -body {
+ socket -myport 2522
+} -returnCodes error -result {wrong # args: should be "socket ?-myaddr addr? ?-myport myport? ?-async? host port" or "socket -server command ?-myaddr addr? port"}
+test socket-1.8 {arg parsing for socket command} -constraints socket -body {
+ socket -froboz
+} -returnCodes error -result {bad option "-froboz": must be -async, -myaddr, -myport, or -server}
+test socket-1.9 {arg parsing for socket command} -constraints socket -body {
+ socket -server foo -myport 2521 3333
+} -returnCodes error -result {option -myport is not valid for servers}
+test socket-1.10 {arg parsing for socket command} -constraints socket -body {
+ socket host 2528 -junk
+} -returnCodes error -result {wrong # args: should be "socket ?-myaddr addr? ?-myport myport? ?-async? host port" or "socket -server command ?-myaddr addr? port"}
+test socket-1.11 {arg parsing for socket command} -constraints socket -body {
+ socket -server callback 2520 --
+} -returnCodes error -result {wrong # args: should be "socket ?-myaddr addr? ?-myport myport? ?-async? host port" or "socket -server command ?-myaddr addr? port"}
+test socket-1.12 {arg parsing for socket command} -constraints socket -body {
+ socket foo badport
+} -returnCodes error -result {expected integer but got "badport"}
+test socket-1.13 {arg parsing for socket command} -constraints socket -body {
+ socket -async -server
+} -returnCodes error -result {cannot set -async option for server sockets}
+test socket-1.14 {arg parsing for socket command} -constraints socket -body {
+ socket -server foo -async
+} -returnCodes error -result {cannot set -async option for server sockets}
set path(script) [makeFile {} script]
-test socket-2.1 {tcp connection} {socket stdio} {
+test socket-2.1 {tcp connection} -constraints {socket stdio} -setup {
file delete $path(script)
set f [open $path(script) w]
puts $f {
@@ -260,23 +261,21 @@ test socket-2.1 {tcp connection} {socket stdio} {
set f [open "|[list [interpreter] $path(script)]" r]
gets $f x
gets $f listen
- if {[catch {socket 127.0.0.1 $listen} msg]} {
- set x $msg
- } else {
- lappend x [gets $f]
- close $msg
- }
+} -body {
+ # $x == "ready" at this point
+ set sock [socket 127.0.0.1 $listen]
lappend x [gets $f]
+ close $sock
+ lappend x [gets $f]
+} -cleanup {
close $f
- set x
-} {ready done {}}
-
-if [info exists port] {
+} -result {ready done {}}
+if {[info exists port]} {
incr port
} else {
- set port [expr 2048 + [pid]%1024]
+ set port [expr {2048 + [pid]%1024}]
}
-test socket-2.2 {tcp connection with client port specified} {socket stdio} {
+test socket-2.2 {tcp connection with client port specified} -setup {
file delete $path(script)
set f [open $path(script) w]
puts $f {
@@ -298,21 +297,20 @@ test socket-2.2 {tcp connection with client port specified} {socket stdio} {
set f [open "|[list [interpreter] $path(script)]" r]
gets $f x
gets $f listen
+} -constraints {socket stdio} -body {
+ # $x == "ready" at this point
global port
- if {[catch {socket -myport $port 127.0.0.1 $listen} sock]} {
- set x $sock
- close [socket 127.0.0.1 $listen]
- puts stderr $sock
- } else {
- puts $sock hello
- flush $sock
- lappend x [gets $f]
- close $sock
- }
+ set sock [socket -myport $port 127.0.0.1 $listen]
+ puts $sock hello
+ flush $sock
+ lappend x [gets $f]
+ close $sock
+ return $x
+} -cleanup {
+ catch {close [socket 127.0.0.1 $listen]}
close $f
- set x
-} [list ready "hello $port"]
-test socket-2.3 {tcp connection with client interface specified} {socket stdio} {
+} -result [list ready "hello $port"]
+test socket-2.3 {tcp connection with client interface specified} -setup {
file delete $path(script)
set f [open $path(script) w]
puts $f {
@@ -332,18 +330,18 @@ test socket-2.3 {tcp connection with client interface specified} {socket stdio}
close $f
set f [open "|[list [interpreter] $path(script)]" r]
gets $f x
- if {[catch {socket -myaddr 127.0.0.1 127.0.0.1 2830} sock]} {
- set x $sock
- } else {
- puts $sock hello
- flush $sock
- lappend x [gets $f]
- close $sock
- }
+} -constraints {socket stdio} -body {
+ # $x == "ready" at this point
+ set sock [socket -myaddr 127.0.0.1 127.0.0.1 2830]
+ puts $sock hello
+ flush $sock
+ lappend x [gets $f]
+ close $sock
+ return $x
+} -cleanup {
close $f
- set x
-} {ready {hello 127.0.0.1}}
-test socket-2.4 {tcp connection with server interface specified} {socket stdio} {
+} -result {ready {hello 127.0.0.1}}
+test socket-2.4 {tcp connection with server interface specified} -setup {
file delete $path(script)
set f [open $path(script) w]
puts $f {
@@ -365,18 +363,18 @@ test socket-2.4 {tcp connection with server interface specified} {socket stdio}
set f [open "|[list [interpreter] $path(script)]" r]
gets $f x
gets $f listen
- if {[catch {socket 127.0.0.1 $listen} sock]} {
- set x $sock
- } else {
- puts $sock hello
- flush $sock
- lappend x [gets $f]
- close $sock
- }
+} -constraints {socket stdio} -body {
+ # $x == "ready" at this point
+ set sock [socket 127.0.0.1 $listen]
+ puts $sock hello
+ flush $sock
+ lappend x [gets $f]
+ close $sock
+ return $x
+} -cleanup {
close $f
- set x
-} {ready hello}
-test socket-2.5 {tcp connection with redundant server port} {socket stdio} {
+} -result {ready hello}
+test socket-2.5 {tcp connection with redundant server port} -setup {
file delete $path(script)
set f [open $path(script) w]
puts $f {
@@ -398,18 +396,18 @@ test socket-2.5 {tcp connection with redundant server port} {socket stdio} {
set f [open "|[list [interpreter] $path(script)]" r]
gets $f x
gets $f listen
- if {[catch {socket 127.0.0.1 $listen} sock]} {
- set x $sock
- } else {
- puts $sock hello
- flush $sock
- lappend x [gets $f]
- close $sock
- }
+} -constraints {socket stdio} -body {
+ # $x == "ready" at this point
+ set sock [socket 127.0.0.1 $listen]
+ puts $sock hello
+ flush $sock
+ lappend x [gets $f]
+ close $sock
+ return $x
+} -cleanup {
close $f
- set x
-} {ready hello}
-test socket-2.6 {tcp connection} {socket} {
+} -result {ready hello}
+test socket-2.6 {tcp connection} -constraints socket -body {
set status ok
if {![catch {set sock [socket 127.0.0.1 2833]}]} {
if {![catch {gets $sock}]} {
@@ -418,8 +416,8 @@ test socket-2.6 {tcp connection} {socket} {
close $sock
}
set status
-} ok
-test socket-2.7 {echo server, one line} {socket stdio} {
+} -result ok
+test socket-2.7 {echo server, one line} -constraints {socket stdio} -setup {
file delete $path(script)
set f [open $path(script) w]
puts $f {
@@ -450,18 +448,19 @@ test socket-2.7 {echo server, one line} {socket stdio} {
set f [open "|[list [interpreter] $path(script)]" r]
gets $f
gets $f listen
+} -body {
set s [socket 127.0.0.1 $listen]
fconfigure $s -buffering line -translation lf
puts $s "hello abcdefghijklmnop"
after 1000
set x [gets $s]
close $s
- set y [gets $f]
+ list $x [gets $f]
+} -cleanup {
close $f
- list $x $y
-} {{hello abcdefghijklmnop} done}
+} -result {{hello abcdefghijklmnop} done}
removeFile script
-test socket-2.8 {echo server, loop 50 times, single connection} -constraints {socket stdio} -setup {
+test socket-2.8 {echo server, loop 50 times, single connection} -setup {
set path(script) [makeFile {
set f [socket -server accept 0]
proc accept {s a p} {
@@ -489,10 +488,10 @@ test socket-2.8 {echo server, loop 50 times, single connection} -constraints {so
close $f
puts "done $i"
} script]
-} -body {
set f [open "|[list [interpreter] $path(script)]" r]
gets $f
gets $f listen
+} -constraints {socket stdio} -body {
set s [socket 127.0.0.1 $listen]
fconfigure $s -buffering line
catch {
@@ -503,13 +502,13 @@ test socket-2.8 {echo server, loop 50 times, single connection} -constraints {so
}
close $s
catch {set x [gets $f]}
- close $f
- set x
+ return $x
} -cleanup {
+ close $f
removeFile script
} -result {done 50}
set path(script) [makeFile {} script]
-test socket-2.9 {socket conflict} {socket stdio} {
+test socket-2.9 {socket conflict} -constraints {socket stdio} -body {
set s [socket -server accept 0]
file delete $path(script)
set f [open $path(script) w]
@@ -518,15 +517,14 @@ test socket-2.9 {socket conflict} {socket stdio} {
set f [open "|[list [interpreter] $path(script)]" r]
gets $f
after 100
- set x [list [catch {close $f} msg]]
- regsub "\n.*$" $msg {} msg ; # cut part of the error message containing the port number
- lappend x $msg
+ close $f
+} -returnCodes error -cleanup {
close $s
- set x
-} {1 {couldn't open socket: address already in use}}
-test socket-2.10 {close on accept, accepted socket lives} {socket} {
+} -match glob -result {couldn't open socket: address already in use*}
+test socket-2.10 {close on accept, accepted socket lives} -setup {
set done 0
set timer [after 20000 "set done timed_out"]
+} -constraints socket -body {
set ss [socket -server accept 0]
proc accept {s a p} {
global ss
@@ -544,17 +542,18 @@ test socket-2.10 {close on accept, accepted socket lives} {socket} {
puts $cs hello
close $cs
vwait done
+ return $done
+} -cleanup {
after cancel $timer
- set done
-} 1
-test socket-2.11 {detecting new data} {socket} {
+} -result 1
+test socket-2.11 {detecting new data} -constraints socket -setup {
proc accept {s a p} {
global sock
set sock $s
}
-
set s [socket -server accept 0]
set sock ""
+} -body {
set s2 [socket 127.0.0.1 [lindex [fconfigure $s -sockname] 2]]
vwait sock
puts $s2 one
@@ -569,15 +568,14 @@ test socket-2.11 {detecting new data} {socket} {
after 500
fconfigure $sock -blocking 0
lappend result c:[gets $sock]
+} -cleanup {
fconfigure $sock -blocking 1
close $s2
close $s
close $sock
- set result
-} {a:one b: c:two}
+} -result {a:one b: c:two}
-
-test socket-3.1 {socket conflict} {socket stdio} {
+test socket-3.1 {socket conflict} -constraints {socket stdio} -setup {
file delete $path(script)
set f [open $path(script) w]
puts $f {
@@ -591,13 +589,13 @@ test socket-3.1 {socket conflict} {socket stdio} {
set f [open "|[list [interpreter] $path(script)]" r+]
gets $f
gets $f listen
- set x [list [catch {socket -server accept -myaddr 127.0.0.1 $listen} msg] \
- $msg]
+} -body {
+ socket -server accept -myaddr 127.0.0.1 $listen
+} -cleanup {
puts $f bye
close $f
- set x
-} {1 {couldn't open socket: address already in use}}
-test socket-3.2 {server with several clients} {socket stdio} {
+} -returnCodes error -result {couldn't open socket: address already in use}
+test socket-3.2 {server with several clients} -setup {
file delete $path(script)
set f [open $path(script) w]
puts $f {
@@ -635,6 +633,8 @@ test socket-3.2 {server with several clients} {socket stdio} {
set f [open "|[list [interpreter] $path(script)]" r+]
set x [gets $f]
gets $f listen
+} -constraints {socket stdio} -body {
+ # $x == "ready" here
set s1 [socket 127.0.0.1 $listen]
fconfigure $s1 -buffering line
set s2 [socket 127.0.0.1 $listen]
@@ -653,11 +653,11 @@ test socket-3.2 {server with several clients} {socket stdio} {
close $s2
close $s3
lappend x [gets $f]
+} -cleanup {
close $f
- set x
-} {ready done}
+} -result {ready done}
-test socket-4.1 {server with several clients} {socket stdio} {
+test socket-4.1 {server with several clients} -setup {
file delete $path(script)
set f [open $path(script) w]
puts $f {
@@ -679,6 +679,7 @@ test socket-4.1 {server with several clients} {socket stdio} {
fconfigure $p2 -buffering line
set p3 [open "|[list [interpreter] $path(script)]" r+]
fconfigure $p3 -buffering line
+} -constraints {socket stdio} -body {
proc accept {s a p} {
fconfigure $s -buffering line
fileevent $s readable [list echo $s]
@@ -712,50 +713,40 @@ test socket-4.1 {server with several clients} {socket stdio} {
lappend l [list p1 [gets $p1] $x]
lappend l [list p2 [gets $p2] $x]
lappend l [list p3 [gets $p3] $x]
+} -cleanup {
puts $p1 bye
puts $p2 bye
puts $p3 bye
close $p1
close $p2
close $p3
- set l
-} {{p1 bye done} {p2 bye done} {p3 bye done}}
-test socket-4.2 {byte order problems, socket numbers, htons} {socket} {
- set x ok
- if {[catch {socket -server dodo -myaddr 127.0.0.1 0x3000} msg]} {
- set x $msg
- } else {
- close $msg
- }
- set x
-} ok
+} -result {{p1 bye done} {p2 bye done} {p3 bye done}}
+test socket-4.2 {byte order problems, socket numbers, htons} -body {
+ close [socket -server dodo -myaddr 127.0.0.1 0x3000]
+ return ok
+} -constraints socket -result ok
-test socket-5.1 {byte order problems, socket numbers, htons} \
- {socket unix notRoot} {
- set x {couldn't open socket: not owner}
+test socket-5.1 {byte order problems, socket numbers, htons} -body {
if {![catch {socket -server dodo 0x1} msg]} {
- set x {htons problem, should be disallowed, are you running as SU?}
close $msg
+ return {htons problem, should be disallowed, are you running as SU?}
}
- set x
-} {couldn't open socket: not owner}
-test socket-5.2 {byte order problems, socket numbers, htons} {socket} {
- set x {couldn't open socket: port number too high}
+ return {couldn't open socket: not owner}
+} -constraints {socket unix notRoot} -result {couldn't open socket: not owner}
+test socket-5.2 {byte order problems, socket numbers, htons} -body {
if {![catch {socket -server dodo 0x10000} msg]} {
- set x {port resolution problem, should be disallowed}
close $msg
+ return {port resolution problem, should be disallowed}
}
- set x
-} {couldn't open socket: port number too high}
-test socket-5.3 {byte order problems, socket numbers, htons} \
- {socket unix notRoot} {
- set x {couldn't open socket: not owner}
+ return {couldn't open socket: port number too high}
+} -constraints socket -result {couldn't open socket: port number too high}
+test socket-5.3 {byte order problems, socket numbers, htons} -body {
if {![catch {socket -server dodo 21} msg]} {
- set x {htons problem, should be disallowed, are you running as SU?}
close $msg
+ return {htons problem, should be disallowed, are you running as SU?}
}
- set x
-} {couldn't open socket: not owner}
+ return {couldn't open socket: not owner}
+} -constraints {socket unix notRoot} -result {couldn't open socket: not owner}
test socket-6.1 {accept callback error} -constraints {socket stdio} -setup {
proc myHandler {msg options} {
@@ -780,12 +771,12 @@ test socket-6.1 {accept callback error} -constraints {socket stdio} -setup {
vwait x
after cancel $timer
close $s
- set x
+ return $x
} -cleanup {
interp bgerror {} $handler
} -result {divide by zero}
-test socket-7.1 {testing socket specific options} {socket stdio} {
+test socket-7.1 {testing socket specific options} -setup {
file delete $path(script)
set f [open $path(script) w]
puts $f {
@@ -804,16 +795,18 @@ test socket-7.1 {testing socket specific options} {socket stdio} {
set f [open "|[list [interpreter] $path(script)]" r]
gets $f
gets $f listen
+ set l ""
+} -constraints {socket stdio} -body {
set s [socket 127.0.0.1 $listen]
set p [fconfigure $s -peername]
close $s
- close $f
- set l ""
lappend l [string compare [lindex $p 0] 127.0.0.1]
lappend l [string compare [lindex $p 2] $listen]
lappend l [llength $p]
-} {0 0 3}
-test socket-7.2 {testing socket specific options} {socket stdio} {
+} -cleanup {
+ close $f
+} -result {0 0 3}
+test socket-7.2 {testing socket specific options} -setup {
file delete $path(script)
set f [open $path(script) w]
puts $f {
@@ -832,22 +825,27 @@ test socket-7.2 {testing socket specific options} {socket stdio} {
set f [open "|[list [interpreter] $path(script)]" r]
gets $f
gets $f listen
+} -constraints {socket stdio} -body {
set s [socket 127.0.0.1 $listen]
set p [fconfigure $s -sockname]
close $s
- close $f
list [llength $p] \
[regexp {^(127\.0\.0\.1|0\.0\.0\.0)$} [lindex $p 0]] \
[expr {[lindex $p 2] == $listen}]
-} {3 1 0}
-test socket-7.3 {testing socket specific options} {socket} {
+} -cleanup {
+ close $f
+} -result {3 1 0}
+test socket-7.3 {testing socket specific options} -constraints socket -body {
set s [socket -server accept -myaddr 127.0.0.1 0]
set l [fconfigure $s]
close $s
update
llength $l
-} 14
-test socket-7.4 {testing socket specific options} {socket} {
+} -result 14
+test socket-7.4 {testing socket specific options} -constraints socket -setup {
+ set timer [after 10000 "set x timed_out"]
+ set l ""
+} -body {
set s [socket -server accept -myaddr 127.0.0.1 0]
proc accept {s a p} {
global x
@@ -856,15 +854,17 @@ test socket-7.4 {testing socket specific options} {socket} {
}
set listen [lindex [fconfigure $s -sockname] 2]
set s1 [socket 127.0.0.1 $listen]
- set timer [after 10000 "set x timed_out"]
vwait x
+ lappend l [expr {[lindex $x 2] == $listen}] [llength $x]
+} -cleanup {
after cancel $timer
close $s
close $s1
+} -result {1 3}
+test socket-7.5 {testing socket specific options} -setup {
+ set timer [after 10000 "set x timed_out"]
set l ""
- lappend l [expr {[lindex $x 2] == $listen}] [llength $x]
-} {1 3}
-test socket-7.5 {testing socket specific options} {socket unixOrPc} {
+} -constraints {socket unixOrPc} -body {
set s [socket -server accept 0]
proc accept {s a p} {
global x
@@ -873,18 +873,17 @@ test socket-7.5 {testing socket specific options} {socket unixOrPc} {
}
set listen [lindex [fconfigure $s -sockname] 2]
set s1 [socket 127.0.0.1 $listen]
- set timer [after 10000 "set x timed_out"]
vwait x
+ lappend l [lindex $x 0] [expr {[lindex $x 2] == $listen}] [llength $x]
+} -cleanup {
after cancel $timer
close $s
close $s1
- set l ""
- lappend l [lindex $x 0] [expr {[lindex $x 2] == $listen}] [llength $x]
-} {127.0.0.1 1 3}
+} -result {127.0.0.1 1 3}
-test socket-8.1 {testing -async flag on sockets} {socket} {
- # NOTE: This test may fail on some Solaris 2.4 systems. If it does,
- # check that you have these patches installed (using showrev -p):
+test socket-8.1 {testing -async flag on sockets} -constraints socket -body {
+ # NOTE: This test may fail on some Solaris 2.4 systems. If it does, check
+ # that you have these patches installed (using showrev -p):
#
# 101907-05, 101925-02, 101945-14, 101959-03, 101969-05, 101973-03,
# 101977-03, 101981-02, 101985-01, 102001-03, 102003-01, 102007-01,
@@ -893,10 +892,10 @@ test socket-8.1 {testing -async flag on sockets} {socket} {
# 101878-03, 101879-01, 101880-03, 101933-01, 101950-01, 102030-01,
# 102057-08, 102140-01, 101920-02, 101921-09, 101922-07, 101923-03
#
- # If after installing these patches you are still experiencing a
- # problem, please email jyl@eng.sun.com. We have not observed this
- # failure on Solaris 2.5, so another option (instead of installing
- # these patches) is to upgrade to Solaris 2.5.
+ # If after installing these patches you are still experiencing a problem,
+ # please email jyl@eng.sun.com. We have not observed this failure on
+ # Solaris 2.5, so another option (instead of installing these patches) is
+ # to upgrade to Solaris 2.5.
set s [socket -server accept -myaddr 127.0.0.1 0]
proc accept {s a p} {
global x
@@ -906,16 +905,18 @@ test socket-8.1 {testing -async flag on sockets} {socket} {
}
set s1 [socket -async 127.0.0.1 [lindex [fconfigure $s -sockname] 2]]
vwait x
- set z [gets $s1]
+ gets $s1
+} -cleanup {
close $s
close $s1
- set z
-} bye
+} -result bye
-test socket-9.1 {testing spurious events} {socket} {
+test socket-9.1 {testing spurious events} -constraints socket -setup {
set len 0
set spurious 0
set done 0
+ set timer [after 10000 "set done timed_out"]
+} -body {
proc readlittle {s} {
global spurious done len
set l [read $s 1]
@@ -938,19 +939,20 @@ test socket-9.1 {testing spurious events} {socket} {
set c [socket 127.0.0.1 [lindex [fconfigure $s -sockname] 2]]
puts -nonewline $c 01234567890123456789012345678901234567890123456789
close $c
- set timer [after 10000 "set done timed_out"]
vwait done
- after cancel $timer
close $s
list $spurious $len
-} {0 50}
-test socket-9.2 {testing async write, fileevents, flush on close} {socket} {
+} -cleanup {
+ after cancel $timer
+} -result {0 50}
+test socket-9.2 {testing async write, fileevents, flush on close} -constraints socket -setup {
set firstblock ""
for {set i 0} {$i < 5} {incr i} {set firstblock "a$firstblock$firstblock"}
set secondblock ""
for {set i 0} {$i < 16} {incr i} {
set secondblock "b$secondblock$secondblock"
}
+ set timer [after 10000 "set done timed_out"]
set l [socket -server accept -myaddr 127.0.0.1 0]
proc accept {s a p} {
fconfigure $s -blocking 0 -translation lf -buffersize 16384 \
@@ -972,6 +974,7 @@ test socket-9.2 {testing async write, fileevents, flush on close} {socket} {
puts -nonewline $s $secondblock
close $s
}
+} -body {
set s [socket 127.0.0.1 [lindex [fconfigure $l -sockname] 2]]
fconfigure $s -blocking 0 -trans lf -buffering line
set count 0
@@ -986,15 +989,27 @@ test socket-9.2 {testing async write, fileevents, flush on close} {socket} {
}
}
fileevent $s readable "readit $s"
- set timer [after 10000 "set done timed_out"]
vwait done
- after cancel $timer
+ return $count
+} -cleanup {
close $l
- set count
-} 65566
-test socket-9.3 {testing EOF stickyness} {socket} {
+ after cancel $timer
+} -result 65566
+test socket-9.3 {testing EOF stickyness} -constraints socket -setup {
+ set count 0
+ set done false
+ proc write_then_close {s} {
+ puts $s bye
+ close $s
+ }
+ proc accept {s a p} {
+ fconfigure $s -buffering line -translation lf
+ fileevent $s writable "write_then_close $s"
+ }
+ set s [socket -server accept -myaddr 127.0.0.1 0]
+} -body {
proc count_to_eof {s} {
- global count done timer
+ global count done
set l [gets $s]
if {[eof $s]} {
incr count
@@ -1002,35 +1017,25 @@ test socket-9.3 {testing EOF stickyness} {socket} {
close $s
set done true
set count {eof is sticky}
- after cancel $timer
}
}
}
- proc timerproc {} {
- global done count c
+ proc timerproc {s} {
+ global done count
set done true
set count {timer went off, eof is not sticky}
- close $c
- }
- set count 0
- set done false
- proc write_then_close {s} {
- puts $s bye
close $s
}
- proc accept {s a p} {
- fconfigure $s -buffering line -translation lf
- fileevent $s writable "write_then_close $s"
- }
- set s [socket -server accept -myaddr 127.0.0.1 0]
set c [socket 127.0.0.1 [lindex [fconfigure $s -sockname] 2]]
fconfigure $c -blocking off -buffering line -translation lf
fileevent $c readable "count_to_eof $c"
- set timer [after 1000 timerproc]
+ set timer [after 1000 timerproc $c]
vwait done
+ return $count
+} -cleanup {
close $s
- set count
-} {eof is sticky}
+ after cancel $timer
+} -result {eof is sticky}
removeFile script
@@ -1050,12 +1055,12 @@ test socket-10.1 {testing socket accept callback error handling} -constraints {
vwait goterror
close $s
close $c
- set goterror
+ return $goterror
} -cleanup {
interp bgerror {} $handler
} -result 1
-test socket-11.1 {tcp connection} {socket doTestsWithRemoteServer} {
+test socket-11.1 {tcp connection} -setup {
sendCommand {
set socket9_1_test_server [socket -server accept 2834]
proc accept {s a p} {
@@ -1063,13 +1068,14 @@ test socket-11.1 {tcp connection} {socket doTestsWithRemoteServer} {
close $s
}
}
+} -constraints {socket doTestsWithRemoteServer} -body {
set s [socket $remoteServerIP 2834]
- set r [gets $s]
+ gets $s
+} -cleanup {
close $s
sendCommand {close $socket9_1_test_server}
- set r
-} done
-test socket-11.2 {client specifies its port} {socket doTestsWithRemoteServer} {
+} -result done
+test socket-11.2 {client specifies its port} -setup {
if {[info exists port]} {
incr port
} else {
@@ -1082,18 +1088,15 @@ test socket-11.2 {client specifies its port} {socket doTestsWithRemoteServer} {
close $s
}
}
+} -constraints {socket doTestsWithRemoteServer} -body {
set s [socket -myport $port $remoteServerIP 2835]
set r [gets $s]
+ expr {$r==$port ? "ok" : "broken: $r != $port"}
+} -cleanup {
close $s
sendCommand {close $socket9_2_test_server}
- if {$r == $port} {
- set result ok
- } else {
- set result broken
- }
- set result
-} ok
-test socket-11.3 {trying to connect, no server} {socket doTestsWithRemoteServer} {
+} -result ok
+test socket-11.3 {trying to connect, no server} -body {
set status ok
if {![catch {set s [socket $remoteServerIp 2836]}]} {
if {![catch {gets $s}]} {
@@ -1101,9 +1104,9 @@ test socket-11.3 {trying to connect, no server} {socket doTestsWithRemoteServer}
}
close $s
}
- set status
-} ok
-test socket-11.4 {remote echo, one line} {socket doTestsWithRemoteServer} {
+ return $status
+} -constraints {socket doTestsWithRemoteServer} -result ok
+test socket-11.4 {remote echo, one line} -setup {
sendCommand {
set socket10_6_test_server [socket -server accept 2836]
proc accept {s a p} {
@@ -1119,15 +1122,16 @@ test socket-11.4 {remote echo, one line} {socket doTestsWithRemoteServer} {
}
}
}
+} -constraints {socket doTestsWithRemoteServer} -body {
set f [socket $remoteServerIP 2836]
fconfigure $f -translation crlf -buffering line
puts $f hello
- set r [gets $f]
- close $f
+ gets $f
+} -cleanup {
+ catch {close $f}
sendCommand {close $socket10_6_test_server}
- set r
-} hello
-test socket-11.5 {remote echo, 50 lines} {socket doTestsWithRemoteServer} {
+} -result hello
+test socket-11.5 {remote echo, 50 lines} -setup {
sendCommand {
set socket10_7_test_server [socket -server accept 2836]
proc accept {s a p} {
@@ -1143,30 +1147,29 @@ test socket-11.5 {remote echo, 50 lines} {socket doTestsWithRemoteServer} {
}
}
}
+} -constraints {socket doTestsWithRemoteServer} -body {
set f [socket $remoteServerIP 2836]
fconfigure $f -translation crlf -buffering line
for {set cnt 0} {$cnt < 50} {incr cnt} {
puts $f "hello, $cnt"
- if {[string compare [gets $f] "hello, $cnt"] != 0} {
+ if {[gets $f] != "hello, $cnt"} {
break
}
}
+ return $cnt
+} -cleanup {
close $f
sendCommand {close $socket10_7_test_server}
- set cnt
-} 50
-test socket-11.6 {socket conflict} {socket doTestsWithRemoteServer} {
+} -result 50
+test socket-11.6 {socket conflict} -setup {
set s1 [socket -server accept -myaddr 127.0.0.1 2836]
- if {[catch {set s2 [socket -server accept -myaddr 127.0.0.1 2836]} msg]} {
- set result [list 1 $msg]
- } else {
- set result [list 0 [lindex [fconfigure $s2 -sockname] 2]]
- close $s2
- }
+} -constraints {socket doTestsWithRemoteServer} -body {
+ set s2 [socket -server accept -myaddr 127.0.0.1 2836]
+ list [lindex [fconfigure $s2 -sockname] 2] [close $s2]
+} -cleanup {
close $s1
- set result
-} {1 {couldn't open socket: address already in use}}
-test socket-11.7 {server with several clients} {socket doTestsWithRemoteServer} {
+} -returnCodes error -result {couldn't open socket: address already in use}
+test socket-11.7 {server with several clients} -setup {
sendCommand {
set socket10_9_test_server [socket -server accept 2836]
proc accept {s a p} {
@@ -1182,6 +1185,7 @@ test socket-11.7 {server with several clients} {socket doTestsWithRemoteServer}
}
}
}
+} -constraints {socket doTestsWithRemoteServer} -body {
set s1 [socket $remoteServerIP 2836]
fconfigure $s1 -buffering line
set s2 [socket $remoteServerIP 2836]
@@ -1196,13 +1200,14 @@ test socket-11.7 {server with several clients} {socket doTestsWithRemoteServer}
puts $s3 hello,s3
gets $s3
}
+ return $i
+} -cleanup {
close $s1
close $s2
close $s3
sendCommand {close $socket10_9_test_server}
- set i
-} 100
-test socket-11.8 {client with several servers} {socket doTestsWithRemoteServer} {
+} -result 100
+test socket-11.8 {client with several servers} -setup {
sendCommand {
set s1 [socket -server "accept 4003" 4003]
set s2 [socket -server "accept 4004" 4004]
@@ -1212,12 +1217,13 @@ test socket-11.8 {client with several servers} {socket doTestsWithRemoteServer}
close $s
}
}
+} -constraints {socket doTestsWithRemoteServer} -body {
set s1 [socket $remoteServerIP 4003]
set s2 [socket $remoteServerIP 4004]
set s3 [socket $remoteServerIP 4005]
- set l ""
- lappend l [gets $s1] [gets $s1] [eof $s1] [gets $s2] [gets $s2] [eof $s2] \
+ list [gets $s1] [gets $s1] [eof $s1] [gets $s2] [gets $s2] [eof $s2] \
[gets $s3] [gets $s3] [eof $s3]
+} -cleanup {
close $s1
close $s2
close $s3
@@ -1226,8 +1232,7 @@ test socket-11.8 {client with several servers} {socket doTestsWithRemoteServer}
close $s2
close $s3
}
- set l
-} {4003 {} 1 4004 {} 1 4005 {} 1}
+} -result {4003 {} 1 4004 {} 1 4005 {} 1}
test socket-11.9 {accept callback error} -constraints {
socket doTestsWithRemoteServer
} -setup {
@@ -1236,40 +1241,42 @@ test socket-11.9 {accept callback error} -constraints {
}
set handler [interp bgerror {}]
interp bgerror {} [namespace which myHandler]
+ set timer [after 10000 "set x timed_out"]
} -body {
set s [socket -server accept 2836]
proc accept {s a p} {expr 10 / 0}
- if {[catch {sendCommand {
+ if {[catch {
+ sendCommand {
set peername [fconfigure $callerSocket -peername]
set s [socket [lindex $peername 0] 2836]
close $s
- }} msg]} {
+ }
+ } msg]} then {
close $s
error $msg
}
- set timer [after 10000 "set x timed_out"]
vwait x
- after cancel $timer
- close $s
- set x
+ return $x
} -cleanup {
+ close $s
+ after cancel $timer
interp bgerror {} $handler
} -result {divide by zero}
-test socket-11.10 {testing socket specific options} {socket doTestsWithRemoteServer} {
+test socket-11.10 {testing socket specific options} -setup {
sendCommand {
set socket10_12_test_server [socket -server accept 2836]
proc accept {s a p} {close $s}
}
+} -constraints {socket doTestsWithRemoteServer} -body {
set s [socket $remoteServerIP 2836]
set p [fconfigure $s -peername]
set n [fconfigure $s -sockname]
- set l ""
- lappend l [lindex $p 2] [llength $p] [llength $p]
+ list [lindex $p 2] [llength $p] [llength $n]
+} -cleanup {
close $s
sendCommand {close $socket10_12_test_server}
- set l
-} {2836 3 3}
-test socket-11.11 {testing spurious events} {socket doTestsWithRemoteServer} {
+} -result {2836 3 3}
+test socket-11.11 {testing spurious events} -setup {
sendCommand {
set socket10_13_test_server [socket -server accept 2836]
proc accept {s a p} {
@@ -1286,6 +1293,8 @@ test socket-11.11 {testing spurious events} {socket doTestsWithRemoteServer} {
set len 0
set spurious 0
set done 0
+ set timer [after 40000 "set done timed_out"]
+} -constraints {socket doTestsWithRemoteServer} -body {
proc readlittle {s} {
global spurious done len
set l [read $s 1]
@@ -1302,56 +1311,48 @@ test socket-11.11 {testing spurious events} {socket doTestsWithRemoteServer} {
}
set c [socket $remoteServerIP 2836]
fileevent $c readable "readlittle $c"
- set timer [after 40000 "set done timed_out"]
vwait done
+ list $spurious $len $done
+} -cleanup {
after cancel $timer
sendCommand {close $socket10_13_test_server}
- list $spurious $len $done
-} {0 2690 1}
-test socket-11.12 {testing EOF stickyness} {socket doTestsWithRemoteServer} {
+} -result {0 2690 1}
+test socket-11.12 {testing EOF stickyness} -constraints {socket doTestsWithRemoteServer} -setup {
set counter 0
set done 0
+ sendCommand {
+ set socket10_14_test_server [socket -server accept 2836]
+ proc accept {s a p} {
+ after 100 close $s
+ }
+ }
+ proc timed_out {} {
+ global c done
+ set done {timed_out, EOF is not sticky}
+ close $c
+ }
+ set after_id [after 1000 timed_out]
+} -body {
proc count_up {s} {
- global counter done after_id
+ global counter done
set l [gets $s]
if {[eof $s]} {
incr counter
if {$counter > 9} {
set done {EOF is sticky}
- after cancel $after_id
close $s
}
}
}
- proc timed_out {} {
- global c done
- set done {timed_out, EOF is not sticky}
- close $c
- }
- sendCommand {
- set socket10_14_test_server [socket -server accept 2836]
- proc accept {s a p} {
- after 100 close $s
- }
- }
set c [socket $remoteServerIP 2836]
fileevent $c readable [list count_up $c]
- set after_id [after 1000 timed_out]
vwait done
+ return $done
+} -cleanup {
+ after cancel $after_id
sendCommand {close $socket10_14_test_server}
- set done
-} {EOF is sticky}
-test socket-11.13 {testing async write, async flush, async close} \
- {socket doTestsWithRemoteServer} {
- proc readit {s} {
- global count done
- set l [read $s]
- incr count [string length $l]
- if {[eof $s]} {
- close $s
- set done 1
- }
- }
+} -result {EOF is sticky}
+test socket-11.13 {testing async write, async flush, async close} -setup {
sendCommand {
set firstblock ""
for {set i 0} {$i < 5} {incr i} {
@@ -1383,112 +1384,109 @@ test socket-11.13 {testing async write, async flush, async close} \
close $s
}
}
+ set timer [after 10000 "set done timed_out"]
+} -constraints {socket doTestsWithRemoteServer} -body {
+ proc readit {s} {
+ global count done
+ set l [read $s]
+ incr count [string length $l]
+ if {[eof $s]} {
+ close $s
+ set done 1
+ }
+ }
set s [socket $remoteServerIP 2845]
fconfigure $s -blocking 0 -trans lf -buffering line
set count 0
puts $s hello
fileevent $s readable "readit $s"
- set timer [after 10000 "set done timed_out"]
vwait done
+ return $count
+} -cleanup {
after cancel $timer
sendCommand {close $l}
- set count
-} 65566
+} -result 65566
set path(script1) [makeFile {} script1]
set path(script2) [makeFile {} script2]
-test socket-12.1 {testing inheritance of server sockets} {socket stdio exec} {
+test socket-12.1 {testing inheritance of server sockets} -setup {
file delete $path(script1)
file delete $path(script2)
-
- # Script1 is just a 10 second delay. If the server socket
- # is inherited, it will be held open for 10 seconds
-
+ # Script1 is just a 10 second delay. If the server socket is inherited, it
+ # will be held open for 10 seconds
set f [open $path(script1) w]
puts $f {
after 10000 exit
vwait forever
}
close $f
-
- # Script2 creates the server socket, launches script1,
- # waits a second, and exits. The server socket will now
- # be closed unless script1 inherited it.
-
+ # Script2 creates the server socket, launches script1, waits a second, and
+ # exits. The server socket will now be closed unless script1 inherited it.
set f [open $path(script2) w]
puts $f [list set tcltest [interpreter]]
- puts -nonewline $f {
+ puts $f [list set delay $path(script1)]
+ puts $f {
set f [socket -server accept -myaddr 127.0.0.1 0]
puts [lindex [fconfigure $f -sockname] 2]
proc accept { file addr port } {
close $file
}
- exec $tcltest }
- puts $f [list $path(script1) &]
- puts $f {
+ exec $tcltest $delay &
close $f
after 1000 exit
vwait forever
}
close $f
-
+} -constraints {socket stdio exec} -body {
# Launch script2 and wait 5 seconds
-
### exec [interpreter] script2 &
set p [open "|[list [interpreter] $path(script2)]" r]
gets $p listen
-
after 5000 { set ok_to_proceed 1 }
vwait ok_to_proceed
-
# If we can still connect to the server, the socket got inherited.
-
- if {[catch {socket 127.0.0.1 $listen} msg]} {
- set x {server socket was not inherited}
+ if {[catch {close [socket 127.0.0.1 $listen]}]} {
+ return {server socket was not inherited}
} else {
- close $msg
- set x {server socket was inherited}
+ return {server socket was inherited}
}
-
+} -cleanup {
close $p
- set x
-} {server socket was not inherited}
-test socket-12.2 {testing inheritance of client sockets} {socket stdio exec} {
+} -result {server socket was not inherited}
+test socket-12.2 {testing inheritance of client sockets} -setup {
file delete $path(script1)
file delete $path(script2)
-
- # Script1 is just a 20 second delay. If the server socket
- # is inherited, it will be held open for 10 seconds
-
+ # Script1 is just a 20 second delay. If the server socket is inherited, it
+ # will be held open for 20 seconds
set f [open $path(script1) w]
puts $f {
after 20000 exit
vwait forever
}
close $f
-
- # Script2 opens the client socket and writes to it. It then
- # launches script1 and exits. If the child process inherited the
- # client socket, the socket will still be open.
-
+ # Script2 opens the client socket and writes to it. It then launches
+ # script1 and exits. If the child process inherited the client socket, the
+ # socket will still be open.
set f [open $path(script2) w]
puts $f [list set tcltest [interpreter]]
- puts -nonewline $f {
+ puts $f [list set delay $path(script1)]
+ puts $f {
gets stdin port
set f [socket 127.0.0.1 $port]
- exec $tcltest }
- puts $f [list $path(script1) &]
- puts $f {
+ exec $tcltest $delay &
puts $f testing
flush $f
after 1000 exit
vwait forever
}
close $f
-
+ # If the socket doesn't hit end-of-file in 10 seconds, the script1 process
+ # must have inherited the client.
+ set failed 0
+ after 10000 [list set failed 1]
+} -constraints {socket stdio exec} -body {
# Create the server socket
-
set server [socket -server accept -myaddr 127.0.0.1 0]
proc accept { file host port } {
# When the client connects, establish the read handler
@@ -1496,17 +1494,15 @@ test socket-12.2 {testing inheritance of client sockets} {socket stdio exec} {
close $server
fileevent $file readable [list getdata $file]
fconfigure $file -buffering line -blocking 0
- return
}
proc getdata { file } {
# Read handler on the accepted socket.
- global x
- global failed
+ global x failed
set status [catch {read $file} data]
if {$status != 0} {
set x {read failed, error was $data}
catch { close $file }
- } elseif {[string compare {} $data]} {
+ } elseif {$data ne ""} {
} elseif {[fblocked $file]} {
} elseif {[eof $file]} {
if {$failed} {
@@ -1519,80 +1515,58 @@ test socket-12.2 {testing inheritance of client sockets} {socket stdio exec} {
set x {impossible case}
catch { close $file }
}
- return
}
-
- # If the socket doesn't hit end-of-file in 10 seconds, the
- # script1 process must have inherited the client.
-
- set failed 0
- after 10000 [list set failed 1]
-
# Launch the script2 process
### exec [interpreter] script2 &
-
set p [open "|[list [interpreter] $path(script2)]" w]
puts $p [lindex [fconfigure $server -sockname] 2] ; flush $p
-
vwait x
+ return $x
+} -cleanup {
if {!$failed} {
vwait failed
}
close $p
- set x
-} {client socket was not inherited}
-test socket-12.3 {testing inheritance of accepted sockets} {socket stdio exec} {
+} -result {client socket was not inherited}
+test socket-12.3 {testing inheritance of accepted sockets} -setup {
file delete $path(script1)
file delete $path(script2)
-
set f [open $path(script1) w]
puts $f {
after 10000 exit
vwait forever
}
close $f
-
set f [open $path(script2) w]
puts $f [list set tcltest [interpreter]]
- puts -nonewline $f {
+ puts $f [list set delay $path(script1)]
+ puts $f {
set server [socket -server accept -myaddr 127.0.0.1 0]
puts stdout [lindex [fconfigure $server -sockname] 2]
- proc accept { file host port } }
- puts $f \{
- puts -nonewline $f {
- global tcltest
+ proc accept { file host port } {
+ global tcltest delay
puts $file {test data on socket}
- exec $tcltest }
- puts $f [list $path(script1) &]
- puts $f {
+ exec $tcltest $delay &
after 1000 exit
}
- puts $f \}
- puts $f {
vwait forever
}
close $f
-
- # Launch the script2 process and connect to it. See how long
- # the socket stays open
-
+} -constraints {socket stdio exec} -body {
+ # Launch the script2 process and connect to it. See how long the socket
+ # stays open
## exec [interpreter] script2 &
set p [open "|[list [interpreter] $path(script2)]" r]
gets $p listen
-
after 1000 set ok_to_proceed 1
vwait ok_to_proceed
-
set f [socket 127.0.0.1 $listen]
fconfigure $f -buffering full -blocking 0
fileevent $f readable [list getdata $f]
-
- # If the socket is still open after 5 seconds, the script1 process
- # must have inherited the accepted socket.
-
+ # If the socket is still open after 5 seconds, the script1 process must
+ # have inherited the accepted socket.
set failed 0
after 5000 set failed 1
-
proc getdata { file } {
# Read handler on the client socket.
global x
@@ -1616,15 +1590,13 @@ test socket-12.3 {testing inheritance of accepted sockets} {socket stdio exec} {
}
return
}
-
vwait x
+ return $x
+} -cleanup {
+ catch {close $p}
+} -result {accepted socket was not inherited}
- close $p
- set x
-} {accepted socket was not inherited}
-
-test socket-13.1 {Testing use of shared socket between two threads} \
- -constraints {socket testthread} -setup {
+test socket-13.1 {Testing use of shared socket between two threads} -setup {
threadReap
set path(script) [makeFile {
set f [socket -server accept -myaddr 127.0.0.1 0]
@@ -1651,29 +1623,28 @@ test socket-13.1 {Testing use of shared socket between two threads} \
# thread cleans itself up.
testthread exit
} script]
-} -body {
+} -constraints {socket testthread} -body {
# create a thread
set serverthread [testthread create [list source $path(script) ] ]
update
set port [testthread send $serverthread {set listen}]
update
-
after 1000
set s [socket 127.0.0.1 $port]
fconfigure $s -buffering line
-
catch {
puts $s "hello"
gets $s result
}
close $s
update
-
after 2000
- lappend result [threadReap]
+ append result " " [threadReap]
} -cleanup {
removeFile script
} -result {hello 1}
+
+# ----------------------------------------------------------------------
removeFile script1
removeFile script2
@@ -1688,3 +1659,8 @@ catch {close $remoteProcChan}
::tcltest::cleanupTests
flush stdout
return
+
+# Local Variables:
+# mode: tcl
+# fill-column: 78
+# End: