Project

General

Profile

Download (11.5 KB) Statistics
| Branch: | Tag: | Revision:
require 'test_helper'
require 'dns_common/dns_common'

class DnsRecordTest < Test::Unit::TestCase
def setup
@record = Proxy::Dns::Record.new
end

def test_get_name_with_sideeffect_for_ipv4
@record.expects(:get_resource_as_string!).with('2.0.13.127.in-addr.arpa', Resolv::DNS::Resource::IN::PTR, :name).returns('not_existing.example.com')
assert 'not_existing.example.com', @record.get_name!('2.0.13.127.in-addr.arpa')
end

def test_get_name_with_sideeffect_for_ipv6
@record.expects(:get_resource_as_string!).with('1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.f.e.e.d.8.b.d.0.1.0.0.2.ip6.arpa', Resolv::DNS::Resource::IN::PTR, :name).returns('not_existing.example.com')
assert 'not_existing.example.com', @record.get_name!('1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.f.e.e.d.8.b.d.0.1.0.0.2.ip6.arpa')
end

def test_get_name_for_ipv4
@record.expects(:get_resource_as_string).with('2.0.13.127.in-addr.arpa', Resolv::DNS::Resource::IN::PTR, :name).returns('not_existing.example.com')
assert 'not_existing.example.com', @record.get_name('2.0.13.127.in-addr.arpa')
end

def test_get_name_for_ipv6
@record.expects(:get_resource_as_string).with('1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.f.e.e.d.8.b.d.0.1.0.0.2.ip6.arpa', Resolv::DNS::Resource::IN::PTR, :name).returns('not_existing.example.com')
assert 'not_existing.example.com', @record.get_name('1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.f.e.e.d.8.b.d.0.1.0.0.2.ip6.arpa')
end

def test_get_ipv4_address_with_sideeffects
@record.expects(:get_resource_as_string!).with('some.host', Resolv::DNS::Resource::IN::A, :address).returns('127.13.0.2')
assert '127.13.0.2', @record.get_ipv4_address!('some.host')
end

def test_get_ipv4_address
@record.expects(:get_resource_as_string).with('some.host', Resolv::DNS::Resource::IN::A, :address).returns('127.13.0.2')
assert '127.13.0.2', @record.get_ipv4_address('some.host')
end

def test_get_ipv6_address_with_sideeffects
@record.expects(:get_resource_as_string!).with('some.host', Resolv::DNS::Resource::IN::AAAA, :address).returns('2A00:1450:400C:C04::6A')
assert '2A00:1450:400C:C04::6A', @record.get_ipv6_address!('some.host')
end

def test_get_ipv6_address
@record.expects(:get_resource_as_string).with('some.host', Resolv::DNS::Resource::IN::AAAA, :address).returns('2A00:1450:400C:C04::6A')
assert '2A00:1450:400C:C04::6A', @record.get_ipv6_address('some.host')
end

def test_get_resource_as_string_with_sideeffects
Resolv::DNS.any_instance.expects(:getresource).with('some.host', Resolv::DNS::Resource::IN::A).returns(Resolv::DNS::Resource::IN::A.new('127.13.0.2'))
assert_equal '127.13.0.2', @record.get_resource_as_string!('some.host', Resolv::DNS::Resource::IN::A, :address)
end

def test_get_resource_as_string_with_sideeffects_raises_exception_when_resource_is_not_found
Resolv::DNS.any_instance.expects(:getresource).with('some.host', Resolv::DNS::Resource::IN::A).raises(Resolv::ResolvError)
assert_raises(Proxy::Dns::NotFound) { @record.get_resource_as_string!('some.host', Resolv::DNS::Resource::IN::A, :address) }
end

def test_get_resource_as_string
Resolv::DNS.any_instance.expects(:getresource).with('some.host', Resolv::DNS::Resource::IN::A).returns(Resolv::DNS::Resource::IN::A.new('127.13.0.2'))
assert_equal '127.13.0.2', @record.get_resource_as_string('some.host', Resolv::DNS::Resource::IN::A, :address)
end

def test_get_resource_as_string_wjen_resource_is_not_found
Resolv::DNS.any_instance.expects(:getresource).with('some.host', Resolv::DNS::Resource::IN::A).raises(Resolv::ResolvError)
assert_false @record.get_resource_as_string('some.host', Resolv::DNS::Resource::IN::A, :address)
end

def test_ptr_to_ip_ipv4
assert_equal('192.168.33.30', Proxy::Dns::Record.new.ptr_to_ip('30.33.168.192.in-addr.arpa'))
end

def test_ptr_to_ip_ipv6
assert_equal('2001:0db8:deef:0000:0000:0000:0000:0001', Proxy::Dns::Record.new.ptr_to_ip('1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.f.e.e.d.8.b.d.0.1.0.0.2.ip6.arpa'))
end

def test_ptr_to_ip_without_record_exception
assert_raise Proxy::Dns::Error do
Proxy::Dns::Record.new.ptr_to_ip('host.example.com')
end
end

def test_a_record_conflicts_no_conflict
Resolv::DNS.any_instance.expects(:getresources).with('some.host', Resolv::DNS::Resource::IN::A).returns([])
assert_equal -1, Proxy::Dns::Record.new.a_record_conflicts('some.host', '192.168.33.33')
end

def test_a_record_conflicts_has_conflict
Resolv::DNS.any_instance.expects(:getresources).with('some.host', Resolv::DNS::Resource::IN::A).returns(ips('192.168.33.34', '192.168.33.33'))
assert_equal 1, Proxy::Dns::Record.new.a_record_conflicts('some.host', '192.168.11.11')
end

def test_a_record_conflicts_but_nothing_todo
Resolv::DNS.any_instance.expects(:getresources).with('some.host', Resolv::DNS::Resource::IN::A).returns(ips('192.168.33.33'))
assert_equal 0, Proxy::Dns::Record.new.a_record_conflicts('some.host', '192.168.33.33')
end

def test_aaaa_record_conflicts_no_conflict
Resolv::DNS.any_instance.expects(:getresources).with('some.host', Resolv::DNS::Resource::IN::AAAA).returns([])
assert_equal -1, Proxy::Dns::Record.new.aaaa_record_conflicts('some.host', '2001:DB8:DEEF::1')
end

def test_aaaa_record_conflicts_has_conflict
Resolv::DNS.any_instance.expects(:getresources).with('some.host', Resolv::DNS::Resource::IN::AAAA).returns(ips('2001:DB8:DEEF::1'))
assert_equal 1, Proxy::Dns::Record.new.aaaa_record_conflicts('some.host', '2001:DB8:ABCD::1')
end

def test_aaaa_record_conflicts_but_nothing_todo
Resolv::DNS.any_instance.expects(:getresources).with('some.host', Resolv::DNS::Resource::IN::AAAA).returns(ips('2001:DB8:DEEF::1'))
assert_equal 0, Proxy::Dns::Record.new.aaaa_record_conflicts('some.host', '2001:DB8:DEEF::1')
end

def test_ptr_record_conflicts_no_conflict
Resolv::DNS.any_instance.expects(:getresources).with('33.33.168.192.in-addr.arpa', Resolv::DNS::Resource::IN::PTR).returns([])
assert_equal -1, Proxy::Dns::Record.new.ptr_record_conflicts('some.host', '33.33.168.192.in-addr.arpa')
end

def test_ptr_record_conflicts_has_conflict
Resolv::DNS.any_instance.expects(:getresources).with('33.33.168.192.in-addr.arpa', Resolv::DNS::Resource::IN::PTR).returns([Resolv::DNS::Resource::IN::PTR.new('some.host')])
assert_equal 1, Proxy::Dns::Record.new.ptr_record_conflicts('another.host', '33.33.168.192.in-addr.arpa')
end

def test_ptr_record_conflicts_but_nothing_todo
Resolv::DNS.any_instance.expects(:getresources).with('33.33.168.192.in-addr.arpa', Resolv::DNS::Resource::IN::PTR).returns([Resolv::DNS::Resource::IN::PTR.new('some.host')])
assert_equal 0, Proxy::Dns::Record.new.ptr_record_conflicts('some.host', '33.33.168.192.in-addr.arpa')
end

def test_aaaa_record_conflicts_is_case_insensetive
Resolv::DNS.any_instance.expects(:getresources).with('some.host', Resolv::DNS::Resource::IN::AAAA).returns(ips('2001:DB8:DEEF::1'))
assert_equal 0, Proxy::Dns::Record.new.aaaa_record_conflicts('some.host', '2001:db8:deef::1')
end

def test_validate_ip
assert_equal '192.168.33.33', Proxy::Dns::Record.new.to_ipaddress('192.168.33.33').to_s
assert_equal '2001:db8:deef::1', Proxy::Dns::Record.new.to_ipaddress('2001:db8:deef::1').to_s
assert_equal false, Proxy::Dns::Record.new.to_ipaddress('some.host')
end

def test_create_srv_record
Proxy::Dns::Record.any_instance.expects(:do_create).with('_sip._tcp.example.com.', '10 60 5060 bigbox.example.com.', 'SRV')

assert_nil Proxy::Dns::Record.new.create_srv_record('_sip._tcp.example.com.', '10 60 5060 bigbox.example.com.')
end

def test_create_a_record
Proxy::Dns::Record.any_instance.expects(:a_record_conflicts).returns(-1)
Proxy::Dns::Record.any_instance.expects(:do_create).with('some.host', '192.168.33.22', 'A')

assert_nil Proxy::Dns::Record.new.create_a_record('some.host', '192.168.33.22')
end

def test_overwrite_a_record
Proxy::Dns::Record.any_instance.expects(:a_record_conflicts).returns(0)

assert_nil Proxy::Dns::Record.new.create_a_record('some.host', '192.168.33.22')
end

def test_create_duplicate_a_record_fails
Proxy::Dns::Record.any_instance.expects(:a_record_conflicts).returns(1)

assert_raise Proxy::Dns::Collision do
Proxy::Dns::Record.new.create_a_record('some.host', '2001:db8::1')
end
end

def test_create_aaaa_record
Proxy::Dns::Record.any_instance.expects(:aaaa_record_conflicts).returns(-1)
Proxy::Dns::Record.any_instance.expects(:do_create).with('some.host', '2001:db8::1', 'AAAA')

assert_nil Proxy::Dns::Record.new.create_aaaa_record('some.host', '2001:db8::1')
end

def test_overwrite_aaaa_record
Proxy::Dns::Record.any_instance.expects(:aaaa_record_conflicts).returns(0)

assert_nil Proxy::Dns::Record.new.create_aaaa_record('some.host', '2001:db8::1')
end

def test_create_duplicate_aaaa_record_fails
Proxy::Dns::Record.any_instance.expects(:aaaa_record_conflicts).returns(1)

assert_raise Proxy::Dns::Collision do
Proxy::Dns::Record.new.create_aaaa_record('some.host', '2001:db8::1')
end
end

def test_create_cname_record
Proxy::Dns::Record.any_instance.expects(:cname_record_conflicts).returns(-1)
Proxy::Dns::Record.any_instance.expects(:do_create).with('some.host', 'target.example.com', 'CNAME')

assert_nil Proxy::Dns::Record.new.create_cname_record('some.host', 'target.example.com')
end

def test_overwrite_cname_record
Proxy::Dns::Record.any_instance.expects(:cname_record_conflicts).returns(0)

assert_nil Proxy::Dns::Record.new.create_cname_record('some.host', 'target.example.com')
end

def test_create_duplicate_cname_record_fails
Proxy::Dns::Record.any_instance.expects(:cname_record_conflicts).returns(1)

assert_raise Proxy::Dns::Collision do
Proxy::Dns::Record.new.create_cname_record('some.host', 'target.example.com')
end
end

def test_create_ptr_record
Proxy::Dns::Record.any_instance.expects(:ptr_record_conflicts).returns(-1)
Proxy::Dns::Record.any_instance.expects(:do_create).with('22.33.168.192.in-addr.arpa', 'some.host', 'PTR')

assert_nil Proxy::Dns::Record.new.create_ptr_record('some.host', '22.33.168.192.in-addr.arpa')
end

def test_overwrite_ptr_record
Proxy::Dns::Record.any_instance.expects(:ptr_record_conflicts).returns(0)

assert_nil Proxy::Dns::Record.new.create_ptr_record('some.host', '22.33.168.192.in-addr.arpa')
end

def test_create_duplicate_ptr_record_fails
Proxy::Dns::Record.any_instance.expects(:ptr_record_conflicts).returns(1)

assert_raise Proxy::Dns::Collision do
Proxy::Dns::Record.new.create_ptr_record('some.host', '22.33.168.192.in-addr.arpa')
end
end

def test_remove_a_record
Proxy::Dns::Record.any_instance.expects(:do_remove).with('some.host', 'A')

assert_nil Proxy::Dns::Record.new.remove_a_record('some.host')
end

def test_remove_aaaa_record
Proxy::Dns::Record.any_instance.expects(:do_remove).with('some.host', 'AAAA')

assert_nil Proxy::Dns::Record.new.remove_aaaa_record('some.host')
end

def test_remove_cname_record
Proxy::Dns::Record.any_instance.expects(:do_remove).with('some.host', 'CNAME')

assert_nil Proxy::Dns::Record.new.remove_cname_record('some.host')
end

def test_remove_ptr_record
Proxy::Dns::Record.any_instance.expects(:do_remove).with('22.33.168.192.in-addr.arpa', 'PTR')

assert_nil Proxy::Dns::Record.new.remove_ptr_record('22.33.168.192.in-addr.arpa')
end

def ips(*ips)
ips.map {|ip| (ip =~ Resolv::IPv4::Regex) ? Resolv::DNS::Resource::IN::A.new(ip) : Resolv::DNS::Resource::IN::AAAA.new(ip) }
end
end
    (1-1/1)