diff options
author | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-07-07 07:36:34 +0000 |
---|---|---|
committer | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-07-07 07:36:34 +0000 |
commit | 441546edcfbb1b346c87b69c5f578d1a0e522e06 (patch) | |
tree | 04f606a008baebc445f38944ad37e87468da29ea /ruby_1_8_6/test/drb/drbtest.rb | |
parent | fa93611c0f9a6db146341c792bfe3b7322ec00e2 (diff) |
add tag v1_8_6_269
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_8_6_269@17937 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ruby_1_8_6/test/drb/drbtest.rb')
-rw-r--r-- | ruby_1_8_6/test/drb/drbtest.rb | 351 |
1 files changed, 351 insertions, 0 deletions
diff --git a/ruby_1_8_6/test/drb/drbtest.rb b/ruby_1_8_6/test/drb/drbtest.rb new file mode 100644 index 0000000000..faf6c059d9 --- /dev/null +++ b/ruby_1_8_6/test/drb/drbtest.rb @@ -0,0 +1,351 @@ +require 'test/unit' +require 'drb/drb' +require 'drb/extservm' +require 'timeout' +begin + loadpath = $:.dup + $:.replace($: | [File.expand_path("../ruby", File.dirname(__FILE__))]) + require 'envutil' +ensure + $:.replace(loadpath) +end + +class DRbService + @@manager = DRb::ExtServManager.new + @@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_eval.rb).each do |nm| + add_service_command(nm) + end + @server = @@server = DRb::DRbServer.new(nil, @@manager, {}) + @@manager.uri = @@server.uri + def self.manager + @@manager + end + def self.server + @server || @@server + end + def self.ext_service(name) + timeout(100, RuntimeError) do + manager.service(name) + end + 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 DRbCore + def setup + @ext = DRbService.ext_service('ut_drb.rb') + @there = @ext.front + end + + def teardown + @ext.stop_service if @ext + end + + 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(@there.respond_to?(:to_a, true)) + assert(@there.respond_to?(:eval, true)) + assert(! @there.respond_to?(:eval, false)) + assert(! @there.respond_to?(: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_unknown + obj = @there.unknown_class + assert_kind_of(DRb::DRbUnknown, obj) + assert_equal('Unknown2', obj.name) + + obj = @there.unknown_module + assert_kind_of(DRb::DRbUnknown, obj) + if RUBY_VERSION >= '1.8' + assert_equal('DRbEx::', obj.name) + else + assert_equal('DRbEx', obj.name) + end + + assert_raises(DRb::DRbUnknownError) do + @there.unknown_error + end + + onecky = FailOnecky.new('3') + + assert_raises(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_raises(ArgumentError) do + @there.sum(1, 1, 1, 1, 1, 1, 1, 1, 1) + end + assert_raises(DRb::DRbConnError) do + @there.sum('1' * 4096) + end + end + + def test_04 + assert_respond_to(@there, 'sum') + assert(!(@there.respond_to? "foobar")) + end + + def test_05_eq + a = @there.to_a[0] + b = @there.to_a[0] + assert(a.object_id != b.object_id) + assert(a == b) + assert_equal(a, b) + assert(a == @there) + assert_equal(a.hash, b.hash) + assert_equal(a.hash, @there.hash) + assert(a.eql?(b)) + assert(a.eql?(@there)) + end + + def test_06_timeout + ten = Onecky.new(10) + assert_raises(TimeoutError) do + @there.do_timeout(ten) + end + assert_raises(TimeoutError) do + @there.do_timeout(ten) + end + end + + def test_07_public_private_protected_missing + assert_nothing_raised() { + begin + @there.method_missing(:eval) + rescue NoMethodError + assert_match(/^private method \`eval\'/, $!.message) + end + } + assert_nothing_raised() { + begin + @there.call_private_method + rescue NoMethodError + assert_equal(NoMethodError, $!.class) + assert_match(/^private method \`call_private_method\'/, $!.message) + end + } + assert_nothing_raised() { + begin + @there.call_protected_method + rescue NoMethodError + assert_equal(NoMethodError, $!.class) + assert_match(/^protected method \`call_protected_method\'/, $!.message) + end + } + assert_nothing_raised() { + begin + @there.method_missing(:undefined_method_test) + rescue NoMethodError + assert_equal(NoMethodError, $!.class) + assert_match(/^undefined method \`undefined_method_test\'/, $!.message) + end + } + assert_raises(SecurityError) 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_raises(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 + def setup + @ext = DRbService.ext_service('ut_array.rb') + @there = @ext.front + end + + def teardown + @ext.stop_service if @ext + end + + 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 + + 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 |