summaryrefslogtreecommitdiff
path: root/vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_epoll.rb
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_epoll.rb')
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_epoll.rb142
1 files changed, 142 insertions, 0 deletions
diff --git a/vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_epoll.rb b/vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_epoll.rb
new file mode 100644
index 0000000..36f5609
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_epoll.rb
@@ -0,0 +1,142 @@
+require 'em_test_helper'
+
+
+class TestEpoll < Test::Unit::TestCase
+
+ module TestEchoServer
+ def receive_data data
+ send_data data
+ close_connection_after_writing
+ end
+ end
+
+ module TestEchoClient
+ def connection_completed
+ send_data "ABCDE"
+ $max += 1
+ end
+ def receive_data data
+ raise "bad response" unless data == "ABCDE"
+ end
+ def unbind
+ $n -= 1
+ EM.stop if $n == 0
+ end
+ end
+
+
+ # We can set the rlimit/nofile of a process but we can only set it
+ # higher if we're running as root.
+ # On most systems, the default value is 1024.
+ def test_rlimit
+ omit_if(windows? || jruby?)
+ unless EM.set_descriptor_table_size >= 1024
+ a = EM.set_descriptor_table_size
+ assert( a <= 1024 )
+ a = EM.set_descriptor_table_size( 1024 )
+ assert( a == 1024 )
+ end
+ end
+
+ # Run a high-volume version of this test by kicking the number of connections
+ # up past 512. (Each connection uses two sockets, a client and a server.)
+ # (Will require running the test as root)
+ # This test exercises TCP clients and servers.
+ #
+ # XXX this test causes all sort of weird issues on OSX (when run as part of the suite)
+ def _test_descriptors
+ EM.epoll
+ EM.set_descriptor_table_size 60000
+ EM.run {
+ EM.start_server "127.0.0.1", 9800, TestEchoServer
+ $n = 0
+ $max = 0
+ 100.times {
+ EM.connect("127.0.0.1", 9800, TestEchoClient) {$n += 1}
+ }
+ }
+ assert_equal(0, $n)
+ assert_equal(100, $max)
+ end
+
+ def setup
+ @port = next_port
+ end
+
+ module TestDatagramServer
+ def receive_data dgm
+ $in = dgm
+ send_data "abcdefghij"
+ end
+ end
+ module TestDatagramClient
+ def initialize port
+ @port = port
+ end
+
+ def post_init
+ send_datagram "1234567890", "127.0.0.1", @port
+ end
+
+ def receive_data dgm
+ $out = dgm
+ EM.stop
+ end
+ end
+
+ def test_datagrams
+ $in = $out = ""
+ EM.run {
+ EM.open_datagram_socket "127.0.0.1", @port, TestDatagramServer
+ EM.open_datagram_socket "127.0.0.1", 0, TestDatagramClient, @port
+ }
+ assert_equal( "1234567890", $in )
+ assert_equal( "abcdefghij", $out )
+ end
+
+ # XXX this test fails randomly...
+ def _test_unix_domain
+ fn = "/tmp/xxx.chain"
+ EM.epoll
+ EM.set_descriptor_table_size 60000
+ EM.run {
+ # The pure-Ruby version won't let us open the socket if the node already exists.
+ # Not sure, that actually may be correct and the compiled version is wrong.
+ # Pure Ruby also oddly won't let us make that many connections. This test used
+ # to run 100 times. Not sure where that lower connection-limit is coming from in
+ # pure Ruby.
+ # Let's not sweat the Unix-ness of the filename, since this test can't possibly
+ # work on Windows anyway.
+ #
+ File.unlink(fn) if File.exist?(fn)
+ EM.start_unix_domain_server fn, TestEchoServer
+ $n = 0
+ $max = 0
+ 50.times {
+ EM.connect_unix_domain(fn, TestEchoClient) {$n += 1}
+ }
+ EM::add_timer(1) { $stderr.puts("test_unix_domain timed out!"); EM::stop }
+ }
+ assert_equal(0, $n)
+ assert_equal(50, $max)
+ ensure
+ File.unlink(fn) if File.exist?(fn)
+ end
+
+ def test_attach_detach
+ EM.epoll
+ EM.run {
+ EM.add_timer(0.01) { EM.stop }
+
+ r, _ = IO.pipe
+
+ # This tests a regression where detach in the same tick as attach crashes EM
+ EM.watch(r) do |connection|
+ connection.detach
+ end
+ }
+
+ assert true
+ end
+end
+