# udp.test # # This file tests the udp protocol # if {[string compare test [info procs test]] == 1} then {source ../tests/defs} # set VERBOSE 1 test udp-1.1.1 {dp_connect command} { list [catch { dp_connect udp -bar } msg] $msg } {1 {unknown option "-bar", must be -host, -myaddr, -myport or -port}} test udp-1.1.2 {dp_connect command} { list [catch { dp_connect udp -bar foo } msg] $msg } {1 {unknown option "-bar", must be -host, -myaddr, -myport or -port}} # # Test arg missing checks # test udp-1.2.1 {dp_connect command} { list [catch { dp_connect udp -host } msg] $msg } {1 {value for "-host" missing}} test udp-1.2.2 {dp_connect command} { list [catch { dp_connect udp -port } msg] $msg } {1 {value for "-port" missing}} test udp-1.2.3 {dp_connect command} { list [catch { dp_connect udp -myaddr } msg] $msg } {1 {value for "-myaddr" missing}} test udp-1.2.4 {dp_connect command} { list [catch { dp_connect udp -myport } msg] $msg } {1 {value for "-myport" missing}} # # Test type checking of args # test udp-1.3.1 {dp_connect command} { list [catch { dp_connect udp -host "" } msg] $msg } {1 {Unknown host ""}} # This test must only be run if the client can communicate with # the DNS #test udp-1.3.2 {dp_connect command} { # list [catch { # dp_connect udp -host foo # } msg] $msg #} {1 {Unknown host "foo"}} test udp-1.3.3 {dp_connect command} { list [catch { dp_connect udp -port foo } msg] $msg } {1 {expected integer but got "foo"}} # Only run if we're on a network #test udp-1.3.4 {dp_connect command} { # list [catch { # dp_connect udp -myaddr foo # } msg] $msg #} {1 {Illegal value for -myaddr "foo"}} test udp-1.3.5 {dp_connect command} { list [catch { dp_connect udp -myport foo } msg] $msg } {1 {expected integer but got "foo"}} set sock1 {} set sock2 {} test udp-1.3.6 {dp_connect command} { catch { set sock1 [dp_connect udp -host localhost -port 19065 -myport 19056]; set sock2 [dp_connect udp -host localhost -port 19056 -myport 19065]; } } 0 # At this point, sock1 is either the null string or a handle to a udp # socket. Only do remaining tests if we could create the socket. if {$sock1 != ""} { # # fconfigure tests # test udp-1.4.1 {fconfigure udp} { list [catch { fconfigure $sock1 } msg] $msg } {0 {-blocking 1 -buffering none -buffersize 4096 -eofchar {{} {}} -translation {lf lf} -sendBuffer 8192 -recvBuffer 8192 -peek 0 -host 127.0.0.1 -port 19065 -myport 19056}} test udp-1.4.2 {fconfigure udp} { list [catch { fconfigure $sock1 -badopt } msg] $msg } {1 {bad option "-badopt": must be -blocking, -buffering, -buffersize, -eofchar, -translation, or a channel type specific option}} test udp-1.4.3 {fconfigure udp} { list [catch { fconfigure $sock1 -myport 1000 } msg] $msg } {1 {Can't set port after socket is opened}} test udp-1.4.3 {fconfigure udp} { list [catch { fconfigure $sock2 -blocking 0 } msg] $msg } {0 {}} test udp-1.4.4 {fconfigure udp} { list [catch { fconfigure $sock2 -blocking } msg] $msg } {0 0} test udp-1.4.5.1 {fconfigure udp} { list [catch { fconfigure $sock1 -sendBuffer 4096 } msg] $msg } {0 {}} test udp-1.4.5.2 {fconfigure udp} { list [catch { fconfigure $sock1 -sendBuffer } msg] $msg } {0 4096} test udp-1.4.5.3 {fconfigure udp} { list [catch { fconfigure $sock1 -sendBuffer -1 } msg] $msg } {1 {Buffer size must be > 0}} test udp-1.4.5.4 {fconfigure udp} { list [catch { fconfigure $sock1 -sendBuffer foo } msg] $msg } {1 {expected integer but got "foo"}} test udp-1.4.6.1 {fconfigure udp} { list [catch { fconfigure $sock1 -recvBuffer 4096 } msg] $msg } {0 {}} test udp-1.4.6.2 {fconfigure udp} { list [catch { fconfigure $sock1 -recvBuffer } msg] $msg } {0 4096} test udp-1.4.6.3 {fconfigure udp} { list [catch { fconfigure $sock1 -recvBuffer -1 } msg] $msg } {1 {Buffer size must be > 0}} test udp-1.4.6.4 {fconfigure udp} { list [catch { fconfigure $sock1 -recvBuffer foo } msg] $msg } {1 {expected integer but got "foo"}} test udp-1.4.7.1 {fconfigure udp} { list [catch { fconfigure $sock1 -peek 1 } msg] $msg } {0 {}} test udp-1.4.7.2 {fconfigure udp} { list [catch { fconfigure $sock1 -peek } msg] $msg } {0 1} test udp-1.4.7.3 {fconfigure udp} { list [catch { fconfigure $sock1 -peek foo } msg] $msg } {1 {expected boolean value but got "foo"}} test udp-1.4.7.4 {fconfigure udp} { list [catch { fconfigure $sock1 -peek 0 } msg] $msg } {0 {}} test udp-1.4.8.1 {fconfigure udp} { list [catch { fconfigure $sock1 -host 127.0.0.1 } msg] $msg } {0 {}} test udp-1.4.8.2 {fconfigure udp} { list [catch { fconfigure $sock1 -host } msg] $msg } {0 127.0.0.1} test udp-1.4.8.3 {fconfigure udp} { list [catch { fconfigure $sock1 -host ftp.cs.cornell.edu } msg1] $msg1 [catch { fconfigure $sock1 -host } msg2] $msg2 } {0 {} 0 128.84.154.10} test udp-1.4.8.4 {fconfigure udp} { list [catch { fconfigure $sock1 -host localhost } msg1] $msg1 [catch { fconfigure $sock1 -host } msg2] $msg2 } {0 {} 0 127.0.0.1} test udp-1.4.9.1 {fconfigure udp} { list [catch { fconfigure $sock1 -port 2048 } msg1] $msg1 } {0 {}} test udp-1.4.9.2 {fconfigure udp} { list [catch { fconfigure $sock1 -port } msg1] $msg1 } {0 2048} test udp-1.4.9.3 {fconfigure udp} { list [catch { fconfigure $sock1 -port -1 } msg1] $msg1 } {1 {Port number must be > 0}} test udp-1.4.9.4 {fconfigure udp} { list [catch { fconfigure $sock1 -port foo } msg1] $msg1 } {1 {expected integer but got "foo"}} test udp-1.4.9.5 {fconfigure udp} { list [catch { fconfigure $sock1 -port 19065 } msg1] $msg1 [catch { fconfigure $sock1 -port } msg2] $msg2 } {0 {} 0 19065} test udp-1.4.10 {fconfigure udp} { list [catch { fconfigure $sock1 -myport 1 } msg1] $msg1 [catch { fconfigure $sock1 -myport } msg2] $msg2 } {1 {Can't set port after socket is opened} 0 19056} # # Test send/receive # test udp-1.5.1 {send udp} { list [catch { puts -nonewline $sock1 "Testing 1 2 3" flush $sock1 } msg] $msg } {0 {}} test udp-1.5.2 {read udp} { list [catch { read $sock2 } msg] $msg } {0 {Testing 1 2 3}} # # Try out the peek option. We'll put 2 messages on the wire, # and we should get the same one twice. If so, we clear the # peek and we should get the two messages on the next two # reads. # test udp-1.5.3 {peek udp} { puts -nonewline $sock1 "12345678901" flush $sock1 puts -nonewline $sock1 "12345678902" flush $sock1 fconfigure $sock2 -peek 1 set x [list [read $sock2] [read $sock2]] } {12345678901 12345678901} test udp-1.5.4 {send udp} { fconfigure $sock2 -peek 0 if {![string compare [lindex $x 1] "12345678901"]} { set x [list [read $sock2] [read $sock2]] } else { set x {12345678901 12345678902} } } {12345678901 12345678902} test udp-1.5.5 {dp_from variable} { list [catch { set a $dp_from } msg] $msg } {0 {{127.0.0.1 19056}}} # # Shut 'em down # test udp-1.9.0 {close udp socket} { list [catch { close $sock1 } msg] $msg } {0 {}} test udp-1.9.2 {close udp socket} { list [catch { close $sock2 } msg] $msg } {0 {}} test udp-1.9.3 {close udp socket} { list [catch { fconfigure $sock2 } msg] $msg } [list 1 "can not find channel named \"$sock2\""] # The following close brace matches the line above: # if {$sock1 != ""} }