]> gitweb.factorcode.org Git - factor.git/blob - basis/io/backend/unix/unix-tests.factor
0e9493ce5dd052781e8d3e18f3aed88b650bc451
[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     datagram-server <local> <datagram> "d" [
45
46         "Receive 1" print
47
48         "d" get receive [ reverse ] dip
49
50         "Send 1" print
51         dup .
52
53         "d" get send
54
55         "Receive 2" print
56
57         "d" get receive [ " world" append ] dip
58
59         "Send 1" print
60         dup .
61
62          "d" get send
63
64         "d" get dispose
65
66         "Done" print
67
68         datagram-server delete-file
69     ] with-variable
70 ] "Test" spawn drop
71
72 yield
73
74 [ datagram-client delete-file ] ignore-errors
75
76 { } [ datagram-client <local> <datagram> "d" set ] unit-test
77
78 { } [
79     "hello" >byte-array
80     datagram-server <local>
81     "d" get send
82 ] unit-test
83
84 { "olleh" t } [
85     "d" get receive
86     datagram-server <local> =
87     [ >string ] dip
88 ] unit-test
89
90 { } [
91     "hello" >byte-array
92     datagram-server <local>
93     "d" get send
94 ] unit-test
95
96 { "hello world" t } [
97     "d" get receive
98     datagram-server <local> =
99     [ >string ] dip
100 ] unit-test
101
102 { } [ "d" get dispose ] unit-test
103
104 ! Test error behavior
105 : another-datagram ( -- path ) "unix-domain-datagram-test-3" temp-file ;
106
107 [ another-datagram delete-file ] ignore-errors
108
109 datagram-client delete-file
110
111 { } [ datagram-client <local> <datagram> "d" set ] unit-test
112
113 [ B{ 1 2 3 } another-datagram <local> "d" get send ] must-fail
114
115 { } [ "d" get dispose ] unit-test
116
117 ! See what happens on send/receive after close
118
119 [ "d" get receive ] must-fail
120
121 [ B{ 1 2 } datagram-server <local> "d" get send ] must-fail
122
123 ! Invalid parameter tests
124
125 [
126     image binary [ input-stream get accept ] with-file-reader
127 ] must-fail
128
129 [
130     image binary [ input-stream get receive ] with-file-reader
131 ] must-fail
132
133 [
134     image binary [
135         B{ 1 2 } datagram-server <local>
136         input-stream get send
137     ] with-file-reader
138 ] must-fail
139
140 ! closing stdin caused some problems
141 { } [
142     [
143         vm ,
144         "-i=" image append ,
145         "-run=none" ,
146         "-e=USING: destructors namespaces io calendar threads ; input-stream get dispose 1 seconds sleep" ,
147     ] { } make try-process
148 ] unit-test