eventmachine 0.12.0-i386-mswin32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/COPYING +60 -0
- data/DEFERRABLES +138 -0
- data/EPOLL +141 -0
- data/GNU +281 -0
- data/KEYBOARD +38 -0
- data/LEGAL +25 -0
- data/LIGHTWEIGHT_CONCURRENCY +72 -0
- data/PURE_RUBY +77 -0
- data/README +74 -0
- data/RELEASE_NOTES +96 -0
- data/SMTP +9 -0
- data/SPAWNED_PROCESSES +93 -0
- data/TODO +10 -0
- data/ext/Makefile +180 -0
- data/ext/binder.cpp +126 -0
- data/ext/binder.h +48 -0
- data/ext/cmain.cpp +527 -0
- data/ext/cplusplus.cpp +172 -0
- data/ext/ed.cpp +1442 -0
- data/ext/ed.h +351 -0
- data/ext/em.cpp +1781 -0
- data/ext/em.h +167 -0
- data/ext/emwin.cpp +300 -0
- data/ext/emwin.h +94 -0
- data/ext/epoll.cpp +26 -0
- data/ext/epoll.h +25 -0
- data/ext/eventmachine.h +83 -0
- data/ext/eventmachine_cpp.h +94 -0
- data/ext/extconf.rb +203 -0
- data/ext/files.cpp +94 -0
- data/ext/files.h +65 -0
- data/ext/kb.cpp +368 -0
- data/ext/mkmf.log +129 -0
- data/ext/page.cpp +107 -0
- data/ext/page.h +51 -0
- data/ext/pipe.cpp +327 -0
- data/ext/project.h +119 -0
- data/ext/rubyeventmachine-i386-mswin32.def +2 -0
- data/ext/rubyeventmachine-i386-mswin32.exp +0 -0
- data/ext/rubyeventmachine-i386-mswin32.lib +0 -0
- data/ext/rubyeventmachine-i386-mswin32.pdb +0 -0
- data/ext/rubyeventmachine.so +0 -0
- data/ext/rubymain.cpp +630 -0
- data/ext/sigs.cpp +89 -0
- data/ext/sigs.h +32 -0
- data/ext/ssl.cpp +408 -0
- data/ext/ssl.h +86 -0
- data/ext/vc60.pdb +0 -0
- data/lib/em/deferrable.rb +208 -0
- data/lib/em/eventable.rb +39 -0
- data/lib/em/future.rb +62 -0
- data/lib/em/messages.rb +66 -0
- data/lib/em/processes.rb +68 -0
- data/lib/em/spawnable.rb +88 -0
- data/lib/em/streamer.rb +112 -0
- data/lib/eventmachine.rb +1621 -0
- data/lib/eventmachine_version.rb +31 -0
- data/lib/evma.rb +32 -0
- data/lib/evma/callback.rb +32 -0
- data/lib/evma/container.rb +75 -0
- data/lib/evma/factory.rb +77 -0
- data/lib/evma/protocol.rb +87 -0
- data/lib/evma/reactor.rb +48 -0
- data/lib/jeventmachine.rb +106 -0
- data/lib/pr_eventmachine.rb +1011 -0
- data/lib/protocols/buftok.rb +127 -0
- data/lib/protocols/header_and_content.rb +123 -0
- data/lib/protocols/httpcli2.rb +784 -0
- data/lib/protocols/httpclient.rb +253 -0
- data/lib/protocols/line_and_text.rb +122 -0
- data/lib/protocols/linetext2.rb +145 -0
- data/lib/protocols/saslauth.rb +179 -0
- data/lib/protocols/smtpclient.rb +308 -0
- data/lib/protocols/smtpserver.rb +543 -0
- data/lib/protocols/stomp.rb +127 -0
- data/lib/protocols/tcptest.rb +57 -0
- data/lib/rubyeventmachine.so +0 -0
- data/tests/test_basic.rb +142 -0
- data/tests/test_defer.rb +63 -0
- data/tests/test_epoll.rb +168 -0
- data/tests/test_errors.rb +82 -0
- data/tests/test_eventables.rb +78 -0
- data/tests/test_exc.rb +58 -0
- data/tests/test_futures.rb +214 -0
- data/tests/test_hc.rb +221 -0
- data/tests/test_httpclient.rb +194 -0
- data/tests/test_httpclient2.rb +133 -0
- data/tests/test_kb.rb +61 -0
- data/tests/test_ltp.rb +190 -0
- data/tests/test_ltp2.rb +261 -0
- data/tests/test_next_tick.rb +58 -0
- data/tests/test_processes.rb +56 -0
- data/tests/test_pure.rb +128 -0
- data/tests/test_running.rb +47 -0
- data/tests/test_sasl.rb +73 -0
- data/tests/test_send_file.rb +238 -0
- data/tests/test_servers.rb +90 -0
- data/tests/test_smtpclient.rb +81 -0
- data/tests/test_smtpserver.rb +93 -0
- data/tests/test_spawn.rb +329 -0
- data/tests/test_timers.rb +138 -0
- data/tests/test_ud.rb +43 -0
- data/tests/testem.rb +5 -0
- metadata +170 -0
@@ -0,0 +1,47 @@
|
|
1
|
+
# $Id: test_running.rb 668 2008-01-04 23:00:34Z blackhedd $
|
2
|
+
#
|
3
|
+
# Author:: Francis Cianfrocca (gmail: blackhedd)
|
4
|
+
# Homepage:: http://rubyeventmachine.com
|
5
|
+
# Date:: 8 April 2006
|
6
|
+
#
|
7
|
+
# See EventMachine and EventMachine::Connection for documentation and
|
8
|
+
# usage examples.
|
9
|
+
#
|
10
|
+
#----------------------------------------------------------------------------
|
11
|
+
#
|
12
|
+
# Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
|
13
|
+
# Gmail: blackhedd
|
14
|
+
#
|
15
|
+
# This program is free software; you can redistribute it and/or modify
|
16
|
+
# it under the terms of either: 1) the GNU General Public License
|
17
|
+
# as published by the Free Software Foundation; either version 2 of the
|
18
|
+
# License, or (at your option) any later version; or 2) Ruby's License.
|
19
|
+
#
|
20
|
+
# See the file COPYING for complete licensing information.
|
21
|
+
#
|
22
|
+
#---------------------------------------------------------------------------
|
23
|
+
#
|
24
|
+
#
|
25
|
+
#
|
26
|
+
|
27
|
+
$:.unshift "../lib"
|
28
|
+
require 'eventmachine'
|
29
|
+
require 'test/unit'
|
30
|
+
|
31
|
+
class TestRunning < Test::Unit::TestCase
|
32
|
+
def setup
|
33
|
+
end
|
34
|
+
def teardown
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_running
|
38
|
+
assert_equal( false, EM::reactor_running? )
|
39
|
+
r = false
|
40
|
+
EM.run {
|
41
|
+
r = EM::reactor_running?
|
42
|
+
EM.stop
|
43
|
+
}
|
44
|
+
assert_equal( true, r )
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
data/tests/test_sasl.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
# $Id: test_sasl.rb 668 2008-01-04 23:00:34Z blackhedd $
|
2
|
+
#
|
3
|
+
# Author:: Francis Cianfrocca (gmail: blackhedd)
|
4
|
+
# Homepage:: http://rubyeventmachine.com
|
5
|
+
# Date:: 8 April 2006
|
6
|
+
#
|
7
|
+
# See EventMachine and EventMachine::Connection for documentation and
|
8
|
+
# usage examples.
|
9
|
+
#
|
10
|
+
#----------------------------------------------------------------------------
|
11
|
+
#
|
12
|
+
# Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
|
13
|
+
# Gmail: blackhedd
|
14
|
+
#
|
15
|
+
# This program is free software; you can redistribute it and/or modify
|
16
|
+
# it under the terms of either: 1) the GNU General Public License
|
17
|
+
# as published by the Free Software Foundation; either version 2 of the
|
18
|
+
# License, or (at your option) any later version; or 2) Ruby's License.
|
19
|
+
#
|
20
|
+
# See the file COPYING for complete licensing information.
|
21
|
+
#
|
22
|
+
#---------------------------------------------------------------------------
|
23
|
+
#
|
24
|
+
#
|
25
|
+
#
|
26
|
+
|
27
|
+
$:.unshift "../lib"
|
28
|
+
require 'eventmachine'
|
29
|
+
require 'test/unit'
|
30
|
+
|
31
|
+
|
32
|
+
class TestSASL < Test::Unit::TestCase
|
33
|
+
|
34
|
+
# SASL authentication is usually done with UNIX-domain sockets, but
|
35
|
+
# we'll use TCP so this test will work on Windows. As far as the
|
36
|
+
# protocol handlers are concerned, there's no difference.
|
37
|
+
|
38
|
+
|
39
|
+
Host,Port = "127.0.0.1",9560
|
40
|
+
TestUser,TestPsw = "someone", "password"
|
41
|
+
|
42
|
+
class SaslServer < EM::Connection
|
43
|
+
include EM::Protocols::SASLauth
|
44
|
+
def validate usr, psw, sys, realm
|
45
|
+
usr == TestUser and psw == TestPsw
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
class SaslClient < EM::Connection
|
50
|
+
include EM::Protocols::SASLauthclient
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_sasl
|
54
|
+
resp = nil
|
55
|
+
EM.run {
|
56
|
+
EM.start_server( Host, Port, SaslServer )
|
57
|
+
|
58
|
+
c = EM.connect( Host, Port, SaslClient )
|
59
|
+
d = c.validate?( TestUser, TestPsw )
|
60
|
+
d.callback {
|
61
|
+
resp = true
|
62
|
+
EM.stop
|
63
|
+
}
|
64
|
+
d.errback {
|
65
|
+
resp = false
|
66
|
+
EM.stop
|
67
|
+
}
|
68
|
+
}
|
69
|
+
assert_equal( true, resp )
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
@@ -0,0 +1,238 @@
|
|
1
|
+
# $Id: test_send_file.rb 668 2008-01-04 23:00:34Z blackhedd $
|
2
|
+
#
|
3
|
+
# Author:: Francis Cianfrocca (gmail: blackhedd)
|
4
|
+
# Homepage:: http://rubyeventmachine.com
|
5
|
+
# Date:: 8 April 2006
|
6
|
+
#
|
7
|
+
# See EventMachine and EventMachine::Connection for documentation and
|
8
|
+
# usage examples.
|
9
|
+
#
|
10
|
+
#----------------------------------------------------------------------------
|
11
|
+
#
|
12
|
+
# Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
|
13
|
+
# Gmail: blackhedd
|
14
|
+
#
|
15
|
+
# This program is free software; you can redistribute it and/or modify
|
16
|
+
# it under the terms of either: 1) the GNU General Public License
|
17
|
+
# as published by the Free Software Foundation; either version 2 of the
|
18
|
+
# License, or (at your option) any later version; or 2) Ruby's License.
|
19
|
+
#
|
20
|
+
# See the file COPYING for complete licensing information.
|
21
|
+
#
|
22
|
+
#---------------------------------------------------------------------------
|
23
|
+
#
|
24
|
+
#
|
25
|
+
#
|
26
|
+
|
27
|
+
$:.unshift "../lib"
|
28
|
+
require 'eventmachine'
|
29
|
+
require 'socket'
|
30
|
+
require 'test/unit'
|
31
|
+
|
32
|
+
class TestSendFile < Test::Unit::TestCase
|
33
|
+
|
34
|
+
module TestModule
|
35
|
+
def post_init
|
36
|
+
send_file_data TestFilename
|
37
|
+
close_connection_after_writing
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
TestHost = "0.0.0.0"
|
42
|
+
TestPort = 9055
|
43
|
+
TestFilename = "./xxxxxx"
|
44
|
+
|
45
|
+
def setup
|
46
|
+
end
|
47
|
+
|
48
|
+
def teardown
|
49
|
+
File.unlink( TestFilename ) if File.exist?( TestFilename )
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_send_file
|
53
|
+
File.open( TestFilename, "w" ) {|f|
|
54
|
+
f << ("A" * 5000)
|
55
|
+
}
|
56
|
+
|
57
|
+
data = nil
|
58
|
+
|
59
|
+
EM.run {
|
60
|
+
EM.start_server TestHost, TestPort, TestModule
|
61
|
+
EM.add_timer(2) {EM.stop} # avoid hanging in case of error
|
62
|
+
EM.defer proc {
|
63
|
+
t = TCPSocket.new TestHost, TestPort
|
64
|
+
data = t.read
|
65
|
+
}, proc {
|
66
|
+
EM.stop
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
assert_equal( "A" * 5000, data )
|
71
|
+
File.unlink TestFilename
|
72
|
+
end
|
73
|
+
|
74
|
+
# EventMachine::Connection#send_file_data has a strict upper limit on the filesize it will work with.
|
75
|
+
def test_send_large_file
|
76
|
+
File.open( TestFilename, "w" ) {|f|
|
77
|
+
f << ("A" * 1000000)
|
78
|
+
}
|
79
|
+
|
80
|
+
data = nil
|
81
|
+
|
82
|
+
assert_raise(RuntimeError) {
|
83
|
+
EM.run {
|
84
|
+
EM.start_server TestHost, TestPort, TestModule
|
85
|
+
EM.add_timer(2) {EM.stop} # avoid hanging in case of error
|
86
|
+
EM.defer proc {
|
87
|
+
t = TCPSocket.new TestHost, TestPort
|
88
|
+
data = t.read
|
89
|
+
}, proc {
|
90
|
+
EM.stop
|
91
|
+
}
|
92
|
+
}
|
93
|
+
}
|
94
|
+
|
95
|
+
File.unlink TestFilename
|
96
|
+
end
|
97
|
+
|
98
|
+
|
99
|
+
module StreamTestModule
|
100
|
+
def post_init
|
101
|
+
EM::Deferrable.future( stream_file_data(TestFilename)) {
|
102
|
+
close_connection_after_writing
|
103
|
+
}
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
module ChunkStreamTestModule
|
108
|
+
def post_init
|
109
|
+
EM::Deferrable.future( stream_file_data(TestFilename, :http_chunks=>true)) {
|
110
|
+
close_connection_after_writing
|
111
|
+
}
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_stream_file_data
|
116
|
+
File.open( TestFilename, "w" ) {|f|
|
117
|
+
f << ("A" * 1000)
|
118
|
+
}
|
119
|
+
|
120
|
+
data = nil
|
121
|
+
|
122
|
+
EM.run {
|
123
|
+
EM.start_server TestHost, TestPort, StreamTestModule
|
124
|
+
EM.add_timer(2) {EM.stop} # avoid hanging in case of error
|
125
|
+
EM.defer proc {
|
126
|
+
t = TCPSocket.new TestHost, TestPort
|
127
|
+
data = t.read
|
128
|
+
}, proc {
|
129
|
+
EM.stop
|
130
|
+
}
|
131
|
+
}
|
132
|
+
|
133
|
+
assert_equal( "A" * 1000, data )
|
134
|
+
|
135
|
+
File.unlink TestFilename
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_stream_chunked_file_data
|
139
|
+
File.open( TestFilename, "w" ) {|f|
|
140
|
+
f << ("A" * 1000)
|
141
|
+
}
|
142
|
+
|
143
|
+
data = nil
|
144
|
+
|
145
|
+
EM.run {
|
146
|
+
EM.start_server TestHost, TestPort, ChunkStreamTestModule
|
147
|
+
EM.add_timer(2) {EM.stop} # avoid hanging in case of error
|
148
|
+
EM.defer proc {
|
149
|
+
t = TCPSocket.new TestHost, TestPort
|
150
|
+
data = t.read
|
151
|
+
}, proc {
|
152
|
+
EM.stop
|
153
|
+
}
|
154
|
+
}
|
155
|
+
|
156
|
+
assert_equal( "3e8\r\n#{"A" * 1000}\r\n0\r\n\r\n", data )
|
157
|
+
|
158
|
+
File.unlink TestFilename
|
159
|
+
end
|
160
|
+
|
161
|
+
module BadFileTestModule
|
162
|
+
def post_init
|
163
|
+
de = stream_file_data( TestFilename+"..." )
|
164
|
+
de.errback {|msg|
|
165
|
+
send_data msg
|
166
|
+
close_connection_after_writing
|
167
|
+
}
|
168
|
+
end
|
169
|
+
end
|
170
|
+
def test_stream_bad_file
|
171
|
+
data = nil
|
172
|
+
EM.run {
|
173
|
+
EM.start_server TestHost, TestPort, BadFileTestModule
|
174
|
+
EM.add_timer(2) {EM.stop} # avoid hanging in case of error
|
175
|
+
EM.defer proc {
|
176
|
+
t = TCPSocket.new TestHost, TestPort
|
177
|
+
data = t.read
|
178
|
+
}, proc {
|
179
|
+
EM.stop
|
180
|
+
}
|
181
|
+
}
|
182
|
+
|
183
|
+
assert_equal( "file not found", data )
|
184
|
+
end
|
185
|
+
|
186
|
+
def test_stream_large_file_data
|
187
|
+
File.open( TestFilename, "w" ) {|f|
|
188
|
+
f << ("A" * 10000)
|
189
|
+
}
|
190
|
+
|
191
|
+
data = nil
|
192
|
+
|
193
|
+
EM.run {
|
194
|
+
EM.start_server TestHost, TestPort, StreamTestModule
|
195
|
+
EM.add_timer(2) {EM.stop} # avoid hanging in case of error
|
196
|
+
EM.defer proc {
|
197
|
+
t = TCPSocket.new TestHost, TestPort
|
198
|
+
data = t.read
|
199
|
+
}, proc {
|
200
|
+
EM.stop
|
201
|
+
}
|
202
|
+
}
|
203
|
+
|
204
|
+
assert_equal( "A" * 10000, data )
|
205
|
+
|
206
|
+
File.unlink TestFilename
|
207
|
+
end
|
208
|
+
|
209
|
+
def test_stream_large_chunked_file_data
|
210
|
+
File.open( TestFilename, "w" ) {|f|
|
211
|
+
f << ("A" * 100000)
|
212
|
+
}
|
213
|
+
|
214
|
+
data = nil
|
215
|
+
|
216
|
+
EM.run {
|
217
|
+
EM.start_server TestHost, TestPort, ChunkStreamTestModule
|
218
|
+
EM.add_timer(2) {EM.stop} # avoid hanging in case of error
|
219
|
+
EM.defer proc {
|
220
|
+
t = TCPSocket.new TestHost, TestPort
|
221
|
+
data = t.read
|
222
|
+
}, proc {
|
223
|
+
EM.stop
|
224
|
+
}
|
225
|
+
}
|
226
|
+
|
227
|
+
expected = [
|
228
|
+
"4000\r\n#{"A" * 16384}\r\n" * 6,
|
229
|
+
"6a0\r\n#{"A" * 0x6a0}\r\n",
|
230
|
+
"0\r\n\r\n"
|
231
|
+
].join
|
232
|
+
assert_equal( expected, data )
|
233
|
+
|
234
|
+
File.unlink TestFilename
|
235
|
+
end
|
236
|
+
|
237
|
+
end
|
238
|
+
|
@@ -0,0 +1,90 @@
|
|
1
|
+
# $Id: test_servers.rb 668 2008-01-04 23:00:34Z blackhedd $
|
2
|
+
#
|
3
|
+
# Author:: Francis Cianfrocca (gmail: blackhedd)
|
4
|
+
# Homepage:: http://rubyeventmachine.com
|
5
|
+
# Date:: 8 April 2006
|
6
|
+
#
|
7
|
+
# See EventMachine and EventMachine::Connection for documentation and
|
8
|
+
# usage examples.
|
9
|
+
#
|
10
|
+
#----------------------------------------------------------------------------
|
11
|
+
#
|
12
|
+
# Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
|
13
|
+
# Gmail: blackhedd
|
14
|
+
#
|
15
|
+
# This program is free software; you can redistribute it and/or modify
|
16
|
+
# it under the terms of either: 1) the GNU General Public License
|
17
|
+
# as published by the Free Software Foundation; either version 2 of the
|
18
|
+
# License, or (at your option) any later version; or 2) Ruby's License.
|
19
|
+
#
|
20
|
+
# See the file COPYING for complete licensing information.
|
21
|
+
#
|
22
|
+
#---------------------------------------------------------------------------
|
23
|
+
#
|
24
|
+
#
|
25
|
+
#
|
26
|
+
|
27
|
+
$:.unshift "../lib"
|
28
|
+
require 'eventmachine'
|
29
|
+
require 'socket'
|
30
|
+
require 'test/unit'
|
31
|
+
|
32
|
+
|
33
|
+
class TestServers < Test::Unit::TestCase
|
34
|
+
|
35
|
+
Host = "127.0.0.1"
|
36
|
+
Port = 9550
|
37
|
+
|
38
|
+
def setup
|
39
|
+
end
|
40
|
+
|
41
|
+
def teardown
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
class TestStopServer < EM::Connection
|
46
|
+
def initialize *args
|
47
|
+
super
|
48
|
+
end
|
49
|
+
def post_init
|
50
|
+
# TODO,sucks that this isn't OOPy enough.
|
51
|
+
EM.stop_server @server_instance
|
52
|
+
end
|
53
|
+
end
|
54
|
+
def run_test_stop_server
|
55
|
+
succeed = false
|
56
|
+
err = false
|
57
|
+
EM.run {
|
58
|
+
sig = EM.start_server(Host, Port)
|
59
|
+
EM.defer proc {
|
60
|
+
if TCPSocket.new Host, Port
|
61
|
+
succeed = true
|
62
|
+
end
|
63
|
+
}, proc {
|
64
|
+
EM.stop_server sig
|
65
|
+
EM.defer proc {
|
66
|
+
# Wait for the acceptor to die, otherwise
|
67
|
+
# we'll probably get a conn-reset instead
|
68
|
+
# of a conn-refused.
|
69
|
+
sleep 0.1
|
70
|
+
begin
|
71
|
+
TCPSocket.new Host, Port
|
72
|
+
rescue
|
73
|
+
err = $!
|
74
|
+
end
|
75
|
+
}, proc {
|
76
|
+
EM.stop
|
77
|
+
}
|
78
|
+
}
|
79
|
+
}
|
80
|
+
assert_equal( true, succeed )
|
81
|
+
assert_equal( Errno::ECONNREFUSED, err.class )
|
82
|
+
end
|
83
|
+
def test_stop_server
|
84
|
+
5.times {run_test_stop_server}
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
|