Import Upstream version 4.12.4
This commit is contained in:
@@ -28,6 +28,17 @@ IPA_DEFAULT_MASTER_SRV_REC = (
|
||||
(DNSName(u'_kpasswd._udp'), 464),
|
||||
)
|
||||
|
||||
IPA_DEFAULT_MASTER_URI_REC = (
|
||||
(
|
||||
DNSName('_kerberos'),
|
||||
("krb5srv:m:tcp:{hostname}", "krb5srv:m:udp:{hostname}")
|
||||
),
|
||||
(
|
||||
DNSName('_kpasswd'),
|
||||
("krb5srv:m:tcp:{hostname}", "krb5srv:m:udp:{hostname}")
|
||||
),
|
||||
)
|
||||
|
||||
IPA_DEFAULT_ADTRUST_SRV_REC = (
|
||||
# srv record name, port
|
||||
(DNSName(u'_ldap._tcp.Default-First-Site-Name._sites.dc._msdcs'), 389),
|
||||
@@ -61,6 +72,7 @@ def resolve_records_from_server(rname, rtype, nameserver):
|
||||
|
||||
pytest.fail("Query: {} {}, nameserver {} failed due to {}".format(
|
||||
rname, rtype, nameserver, error))
|
||||
return None
|
||||
|
||||
|
||||
def _gen_expected_srv_rrset(rname, port, servers, ttl=86400):
|
||||
@@ -78,6 +90,21 @@ def _gen_expected_srv_rrset(rname, port, servers, ttl=86400):
|
||||
)
|
||||
|
||||
|
||||
def _gen_expected_uri_rrset(rname, uri_templates, servers, ttl=86400):
|
||||
rdata_list = [
|
||||
"{prio} {weight} {uri}".format(
|
||||
prio=prio,
|
||||
weight=weight,
|
||||
uri=uri_template.format(hostname=servername.make_absolute()),
|
||||
)
|
||||
for uri_template in uri_templates
|
||||
for prio, weight, servername in servers
|
||||
]
|
||||
return dns.rrset.from_text_list(
|
||||
rname, ttl, dns.rdataclass.IN, dns.rdatatype.URI, rdata_list
|
||||
)
|
||||
|
||||
|
||||
def _gen_expected_a_rrset(rname, servers, ttl=86400):
|
||||
return dns.rrset.from_text_list(rname, ttl, dns.rdataclass.IN,
|
||||
dns.rdatatype.A, servers)
|
||||
@@ -173,6 +200,20 @@ class TestDNSLocations(IntegrationTest):
|
||||
"with IP: '{}' for name '{}' (expected:\n{}\ngot:\n{})".
|
||||
format(server_ip, name_abs, expected, query))
|
||||
|
||||
def _test_URI_rec_against_server(self, server_ip, domain, expected_servers,
|
||||
rec_list=IPA_DEFAULT_MASTER_URI_REC):
|
||||
for rname, uri_templates in rec_list:
|
||||
name_abs = rname.derelativize(domain)
|
||||
expected = _gen_expected_uri_rrset(
|
||||
name_abs, uri_templates, expected_servers)
|
||||
query = resolve_records_from_server(
|
||||
name_abs, 'URI', server_ip)
|
||||
|
||||
assert expected == query, (
|
||||
"Expected and received DNS data do not match on server "
|
||||
"with IP: '{}' for name '{}' (expected:\n{}\ngot:\n{})".
|
||||
format(server_ip, name_abs, expected, query))
|
||||
|
||||
def test_without_locations(self):
|
||||
"""Servers are not in locations, this tests if basic system records
|
||||
are generated properly"""
|
||||
@@ -184,6 +225,9 @@ class TestDNSLocations(IntegrationTest):
|
||||
for ip in (self.master.ip, self.replicas[0].ip, self.replicas[1].ip):
|
||||
self._test_SRV_rec_against_server(ip, self.domain,
|
||||
expected_servers)
|
||||
self._test_URI_rec_against_server(
|
||||
ip, self.domain, expected_servers
|
||||
)
|
||||
|
||||
def test_nsupdate_without_locations(self):
|
||||
"""Test nsupdate file generated by dns-update-system-records
|
||||
@@ -226,11 +270,19 @@ class TestDNSLocations(IntegrationTest):
|
||||
)
|
||||
|
||||
self._test_SRV_rec_against_server(
|
||||
self.replicas[0].ip, domain_prague_loc, servers_prague_loc)
|
||||
self.replicas[0].ip, domain_prague_loc, servers_prague_loc
|
||||
)
|
||||
self._test_URI_rec_against_server(
|
||||
self.replicas[0].ip, domain_prague_loc, servers_prague_loc
|
||||
)
|
||||
|
||||
for ip in (self.master.ip, self.replicas[1].ip):
|
||||
self._test_SRV_rec_against_server(
|
||||
ip, domain_without_loc, servers_without_loc)
|
||||
ip, domain_without_loc, servers_without_loc
|
||||
)
|
||||
self._test_URI_rec_against_server(
|
||||
ip, domain_without_loc, servers_without_loc
|
||||
)
|
||||
|
||||
def test_two_replicas_in_location(self):
|
||||
"""Put second replica to location and test if records changed properly
|
||||
@@ -269,13 +321,25 @@ class TestDNSLocations(IntegrationTest):
|
||||
self.master.domain.name).make_absolute())
|
||||
|
||||
self._test_SRV_rec_against_server(
|
||||
self.replicas[0].ip, domain_prague_loc, servers_prague_loc)
|
||||
self.replicas[0].ip, domain_prague_loc, servers_prague_loc
|
||||
)
|
||||
self._test_URI_rec_against_server(
|
||||
self.replicas[0].ip, domain_prague_loc, servers_prague_loc
|
||||
)
|
||||
|
||||
self._test_SRV_rec_against_server(
|
||||
self.replicas[1].ip, domain_paris_loc, servers_paris_loc)
|
||||
self.replicas[1].ip, domain_paris_loc, servers_paris_loc
|
||||
)
|
||||
self._test_URI_rec_against_server(
|
||||
self.replicas[1].ip, domain_paris_loc, servers_paris_loc
|
||||
)
|
||||
|
||||
self._test_SRV_rec_against_server(
|
||||
self.master.ip, domain_without_loc, servers_without_loc)
|
||||
self.master.ip, domain_without_loc, servers_without_loc
|
||||
)
|
||||
self._test_URI_rec_against_server(
|
||||
self.master.ip, domain_without_loc, servers_without_loc
|
||||
)
|
||||
|
||||
def test_all_servers_in_location(self):
|
||||
"""Put master (as second server) to location and test if records
|
||||
@@ -307,11 +371,19 @@ class TestDNSLocations(IntegrationTest):
|
||||
self.master.domain.name).make_absolute())
|
||||
|
||||
self._test_SRV_rec_against_server(
|
||||
self.replicas[0].ip, domain_prague_loc, servers_prague_loc)
|
||||
self.replicas[0].ip, domain_prague_loc, servers_prague_loc
|
||||
)
|
||||
self._test_URI_rec_against_server(
|
||||
self.replicas[0].ip, domain_prague_loc, servers_prague_loc
|
||||
)
|
||||
|
||||
for ip in (self.replicas[1].ip, self.master.ip):
|
||||
self._test_SRV_rec_against_server(ip, domain_paris_loc,
|
||||
servers_paris_loc)
|
||||
self._test_SRV_rec_against_server(
|
||||
ip, domain_paris_loc, servers_paris_loc
|
||||
)
|
||||
self._test_URI_rec_against_server(
|
||||
ip, domain_paris_loc, servers_paris_loc
|
||||
)
|
||||
|
||||
def test_change_weight(self):
|
||||
"""Change weight of master and test if records changed properly
|
||||
@@ -346,11 +418,19 @@ class TestDNSLocations(IntegrationTest):
|
||||
self.master.domain.name).make_absolute())
|
||||
|
||||
self._test_SRV_rec_against_server(
|
||||
self.replicas[0].ip, domain_prague_loc, servers_prague_loc)
|
||||
self.replicas[0].ip, domain_prague_loc, servers_prague_loc
|
||||
)
|
||||
self._test_URI_rec_against_server(
|
||||
self.replicas[0].ip, domain_prague_loc, servers_prague_loc
|
||||
)
|
||||
|
||||
for ip in (self.replicas[1].ip, self.master.ip):
|
||||
self._test_SRV_rec_against_server(ip, domain_paris_loc,
|
||||
servers_paris_loc)
|
||||
self._test_SRV_rec_against_server(
|
||||
ip, domain_paris_loc, servers_paris_loc
|
||||
)
|
||||
self._test_URI_rec_against_server(
|
||||
ip, domain_paris_loc, servers_paris_loc
|
||||
)
|
||||
|
||||
def test_change_weight_relative_zero_0(self):
|
||||
"""Change weight of one master and check on relative weight %
|
||||
@@ -454,6 +534,9 @@ class TestDNSLocations(IntegrationTest):
|
||||
|
||||
expected_servers = (self.master.ip, self.replicas[1].ip)
|
||||
|
||||
ldap = self.master.ldap_connect()
|
||||
tasks.wait_for_replication(ldap)
|
||||
|
||||
for ip in (self.master.ip, self.replicas[0].ip, self.replicas[1].ip):
|
||||
self._test_A_rec_against_server(ip, self.domain, expected_servers)
|
||||
|
||||
@@ -477,6 +560,9 @@ class TestDNSLocations(IntegrationTest):
|
||||
(self.PRIO_HIGH, self.WEIGHT, DNSName(self.master.hostname)),
|
||||
)
|
||||
|
||||
ldap = self.master.ldap_connect()
|
||||
tasks.wait_for_replication(ldap)
|
||||
|
||||
for ip in (self.master.ip, self.replicas[0].ip, self.replicas[1].ip):
|
||||
self._test_SRV_rec_against_server(
|
||||
ip, self.domain, expected_servers,
|
||||
|
||||
Reference in New Issue
Block a user