diff options
Diffstat (limited to 'test/drb/drbtest.rb')
-rw-r--r-- | test/drb/drbtest.rb | 394 |
1 files changed, 0 insertions, 394 deletions
diff --git a/test/drb/drbtest.rb b/test/drb/drbtest.rb deleted file mode 100644 index acef380ad6..0000000000 --- a/test/drb/drbtest.rb +++ /dev/null @@ -1,394 +0,0 @@ -# frozen_string_literal: false -require 'test/unit' -require 'envutil' -require 'drb/drb' -require 'drb/extservm' -require 'timeout' - -module DRbTests - -class DRbService - @@ruby = [EnvUtil.rubybin] - @@ruby << "-d" if $DEBUG - def self.add_service_command(nm) - dir = File.dirname(File.expand_path(__FILE__)) - DRb::ExtServManager.command[nm] = @@ruby + ["#{dir}/#{nm}"] - end - - %w(ut_drb.rb ut_array.rb ut_port.rb ut_large.rb ut_safe1.rb ut_eq.rb).each do |nm| - add_service_command(nm) - end - - def initialize - @manager = DRb::ExtServManager.new - start - @manager.uri = server.uri - end - - def start - @server = DRb::DRbServer.new('druby://localhost:0', manager, {}) - end - - attr_reader :manager - attr_reader :server - - def ext_service(name) - EnvUtil.timeout(100, RuntimeError) do - manager.service(name) - end - end - - def finish - server.instance_variable_get(:@grp).list.each {|th| th.join } - server.stop_service - manager.instance_variable_get(:@queue)&.push(nil) - manager.instance_variable_get(:@thread)&.join - DRb::DRbConn.stop_pool - end -end - -class Onecky - include DRbUndumped - def initialize(n) - @num = n - end - - def to_i - @num.to_i - end - - def sleep(n) - Kernel.sleep(n) - to_i - end -end - -class FailOnecky < Onecky - class OneckyError < RuntimeError; end - def to_i - raise(OneckyError, @num.to_s) - end -end - -class XArray < Array - def initialize(ary) - ary.each do |x| - self.push(x) - end - end -end - -module DRbBase - def setup - @drb_service ||= DRbService.new - end - - def setup_service(service_name) - @service_name = service_name - @ext = @drb_service.ext_service(@service_name) - @there = @ext.front - end - - def teardown - @ext.stop_service if defined?(@ext) && @ext - if defined?(@service_name) && @service_name - @drb_service.manager.unregist(@service_name) - while (@there&&@there.to_s rescue nil) - # nop - end - signal = /mswin|mingw/ =~ RUBY_PLATFORM ? :KILL : :TERM - Thread.list.each {|th| - if th.respond_to?(:pid) && th[:drb_service] == @service_name - 10.times do - begin - Process.kill signal, th.pid - break - rescue Errno::ESRCH - break - rescue Errno::EPERM # on Windows - sleep 0.1 - retry - end - end - th.join - end - } - end - @drb_service.finish - DRb::DRbConn.stop_pool - end -end - -module DRbCore - include DRbBase - - def test_00_DRbObject - ro = DRbObject.new(nil, 'druby://localhost:12345') - assert_equal('druby://localhost:12345', ro.__drburi) - assert_equal(nil, ro.__drbref) - - ro = DRbObject.new_with_uri('druby://localhost:12345') - assert_equal('druby://localhost:12345', ro.__drburi) - assert_equal(nil, ro.__drbref) - - ro = DRbObject.new_with_uri('druby://localhost:12345?foobar') - assert_equal('druby://localhost:12345', ro.__drburi) - assert_equal(DRb::DRbURIOption.new('foobar'), ro.__drbref) - end - - def test_01 - assert_equal("hello", @there.hello) - onecky = Onecky.new('3') - assert_equal(6, @there.sample(onecky, 1, 2)) - ary = @there.to_a - assert_kind_of(DRb::DRbObject, ary) - - assert_respond_to(@there, [:to_a, true]) - assert_respond_to(@there, [:eval, true]) - assert_not_respond_to(@there, [:eval, false]) - assert_not_respond_to(@there, :eval) - end - - def test_01_02_loop - onecky = Onecky.new('3') - 50.times do - assert_equal(6, @there.sample(onecky, 1, 2)) - ary = @there.to_a - assert_kind_of(DRb::DRbObject, ary) - end - end - - def test_02_basic_object - obj = @there.basic_object - assert_kind_of(DRb::DRbObject, obj) - assert_equal(1, obj.foo) - assert_raise(NoMethodError){obj.prot} - assert_raise(NoMethodError){obj.priv} - end - - def test_02_unknown - obj = @there.unknown_class - assert_kind_of(DRb::DRbUnknown, obj) - assert_equal('DRbTests::Unknown2', obj.name) - - obj = @there.unknown_module - assert_kind_of(DRb::DRbUnknown, obj) - assert_equal('DRbTests::DRbEx::', obj.name) - - assert_raise(DRb::DRbUnknownError) do - @there.unknown_error - end - - onecky = FailOnecky.new('3') - - assert_raise(FailOnecky::OneckyError) do - @there.sample(onecky, 1, 2) - end - end - - def test_03 - assert_equal(8, @there.sum(1, 1, 1, 1, 1, 1, 1, 1)) - assert_raise(DRb::DRbConnError) do - @there.sum(1, 1, 1, 1, 1, 1, 1, 1, 1) - end - assert_raise(DRb::DRbConnError) do - @there.sum('1' * 4096) - end - end - - def test_04 - assert_respond_to(@there, 'sum') - assert_not_respond_to(@there, "foobar") - end - - def test_05_eq - a = @there.to_a[0] - b = @there.to_a[0] - assert_not_same(a, b) - assert_equal(a, b) - assert_equal(a, @there) - assert_equal(a.hash, b.hash) - assert_equal(a.hash, @there.hash) - assert_operator(a, :eql?, b) - assert_operator(a, :eql?, @there) - end - - def test_06_timeout - skip if RUBY_PLATFORM.include?("armv7l-linux") - skip if RUBY_PLATFORM.include?("sparc-solaris2.10") - skip if defined?(RubyVM::JIT) && RubyVM::JIT.enabled? # expecting a certain delay is difficult for --jit-wait CI - Timeout.timeout(60) do - ten = Onecky.new(10) - assert_raise(Timeout::Error) do - @there.do_timeout(ten) - end - assert_raise(Timeout::Error) do - @there.do_timeout(ten) - end - end - end - - def test_07_private_missing - e = assert_raise(NoMethodError) { - @there.method_missing(:eval, 'nil') - } - assert_match(/^private method \`eval\'/, e.message) - - e = assert_raise(NoMethodError) { - @there.call_private_method - } - assert_match(/^private method \`call_private_method\'/, e.message) - end - - def test_07_protected_missing - e = assert_raise(NoMethodError) { - @there.call_protected_method - } - assert_match(/^protected method \`call_protected_method\'/, e.message) - end - - def test_07_public_missing - e = assert_raise(NoMethodError) { - @there.method_missing(:undefined_method_test) - } - assert_match(/^undefined method \`undefined_method_test\'/, e.message) - end - - def test_07_send_missing - assert_raise(DRb::DRbConnError) do - @there.method_missing(:__send__, :to_s) - end - assert_equal(true, @there.missing) - end - - def test_08_here - ro = DRbObject.new(nil, DRb.uri) - assert_kind_of(String, ro.to_s) - - ro = DRbObject.new_with_uri(DRb.uri) - assert_kind_of(String, ro.to_s) - end - - def uri_concat_option(uri, opt) - "#{uri}?#{opt}" - end - - def test_09_option - uri = uri_concat_option(@there.__drburi, "foo") - ro = DRbObject.new_with_uri(uri) - assert_equal(ro.__drburi, @there.__drburi) - assert_equal(3, ro.size) - - uri = uri_concat_option(@there.__drburi, "") - ro = DRbObject.new_with_uri(uri) - assert_equal(ro.__drburi, @there.__drburi) - assert_equal(DRb::DRbURIOption.new(''), ro.__drbref) - - uri = uri_concat_option(@there.__drburi, "hello?world") - ro = DRbObject.new_with_uri(uri) - assert_equal(DRb::DRbURIOption.new('hello?world'), ro.__drbref) - - uri = uri_concat_option(@there.__drburi, "?hello?world") - ro = DRbObject.new_with_uri(uri) - assert_equal(DRb::DRbURIOption.new('?hello?world'), ro.__drbref) - end - - def test_10_yield - @there.simple_hash.each do |k, v| - assert_kind_of(String, k) - assert_kind_of(Symbol, v) - end - end - - def test_10_yield_undumped - @there.xarray2_hash.each do |k, v| - assert_kind_of(String, k) - assert_kind_of(DRbObject, v) - end - end - - def test_11_remote_no_method_error - assert_raise(DRb::DRbRemoteError) do - @there.remote_no_method_error - end - begin - @there.remote_no_method_error - rescue - error = $! - assert_match(/^undefined method .*\(NoMethodError\)/, error.message) - assert_equal('NoMethodError', error.reason) - end - end -end - -module DRbAry - include DRbBase - - def test_01 - assert_kind_of(DRb::DRbObject, @there) - end - - def test_02_collect - ary = @there.collect do |x| x + x end - assert_kind_of(Array, ary) - assert_equal([2, 4, 'IIIIII', 8, 'fivefive', 12], ary) - end - - def test_03_redo - ary = [] - count = 0 - @there.each do |x| - count += 1 - ary.push x - redo if count == 3 - end - assert_equal([1, 2, 'III', 'III', 4, 'five', 6], ary) - end - - # retry in block is not supported on ruby 1.9 - #def test_04_retry - # retried = false - # ary = [] - # @there.each do |x| - # ary.push x - # if x == 4 && !retried - # retried = true - # retry - # end - # end - # assert_equal([1, 2, 'III', 4, 1, 2, 'III', 4, 'five', 6], ary) - #end - - def test_05_break - ary = [] - @there.each do |x| - ary.push x - break if x == 4 - end - assert_equal([1, 2, 'III', 4], ary) - end - - def test_06_next - ary = [] - @there.each do |x| - next if String === x - ary.push x - end - assert_equal([1, 2, 4, 6], ary) - end - - class_eval <<EOS - def test_07_break_18 - ary = [] - result = @there.each do |x| - ary.push x - break(:done) if x == 4 - end - assert_equal([1, 2, 'III', 4], ary) - assert_equal(:done, result) - end -EOS - -end - -end |