![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /var/lib/gems/2.5.0/gems/eventmachine-1.2.7/tests/ |
Upload File : |
require 'em_test_helper' class TestPure < Test::Unit::TestCase def setup @port = next_port end # These tests are intended to exercise problems that come up in the # pure-Ruby implementation. However, we DON'T constrain them such that # they only run in pure-Ruby. These tests need to work identically in # any implementation. #------------------------------------- # The EM reactor needs to run down open connections and release other resources # when it stops running. Make sure this happens even if user code throws a Ruby # exception. # If exception handling is incorrect, the second test will fail with a no-bind error # because the TCP server opened in the first test will not have been closed. def test_exception_handling_releases_resources exception = Class.new(StandardError) 2.times do assert_raises(exception) do EM.run do EM.start_server "127.0.0.1", @port raise exception end end end end # Under some circumstances, the pure Ruby library would emit an Errno::ECONNREFUSED # exception on certain kinds of TCP connect-errors. # It's always been something of an open question whether EM should throw an exception # in these cases but the defined answer has always been to catch it the unbind method. # With a connect failure, the latter will always fire, but connection_completed will # never fire. So even though the point is arguable, it's incorrect for the pure Ruby # version to throw an exception. module TestConnrefused def unbind EM.stop end def connection_completed raise "should never get here" end end def test_connrefused assert_nothing_raised do EM.run { setup_timeout(2) EM.connect "127.0.0.1", @port, TestConnrefused } end end # Make sure connection_completed gets called as expected with TCP clients. This is the # opposite of test_connrefused. # If the test fails, it will hang because EM.stop never gets called. # module TestConnaccepted def connection_completed EM.stop end end def test_connaccepted assert_nothing_raised do EM.run { EM.start_server "127.0.0.1", @port EM.connect "127.0.0.1", @port, TestConnaccepted setup_timeout(1) } end end def test_reactor_running a = false EM.run { a = EM.reactor_running? EM.next_tick {EM.stop} } assert a end module TLSServer def post_init start_tls end def ssl_handshake_completed $server_handshake_completed = true end def receive_data(data) $server_received_data = data send_data(data) end end module TLSClient def post_init start_tls end def ssl_handshake_completed $client_handshake_completed = true end def connection_completed send_data('Hello World!') end def receive_data(data) $client_received_data = data close_connection end def unbind EM.stop_event_loop end end def test_start_tls $client_handshake_completed, $server_handshake_completed = false, false $client_received_data, $server_received_data = nil, nil EM.run do EM.start_server("127.0.0.1", 16789, TLSServer) EM.connect("127.0.0.1", 16789, TLSClient) end assert($client_handshake_completed) assert($server_handshake_completed) assert($client_received_data == "Hello World!") assert($server_received_data == "Hello World!") end end