eventmachine 0.12.0 → 0.12.2
Sign up to get free protection for your applications and to get access to all the features.
- data/ext/cmain.cpp +27 -1
- data/ext/ed.cpp +17 -2
- data/ext/ed.h +9 -1
- data/ext/em.cpp +111 -2
- data/ext/em.h +4 -1
- data/ext/eventmachine.h +9 -2
- data/ext/rubymain.cpp +49 -1
- data/lib/eventmachine.rb +139 -15
- data/lib/eventmachine_version.rb +2 -2
- data/lib/jeventmachine.rb +30 -4
- data/lib/protocols/header_and_content.rb +8 -2
- data/lib/protocols/httpclient.rb +14 -3
- data/lib/protocols/linetext2.rb +20 -2
- data/lib/protocols/postgres.rb +261 -0
- data/lib/protocols/stomp.rb +4 -1
- data/tests/test_attach.rb +66 -0
- data/tests/test_basic.rb +38 -2
- data/tests/test_hc.rb +189 -141
- data/tests/test_httpclient.rb +22 -1
- data/tests/test_ltp2.rb +60 -1
- data/tests/test_next_tick.rb +45 -1
- data/tests/test_sasl.rb +2 -1
- data/tests/test_timers.rb +4 -2
- metadata +63 -61
data/tests/test_httpclient.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: test_httpclient.rb
|
1
|
+
# $Id: test_httpclient.rb 786 2008-09-16 07:33:27Z francis $
|
2
2
|
#
|
3
3
|
# Author:: Francis Cianfrocca (gmail: blackhedd)
|
4
4
|
# Homepage:: http://rubyeventmachine.com
|
@@ -112,6 +112,7 @@ class TestHttpClient < Test::Unit::TestCase
|
|
112
112
|
assert ok
|
113
113
|
end
|
114
114
|
|
115
|
+
|
115
116
|
#---------------------------------------
|
116
117
|
|
117
118
|
class PostContent < EventMachine::Protocols::LineAndTextProtocol
|
@@ -189,6 +190,26 @@ class TestHttpClient < Test::Unit::TestCase
|
|
189
190
|
assert ok
|
190
191
|
end
|
191
192
|
|
193
|
+
|
194
|
+
|
195
|
+
# We can tell the client to send an HTTP/1.0 request (default is 1.1).
|
196
|
+
# This is useful for suppressing chunked responses until those are working.
|
197
|
+
def test_version_1_0
|
198
|
+
ok = false
|
199
|
+
EM.run {
|
200
|
+
c = EM::P::HttpClient.request :host => "www.bayshorenetworks.com",
|
201
|
+
:port => 80,
|
202
|
+
:version => "1.0"
|
203
|
+
c.callback {|result|
|
204
|
+
ok = true;
|
205
|
+
EventMachine.stop
|
206
|
+
}
|
207
|
+
c.errback {EventMachine.stop}
|
208
|
+
}
|
209
|
+
assert ok
|
210
|
+
end
|
211
|
+
|
212
|
+
|
192
213
|
end
|
193
214
|
|
194
215
|
|
data/tests/test_ltp2.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: test_ltp2.rb
|
1
|
+
# $Id: test_ltp2.rb 725 2008-06-29 23:04:48Z francis $
|
2
2
|
#
|
3
3
|
# Author:: Francis Cianfrocca (gmail: blackhedd)
|
4
4
|
# Homepage:: http://rubyeventmachine.com
|
@@ -257,5 +257,64 @@ Line 4
|
|
257
257
|
assert_equal( "0" * 500, a.data )
|
258
258
|
end
|
259
259
|
|
260
|
+
|
261
|
+
|
262
|
+
# Test an end-of-binary call. Arrange to receive binary data but don't bother counting it
|
263
|
+
# as it comes. Rely on getting receive_end_of_binary_data to signal the transition back to
|
264
|
+
# line mode.
|
265
|
+
# At the present time, this isn't strictly necessary with sized binary chunks because by
|
266
|
+
# definition we accumulate them and make exactly one call to receive_binary_data, but
|
267
|
+
# we may want to support a mode in the future that would break up large chunks into multiple
|
268
|
+
# calls.
|
269
|
+
class LazyBinary
|
270
|
+
include EM::Protocols::LineText2
|
271
|
+
attr_reader :data, :end
|
272
|
+
def initialize *args
|
273
|
+
super
|
274
|
+
@data = ""
|
275
|
+
set_text_mode 1000
|
276
|
+
end
|
277
|
+
def receive_binary_data data
|
278
|
+
# we expect to get all the data in one chunk, even in the byte-by-byte case,
|
279
|
+
# because sized transfers by definition give us exactly one call to
|
280
|
+
# #receive_binary_data.
|
281
|
+
@data = data
|
282
|
+
end
|
283
|
+
def receive_end_of_binary_data
|
284
|
+
@end = true
|
285
|
+
end
|
286
|
+
end
|
287
|
+
def test_receive_end_of_binary_data
|
288
|
+
testdata = "_" * 1000
|
289
|
+
a = LazyBinary.new
|
290
|
+
testdata.length.times {|i| a.receive_data( testdata[i...i+1] ) }
|
291
|
+
assert_equal( "_" * 1000, a.data )
|
292
|
+
assert( a.end )
|
293
|
+
end
|
294
|
+
|
295
|
+
|
296
|
+
# This tests a bug fix in which calling set_text_mode failed when called
|
297
|
+
# inside receive_binary_data.
|
298
|
+
#
|
299
|
+
class BinaryPair
|
300
|
+
include EM::Protocols::LineText2
|
301
|
+
attr_reader :sizes
|
302
|
+
def initialize *args
|
303
|
+
super
|
304
|
+
set_text_mode 1
|
305
|
+
@sizes = []
|
306
|
+
end
|
307
|
+
def receive_binary_data dt
|
308
|
+
@sizes << dt.length
|
309
|
+
set_text_mode( (dt.length == 1) ? 2 : 1 )
|
310
|
+
end
|
311
|
+
end
|
312
|
+
def test_binary_pairs
|
313
|
+
test_data = "123" * 5
|
314
|
+
a = BinaryPair.new
|
315
|
+
a.receive_data test_data
|
316
|
+
assert_equal( [1,2,1,2,1,2,1,2,1,2], a.sizes )
|
317
|
+
end
|
318
|
+
|
260
319
|
end
|
261
320
|
|
data/tests/test_next_tick.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: test_next_tick.rb
|
1
|
+
# $Id: test_next_tick.rb 697 2008-06-15 22:00:00Z francis $
|
2
2
|
#
|
3
3
|
# Author:: Francis Cianfrocca (gmail: blackhedd)
|
4
4
|
# Homepage:: http://rubyeventmachine.com
|
@@ -55,4 +55,48 @@ class TestNextTick < Test::Unit::TestCase
|
|
55
55
|
}
|
56
56
|
assert true
|
57
57
|
end
|
58
|
+
|
59
|
+
# This illustrates the solution to a long-standing problem.
|
60
|
+
# It's now possible to correctly nest calls to EM#run.
|
61
|
+
# See the source code commentary for EM#run for more info.
|
62
|
+
#
|
63
|
+
def test_run_run
|
64
|
+
EM.run {
|
65
|
+
EM.run {
|
66
|
+
EM.next_tick {EM.stop}
|
67
|
+
}
|
68
|
+
}
|
69
|
+
end
|
70
|
+
|
71
|
+
# We now support an additional parameter for EM#run.
|
72
|
+
# You can pass two procs to EM#run now. The first is executed as the normal
|
73
|
+
# run block. The second (if given) is scheduled for execution after the
|
74
|
+
# reactor loop completes.
|
75
|
+
# The reason for supporting this is subtle. There has always been an expectation
|
76
|
+
# that EM#run doesn't return until after the reactor loop ends. But now it's
|
77
|
+
# possible to nest calls to EM#run, which means that a nested call WILL
|
78
|
+
# RETURN. In order to write code that will run correctly either way, it's
|
79
|
+
# recommended to put any code which must execute after the reactor completes
|
80
|
+
# in the second parameter.
|
81
|
+
#
|
82
|
+
def test_run_run_2
|
83
|
+
a = proc {EM.stop}
|
84
|
+
b = proc {assert true}
|
85
|
+
EM.run a, b
|
86
|
+
end
|
87
|
+
|
88
|
+
|
89
|
+
# This illustrates that EM#run returns when it's called nested.
|
90
|
+
# This isn't a feature, rather it's something to be wary of when writing code
|
91
|
+
# that must run correctly even if EM#run is called while a reactor is already
|
92
|
+
# running.
|
93
|
+
def test_run_run_3
|
94
|
+
a = []
|
95
|
+
EM.run {
|
96
|
+
EM.run proc {EM.stop}, proc {a << 2}
|
97
|
+
a << 1
|
98
|
+
}
|
99
|
+
assert_equal( [1,2], a )
|
100
|
+
end
|
101
|
+
|
58
102
|
end
|
data/tests/test_sasl.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: test_sasl.rb
|
1
|
+
# $Id: test_sasl.rb 720 2008-06-20 23:50:59Z francis $
|
2
2
|
#
|
3
3
|
# Author:: Francis Cianfrocca (gmail: blackhedd)
|
4
4
|
# Homepage:: http://rubyeventmachine.com
|
@@ -57,6 +57,7 @@ class TestSASL < Test::Unit::TestCase
|
|
57
57
|
|
58
58
|
c = EM.connect( Host, Port, SaslClient )
|
59
59
|
d = c.validate?( TestUser, TestPsw )
|
60
|
+
d.timeout 2
|
60
61
|
d.callback {
|
61
62
|
resp = true
|
62
63
|
EM.stop
|
data/tests/test_timers.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: test_timers.rb
|
1
|
+
# $Id: test_timers.rb 715 2008-06-20 21:26:14Z francis $
|
2
2
|
#
|
3
3
|
# Author:: Francis Cianfrocca (gmail: blackhedd)
|
4
4
|
# Homepage:: http://rubyeventmachine.com
|
@@ -107,7 +107,7 @@ class TestTimers < Test::Unit::TestCase
|
|
107
107
|
|
108
108
|
|
109
109
|
# This test is only applicable to compiled versions of the reactor.
|
110
|
-
# Pure ruby versions have no built-in limit on the number of outstanding timers.
|
110
|
+
# Pure ruby and java versions have no built-in limit on the number of outstanding timers.
|
111
111
|
#
|
112
112
|
def test_timer_change_max_outstanding
|
113
113
|
ten_thousand_timers = proc {
|
@@ -118,6 +118,8 @@ class TestTimers < Test::Unit::TestCase
|
|
118
118
|
EM.run {
|
119
119
|
if EM.library_type == :pure_ruby
|
120
120
|
ten_thousand_timers.call
|
121
|
+
elsif EM.library_type == :java
|
122
|
+
ten_thousand_timers.call
|
121
123
|
else
|
122
124
|
assert_raise( RuntimeError ) {
|
123
125
|
ten_thousand_timers.call
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eventmachine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.12.
|
4
|
+
version: 0.12.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Francis Cianfrocca
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-09-25 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -34,90 +34,92 @@ extra_rdoc_files:
|
|
34
34
|
- SPAWNED_PROCESSES
|
35
35
|
- DEFERRABLES
|
36
36
|
files:
|
37
|
+
- tests/test_attach.rb
|
38
|
+
- tests/test_basic.rb
|
39
|
+
- tests/test_defer.rb
|
40
|
+
- tests/test_epoll.rb
|
37
41
|
- tests/test_errors.rb
|
38
|
-
- tests/
|
42
|
+
- tests/test_eventables.rb
|
43
|
+
- tests/test_exc.rb
|
44
|
+
- tests/test_futures.rb
|
45
|
+
- tests/test_hc.rb
|
46
|
+
- tests/test_httpclient.rb
|
39
47
|
- tests/test_httpclient2.rb
|
40
48
|
- tests/test_kb.rb
|
49
|
+
- tests/test_ltp.rb
|
41
50
|
- tests/test_ltp2.rb
|
42
51
|
- tests/test_next_tick.rb
|
43
|
-
- tests/
|
44
|
-
- tests/
|
52
|
+
- tests/test_processes.rb
|
53
|
+
- tests/test_pure.rb
|
54
|
+
- tests/test_running.rb
|
45
55
|
- tests/test_sasl.rb
|
46
|
-
- tests/
|
47
|
-
- tests/
|
56
|
+
- tests/test_send_file.rb
|
57
|
+
- tests/test_servers.rb
|
48
58
|
- tests/test_smtpclient.rb
|
49
|
-
- tests/
|
50
|
-
- tests/
|
59
|
+
- tests/test_smtpserver.rb
|
60
|
+
- tests/test_spawn.rb
|
61
|
+
- tests/test_timers.rb
|
51
62
|
- tests/test_ud.rb
|
52
|
-
- tests/test_servers.rb
|
53
|
-
- tests/test_running.rb
|
54
|
-
- tests/test_exc.rb
|
55
|
-
- tests/test_pure.rb
|
56
|
-
- tests/test_basic.rb
|
57
|
-
- tests/test_eventables.rb
|
58
|
-
- tests/test_epoll.rb
|
59
63
|
- tests/testem.rb
|
60
|
-
-
|
61
|
-
-
|
62
|
-
-
|
63
|
-
- lib/
|
64
|
+
- lib/em
|
65
|
+
- lib/em/deferrable.rb
|
66
|
+
- lib/em/eventable.rb
|
67
|
+
- lib/em/future.rb
|
68
|
+
- lib/em/messages.rb
|
69
|
+
- lib/em/processes.rb
|
70
|
+
- lib/em/spawnable.rb
|
71
|
+
- lib/em/streamer.rb
|
64
72
|
- lib/eventmachine.rb
|
73
|
+
- lib/eventmachine_version.rb
|
65
74
|
- lib/evma
|
66
|
-
- lib/evma/reactor.rb
|
67
|
-
- lib/evma/factory.rb
|
68
75
|
- lib/evma/callback.rb
|
69
76
|
- lib/evma/container.rb
|
77
|
+
- lib/evma/factory.rb
|
70
78
|
- lib/evma/protocol.rb
|
79
|
+
- lib/evma/reactor.rb
|
80
|
+
- lib/evma.rb
|
81
|
+
- lib/jeventmachine.rb
|
82
|
+
- lib/pr_eventmachine.rb
|
71
83
|
- lib/protocols
|
72
|
-
- lib/protocols/tcptest.rb
|
73
|
-
- lib/protocols/httpcli2.rb
|
74
|
-
- lib/protocols/header_and_content.rb
|
75
|
-
- lib/protocols/saslauth.rb
|
76
|
-
- lib/protocols/stomp.rb
|
77
|
-
- lib/protocols/linetext2.rb
|
78
|
-
- lib/protocols/smtpserver.rb
|
79
|
-
- lib/protocols/line_and_text.rb
|
80
84
|
- lib/protocols/buftok.rb
|
85
|
+
- lib/protocols/header_and_content.rb
|
86
|
+
- lib/protocols/httpcli2.rb
|
81
87
|
- lib/protocols/httpclient.rb
|
88
|
+
- lib/protocols/line_and_text.rb
|
89
|
+
- lib/protocols/linetext2.rb
|
90
|
+
- lib/protocols/postgres.rb
|
91
|
+
- lib/protocols/saslauth.rb
|
82
92
|
- lib/protocols/smtpclient.rb
|
83
|
-
- lib/
|
84
|
-
- lib/
|
85
|
-
- lib/
|
86
|
-
-
|
87
|
-
- lib/em/streamer.rb
|
88
|
-
- lib/em/eventable.rb
|
89
|
-
- lib/em/processes.rb
|
90
|
-
- lib/em/deferrable.rb
|
91
|
-
- lib/em/future.rb
|
92
|
-
- lib/em/spawnable.rb
|
93
|
-
- lib/evma.rb
|
94
|
-
- ext/cmain.cpp
|
95
|
-
- ext/eventmachine_cpp.h
|
93
|
+
- lib/protocols/smtpserver.rb
|
94
|
+
- lib/protocols/stomp.rb
|
95
|
+
- lib/protocols/tcptest.rb
|
96
|
+
- ext/binder.cpp
|
96
97
|
- ext/binder.h
|
97
|
-
- ext/
|
98
|
-
- ext/
|
99
|
-
- ext/sigs.h
|
98
|
+
- ext/cmain.cpp
|
99
|
+
- ext/cplusplus.cpp
|
100
100
|
- ext/ed.cpp
|
101
|
+
- ext/ed.h
|
101
102
|
- ext/em.cpp
|
103
|
+
- ext/em.h
|
104
|
+
- ext/emwin.cpp
|
105
|
+
- ext/emwin.h
|
106
|
+
- ext/epoll.cpp
|
107
|
+
- ext/epoll.h
|
108
|
+
- ext/eventmachine.h
|
109
|
+
- ext/eventmachine_cpp.h
|
110
|
+
- ext/extconf.rb
|
111
|
+
- ext/files.cpp
|
112
|
+
- ext/files.h
|
113
|
+
- ext/kb.cpp
|
102
114
|
- ext/page.cpp
|
103
|
-
- ext/ssl.h
|
104
115
|
- ext/page.h
|
116
|
+
- ext/pipe.cpp
|
105
117
|
- ext/project.h
|
106
|
-
- ext/epoll.h
|
107
|
-
- ext/binder.cpp
|
108
|
-
- ext/ed.h
|
109
|
-
- ext/epoll.cpp
|
110
|
-
- ext/files.h
|
111
|
-
- ext/cplusplus.cpp
|
112
|
-
- ext/emwin.cpp
|
113
|
-
- ext/em.h
|
114
118
|
- ext/rubymain.cpp
|
115
|
-
- ext/
|
116
|
-
- ext/
|
119
|
+
- ext/sigs.cpp
|
120
|
+
- ext/sigs.h
|
117
121
|
- ext/ssl.cpp
|
118
|
-
- ext/
|
119
|
-
- ext/kb.cpp
|
120
|
-
- ext/emwin.h
|
122
|
+
- ext/ssl.h
|
121
123
|
- README
|
122
124
|
- RELEASE_NOTES
|
123
125
|
- COPYING
|
@@ -157,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
157
159
|
requirements: []
|
158
160
|
|
159
161
|
rubyforge_project: eventmachine
|
160
|
-
rubygems_version: 1.0
|
162
|
+
rubygems_version: 1.2.0
|
161
163
|
signing_key:
|
162
164
|
specification_version: 2
|
163
165
|
summary: Ruby/EventMachine library
|