]> gitweb.factorcode.org Git - factor.git/blob - basis/io/backend/unix/unix-tests.factor
6eb4227855b829ddbdab2ddc6c81ec869589140f
[factor.git] / basis / io / backend / unix / unix-tests.factor
1 USING: io.files io.files.temp io.directories io.sockets io kernel threads
2 namespaces tools.test continuations strings byte-arrays
3 sequences prettyprint system io.encodings.binary io.encodings.ascii
4 io.streams.duplex destructors make io.launcher ;
5 IN: io.backend.unix.tests
6
7 ! Unix domain stream sockets
8 : socket-server ( -- path ) "unix-domain-socket-test" temp-file ;
9
10 [
11     [ socket-server delete-file ] ignore-errors
12
13     socket-server <local>
14     ascii <server> [
15         accept drop [
16             "Hello world" print flush
17             readln "XYZ" = "FOO" "BAR" ? print flush
18         ] with-stream
19     ] with-disposal
20
21     socket-server delete-file
22 ] "Test" spawn drop
23
24 yield
25
26 [ { "Hello world" "FOO" } ] [
27     [
28         socket-server <local> ascii [
29             readln ,
30             "XYZ" print flush
31             readln ,
32         ] with-client
33     ] { } make
34 ] unit-test
35
36 : datagram-server ( -- path ) "unix-domain-datagram-test" temp-file ;
37 : datagram-client ( -- path ) "unix-domain-datagram-test-2" temp-file ;
38
39 ! Unix domain datagram sockets
40 [ datagram-server delete-file ] ignore-errors
41 [ datagram-client delete-file ] ignore-errors
42
43 [
44     [
45         datagram-server <local> <datagram> "d" set
46
47         "Receive 1" print
48
49         "d" get receive [ reverse ] dip
50         
51         "Send 1" print
52         dup .
53
54         "d" get send
55
56         "Receive 2" print
57
58         "d" get receive [ " world" append ] dip
59         
60         "Send 1" print
61         dup .
62
63          "d" get send
64
65         "d" get dispose
66
67         "Done" print
68
69         datagram-server delete-file
70     ] with-scope
71 ] "Test" spawn drop
72
73 yield
74
75 [ datagram-client delete-file ] ignore-errors
76
77 [ ] [ datagram-client <local> <datagram> "d" set ] unit-test
78
79 [ ] [
80     "hello" >byte-array
81     datagram-server <local>
82     "d" get send
83 ] unit-test
84
85 [ "olleh" t ] [
86     "d" get receive
87     datagram-server <local> =
88     [ >string ] dip
89 ] unit-test
90
91 [ ] [
92     "hello" >byte-array
93     datagram-server <local>
94     "d" get send
95 ] unit-test
96
97 [ "hello world" t ] [
98     "d" get receive
99     datagram-server <local> =
100     [ >string ] dip
101 ] unit-test
102
103 [ ] [ "d" get dispose ] unit-test
104
105 ! Test error behavior
106 : another-datagram ( -- path ) "unix-domain-datagram-test-3" temp-file ;
107
108 [ another-datagram delete-file ] ignore-errors
109
110 datagram-client delete-file
111
112 [ ] [ datagram-client <local> <datagram> "d" set ] unit-test
113
114 [ B{ 1 2 3 } another-datagram <local> "d" get send ] must-fail
115
116 [ ] [ "d" get dispose ] unit-test
117
118 ! See what happens on send/receive after close
119
120 [ "d" get receive ] must-fail
121
122 [ B{ 1 2 } datagram-server <local> "d" get send ] must-fail
123
124 ! Invalid parameter tests
125
126 [
127     image binary [ input-stream get accept ] with-file-reader
128 ] must-fail
129
130 [
131     image binary [ input-stream get receive ] with-file-reader
132 ] must-fail
133
134 [
135     image binary [
136         B{ 1 2 } datagram-server <local>
137         input-stream get send
138     ] with-file-reader
139 ] must-fail
140
141 ! closing stdin caused some problems
142 [ ] [
143     [
144         vm ,
145         "-i=" image append ,
146         "-run=none" ,
147         "-e=USING: destructors namespaces io calendar threads ; input-stream get dispose 1 seconds sleep" ,
148     ] { } make try-process
149 ] unit-test