Project

General

Profile

Download (6.07 KB) Statistics
| Branch: | Tag: | Revision:
require 'test_helper'
require 'dns_dnscmd/dns_dnscmd'
require 'dns_dnscmd/dns_dnscmd_main'

class DnscmdForTesting < Proxy::Dns::Dnscmd::Record
def initialize(dns_zones)
@enum_zones = dns_zones
end
attr_accessor :enum_zones
end

class DnsCmdTest < Test::Unit::TestCase
def setup
@server = DnscmdForTesting.new(["_msdcs.bar.domain.local",
"168.192.in-addr.arpa",
"33.168.192.in-addr.arpa",
"f.e.e.d.8.b.d.0.1.0.0.2.ip6.arpa",
"bar.domain.local",
"domain.local",
"TrustAnchors"])
end

def test_dnscmd_provider_initialization
Proxy::Dns::Dnscmd::Plugin.load_test_settings(:dns_server => 'a_server')
Proxy::Dns::Plugin.load_test_settings(:dns_ttl => 999)
server = Proxy::Dns::Dnscmd::Record.new

assert_equal "a_server", server.server
assert_equal 999, server.ttl
end

def test_create_a_record_with_longest_zone_match
Proxy::Dns::Dnscmd::Record.any_instance.expects(:a_record_conflicts).with('host.foo.bar.domain.local', '192.168.33.33').returns(-1)
Proxy::Dns::Dnscmd::Record.any_instance.expects(:execute).with('/RecordAdd bar.domain.local host.foo.bar.domain.local. A 192.168.33.33', anything).returns(true)
assert_nil @server.create_a_record('host.foo.bar.domain.local', '192.168.33.33')
end

def test_create_aaaa_record_with_longest_zone_match
Proxy::Dns::Dnscmd::Record.any_instance.expects(:aaaa_record_conflicts).with('host.foo.bar.domain.local', '2001:db8:deef::1').returns(-1)
Proxy::Dns::Dnscmd::Record.any_instance.expects(:execute).with('/RecordAdd bar.domain.local host.foo.bar.domain.local. AAAA 2001:db8:deef::1', anything).returns(true)
assert_nil @server.create_aaaa_record('host.foo.bar.domain.local', '2001:db8:deef::1')
end

def test_overwrite_address_record_with_longest_zone_match
Proxy::Dns::Dnscmd::Record.any_instance.expects(:a_record_conflicts).with('host.foo.bar.domain.local', '192.168.33.33').returns(0)
assert_nil @server.create_a_record('host.foo.bar.domain.local', '192.168.33.33')
end

def test_create_duplicate_address_record_fails
Proxy::Dns::Dnscmd::Record.any_instance.expects(:a_record_conflicts).with('host.foo.bar.domain.local', '192.168.33.33').returns(1)
assert_raise Proxy::Dns::Collision do
@server.create_a_record('host.foo.bar.domain.local', '192.168.33.33')
end
end

def test_create_ptr_record
Proxy::Dns::Dnscmd::Record.any_instance.expects(:ptr_record_conflicts).with('host.foo.bar.domain.local', '192.168.33.33').returns(-1)
Proxy::Dns::Dnscmd::Record.any_instance.expects(:execute).with('/RecordAdd 33.168.192.in-addr.arpa 33.33.168.192.in-addr.arpa. PTR host.foo.bar.domain.local.', anything).returns(true)
assert_nil @server.create_ptr_record('host.foo.bar.domain.local', '33.33.168.192.in-addr.arpa')
end

def test_overwrite_ptr_record
Proxy::Dns::Dnscmd::Record.any_instance.expects(:ptr_record_conflicts).with('host.foo.bar.domain.local', '192.168.33.33').returns(0)
assert_nil @server.create_ptr_record('host.foo.bar.domain.local', '33.33.168.192.in-addr.arpa')
end

def test_create_duplicate_ptr_record_fails
Proxy::Dns::Dnscmd::Record.any_instance.expects(:ptr_record_conflicts).with('host.foo.bar.domain.local', '192.168.33.33').returns(1)
assert_raise Proxy::Dns::Collision do
@server.create_ptr_record('host.foo.bar.domain.local', '33.33.168.192.in-addr.arpa')
end
end

def test_remove_address_record_with_longest_zone_match
Proxy::Dns::Dnscmd::Record.any_instance.expects(:execute).with('/RecordDelete bar.domain.local host.foo.bar.domain.local. A /f', anything).returns(true)
assert_nil @server.remove_a_record('host.foo.bar.domain.local')
end

def test_remove_ptr_record
Proxy::Dns::Dnscmd::Record.any_instance.expects(:execute).with('/RecordDelete 33.168.192.in-addr.arpa 33.33.168.192.in-addr.arpa. PTR /f', anything).returns(true)
assert_nil @server.remove_ptr_record('33.33.168.192.in-addr.arpa')
end

def test_dns_zone_matches_second_best_match_if_zone_name_equals_host_name
assert_equal('domain.local', @server.match_zone('bar.domain.local', @server.enum_zones))
end

def test_dns_zone_matches_sole_available_zone
assert_equal('sole.domain', Proxy::Dns::Dnscmd::Record.new.match_zone('host.foo.bar.sole.domain', ["sole.domain"]))
end

def test_dns_non_authoritative_zone_raises_exception
assert_raise Proxy::Dns::NotFound do
@server.match_zone('host.foo.bar.domain.com', ['domain.local'])
end
assert_raise Proxy::Dns::NotFound do
@server.match_zone('33.33.16.192.in-addr.arpa', ['168.192.in-addr.arpa'])
end
assert_raise Proxy::Dns::NotFound do
@server.match_zone('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.1.1.0.0.2.ip6.arpa', ['f.e.e.d.8.b.d.0.1.0.0.2.ip6.arpa'])
end
end

def test_dnscmd_enum_zones_parses_primary_zones_only
to_parse = '
Enumerated zone list:
Zone count = 8

Zone name Type Storage Properties

. Cache AD-Domain
_msdcs.bar.domain.local Primary AD-Forest Secure
168.192.in-addr.arpa Primary AD-Domain Rev
33.168.192.in-addr.arpa Primary AD-Domain Secure Rev Aging
f.e.e.d.8.b.d.0.1.0.0.2.ip6.arpa Primary AD-Domain Secure Rev
bar.domain.local Primary AD-Domain Secure Aging
domain.local Primary AD-Domain Secure
domain.com Secondary File
TrustAnchors Primary AD-Forest


Command completed successfully.'.split("\n")
Proxy::Dns::Dnscmd::Record.any_instance.expects(:execute).with('/EnumZones', nil, true).returns(to_parse)
assert_equal [
"_msdcs.bar.domain.local",
"168.192.in-addr.arpa",
"33.168.192.in-addr.arpa",
"f.e.e.d.8.b.d.0.1.0.0.2.ip6.arpa",
"bar.domain.local",
"domain.local",
"TrustAnchors"], Proxy::Dns::Dnscmd::Record.new.enum_zones
end
end
(2-2/2)