mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
import drb/runit/*.rb
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4815 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
d6153337f6
commit
bc867112ec
17 changed files with 1279 additions and 0 deletions
|
@ -1,3 +1,7 @@
|
|||
Tue Oct 21 00:22:57 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
|
||||
|
||||
* test/drb/*: import drb/runit.
|
||||
|
||||
Mon Oct 20 23:55:47 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* eval.c (rb_eval): set current node after arguments evaluation.
|
||||
|
|
15
MANIFEST
15
MANIFEST
|
@ -621,6 +621,21 @@ test/csv/bom.csv
|
|||
test/csv/mac.csv
|
||||
test/csv/test_csv.rb
|
||||
test/digest/test_digest.rb
|
||||
test/drb/test_acl.rb
|
||||
test/drb/test_drb.rb
|
||||
test/drb/test_drbssl.rb
|
||||
test/drb/test_drbunix.rb
|
||||
test/drb/ut_array.rb
|
||||
test/drb/ut_array_drbssl.rb
|
||||
test/drb/ut_array_drbunix.rb
|
||||
test/drb/ut_drb.rb
|
||||
test/drb/ut_drb_drbssl.rb
|
||||
test/drb/ut_drb_drbunix.rb
|
||||
test/drb/ut_eval.rb
|
||||
test/drb/ut_large.rb
|
||||
test/drb/ut_port.rb
|
||||
test/drb/ut_safe1.rb
|
||||
test/drb/ut_timerholder.rb
|
||||
test/fileutils/fileasserts.rb
|
||||
test/fileutils/test_fileutils.rb
|
||||
test/fileutils/test_nowrite.rb
|
||||
|
|
195
test/drb/test_acl.rb
Normal file
195
test/drb/test_acl.rb
Normal file
|
@ -0,0 +1,195 @@
|
|||
# acltest.rb - ACL unit test
|
||||
# Copyright (c) 2000 Masatoshi SEKI
|
||||
#
|
||||
# acltest.rb is copyrighted free software by Masatoshi SEKI.
|
||||
# You can redistribute it and/or modify it under the same terms as Ruby.
|
||||
|
||||
require 'test/unit'
|
||||
require 'drb/acl'
|
||||
|
||||
class SampleHosts
|
||||
def initialize
|
||||
list = %w(127.0.0.1 localhost
|
||||
192.168.1.1 x68k.linux.or.jp
|
||||
192.168.1.2 lc630.macos.or.jp
|
||||
192.168.1.3 lib30.win32.or.jp
|
||||
192.168.1.4 ns00.linux.or.jp
|
||||
192.168.1.5 yum.macos.or.jp
|
||||
::ffff:192.168.1.5 ipv6.macos.or.jp
|
||||
::192.168.1.5 too.yumipv6.macos.or.jp
|
||||
192.168.1.254 comstarz.foo.or.jp)
|
||||
|
||||
@hostlist = Array.new(list.size / 2)
|
||||
@hostlist.each_index do |idx|
|
||||
@hostlist[idx] = ["AF_INET", 10000, list[idx * 2 + 1], list[idx * 2]]
|
||||
end
|
||||
|
||||
@hosts = Hash.new
|
||||
@hostlist.each do |h|
|
||||
@hosts[h[2].split('.')[0]] = h
|
||||
end
|
||||
end
|
||||
attr_reader(:hostlist, :hosts)
|
||||
end
|
||||
|
||||
|
||||
class ACLEntryTest < Test::Unit::TestCase
|
||||
HOSTS = SampleHosts.new
|
||||
|
||||
def setup
|
||||
@hostlist = HOSTS.hostlist
|
||||
@hosts = HOSTS.hosts
|
||||
end
|
||||
|
||||
def test_all
|
||||
a = ACL::ACLEntry.new("*")
|
||||
b = ACL::ACLEntry.new("all")
|
||||
@hostlist.each do |h|
|
||||
assert(a.match(h))
|
||||
assert(b.match(h))
|
||||
end
|
||||
end
|
||||
|
||||
def test_ip_v6
|
||||
a = ACL::ACLEntry.new('::ffff:192.0.0.0/104')
|
||||
assert(! a.match(@hosts['localhost']))
|
||||
assert(a.match(@hosts['yum']))
|
||||
assert(a.match(@hosts['ipv6']))
|
||||
assert(! a.match(@hosts['too']))
|
||||
end
|
||||
|
||||
def test_ip
|
||||
a = ACL::ACLEntry.new('192.0.0.0/8')
|
||||
assert(! a.match(@hosts['localhost']))
|
||||
assert(a.match(@hosts['yum']))
|
||||
|
||||
a = ACL::ACLEntry.new('192.168.0.1/255.255.0.255')
|
||||
assert(! a.match(@hosts['localhost']))
|
||||
assert(! a.match(@hosts['yum']))
|
||||
assert(a.match(@hosts['x68k']))
|
||||
|
||||
a = ACL::ACLEntry.new('192.168.1.0/24')
|
||||
assert(! a.match(@hosts['localhost']))
|
||||
assert(a.match(@hosts['yum']))
|
||||
assert(a.match(@hosts['x68k']))
|
||||
|
||||
a = ACL::ACLEntry.new('92.0.0.0/8')
|
||||
assert(! a.match(@hosts['localhost']))
|
||||
assert(! a.match(@hosts['yum']))
|
||||
assert(! a.match(@hosts['x68k']))
|
||||
|
||||
a = ACL::ACLEntry.new('127.0.0.1/255.0.0.255')
|
||||
assert(a.match(@hosts['localhost']))
|
||||
assert(! a.match(@hosts['yum']))
|
||||
assert(! a.match(@hosts['x68k']))
|
||||
end
|
||||
|
||||
def test_name
|
||||
a = ACL::ACLEntry.new('*.jp')
|
||||
assert(! a.match(@hosts['localhost']))
|
||||
assert(a.match(@hosts['yum']))
|
||||
|
||||
a = ACL::ACLEntry.new('yum.*.jp')
|
||||
assert(a.match(@hosts['yum']))
|
||||
assert(! a.match(@hosts['lc630']))
|
||||
|
||||
a = ACL::ACLEntry.new('*.macos.or.jp')
|
||||
assert(a.match(@hosts['yum']))
|
||||
assert(a.match(@hosts['lc630']))
|
||||
assert(! a.match(@hosts['lib30']))
|
||||
end
|
||||
end
|
||||
|
||||
class ACLListTest < Test::Unit::TestCase
|
||||
HOSTS = SampleHosts.new
|
||||
|
||||
def setup
|
||||
@hostlist = HOSTS.hostlist
|
||||
@hosts = HOSTS.hosts
|
||||
end
|
||||
|
||||
private
|
||||
def build(list)
|
||||
acl= ACL::ACLList.new
|
||||
list.each do |s|
|
||||
acl.add s
|
||||
end
|
||||
acl
|
||||
end
|
||||
|
||||
public
|
||||
def test_all_1
|
||||
a = build(%w(all))
|
||||
@hostlist.each do |h|
|
||||
assert(a.match(h))
|
||||
end
|
||||
end
|
||||
|
||||
def test_all_2
|
||||
a = build(%w(localhost 127.0.0.0/8 yum.* *))
|
||||
@hostlist.each do |h|
|
||||
assert(a.match(h))
|
||||
end
|
||||
end
|
||||
|
||||
def test_1
|
||||
a = build(%w(192.0.0.1/255.0.0.255 yum.*.jp))
|
||||
assert(a.match(@hosts['yum']))
|
||||
assert(a.match(@hosts['x68k']))
|
||||
assert(! a.match(@hosts['lc630']))
|
||||
end
|
||||
|
||||
def test_2
|
||||
a = build(%w(*.linux.or.jp))
|
||||
assert(!a.match(@hosts['yum']))
|
||||
assert(a.match(@hosts['x68k']))
|
||||
assert(!a.match(@hosts['lc630']))
|
||||
end
|
||||
end
|
||||
|
||||
class ACLTest < Test::Unit::TestCase
|
||||
HOSTS = SampleHosts.new
|
||||
|
||||
def setup
|
||||
@hostlist = HOSTS.hostlist
|
||||
@hosts = HOSTS.hosts
|
||||
end
|
||||
|
||||
def test_0
|
||||
a = ACL.new
|
||||
@hostlist.each do |h|
|
||||
assert(a.allow_addr?(h))
|
||||
end
|
||||
end
|
||||
|
||||
def test_not_0
|
||||
a = ACL.new([], ACL::ALLOW_DENY)
|
||||
@hostlist.each do |h|
|
||||
assert(! a.allow_addr?(h))
|
||||
end
|
||||
end
|
||||
|
||||
def test_1
|
||||
data = %w(deny all
|
||||
allow localhost
|
||||
allow x68k.*)
|
||||
|
||||
a = ACL.new(data)
|
||||
assert(a.allow_addr?(@hosts['x68k']))
|
||||
assert(a.allow_addr?(@hosts['localhost']))
|
||||
assert(! a.allow_addr?(@hosts['lc630']))
|
||||
end
|
||||
|
||||
def test_not_1
|
||||
data = %w(deny 192.0.0.0/8
|
||||
allow localhost
|
||||
allow x68k.*)
|
||||
|
||||
a = ACL.new(data, ACL::ALLOW_DENY)
|
||||
assert(!a.allow_addr?(@hosts['x68k']))
|
||||
assert(a.allow_addr?(@hosts['localhost']))
|
||||
assert(! a.allow_addr?(@hosts['lc630']))
|
||||
end
|
||||
end
|
||||
|
||||
|
581
test/drb/test_drb.rb
Normal file
581
test/drb/test_drb.rb
Normal file
|
@ -0,0 +1,581 @@
|
|||
require 'rubyunit'
|
||||
require 'runit/cui/testrunner'
|
||||
require 'rbconfig'
|
||||
require 'drb/drb'
|
||||
require 'drb/extservm'
|
||||
require 'timeout'
|
||||
|
||||
class TestService
|
||||
@@scripts = %w(ut_drb.rb ut_array.rb ut_port.rb ut_large.rb ut_safe1.rb ut_eval.rb)
|
||||
|
||||
def initialize(uri=nil, config={})
|
||||
ruby = Config::CONFIG["RUBY_INSTALL_NAME"]
|
||||
@manager = DRb::ExtServManager.new
|
||||
@@scripts.each do |nm|
|
||||
DRb::ExtServManager.command[nm] = "#{ruby} #{nm}"
|
||||
end
|
||||
@server = DRb::DRbServer.new(uri, @manager, config)
|
||||
end
|
||||
attr_reader :manager, :server
|
||||
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
|
||||
|
||||
class DRbCoreTest < RUNIT::TestCase
|
||||
def setup
|
||||
@ext = $manager.service('ut_drb.rb')
|
||||
@there = @ext.front
|
||||
end
|
||||
|
||||
def teardown
|
||||
@ext.stop_service
|
||||
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)
|
||||
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_exception(DRb::DRbUnknownError) do
|
||||
@there.unknown_error
|
||||
end
|
||||
|
||||
onecky = FailOnecky.new('3')
|
||||
|
||||
assert_exception(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_exception(ArgumentError) do
|
||||
@there.sum(1, 1, 1, 1, 1, 1, 1, 1, 1)
|
||||
end
|
||||
assert_exception(DRb::DRbConnError) do
|
||||
@there.sum('1' * 2048)
|
||||
end
|
||||
end
|
||||
|
||||
def test_04
|
||||
assert_respond_to('sum', @there)
|
||||
assert(!(@there.respond_to? "foobar"))
|
||||
end
|
||||
|
||||
def test_05_eq
|
||||
a = @there.to_a[0]
|
||||
b = @there.to_a[0]
|
||||
assert(a.id != b.id)
|
||||
assert(a != b)
|
||||
assert(a.hash != b.hash)
|
||||
assert(! a.eql?(b))
|
||||
require 'drb/eq'
|
||||
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_exception(TimeoutError) do
|
||||
@there.do_timeout(ten)
|
||||
end
|
||||
assert_exception(TimeoutError) do
|
||||
@there.do_timeout(ten)
|
||||
end
|
||||
end
|
||||
|
||||
def test_07_public_private
|
||||
assert_no_exception() {
|
||||
begin
|
||||
@there.method_missing(:eval)
|
||||
rescue NameError
|
||||
assert_match($!.message, /^private method `eval'/)
|
||||
end
|
||||
}
|
||||
assert_no_exception() {
|
||||
begin
|
||||
@there.method_missing(:undefined_method_test)
|
||||
rescue NameError
|
||||
assert_match($!.message, /^undefined method `undefined_method_test'/)
|
||||
end
|
||||
}
|
||||
assert_exception(SecurityError) do
|
||||
@there.method_missing(:__send__, :to_s)
|
||||
end
|
||||
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_undumped
|
||||
@there.xarray2_hash.each do |k, v|
|
||||
assert_kind_of(String, k)
|
||||
assert_kind_of(DRbObject, v)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class DRbYieldTest < RUNIT::TestCase
|
||||
def setup
|
||||
@ext = $manager.service('ut_drb.rb')
|
||||
@there = @ext.front
|
||||
end
|
||||
|
||||
def teardown
|
||||
@ext.stop_service
|
||||
end
|
||||
|
||||
def test_01_one
|
||||
one = nil
|
||||
@there.echo_yield_1([]) {|one|}
|
||||
assert_equal([], one)
|
||||
|
||||
one = nil
|
||||
@there.echo_yield_1(1) {|one|}
|
||||
assert_equal(1, one)
|
||||
|
||||
one = nil
|
||||
@there.echo_yield_1(nil) {|one|}
|
||||
assert_equal(nil, one)
|
||||
end
|
||||
|
||||
def test_02_two
|
||||
one = two = nil
|
||||
@there.echo_yield_2([], []) {|one, two|}
|
||||
assert_equal([], one)
|
||||
assert_equal([], two)
|
||||
|
||||
one = two = nil
|
||||
@there.echo_yield_2(1, 2) {|one, two|}
|
||||
assert_equal(1, one)
|
||||
assert_equal(2, two)
|
||||
|
||||
one = two = nil
|
||||
@there.echo_yield_2(3, nil) {|one, two|}
|
||||
assert_equal(3, one)
|
||||
assert_equal(nil, two)
|
||||
end
|
||||
|
||||
def test_03_many
|
||||
s = nil
|
||||
@there.echo_yield_0 {|*s|}
|
||||
assert_equal([], s)
|
||||
@there.echo_yield(nil) {|*s|}
|
||||
assert_equal([nil], s)
|
||||
@there.echo_yield(1) {|*s|}
|
||||
assert_equal([1], s)
|
||||
@there.echo_yield(1, 2) {|*s|}
|
||||
assert_equal([1, 2], s)
|
||||
@there.echo_yield(1, 2, 3) {|*s|}
|
||||
assert_equal([1, 2, 3], s)
|
||||
@there.echo_yield([], []) {|*s|}
|
||||
assert_equal([[], []], s)
|
||||
@there.echo_yield([]) {|*s|}
|
||||
if RUBY_VERSION >= '1.8'
|
||||
assert_equal([[]], s) # !
|
||||
else
|
||||
assert_equal([], s) # !
|
||||
end
|
||||
end
|
||||
|
||||
def test_04_many_to_one
|
||||
s = nil
|
||||
@there.echo_yield_0 {|s|}
|
||||
assert_equal(nil, s)
|
||||
@there.echo_yield(nil) {|s|}
|
||||
assert_equal(nil, s)
|
||||
@there.echo_yield(1) {|s|}
|
||||
assert_equal(1, s)
|
||||
@there.echo_yield(1, 2) {|s|}
|
||||
assert_equal([1, 2], s)
|
||||
@there.echo_yield(1, 2, 3) {|s|}
|
||||
assert_equal([1, 2, 3], s)
|
||||
@there.echo_yield([], []) {|s|}
|
||||
assert_equal([[], []], s)
|
||||
@there.echo_yield([]) {|s|}
|
||||
assert_equal([], s)
|
||||
end
|
||||
|
||||
def test_05_array_subclass
|
||||
@there.xarray_each {|x| assert_kind_of(XArray, x)}
|
||||
if RUBY_VERSION >= '1.8'
|
||||
@there.xarray_each {|*x| assert_kind_of(XArray, x[0])}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class RubyYieldTest < DRbYieldTest
|
||||
def echo_yield(*arg)
|
||||
yield(*arg)
|
||||
end
|
||||
|
||||
def echo_yield_0
|
||||
yield
|
||||
end
|
||||
|
||||
def echo_yield_1(a)
|
||||
yield(a)
|
||||
end
|
||||
|
||||
def echo_yield_2(a, b)
|
||||
yield(a, b)
|
||||
end
|
||||
|
||||
def xarray_each
|
||||
xary = [XArray.new([0])]
|
||||
xary.each do |x|
|
||||
yield(x)
|
||||
end
|
||||
end
|
||||
|
||||
def setup
|
||||
@there = self
|
||||
end
|
||||
|
||||
def teardown
|
||||
end
|
||||
end
|
||||
|
||||
class Ruby18YieldTest < RubyYieldTest
|
||||
class YieldTest18
|
||||
def echo_yield(*arg, &proc)
|
||||
proc.call(*arg)
|
||||
end
|
||||
|
||||
def echo_yield_0(&proc)
|
||||
proc.call
|
||||
end
|
||||
|
||||
def echo_yield_1(a, &proc)
|
||||
proc.call(a)
|
||||
end
|
||||
|
||||
def echo_yield_2(a, b, &proc)
|
||||
proc.call(a, b)
|
||||
end
|
||||
|
||||
def xarray_each(&proc)
|
||||
xary = [XArray.new([0])]
|
||||
xary.each(&proc)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def setup
|
||||
@there = YieldTest18.new
|
||||
end
|
||||
end
|
||||
|
||||
class DRbAryTest < RUNIT::TestCase
|
||||
def setup
|
||||
@ext = $manager.service('ut_array.rb')
|
||||
@there = @ext.front
|
||||
end
|
||||
|
||||
def teardown
|
||||
@ext.stop_service
|
||||
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
|
||||
|
||||
if RUBY_VERSION >= '1.8'
|
||||
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
|
||||
|
||||
class DRbMServerTest < RUNIT::TestCase
|
||||
def setup
|
||||
@ext = $manager.service('ut_drb.rb')
|
||||
@there = @ext.front
|
||||
@server = (1..3).collect do |n|
|
||||
DRb::DRbServer.new(nil, Onecky.new(n.to_s))
|
||||
end
|
||||
end
|
||||
|
||||
def teardown
|
||||
@server.each do |s|
|
||||
s.stop_service
|
||||
end
|
||||
@ext.stop_service
|
||||
end
|
||||
|
||||
def test_01
|
||||
assert_equal(6, @there.sample(@server[0].front, @server[1].front, @server[2].front))
|
||||
end
|
||||
end
|
||||
|
||||
class DRbReusePortTest < DRbAryTest
|
||||
def setup
|
||||
sleep 1
|
||||
@ext = $manager.service('ut_port.rb')
|
||||
@there = @ext.front
|
||||
end
|
||||
end
|
||||
|
||||
class DRbSafe1Test < DRbAryTest
|
||||
def setup
|
||||
sleep 1
|
||||
@ext = $manager.service('ut_safe1.rb')
|
||||
@there = @ext.front
|
||||
end
|
||||
end
|
||||
|
||||
class DRbEvalTest < RUNIT::TestCase
|
||||
def setup
|
||||
super
|
||||
sleep 1
|
||||
@ext = $manager.service('ut_eval.rb')
|
||||
@there = @ext.front
|
||||
end
|
||||
|
||||
def teardown
|
||||
@ext.stop_service
|
||||
end
|
||||
|
||||
def test_01_safe1_eval
|
||||
assert_exception(SecurityError) do
|
||||
@there.method_missing(:instance_eval, 'ENV.inspect')
|
||||
end
|
||||
|
||||
assert_exception(SecurityError) do
|
||||
@there.method_missing(:send, :eval, 'ENV.inspect')
|
||||
end
|
||||
|
||||
remote_class = @there.remote_class
|
||||
|
||||
assert_exception(SecurityError) do
|
||||
remote_class.class_eval('ENV.inspect')
|
||||
end
|
||||
|
||||
assert_exception(SecurityError) do
|
||||
remote_class.module_eval('ENV.inspect')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class DRbLargeTest < RUNIT::TestCase
|
||||
def setup
|
||||
sleep 1
|
||||
@ext = $manager.service('ut_large.rb')
|
||||
@there = @ext.front
|
||||
end
|
||||
|
||||
def teardown
|
||||
@ext.stop_service
|
||||
end
|
||||
|
||||
def test_01_large_ary
|
||||
ary = [2] * 10240
|
||||
assert_equal(10240, @there.size(ary))
|
||||
assert_equal(20480, @there.sum(ary))
|
||||
end
|
||||
|
||||
def test_02_large_ary
|
||||
ary = ["Hello, World"] * 10240
|
||||
assert_equal(10240, @there.size(ary))
|
||||
end
|
||||
|
||||
def test_03_large_ary
|
||||
ary = [Thread.current] * 10240
|
||||
assert_equal(10240, @there.size(ary))
|
||||
end
|
||||
|
||||
def test_04_many_arg
|
||||
assert_exception(ArgumentError) {
|
||||
@there.arg_test(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
|
||||
}
|
||||
end
|
||||
|
||||
def test_05_too_large_ary
|
||||
ary = ["Hello, World"] * 102400
|
||||
exception = nil
|
||||
begin
|
||||
@there.size(ary)
|
||||
rescue StandardError
|
||||
exception = $!
|
||||
end
|
||||
assert_kind_of(StandardError, exception)
|
||||
end
|
||||
end
|
||||
|
||||
if __FILE__ == $0
|
||||
$testservice = TestService.new
|
||||
$manager = $testservice.manager
|
||||
|
||||
RUNIT::CUI::TestRunner.run(DRbCoreTest.suite)
|
||||
RUNIT::CUI::TestRunner.run(DRbEvalTest.suite)
|
||||
RUNIT::CUI::TestRunner.run(RubyYieldTest.suite)
|
||||
if RUBY_VERSION >= '1.8'
|
||||
RUNIT::CUI::TestRunner.run(Ruby18YieldTest.suite)
|
||||
end
|
||||
RUNIT::CUI::TestRunner.run(DRbYieldTest.suite)
|
||||
RUNIT::CUI::TestRunner.run(DRbAryTest.suite)
|
||||
RUNIT::CUI::TestRunner.run(DRbMServerTest.suite)
|
||||
RUNIT::CUI::TestRunner.run(DRbSafe1Test.suite)
|
||||
RUNIT::CUI::TestRunner.run(DRbReusePortTest.suite)
|
||||
RUNIT::CUI::TestRunner.run(DRbLargeTest.suite)
|
||||
end
|
||||
|
66
test/drb/test_drbssl.rb
Normal file
66
test/drb/test_drbssl.rb
Normal file
|
@ -0,0 +1,66 @@
|
|||
require 'test_drb'
|
||||
require 'drb/ssl'
|
||||
|
||||
class TestService
|
||||
@@scripts = %w(ut_drb_drbssl.rb ut_array_drbssl.rb)
|
||||
end
|
||||
|
||||
class DRbXCoreTest < DRbCoreTest
|
||||
def setup
|
||||
@ext = $manager.service('ut_drb_drbssl.rb')
|
||||
@there = @ext.front
|
||||
end
|
||||
|
||||
def test_02_unknown
|
||||
end
|
||||
|
||||
def test_01_02_loop
|
||||
end
|
||||
|
||||
def test_05_eq
|
||||
end
|
||||
|
||||
def test_06_timeout
|
||||
ten = Onecky.new(3)
|
||||
assert_exception(TimeoutError) do
|
||||
@there.do_timeout(ten)
|
||||
end
|
||||
assert_exception(TimeoutError) do
|
||||
@there.do_timeout(ten)
|
||||
end
|
||||
sleep 3
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class DRbXAryTest < DRbAryTest
|
||||
def setup
|
||||
@ext = $manager.service('ut_array_drbssl.rb')
|
||||
@there = @ext.front
|
||||
end
|
||||
end
|
||||
|
||||
if __FILE__ == $0
|
||||
config = Hash.new
|
||||
|
||||
config[:SSLVerifyMode] = OpenSSL::SSL::VERIFY_PEER
|
||||
config[:SSLVerifyCallback] = lambda{ |ok,x509_store|
|
||||
true
|
||||
}
|
||||
begin
|
||||
data = open("sample.key"){|io| io.read }
|
||||
config[:SSLPrivateKey] = OpenSSL::PKey::RSA.new(data)
|
||||
data = open("sample.crt"){|io| io.read }
|
||||
config[:SSLCertificate] = OpenSSL::X509::Certificate.new(data)
|
||||
rescue
|
||||
$stderr.puts "Switching to use self-signed certificate"
|
||||
config[:SSLCertName] =
|
||||
[ ["C","JP"], ["O","Foo.DRuby.Org"], ["CN", "Sample"] ]
|
||||
end
|
||||
|
||||
$testservice = TestService.new(ARGV.shift || 'drbssl://:0', config)
|
||||
$manager = $testservice.manager
|
||||
RUNIT::CUI::TestRunner.run(DRbXCoreTest.suite)
|
||||
RUNIT::CUI::TestRunner.run(DRbXAryTest.suite)
|
||||
# exit!
|
||||
end
|
46
test/drb/test_drbunix.rb
Normal file
46
test/drb/test_drbunix.rb
Normal file
|
@ -0,0 +1,46 @@
|
|||
require 'test_drb'
|
||||
|
||||
class TestService
|
||||
@@scripts = %w(ut_drb_drbunix.rb ut_array_drbunix.rb)
|
||||
end
|
||||
|
||||
class DRbXCoreTest < DRbCoreTest
|
||||
def setup
|
||||
@ext = $manager.service('ut_drb_drbunix.rb')
|
||||
@there = @ext.front
|
||||
end
|
||||
|
||||
def test_02_unknown
|
||||
end
|
||||
|
||||
def test_01_02_loop
|
||||
end
|
||||
|
||||
def test_05_eq
|
||||
end
|
||||
|
||||
def test_06_timeout
|
||||
ten = Onecky.new(3)
|
||||
assert_exception(TimeoutError) do
|
||||
@there.do_timeout(ten)
|
||||
end
|
||||
assert_exception(TimeoutError) do
|
||||
@there.do_timeout(ten)
|
||||
end
|
||||
sleep 3
|
||||
end
|
||||
end
|
||||
|
||||
class DRbXAryTest < DRbAryTest
|
||||
def setup
|
||||
@ext = $manager.service('ut_array_drbunix.rb')
|
||||
@there = @ext.front
|
||||
end
|
||||
end
|
||||
|
||||
if __FILE__ == $0
|
||||
$testservice = TestService.new(ARGV.shift || 'drbunix:')
|
||||
$manager = $testservice.manager
|
||||
RUNIT::CUI::TestRunner.run(DRbXCoreTest.suite)
|
||||
RUNIT::CUI::TestRunner.run(DRbXAryTest.suite)
|
||||
end
|
15
test/drb/ut_array.rb
Normal file
15
test/drb/ut_array.rb
Normal file
|
@ -0,0 +1,15 @@
|
|||
require 'drb/drb'
|
||||
require 'drb/extserv'
|
||||
|
||||
if __FILE__ == $0
|
||||
def ARGV.shift
|
||||
it = super()
|
||||
raise "usage: #{$0} <uri> <name>" unless it
|
||||
it
|
||||
end
|
||||
|
||||
DRb.start_service(nil, [1, 2, 'III', 4, "five", 6])
|
||||
es = DRb::ExtServ.new(ARGV.shift, ARGV.shift)
|
||||
DRb.thread.join
|
||||
end
|
||||
|
24
test/drb/ut_array_drbssl.rb
Normal file
24
test/drb/ut_array_drbssl.rb
Normal file
|
@ -0,0 +1,24 @@
|
|||
require 'drb/drb'
|
||||
require 'drb/extserv'
|
||||
require 'drb/ssl'
|
||||
|
||||
if __FILE__ == $0
|
||||
def ARGV.shift
|
||||
it = super()
|
||||
raise "usage: #{$0} <uri> <name>" unless it
|
||||
it
|
||||
end
|
||||
|
||||
config = Hash.new
|
||||
config[:SSLVerifyMode] = OpenSSL::SSL::VERIFY_PEER
|
||||
config[:SSLVerifyCallback] = lambda{|ok,x509_store|
|
||||
true
|
||||
}
|
||||
config[:SSLCertName] =
|
||||
[ ["C","JP"], ["O","Foo.DRuby.Org"], ["CN", "Sample"] ]
|
||||
|
||||
DRb.start_service('drbssl://:0', [1, 2, 'III', 4, "five", 6], config)
|
||||
es = DRb::ExtServ.new(ARGV.shift, ARGV.shift)
|
||||
DRb.thread.join
|
||||
end
|
||||
|
15
test/drb/ut_array_drbunix.rb
Normal file
15
test/drb/ut_array_drbunix.rb
Normal file
|
@ -0,0 +1,15 @@
|
|||
require 'drb/drb'
|
||||
require 'drb/extserv'
|
||||
|
||||
if __FILE__ == $0
|
||||
def ARGV.shift
|
||||
it = super()
|
||||
raise "usage: #{$0} <uri> <name>" unless it
|
||||
it
|
||||
end
|
||||
|
||||
DRb.start_service('drbunix:', [1, 2, 'III', 4, "five", 6])
|
||||
es = DRb::ExtServ.new(ARGV.shift, ARGV.shift)
|
||||
DRb.thread.join
|
||||
end
|
||||
|
137
test/drb/ut_drb.rb
Normal file
137
test/drb/ut_drb.rb
Normal file
|
@ -0,0 +1,137 @@
|
|||
require 'drb/drb'
|
||||
require 'drb/extserv'
|
||||
require 'timeout'
|
||||
|
||||
class XArray < Array
|
||||
def initialize(ary)
|
||||
ary.each do |x|
|
||||
self.push(x)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class XArray2 < XArray
|
||||
include DRbUndumped
|
||||
end
|
||||
|
||||
class Unknown2
|
||||
def initialize
|
||||
@foo = 'unknown2'
|
||||
end
|
||||
end
|
||||
|
||||
class DRbEx
|
||||
include DRbUndumped
|
||||
|
||||
class FooBar
|
||||
def initialize
|
||||
@foo = 'bar'
|
||||
end
|
||||
end
|
||||
|
||||
class UError < RuntimeError; end
|
||||
|
||||
def initialize
|
||||
@hello = 'hello'
|
||||
end
|
||||
attr_reader :hello
|
||||
|
||||
def sample(a, b, c)
|
||||
a.to_i + b.to_i + c.to_i
|
||||
end
|
||||
|
||||
def sum(*a)
|
||||
s = 0
|
||||
a.each do |e|
|
||||
s += e.to_i
|
||||
end
|
||||
s
|
||||
end
|
||||
|
||||
def do_timeout(n)
|
||||
timeout(1) do
|
||||
n.sleep(2)
|
||||
end
|
||||
end
|
||||
|
||||
def unknown_module
|
||||
FooBar.new
|
||||
end
|
||||
|
||||
def unknown_class
|
||||
Unknown2.new
|
||||
end
|
||||
|
||||
def unknown_error
|
||||
raise UError
|
||||
end
|
||||
|
||||
def test_yield
|
||||
yield
|
||||
yield([])
|
||||
yield(*[])
|
||||
end
|
||||
|
||||
def echo_yield(*arg)
|
||||
yield(*arg)
|
||||
nil
|
||||
end
|
||||
|
||||
def echo_yield_0
|
||||
yield
|
||||
nil
|
||||
end
|
||||
|
||||
def echo_yield_1(one)
|
||||
yield(one)
|
||||
nil
|
||||
end
|
||||
|
||||
def echo_yield_2(one, two)
|
||||
yield(one, two)
|
||||
nil
|
||||
end
|
||||
|
||||
def xarray_each
|
||||
xary = [XArray.new([0])]
|
||||
xary.each do |x|
|
||||
yield(x)
|
||||
end
|
||||
nil
|
||||
end
|
||||
|
||||
def xarray2_hash
|
||||
unless @xary2_hash
|
||||
@xary2_hash = { "a" => XArray2.new([0]), "b" => XArray2.new([1]) }
|
||||
end
|
||||
DRbObject.new(@xary2_hash)
|
||||
end
|
||||
|
||||
def [](key)
|
||||
key.to_s
|
||||
end
|
||||
|
||||
def to_a
|
||||
[self]
|
||||
end
|
||||
|
||||
private
|
||||
def call_private_method
|
||||
true
|
||||
end
|
||||
end
|
||||
|
||||
if __FILE__ == $0
|
||||
def ARGV.shift
|
||||
it = super()
|
||||
raise "usage: #{$0} <manager-uri> <name>" unless it
|
||||
it
|
||||
end
|
||||
|
||||
DRb::DRbServer.default_argc_limit(8)
|
||||
DRb::DRbServer.default_load_limit(2048)
|
||||
DRb.start_service(nil, DRbEx.new)
|
||||
es = DRb::ExtServ.new(ARGV.shift, ARGV.shift)
|
||||
DRb.thread.join
|
||||
end
|
||||
|
25
test/drb/ut_drb_drbssl.rb
Normal file
25
test/drb/ut_drb_drbssl.rb
Normal file
|
@ -0,0 +1,25 @@
|
|||
require 'ut_drb'
|
||||
require 'drb/ssl'
|
||||
|
||||
if __FILE__ == $0
|
||||
def ARGV.shift
|
||||
it = super()
|
||||
raise "usage: #{$0} <manager-uri> <name>" unless it
|
||||
it
|
||||
end
|
||||
|
||||
config = Hash.new
|
||||
config[:SSLVerifyMode] = OpenSSL::SSL::VERIFY_PEER
|
||||
config[:SSLVerifyCallback] = lambda{|ok,x509_store|
|
||||
true
|
||||
}
|
||||
config[:SSLCertName] =
|
||||
[ ["C","JP"], ["O","Foo.DRuby.Org"], ["CN", "Sample"] ]
|
||||
|
||||
DRb::DRbServer.default_argc_limit(8)
|
||||
DRb::DRbServer.default_load_limit(1024)
|
||||
DRb.start_service('drbssl://:0', DRbEx.new, config)
|
||||
es = DRb::ExtServ.new(ARGV.shift, ARGV.shift)
|
||||
DRb.thread.join
|
||||
end
|
||||
|
16
test/drb/ut_drb_drbunix.rb
Normal file
16
test/drb/ut_drb_drbunix.rb
Normal file
|
@ -0,0 +1,16 @@
|
|||
require 'ut_drb'
|
||||
|
||||
if __FILE__ == $0
|
||||
def ARGV.shift
|
||||
it = super()
|
||||
raise "usage: #{$0} <manager-uri> <name>" unless it
|
||||
it
|
||||
end
|
||||
|
||||
DRb::DRbServer.default_argc_limit(8)
|
||||
DRb::DRbServer.default_load_limit(1024)
|
||||
DRb.start_service('drbunix:', DRbEx.new)
|
||||
es = DRb::ExtServ.new(ARGV.shift, ARGV.shift)
|
||||
DRb.thread.join
|
||||
end
|
||||
|
23
test/drb/ut_eval.rb
Normal file
23
test/drb/ut_eval.rb
Normal file
|
@ -0,0 +1,23 @@
|
|||
require 'drb/drb'
|
||||
require 'drb/extserv'
|
||||
|
||||
class EvalAttack
|
||||
def remote_class
|
||||
DRbObject.new(self.class)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
if __FILE__ == $0
|
||||
def ARGV.shift
|
||||
it = super()
|
||||
raise "usage: #{$0} <uri> <name>" unless it
|
||||
it
|
||||
end
|
||||
|
||||
$SAFE = 1
|
||||
|
||||
DRb.start_service(nil, EvalAttack.new)
|
||||
es = DRb::ExtServ.new(ARGV.shift, ARGV.shift)
|
||||
DRb.thread.join
|
||||
end
|
38
test/drb/ut_large.rb
Normal file
38
test/drb/ut_large.rb
Normal file
|
@ -0,0 +1,38 @@
|
|||
require 'drb/drb'
|
||||
require 'drb/extserv'
|
||||
require 'timeout'
|
||||
|
||||
class DRbLarge
|
||||
include DRbUndumped
|
||||
|
||||
def size(ary)
|
||||
ary.size
|
||||
end
|
||||
|
||||
def sum(ary)
|
||||
sum = 0
|
||||
ary.each do |e|
|
||||
sum += e.to_i
|
||||
end
|
||||
sum
|
||||
end
|
||||
|
||||
def arg_test(*arg)
|
||||
# nop
|
||||
end
|
||||
end
|
||||
|
||||
if __FILE__ == $0
|
||||
def ARGV.shift
|
||||
it = super()
|
||||
raise "usage: #{$0} <manager-uri> <name>" unless it
|
||||
it
|
||||
end
|
||||
|
||||
DRb::DRbServer.default_argc_limit(3)
|
||||
DRb::DRbServer.default_load_limit(100000)
|
||||
DRb.start_service(nil, DRbLarge.new)
|
||||
es = DRb::ExtServ.new(ARGV.shift, ARGV.shift)
|
||||
DRb.thread.join
|
||||
end
|
||||
|
14
test/drb/ut_port.rb
Normal file
14
test/drb/ut_port.rb
Normal file
|
@ -0,0 +1,14 @@
|
|||
require 'drb/drb'
|
||||
require 'drb/extserv'
|
||||
|
||||
if __FILE__ == $0
|
||||
def ARGV.shift
|
||||
it = super()
|
||||
raise "usage: #{$0} <uri> <name>" unless it
|
||||
it
|
||||
end
|
||||
|
||||
DRb.start_service('druby://:8473', [1, 2, 'III', 4, "five", 6])
|
||||
es = DRb::ExtServ.new(ARGV.shift, ARGV.shift)
|
||||
DRb.thread.join
|
||||
end
|
16
test/drb/ut_safe1.rb
Normal file
16
test/drb/ut_safe1.rb
Normal file
|
@ -0,0 +1,16 @@
|
|||
require 'drb/drb'
|
||||
require 'drb/extserv'
|
||||
|
||||
if __FILE__ == $0
|
||||
def ARGV.shift
|
||||
it = super()
|
||||
raise "usage: #{$0} <uri> <name>" unless it
|
||||
it
|
||||
end
|
||||
|
||||
$SAFE = 1
|
||||
|
||||
DRb.start_service(nil, [1, 2, 'III', 4, "five", 6])
|
||||
es = DRb::ExtServ.new(ARGV.shift, ARGV.shift)
|
||||
DRb.thread.join
|
||||
end
|
49
test/drb/ut_timerholder.rb
Normal file
49
test/drb/ut_timerholder.rb
Normal file
|
@ -0,0 +1,49 @@
|
|||
require 'runit/testcase'
|
||||
require 'runit/cui/testrunner'
|
||||
require 'timerholder'
|
||||
|
||||
class TimerHolderTest < RUNIT::TestCase
|
||||
def do_test(timeout, keeper_sleep = nil)
|
||||
holder = TimerHolder.new(timeout)
|
||||
holder.keeper_sleep = keeper_sleep if keeper_sleep
|
||||
key = holder.add(self)
|
||||
sleep(timeout * 0.5)
|
||||
assert_equal(holder.peek(key), self)
|
||||
holder.delete(key)
|
||||
assert(!holder.include?(key))
|
||||
key = holder.add(self)
|
||||
sleep(timeout+0.5)
|
||||
assert_equal(holder.fetch(key), nil)
|
||||
key = holder.add(self)
|
||||
assert_equal(holder.fetch(key), self)
|
||||
holder.store(key, true)
|
||||
assert_equal(holder.fetch(key), true)
|
||||
assert_equal(holder.include?(key), true)
|
||||
sleep(timeout+0.5)
|
||||
assert_exception(TimerHolder::InvalidIndexError) do
|
||||
holder.store(key, 1)
|
||||
end
|
||||
assert_equal(holder.include?(key), false)
|
||||
key = holder.add(self)
|
||||
sleep(timeout * 0.5)
|
||||
assert(holder.include?(key))
|
||||
holder.extend(key, timeout)
|
||||
sleep(timeout * 0.5)
|
||||
assert(holder.include?(key))
|
||||
sleep(timeout * 0.6)
|
||||
assert(!holder.include?(key))
|
||||
holder.delete(key)
|
||||
end
|
||||
|
||||
def test_00
|
||||
do_test(0.5)
|
||||
end
|
||||
|
||||
def test_01
|
||||
do_test(1, 0.5)
|
||||
end
|
||||
end
|
||||
|
||||
if __FILE__ == $0
|
||||
RUNIT::CUI::TestRunner.run(TimerHolderTest.suite)
|
||||
end
|
Loading…
Add table
Reference in a new issue