]> gitweb.factorcode.org Git - factor.git/blob - basis/io/sockets/sockets-tests.factor
Merge branch 'master' of git://factorcode.org/git/factor
[factor.git] / basis / io / sockets / sockets-tests.factor
1 IN: io.sockets.tests
2 USING: io.sockets io.sockets.private sequences math tools.test
3 namespaces accessors kernel destructors calendar io.timeouts
4 io.encodings.utf8 io concurrency.promises threads
5 io.streams.string ;
6
7 [ B{ 1 2 3 4 } ]
8 [ "1.2.3.4" T{ inet4 } inet-pton ] unit-test
9
10 [ "1.2.3.4" ]
11 [ B{ 1 2 3 4 } T{ inet4 } inet-ntop ] unit-test
12
13 [ "255.255.255.255" ]
14 [ B{ 255 255 255 255 } T{ inet4 } inet-ntop ] unit-test
15
16 [ B{ 255 255 255 255 } ]
17 [ "255.255.255.255" T{ inet4 } inet-pton ] unit-test
18
19 [ B{ 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 } ]
20 [ "1:2:3:4:5:6:7:8" T{ inet6 } inet-pton ] unit-test
21
22 [ "1:2:3:4:5:6:7:8" ]
23 [ B{ 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 } T{ inet6 } inet-ntop ] unit-test
24
25 [ B{ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 } ]
26 [ "::" T{ inet6 } inet-pton ] unit-test
27
28 [ "0:0:0:0:0:0:0:0" ]
29 [ B{ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 } T{ inet6 } inet-ntop ] unit-test
30
31 [ B{ 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 } ]
32 [ "1::" T{ inet6 } inet-pton ] unit-test
33
34 [ B{ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 } ]
35 [ "::1" T{ inet6 } inet-pton ] unit-test
36
37 [ B{ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 } ]
38 [ "::100" T{ inet6 } inet-pton ] unit-test
39
40 [ B{ 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2 } ]
41 [ "1::2" T{ inet6 } inet-pton ] unit-test
42
43 [ B{ 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 3 } ]
44 [ "1::2:3" T{ inet6 } inet-pton ] unit-test
45
46 [ B{ 0 1 0 2 0 0 0 0 0 0 0 0 0 3 0 4 } ]
47 [ "1:2::3:4" T{ inet6 } inet-pton ] unit-test
48
49 [ "1:2:0:0:0:0:3:4" ]
50 [ B{ 0 1 0 2 0 0 0 0 0 0 0 0 0 3 0 4 } T{ inet6 } inet-ntop ] unit-test
51
52 [ B{ 0 0 0 0 0 0 0 0 0 127 0 0 0 0 0 1 } ]
53 [ "::127.0.0.1" T{ inet6 } inet-pton ] unit-test
54
55 [ B{ 0 2 0 0 0 0 0 9 0 127 0 0 0 0 0 1 } ]
56 [ "2::9:127.0.0.1" T{ inet6 } inet-pton ] unit-test
57
58 [ "2001:6f8:37a:5:0:0:0:1" ]
59 [ "2001:6f8:37a:5::1" T{ inet6 } [ inet-pton ] [ inet-ntop ] bi ] unit-test
60
61 [ t t ] [
62     "localhost" 80 <inet> resolve-host
63     [ length 1 >= ]
64     [ [ [ inet4? ] [ inet6? ] bi or ] all? ] bi
65 ] unit-test
66
67 [ t t ] [
68     "localhost" resolve-host
69     [ length 1 >= ]
70     [ [ [ ipv4? ] [ ipv6? ] bi or ] all? ] bi
71 ] unit-test
72
73 [ t t ] [
74     f resolve-host
75     [ length 1 >= ]
76     [ [ [ ipv4? ] [ ipv6? ] bi or ] all? ] bi
77 ] unit-test
78
79 [ t t ] [
80     f 0 <inet> resolve-host
81     [ length 1 >= ]
82     [ [ [ ipv4? ] [ ipv6? ] bi or ] all? ] bi
83 ] unit-test
84
85 ! Smoke-test UDP
86 [ ] [ "127.0.0.1" 0 <inet4> <datagram> "datagram1" set ] unit-test
87 [ ] [ "datagram1" get addr>> "addr1" set ] unit-test
88 [ f ] [ "addr1" get port>> 0 = ] unit-test
89
90 [ ] [ "127.0.0.1" 0 <inet4> <datagram> "datagram2" set ] unit-test
91 [ ] [ "datagram2" get addr>> "addr2" set ] unit-test
92 [ f ] [ "addr2" get port>> 0 = ] unit-test
93
94 [ ] [ B{ 1 2 3 4 } "addr2" get "datagram1" get send ] unit-test
95 [ B{ 1 2 3 4 } ] [ "datagram2" get receive "from" set ] unit-test
96 [ ] [ B{ 4 3 2 1 } "from" get "datagram2" get send ] unit-test
97 [ B{ 4 3 2 1 } t ] [ "datagram1" get receive "addr2" get = ] unit-test
98
99 [ ] [ "datagram1" get dispose ] unit-test
100 [ ] [ "datagram2" get dispose ] unit-test
101
102 ! Test timeouts
103 [ ] [ "127.0.0.1" 0 <inet4> <datagram> "datagram3" set ] unit-test
104
105 [ ] [ 1 seconds "datagram3" get set-timeout ] unit-test
106 [ "datagram3" get receive ] must-fail
107
108 ! See what happens if other end is closed
109 [ ] [ <promise> "port" set ] unit-test
110
111 [ ] [ "datagram3" get dispose ] unit-test
112
113 [ ] [
114     [
115         "127.0.0.1" 0 <inet4> utf8 <server>
116         dup addr>> "port" get fulfill
117         [
118             accept drop
119             dup stream-readln drop
120             "hello" <string-reader> swap stream-copy
121         ] with-disposal
122     ] "Socket close test" spawn drop
123 ] unit-test
124
125 [ "hello" f ] [
126     "port" get ?promise utf8 [
127         1 seconds input-stream get set-timeout
128         1 seconds output-stream get set-timeout
129         "hi\n" write flush readln readln
130     ] with-client
131 ] unit-test
132
133 ! Binding to all interfaces should work
134 [ ] [ f 0 <inet4> <datagram> dispose ] unit-test