sensu-em 2.4.1-java → 2.5.0.beta-java

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.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +15 -5
  3. data/CHANGELOG.md +41 -1
  4. data/README.md +2 -3
  5. data/eventmachine.gemspec +2 -1
  6. data/ext/cmain.cpp +19 -3
  7. data/ext/ed.cpp +22 -8
  8. data/ext/em.cpp +123 -76
  9. data/ext/em.h +40 -6
  10. data/ext/eventmachine.h +2 -0
  11. data/ext/extconf.rb +16 -2
  12. data/ext/fastfilereader/extconf.rb +3 -0
  13. data/ext/fastfilereader/mapper.cpp +1 -1
  14. data/ext/project.h +11 -7
  15. data/ext/rubymain.cpp +38 -2
  16. data/ext/ssl.cpp +4 -1
  17. data/ext/ssl.h +4 -0
  18. data/java/src/com/rubyeventmachine/EventableChannel.java +8 -1
  19. data/lib/em/buftok.rb +34 -85
  20. data/lib/em/protocols/httpclient.rb +31 -11
  21. data/lib/em/protocols/line_and_text.rb +2 -3
  22. data/lib/em/protocols/linetext2.rb +0 -1
  23. data/lib/em/protocols/smtpserver.rb +32 -9
  24. data/lib/em/pure_ruby.rb +2 -2
  25. data/lib/em/tick_loop.rb +19 -19
  26. data/lib/em/version.rb +1 -1
  27. data/lib/eventmachine.rb +12 -4
  28. data/lib/jeventmachine.rb +22 -6
  29. data/lib/rubyeventmachine.jar +0 -0
  30. data/rakelib/package.rake +1 -1
  31. data/tests/em_test_helper.rb +4 -0
  32. data/tests/test_attach.rb +1 -0
  33. data/tests/test_basic.rb +14 -16
  34. data/tests/test_completion.rb +1 -0
  35. data/tests/test_connection_count.rb +1 -0
  36. data/tests/test_connection_write.rb +35 -0
  37. data/tests/test_epoll.rb +11 -14
  38. data/tests/test_httpclient.rb +43 -0
  39. data/tests/test_iterator.rb +6 -6
  40. data/tests/test_kb.rb +19 -25
  41. data/tests/test_many_fds.rb +22 -0
  42. data/tests/test_pause.rb +7 -2
  43. data/tests/test_pool.rb +2 -0
  44. data/tests/test_process_watch.rb +2 -0
  45. data/tests/test_processes.rb +7 -7
  46. data/tests/test_resolver.rb +33 -7
  47. data/tests/test_ssl_methods.rb +3 -4
  48. data/tests/test_ssl_verify.rb +62 -62
  49. data/tests/test_threaded_resource.rb +8 -0
  50. data/tmp/java/rubyeventmachine/.build +0 -0
  51. metadata +27 -10
@@ -227,18 +227,26 @@ module EventMachine
227
227
  process_unknown
228
228
  end
229
229
  end
230
-
230
+
231
231
  # TODO - implement this properly, the implementation is a stub!
232
- def process_vrfy
232
+ def process_help
233
233
  send_data "250 Ok, but unimplemented\r\n"
234
234
  end
235
+
236
+ # RFC2821, 3.5.3 Meaning of VRFY or EXPN Success Response:
237
+ # A server MUST NOT return a 250 code in response to a VRFY or EXPN
238
+ # command unless it has actually verified the address. In particular,
239
+ # a server MUST NOT return 250 if all it has done is to verify that the
240
+ # syntax given is valid. In that case, 502 (Command not implemented)
241
+ # or 500 (Syntax error, command unrecognized) SHOULD be returned.
242
+ #
235
243
  # TODO - implement this properly, the implementation is a stub!
236
- def process_help
237
- send_data "250 Ok, but unimplemented\r\n"
244
+ def process_vrfy
245
+ send_data "502 Command not implemented\r\n"
238
246
  end
239
247
  # TODO - implement this properly, the implementation is a stub!
240
248
  def process_expn
241
- send_data "250 Ok, but unimplemented\r\n"
249
+ send_data "502 Command not implemented\r\n"
242
250
  end
243
251
 
244
252
  #--
@@ -358,12 +366,23 @@ module EventMachine
358
366
  def process_auth_line(line)
359
367
  plain = line.unpack("m").first
360
368
  _,user,psw = plain.split("\000")
361
- if receive_plain_auth user,psw
369
+
370
+ succeeded = proc {
362
371
  send_data "235 authentication ok\r\n"
363
372
  @state << :auth
364
- else
373
+ }
374
+ failed = proc {
365
375
  send_data "535 invalid authentication\r\n"
376
+ }
377
+ auth = receive_plain_auth user,psw
378
+
379
+ if auth.respond_to?(:callback)
380
+ auth.callback(&succeeded)
381
+ auth.errback(&failed)
382
+ else
383
+ (auth ? succeeded : failed).call
366
384
  end
385
+
367
386
  @state.delete :auth_incomplete
368
387
  end
369
388
 
@@ -409,8 +428,12 @@ module EventMachine
409
428
  #--
410
429
  # STARTTLS may not be issued before EHLO, or unless the user has chosen
411
430
  # to support it.
412
- # TODO, must support user-supplied certificates.
413
431
  #
432
+ # If :starttls_options is present and :starttls is set in the parms
433
+ # pass the options in :starttls_options to start_tls. Do this if you want to use
434
+ # your own certificate
435
+ # e.g. {:cert_chain_file => "/etc/ssl/cert.pem", :private_key_file => "/etc/ssl/private/cert.key"}
436
+
414
437
  def process_starttls
415
438
  if @@parms[:starttls]
416
439
  if @state.include?(:starttls)
@@ -419,7 +442,7 @@ module EventMachine
419
442
  send_data "503 EHLO required before STARTTLS\r\n"
420
443
  else
421
444
  send_data "220 Start TLS negotiation\r\n"
422
- start_tls
445
+ start_tls(@@parms[:starttls_options] || {})
423
446
  @state << :starttls
424
447
  end
425
448
  else
data/lib/em/pure_ruby.rb CHANGED
@@ -393,7 +393,7 @@ module EventMachine
393
393
  100.times {
394
394
  @loopbreak_port = rand(10000) + 40000
395
395
  begin
396
- @loopbreak_reader.bind "localhost", @loopbreak_port
396
+ @loopbreak_reader.bind "127.0.0.1", @loopbreak_port
397
397
  bound = true
398
398
  break
399
399
  rescue
@@ -410,7 +410,7 @@ module EventMachine
410
410
 
411
411
  def signal_loopbreak
412
412
  #@loopbreak_writer.write '+' if @loopbreak_writer
413
- @loopbreak_writer.send('+',0,"localhost",@loopbreak_port) if @loopbreak_writer
413
+ @loopbreak_writer.send('+',0,"127.0.0.1",@loopbreak_port) if @loopbreak_writer
414
414
  end
415
415
 
416
416
  def set_timer_quantum interval_in_seconds
data/lib/em/tick_loop.rb CHANGED
@@ -7,25 +7,25 @@ module EventMachine
7
7
  # A TickLoop is useful when one needs to distribute amounts of work
8
8
  # throughout ticks in order to maintain response times. It is also useful for
9
9
  # simple repeated checks and metrics.
10
- #
11
- # # Here we run through an array one item per tick until it is empty,
12
- # # printing each element.
13
- # # When the array is empty, we return :stop from the callback, and the
14
- # # loop will terminate.
15
- # # When the loop terminates, the on_stop callbacks will be called.
16
- # EM.run do
17
- # array = (1..100).to_a
18
- #
19
- # tickloop = EM.tick_loop do
20
- # if array.empty?
21
- # :stop
22
- # else
23
- # puts array.shift
24
- # end
25
- # end
26
- #
27
- # tickloop.on_stop { EM.stop }
28
- # end
10
+ # @example
11
+ # # Here we run through an array one item per tick until it is empty,
12
+ # # printing each element.
13
+ # # When the array is empty, we return :stop from the callback, and the
14
+ # # loop will terminate.
15
+ # # When the loop terminates, the on_stop callbacks will be called.
16
+ # EM.run do
17
+ # array = (1..100).to_a
18
+ #
19
+ # tickloop = EM.tick_loop do
20
+ # if array.empty?
21
+ # :stop
22
+ # else
23
+ # puts array.shift
24
+ # end
25
+ # end
26
+ #
27
+ # tickloop.on_stop { EM.stop }
28
+ # end
29
29
  #
30
30
  class TickLoop
31
31
 
data/lib/em/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module EventMachine
2
- VERSION = "1.0.3"
2
+ VERSION = "1.0.7"
3
3
  end
data/lib/eventmachine.rb CHANGED
@@ -966,13 +966,16 @@ module EventMachine
966
966
  callback = @next_tick_mutex.synchronize { @next_tick_queue.shift }
967
967
  begin
968
968
  callback.call
969
+ rescue
970
+ exception_raised = true
971
+ raise
969
972
  ensure
970
973
  # This is a little nasty. The problem is, if an exception occurs during
971
974
  # the callback, then we need to send a signal to the reactor to actually
972
975
  # do some work during the next_tick. The only mechanism we have from the
973
976
  # ruby side is next_tick itself, although ideally, we'd just drop a byte
974
977
  # on the loopback descriptor.
975
- EM.next_tick {} if $!
978
+ EM.next_tick {} if exception_raised
976
979
  end
977
980
  end
978
981
  end
@@ -1042,7 +1045,12 @@ module EventMachine
1042
1045
  thread = Thread.new do
1043
1046
  Thread.current.abort_on_exception = true
1044
1047
  while true
1045
- op, cback = *@threadqueue.pop
1048
+ begin
1049
+ op, cback = *@threadqueue.pop
1050
+ rescue ThreadError
1051
+ $stderr.puts $!.message
1052
+ break # Ruby 2.0 may fail at Queue.pop
1053
+ end
1046
1054
  result = op.call
1047
1055
  @resultqueue << [result, cback]
1048
1056
  EventMachine.signal_loopbreak
@@ -1528,9 +1536,9 @@ module EventMachine
1528
1536
  raise ArgumentError, "must provide module or subclass of #{klass.name}" unless klass >= handler
1529
1537
  handler
1530
1538
  elsif handler
1531
- begin
1539
+ if defined?(handler::EM_CONNECTION_CLASS)
1532
1540
  handler::EM_CONNECTION_CLASS
1533
- rescue NameError
1541
+ else
1534
1542
  handler::const_set(:EM_CONNECTION_CLASS, Class.new(klass) {include handler})
1535
1543
  end
1536
1544
  else
data/lib/jeventmachine.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  # Author:: Francis Cianfrocca (gmail: blackhedd)
4
4
  # Homepage:: http://rubyeventmachine.com
5
5
  # Date:: 8 Apr 2006
6
- #
6
+ #
7
7
  # See EventMachine and EventMachine::Connection for documentation and
8
8
  # usage examples.
9
9
  #
@@ -11,17 +11,17 @@
11
11
  #
12
12
  # Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
13
13
  # Gmail: blackhedd
14
- #
14
+ #
15
15
  # This program is free software; you can redistribute it and/or modify
16
16
  # it under the terms of either: 1) the GNU General Public License
17
17
  # as published by the Free Software Foundation; either version 2 of the
18
18
  # License, or (at your option) any later version; or 2) Ruby's License.
19
- #
19
+ #
20
20
  # See the file COPYING for complete licensing information.
21
21
  #
22
22
  #---------------------------------------------------------------------------
23
23
  #
24
- #
24
+ #
25
25
 
26
26
  # This module provides "glue" for the Java version of the EventMachine reactor core.
27
27
  # For C++ EventMachines, the analogous functionality is found in ext/rubymain.cpp,
@@ -269,8 +269,21 @@ module EventMachine
269
269
  @em.getConnectionCount
270
270
  end
271
271
 
272
+ def self.pause_connection(sig)
273
+ @em.pauseConnection(sig)
274
+ end
275
+ def self.resume_connection(sig)
276
+ @em.resumeConnection(sig)
277
+ end
278
+ def self.connection_paused?(sig)
279
+ @em.isConnectionPaused(sig)
280
+ end
281
+ def self._get_outbound_data_size(sig)
282
+ @em.getOutboundDataSize(sig)
283
+ end
284
+
272
285
  def self.set_tls_parms(sig, privkeyfile, certchainfile, verify_peer, use_tls, cipher_list)
273
- keystore = KeyStoreBuilder.create privkeyfile, certchainfile unless (privkeyfile.empty? or certchainfile.empty?)
286
+ keystore = KeyStoreBuilder.create privkeyfile, certchainfile unless (privkeyfile.empty? or certchainfile.empty?)
274
287
  @em.setTlsParms(sig, keystore, (!!verify_peer))
275
288
  end
276
289
  def self.send_file_data(sig, filename)
@@ -280,6 +293,9 @@ module EventMachine
280
293
  def associate_callback_target sig
281
294
  # No-op for the time being
282
295
  end
296
+ def get_outbound_data_size
297
+ EM._get_outbound_data_size @signature
298
+ end
283
299
  end
284
300
  end
285
301
 
@@ -305,7 +321,7 @@ module KeyStoreBuilder
305
321
 
306
322
  def self.create(privkeyfile, certchainfile)
307
323
  self.init
308
-
324
+
309
325
  key_reader = FileReader.new privkeyfile
310
326
  key_pair = PEMReader.new(key_reader).read_object
311
327
 
Binary file
data/rakelib/package.rake CHANGED
@@ -65,7 +65,7 @@ end
65
65
  require "\#{$1}/#{File.basename(t.name, '.rb')}"
66
66
  eoruby
67
67
  end
68
- at_exit{ FileUtils.rm t.name if File.exists?(t.name) }
68
+ at_exit{ FileUtils.rm t.name if File.exist?(t.name) }
69
69
  end
70
70
  end
71
71
 
@@ -45,6 +45,10 @@ class Test::Unit::TestCase
45
45
  def jruby?
46
46
  defined? JRUBY_VERSION
47
47
  end
48
+
49
+ def rbx?
50
+ defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
51
+ end
48
52
  end
49
53
 
50
54
  include PlatformHelper
data/tests/test_attach.rb CHANGED
@@ -67,6 +67,7 @@ class TestAttach < Test::Unit::TestCase
67
67
  end
68
68
 
69
69
  def test_attach_server
70
+ omit_if(jruby?)
70
71
  $before = TCPServer.new("127.0.0.1", @port)
71
72
  sig = nil
72
73
  EM.run {
data/tests/test_basic.rb CHANGED
@@ -179,18 +179,15 @@ class TestBasic < Test::Unit::TestCase
179
179
  assert x
180
180
  end
181
181
 
182
- if EM.respond_to? :set_heartbeat_interval
183
- def test_set_heartbeat_interval
184
- interval = 0.5
185
- EM.run {
186
- EM.set_heartbeat_interval interval
187
- $interval = EM.get_heartbeat_interval
188
- EM.stop
189
- }
190
- assert_equal(interval, $interval)
191
- end
192
- else
193
- warn "EM.set_heartbeat_interval not implemented, skipping a test in #{__FILE__}"
182
+ def test_set_heartbeat_interval
183
+ omit_if(jruby?)
184
+ interval = 0.5
185
+ EM.run {
186
+ EM.set_heartbeat_interval interval
187
+ $interval = EM.get_heartbeat_interval
188
+ EM.stop
189
+ }
190
+ assert_equal(interval, $interval)
194
191
  end
195
192
 
196
193
  module PostInitRaiser
@@ -226,6 +223,7 @@ class TestBasic < Test::Unit::TestCase
226
223
  end
227
224
 
228
225
  def test_schedule_close
226
+ omit_if(jruby?)
229
227
  localhost, port = '127.0.0.1', 9000
230
228
  timer_ran = false
231
229
  num_close_scheduled = nil
@@ -247,22 +245,22 @@ class TestBasic < Test::Unit::TestCase
247
245
  end
248
246
 
249
247
  def test_fork_safe
250
- return unless cpid = fork { exit! } rescue false
248
+ omit_if(jruby?)
249
+ omit_if(rbx?, 'Omitting test on Rubinius because it hangs for unknown reasons')
251
250
 
252
251
  read, write = IO.pipe
253
252
  EM.run do
254
- cpid = fork do
253
+ fork do
255
254
  write.puts "forked"
256
255
  EM.run do
257
256
  EM.next_tick do
258
257
  write.puts "EM ran"
259
- exit!
258
+ EM.stop
260
259
  end
261
260
  end
262
261
  end
263
262
  EM.stop
264
263
  end
265
- Process.waitall
266
264
  assert_equal "forked\n", read.readline
267
265
  assert_equal "EM ran\n", read.readline
268
266
  ensure
@@ -1,3 +1,4 @@
1
+ require 'em_test_helper'
1
2
  require 'em/completion'
2
3
 
3
4
  class TestCompletion < Test::Unit::TestCase
@@ -43,6 +43,7 @@ class TestConnectionCount < Test::Unit::TestCase
43
43
  end
44
44
 
45
45
  def test_num_close_scheduled
46
+ omit_if(jruby?)
46
47
  EM.run {
47
48
  assert_equal(0, EM.num_close_scheduled)
48
49
  EM.connect("127.0.0.1", 9999, DoubleCloseClient) # nothing listening on 9999
@@ -0,0 +1,35 @@
1
+ require 'em_test_helper'
2
+
3
+ class TestConnectionWrite < Test::Unit::TestCase
4
+
5
+ # This test takes advantage of the fact that EM::_RunSelectOnce iterates over the connections twice:
6
+ # - once to determine which ones to call Write() on
7
+ # - and once to call Write() on each of them.
8
+ #
9
+ # But state may change in the meantime before Write() is finally called.
10
+ # And that is what we try to exploit to get Write() to be called when bWatchOnly is true, and bNotifyWritable is false,
11
+ # to cause an assertion failure.
12
+
13
+ module SimpleClient
14
+ def notify_writable
15
+ $conn2.notify_writable = false # Being naughty in callback
16
+ # If this doesn't crash anything, the test passed!
17
+ end
18
+ end
19
+
20
+ def test_with_naughty_callback
21
+ EM.run do
22
+ r1, w1 = IO.pipe
23
+ r2, w2 = IO.pipe
24
+
25
+ # Adding EM.watches
26
+ $conn1 = EM.watch(r1, SimpleClient)
27
+ $conn2 = EM.watch(r2, SimpleClient)
28
+
29
+ $conn1.notify_writable = true
30
+ $conn2.notify_writable = true
31
+
32
+ EM.stop
33
+ end
34
+ end
35
+ end
data/tests/test_epoll.rb CHANGED
@@ -25,19 +25,16 @@ class TestEpoll < Test::Unit::TestCase
25
25
  end
26
26
 
27
27
 
28
- if windows? || jruby?
29
- warn "EM.set_descriptor_table_size not implemented, skipping test in #{__FILE__}"
30
- else
31
- # We can set the rlimit/nofile of a process but we can only set it
32
- # higher if we're running as root.
33
- # On most systems, the default value is 1024.
34
- def test_rlimit
35
- unless EM.set_descriptor_table_size >= 1024
36
- a = EM.set_descriptor_table_size
37
- assert( a <= 1024 )
38
- a = EM.set_descriptor_table_size( 1024 )
39
- assert( a == 1024 )
40
- end
28
+ # We can set the rlimit/nofile of a process but we can only set it
29
+ # higher if we're running as root.
30
+ # On most systems, the default value is 1024.
31
+ def test_rlimit
32
+ omit_if(windows? || jruby?)
33
+ unless EM.set_descriptor_table_size >= 1024
34
+ a = EM.set_descriptor_table_size
35
+ assert( a <= 1024 )
36
+ a = EM.set_descriptor_table_size( 1024 )
37
+ assert( a == 1024 )
41
38
  end
42
39
  end
43
40
 
@@ -97,7 +94,7 @@ class TestEpoll < Test::Unit::TestCase
97
94
  assert_equal( "abcdefghij", $out )
98
95
  end
99
96
 
100
- # XXX this test fails randomly..
97
+ # XXX this test fails randomly...
101
98
  def _test_unix_domain
102
99
  fn = "/tmp/xxx.chain"
103
100
  EM.epoll
@@ -187,4 +187,47 @@ class TestHttpClient < Test::Unit::TestCase
187
187
  assert ok
188
188
  end
189
189
 
190
+ #-----------------------------------------
191
+
192
+ # Test a server that returns chunked encoding
193
+ #
194
+ class ChunkedEncodingContent < EventMachine::Connection
195
+ def initialize *args
196
+ super
197
+ end
198
+ def receive_data data
199
+ send_data ["HTTP/1.1 200 OK",
200
+ "Server: nginx/0.7.67",
201
+ "Date: Sat, 23 Oct 2010 16:41:32 GMT",
202
+ "Content-Type: application/json",
203
+ "Transfer-Encoding: chunked",
204
+ "Connection: keep-alive",
205
+ "",
206
+ "1800",
207
+ "chunk1" * 1024,
208
+ "5a",
209
+ "chunk2" * 15,
210
+ "0",
211
+ ""].join("\r\n")
212
+ close_connection_after_writing
213
+ end
214
+ end
215
+
216
+ def test_http_chunked_encoding_content
217
+ ok = false
218
+ EventMachine.run {
219
+ EventMachine.start_server "127.0.0.1", 9701, ChunkedEncodingContent
220
+ c = EventMachine::Protocols::HttpClient.send :request, :host => "127.0.0.1", :port => 9701
221
+ c.callback {|result|
222
+ if result[:content] == "chunk1" * 1024 + "chunk2" * 15
223
+ ok = true
224
+ end
225
+ EventMachine.stop
226
+ }
227
+ }
228
+ assert ok
229
+ end
230
+
190
231
  end
232
+
233
+
@@ -18,7 +18,7 @@ class TestIterator < Test::Unit::TestCase
18
18
  }, proc {EM.stop})
19
19
  }
20
20
  assert_equal(10, items.keys.size)
21
- assert_equal((list).to_a, items.values.flatten)
21
+ assert_equal(list.to_a.sort, items.values.flatten.sort)
22
22
  end
23
23
 
24
24
  def test_concurrency_bigger_than_list_size
@@ -33,7 +33,7 @@ class TestIterator < Test::Unit::TestCase
33
33
  }, proc {EM.stop})
34
34
  }
35
35
  assert_equal(1, items.keys.size)
36
- assert_equal((list).to_a, items.values.flatten)
36
+ assert_equal(list.to_a.sort, items.values.flatten.sort)
37
37
  end
38
38
 
39
39
 
@@ -56,7 +56,7 @@ class TestIterator < Test::Unit::TestCase
56
56
  }
57
57
  }
58
58
  assert_equal(9, items.keys.size)
59
- assert_equal((list).to_a, items.values.flatten)
59
+ assert_equal(list.to_a.sort, items.values.flatten.sort)
60
60
  end
61
61
 
62
62
  def test_map
@@ -65,7 +65,7 @@ class TestIterator < Test::Unit::TestCase
65
65
  EM::Iterator.new(list).map(proc{ |num,iter|
66
66
  EM.add_timer(0.01){ iter.return(num) }
67
67
  }, proc{ |results|
68
- assert_equal((list).to_a.size, results.size)
68
+ assert_equal(list.to_a.size, results.size)
69
69
  EM.stop
70
70
  })
71
71
  }
@@ -80,7 +80,7 @@ class TestIterator < Test::Unit::TestCase
80
80
  iter.return(hash)
81
81
  }
82
82
  }, proc{ |results|
83
- assert_equal(results.keys, list)
83
+ assert_equal(results.keys.sort, list.sort)
84
84
  EM.stop
85
85
  })
86
86
  }
@@ -94,4 +94,4 @@ class TestIterator < Test::Unit::TestCase
94
94
  EM.stop
95
95
  }
96
96
  end
97
- end
97
+ end
data/tests/test_kb.rb CHANGED
@@ -2,33 +2,27 @@ require 'em_test_helper'
2
2
 
3
3
  class TestKeyboardEvents < Test::Unit::TestCase
4
4
 
5
- if !jruby?
6
- module KbHandler
7
- include EM::Protocols::LineText2
8
- def receive_line d
9
- EM::stop if d == "STOP"
10
- end
5
+ module KbHandler
6
+ include EM::Protocols::LineText2
7
+ def receive_line d
8
+ EM::stop if d == "STOP"
11
9
  end
10
+ end
12
11
 
13
- # This test doesn't actually do anything useful but is here to
14
- # illustrate the usage. If you removed the timer and ran this test
15
- # by itself on a console, and then typed into the console, it would
16
- # work.
17
- # I don't know how to get the test harness to simulate actual keystrokes.
18
- # When someone figures that out, then we can make this a real test.
19
- #
20
- def test_kb
21
- EM.run {
22
- EM.open_keyboard KbHandler
23
- EM::Timer.new(1) { EM.stop }
24
- } if $stdout.tty? # don't run the test unless it stands a chance of validity.
25
- end
26
- else
27
- warn "EM.open_keyboard not implemented, skipping tests in #{__FILE__}"
28
-
29
- # Because some rubies will complain if a TestCase class has no tests
30
- def test_em_open_keyboard_unsupported
31
- assert true
12
+ # This test doesn't actually do anything useful but is here to
13
+ # illustrate the usage. If you removed the timer and ran this test
14
+ # by itself on a console, and then typed into the console, it would
15
+ # work.
16
+ # I don't know how to get the test harness to simulate actual keystrokes.
17
+ # When someone figures that out, then we can make this a real test.
18
+ #
19
+ def test_kb
20
+ omit_if(jruby?)
21
+ omit_if(!$stdout.tty?) # don't run the test unless it stands a chance of validity.
22
+ EM.run do
23
+ EM.open_keyboard KbHandler
24
+ EM::Timer.new(1) { EM.stop }
32
25
  end
33
26
  end
27
+
34
28
  end
@@ -0,0 +1,22 @@
1
+ require 'em_test_helper'
2
+ require 'socket'
3
+
4
+ class TestManyFDs < Test::Unit::TestCase
5
+ def setup
6
+ @port = next_port
7
+ end
8
+
9
+ def test_connection_class_cache
10
+ mod = Module.new
11
+ a = nil
12
+ Process.setrlimit(Process::RLIMIT_NOFILE,4096);
13
+ EM.run {
14
+ EM.start_server '127.0.0.1', @port, mod
15
+ 1100.times do
16
+ a = EM.connect '127.0.0.1', @port, mod
17
+ assert_kind_of EM::Connection, a
18
+ end
19
+ EM.stop
20
+ }
21
+ end
22
+ end
data/tests/test_pause.rb CHANGED
@@ -82,14 +82,19 @@ class TestPause < Test::Unit::TestCase
82
82
  end
83
83
  end
84
84
 
85
+ buf = 'a' * 1024
86
+
85
87
  EM.run do
86
88
  EM.start_server "127.0.0.1", @port, test_server
87
89
  cli = EM.connect "127.0.0.1", @port
88
- cli.send_data 'a'*(17*1024)
90
+ 128.times do
91
+ cli.send_data buf
92
+ end
89
93
  end
90
94
 
91
95
  assert_equal 1, incoming.size
92
- assert_equal 16*1024, incoming[0].bytesize
96
+ assert incoming[0].bytesize > buf.bytesize
97
+ assert incoming[0].bytesize < buf.bytesize * 128
93
98
  end
94
99
  else
95
100
  warn "EM.pause_connection not implemented, skipping tests in #{__FILE__}"
data/tests/test_pool.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'em_test_helper'
2
+
1
3
  class TestPool < Test::Unit::TestCase
2
4
  def pool
3
5
  @pool ||= EM::Pool.new
@@ -27,6 +27,8 @@ if EM.kqueue?
27
27
  end
28
28
 
29
29
  def test_events
30
+ omit_if(rbx?)
31
+ omit_if(jruby?)
30
32
  EM.run{
31
33
  # watch ourselves for a fork notification
32
34
  EM.watch_process(Process.pid, ParentProcessWatcher)