147 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Factor
		
	
	
USING: io.files io.sockets io kernel threads namespaces
 | 
						|
tools.test continuations strings byte-arrays sequences
 | 
						|
prettyprint system ;
 | 
						|
IN: temporary
 | 
						|
 | 
						|
! Unix domain stream sockets
 | 
						|
[
 | 
						|
    [
 | 
						|
        "unix-domain-socket-test" resource-path delete-file
 | 
						|
    ] catch drop
 | 
						|
 | 
						|
    "unix-domain-socket-test" resource-path <local>
 | 
						|
    <server> [
 | 
						|
        stdio get accept [
 | 
						|
            "Hello world" print flush
 | 
						|
            readln "XYZ" = "FOO" "BAR" ? print flush
 | 
						|
        ] with-stream
 | 
						|
    ] with-stream
 | 
						|
 | 
						|
    "unix-domain-socket-test" resource-path delete-file
 | 
						|
] in-thread
 | 
						|
 | 
						|
yield
 | 
						|
 | 
						|
[ { "Hello world" "FOO" } ] [
 | 
						|
    [
 | 
						|
        "unix-domain-socket-test" resource-path <local> <client>
 | 
						|
        [
 | 
						|
            readln ,
 | 
						|
            "XYZ" print flush
 | 
						|
            readln ,
 | 
						|
        ] with-stream
 | 
						|
    ] { } make
 | 
						|
] unit-test
 | 
						|
 | 
						|
! Unix domain datagram sockets
 | 
						|
[
 | 
						|
    "unix-domain-datagram-test" resource-path delete-file
 | 
						|
] catch drop
 | 
						|
 | 
						|
: server-addr "unix-domain-datagram-test" resource-path <local> ;
 | 
						|
: client-addr "unix-domain-datagram-test-2" resource-path <local> ;
 | 
						|
 | 
						|
[
 | 
						|
    [
 | 
						|
        server-addr <datagram> "d" set
 | 
						|
 | 
						|
        "Receive 1" print
 | 
						|
 | 
						|
        "d" get receive >r reverse r>
 | 
						|
        
 | 
						|
        "Send 1" print
 | 
						|
        dup .
 | 
						|
 | 
						|
        "d" get send
 | 
						|
 | 
						|
        "Receive 2" print
 | 
						|
 | 
						|
        "d" get receive >r >upper r>
 | 
						|
        
 | 
						|
        "Send 1" print
 | 
						|
        dup .
 | 
						|
 | 
						|
         "d" get send
 | 
						|
 | 
						|
        "d" get stream-close
 | 
						|
 | 
						|
        "Done" print
 | 
						|
 | 
						|
        "unix-domain-datagram-test" resource-path delete-file
 | 
						|
    ] with-scope
 | 
						|
] in-thread
 | 
						|
 | 
						|
yield
 | 
						|
 | 
						|
[
 | 
						|
    "unix-domain-datagram-test-2" resource-path delete-file
 | 
						|
] catch drop
 | 
						|
 | 
						|
client-addr <datagram>
 | 
						|
"d" set
 | 
						|
 | 
						|
[ ] [
 | 
						|
    "hello" >byte-array
 | 
						|
    server-addr
 | 
						|
    "d" get send
 | 
						|
] unit-test
 | 
						|
 | 
						|
[ "olleh" t ] [
 | 
						|
    "d" get receive
 | 
						|
    server-addr =
 | 
						|
    >r >string r>
 | 
						|
] unit-test
 | 
						|
 | 
						|
[ ] [
 | 
						|
    "hello" >byte-array
 | 
						|
    server-addr
 | 
						|
    "d" get send
 | 
						|
] unit-test
 | 
						|
 | 
						|
[ "HELLO" t ] [
 | 
						|
    "d" get receive
 | 
						|
    server-addr =
 | 
						|
    >r >string r>
 | 
						|
] unit-test
 | 
						|
 | 
						|
[ ] [ "d" get stream-close ] unit-test
 | 
						|
 | 
						|
! Test error behavior
 | 
						|
 | 
						|
[
 | 
						|
    "unix-domain-datagram-test-3" resource-path delete-file
 | 
						|
] catch drop
 | 
						|
 | 
						|
"unix-domain-datagram-test-2" resource-path delete-file
 | 
						|
 | 
						|
[ ] [ client-addr <datagram> "d" set ] unit-test
 | 
						|
 | 
						|
[
 | 
						|
    B{ 1 2 3 } "unix-domain-datagram-test-3" <local> "d" get send
 | 
						|
] unit-test-fails
 | 
						|
 | 
						|
[ ] [ "d" get stream-close ] unit-test
 | 
						|
 | 
						|
! See what happens on send/receive after close
 | 
						|
 | 
						|
[ "d" get receive ] unit-test-fails
 | 
						|
 | 
						|
[ B{ 1 2 } server-addr "d" get send ] unit-test-fails
 | 
						|
 | 
						|
! Invalid parameter tests
 | 
						|
 | 
						|
[
 | 
						|
    image <file-reader> [ stdio get accept ] with-stream
 | 
						|
] unit-test-fails
 | 
						|
 | 
						|
[
 | 
						|
    image <file-reader> [ stdio get receive ] with-stream
 | 
						|
] unit-test-fails
 | 
						|
 | 
						|
[
 | 
						|
    image <file-reader> [
 | 
						|
        B{ 1 2 } server-addr
 | 
						|
        stdio get send
 | 
						|
    ] with-stream
 | 
						|
] unit-test-fails
 |