1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/test/drb/test_acl.rb
knu 49ce3ca374 Make ACL::ACLEntry not suppress IPAddr::InvalidPrefixError
This is because it would be a user error because a pattern containing
a slash shouldn't be a host name pattern but an IP address pattern.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60249 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-10-21 09:53:52 +00:00

204 lines
5.1 KiB
Ruby

# frozen_string_literal: false
# 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'
module DRbTests
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_operator(a, :match, h)
assert_operator(b, :match, h)
end
end
def test_ip_v6
a = ACL::ACLEntry.new('::ffff:192.0.0.0/104')
assert_not_operator(a, :match, @hosts['localhost'])
assert_operator(a, :match, @hosts['yum'])
assert_operator(a, :match, @hosts['ipv6'])
assert_not_operator(a, :match, @hosts['too'])
end
def test_ip
a = ACL::ACLEntry.new('192.0.0.0/8')
assert_not_operator(a, :match, @hosts['localhost'])
assert_operator(a, :match, @hosts['yum'])
a = ACL::ACLEntry.new('192.168.1.0/255.255.255.0')
assert_not_operator(a, :match, @hosts['localhost'])
assert_operator(a, :match, @hosts['yum'])
assert_operator(a, :match, @hosts['x68k'])
a = ACL::ACLEntry.new('192.168.1.0/24')
assert_not_operator(a, :match, @hosts['localhost'])
assert_operator(a, :match, @hosts['yum'])
assert_operator(a, :match, @hosts['x68k'])
a = ACL::ACLEntry.new('92.0.0.0/8')
assert_not_operator(a, :match, @hosts['localhost'])
assert_not_operator(a, :match, @hosts['yum'])
assert_not_operator(a, :match, @hosts['x68k'])
a = ACL::ACLEntry.new('127.0.0.0/255.0.0.0')
assert_operator(a, :match, @hosts['localhost'])
assert_not_operator(a, :match, @hosts['yum'])
assert_not_operator(a, :match, @hosts['x68k'])
assert_raise(IPAddr::InvalidPrefixError) {
ACL::ACLEntry.new('192.168.0.0/33')
}
end
def test_name
a = ACL::ACLEntry.new('*.jp')
assert_not_operator(a, :match, @hosts['localhost'])
assert_operator(a, :match, @hosts['yum'])
a = ACL::ACLEntry.new('yum.*.jp')
assert_operator(a, :match, @hosts['yum'])
assert_not_operator(a, :match, @hosts['lc630'])
a = ACL::ACLEntry.new('*.macos.or.jp')
assert_operator(a, :match, @hosts['yum'])
assert_operator(a, :match, @hosts['lc630'])
assert_not_operator(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_operator(a, :match, h)
end
end
def test_all_2
a = build(%w(localhost 127.0.0.0/8 yum.* *))
@hostlist.each do |h|
assert_operator(a, :match, h)
end
end
def test_1
a = build(%w(192.168.1.0/255.255.255.252 yum.*.jp))
assert_operator(a, :match, @hosts['x68k'])
assert_operator(a, :match, @hosts['lc630'])
assert_operator(a, :match, @hosts['lib30'])
assert_not_operator(a, :match, @hosts['ns00'])
assert_operator(a, :match, @hosts['yum'])
end
def test_2
a = build(%w(*.linux.or.jp))
assert_not_operator(a, :match, @hosts['yum'])
assert_operator(a, :match, @hosts['x68k'])
assert_not_operator(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_operator(a, :allow_addr?, h)
end
end
def test_not_0
a = ACL.new([], ACL::ALLOW_DENY)
@hostlist.each do |h|
assert_not_operator(a, :allow_addr?, h)
end
end
def test_1
data = %w(deny all
allow localhost
allow x68k.*)
a = ACL.new(data)
assert_operator(a, :allow_addr?, @hosts['x68k'])
assert_operator(a, :allow_addr?, @hosts['localhost'])
assert_not_operator(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_not_operator(a, :allow_addr?, @hosts['x68k'])
assert_operator(a, :allow_addr?, @hosts['localhost'])
assert_not_operator(a, :allow_addr?, @hosts['lc630'])
end
end
end