Blame SOURCES/0011-Add-support-for-the-DNS-URI-type.patch

d27d41
From 0355be5205c8fa0645c7d7552654a331a4727821 Mon Sep 17 00:00:00 2001
d27d41
From: Rob Crittenden <rcritten@redhat.com>
d27d41
Date: Wed, 6 Jul 2022 16:59:40 -0400
d27d41
Subject: [PATCH] Add support for the DNS URI type
d27d41
d27d41
URI records are not required but if they exist they are
d27d41
validated.
d27d41
d27d41
https://github.com/freeipa/freeipa-healthcheck/issues/222
d27d41
d27d41
Signed-off-by: Rob Crittenden <rcritten@redhat.com>
d27d41
---
d27d41
 src/ipahealthcheck/ipa/idns.py |  64 ++++++++-
d27d41
 tests/test_ipa_dns.py          | 228 +++++++++++++++++++++++++++------
d27d41
 2 files changed, 246 insertions(+), 46 deletions(-)
d27d41
d27d41
diff --git a/src/ipahealthcheck/ipa/idns.py b/src/ipahealthcheck/ipa/idns.py
d27d41
index 3282e2c..9f1b158 100644
d27d41
--- a/src/ipahealthcheck/ipa/idns.py
d27d41
+++ b/src/ipahealthcheck/ipa/idns.py
d27d41
@@ -11,12 +11,25 @@ from ipahealthcheck.core.plugin import Result, duration
d27d41
 from ipahealthcheck.core import constants
d27d41
 
d27d41
 from ipalib import api
d27d41
-from dns import resolver
d27d41
+
d27d41
+try:
d27d41
+    from dns.resolver import resolve
d27d41
+except ImportError:
d27d41
+    from dns.resolver import query as resolve
d27d41
 
d27d41
 
d27d41
 logger = logging.getLogger()
d27d41
 
d27d41
 
d27d41
+def query_uri(uri):
d27d41
+    try:
d27d41
+        answers = resolve(uri, rdatatype.URI)
d27d41
+    except DNSException as e:
d27d41
+        logger.debug("DNS record not found: %s", e.__class__.__name__)
d27d41
+        answers = []
d27d41
+    return answers
d27d41
+
d27d41
+
d27d41
 @registry
d27d41
 class IPADNSSystemRecordsCheck(IPAPlugin):
d27d41
     """
d27d41
@@ -32,6 +45,10 @@ class IPADNSSystemRecordsCheck(IPAPlugin):
d27d41
         """Combine the SRV record and target into a unique name."""
d27d41
         return srv + ":" + target
d27d41
 
d27d41
+    def uri_to_name(self, uri, target):
d27d41
+        """Combine the SRV record and target into a unique name."""
d27d41
+        return uri + ":" + target
d27d41
+
d27d41
     @duration
d27d41
     def check(self):
d27d41
         # pylint: disable=import-outside-toplevel
d27d41
@@ -45,6 +62,7 @@ class IPADNSSystemRecordsCheck(IPAPlugin):
d27d41
         # collect the list of expected values
d27d41
         txt_rec = dict()
d27d41
         srv_rec = dict()
d27d41
+        uri_rec = dict()
d27d41
         a_rec = list()
d27d41
         aaaa_rec = list()
d27d41
 
d27d41
@@ -65,6 +83,15 @@ class IPADNSSystemRecordsCheck(IPAPlugin):
d27d41
                         a_rec.append(rd.to_text())
d27d41
                     elif rd.rdtype == rdatatype.AAAA:
d27d41
                         aaaa_rec.append(rd.to_text())
d27d41
+                    elif rd.rdtype == rdatatype.URI:
d27d41
+                        if name.ToASCII() in uri_rec:
d27d41
+                            uri_rec[name.ToASCII()].append(
d27d41
+                                rd.target.decode('utf-8')
d27d41
+                            )
d27d41
+                        else:
d27d41
+                            uri_rec[name.ToASCII()] = [
d27d41
+                                rd.target.decode('utf-8')
d27d41
+                            ]
d27d41
                     else:
d27d41
                         logger.error("Unhandler rdtype %d", rd.rdtype)
d27d41
 
d27d41
@@ -97,10 +124,39 @@ class IPADNSSystemRecordsCheck(IPAPlugin):
d27d41
                     msg='Expected SRV record missing',
d27d41
                     key=self.srv_to_name(srv, host))
d27d41
 
d27d41
+        for uri in uri_rec:
d27d41
+            logger.debug("Search DNS for URI record of %s", uri)
d27d41
+            answers = query_uri(uri)
d27d41
+            hosts = uri_rec[uri]
d27d41
+            for answer in answers:
d27d41
+                logger.debug("DNS record found: %s", answer)
d27d41
+                try:
d27d41
+                    hosts.remove(answer.target.decode('utf-8'))
d27d41
+                    yield Result(
d27d41
+                         self, constants.SUCCESS,
d27d41
+                         key=self.uri_to_name(
d27d41
+                             uri, answer.target.decode('utf-8')
d27d41
+                         )
d27d41
+                    )
d27d41
+                except ValueError:
d27d41
+                    yield Result(
d27d41
+                        self, constants.WARNING,
d27d41
+                        msg='Unexpected URI entry in DNS',
d27d41
+                        key=self.uri_to_name(
d27d41
+                            uri, answer.target.decode('utf-8')
d27d41
+                        )
d27d41
+                    )
d27d41
+            for host in hosts:
d27d41
+                yield Result(
d27d41
+                    self, constants.WARNING,
d27d41
+                    msg='Expected URI record missing',
d27d41
+                    key=self.uri_to_name(uri, host)
d27d41
+                )
d27d41
+
d27d41
         for txt in txt_rec:
d27d41
             logger.debug("Search DNS for TXT record of %s", txt)
d27d41
             try:
d27d41
-                answers = resolver.query(txt, rdatatype.TXT)
d27d41
+                answers = resolve(txt, rdatatype.TXT)
d27d41
             except DNSException as e:
d27d41
                 logger.debug("DNS record not found: %s", e.__class__.__name__)
d27d41
                 answers = []
d27d41
@@ -123,7 +179,7 @@ class IPADNSSystemRecordsCheck(IPAPlugin):
d27d41
             qname = "ipa-ca." + api.env.domain + "."
d27d41
             logger.debug("Search DNS for A record of %s", qname)
d27d41
             try:
d27d41
-                answers = resolver.query(qname, rdatatype.A)
d27d41
+                answers = resolve(qname, rdatatype.A)
d27d41
             except DNSException as e:
d27d41
                 logger.debug("DNS record not found: %s", e.__class__.__name__)
d27d41
                 answers = []
d27d41
@@ -157,7 +213,7 @@ class IPADNSSystemRecordsCheck(IPAPlugin):
d27d41
             qname = "ipa-ca." + api.env.domain + "."
d27d41
             logger.debug("Search DNS for AAAA record of %s", qname)
d27d41
             try:
d27d41
-                answers = resolver.query(qname, rdatatype.AAAA)
d27d41
+                answers = resolve(qname, rdatatype.AAAA)
d27d41
             except DNSException as e:
d27d41
                 logger.debug("DNS record not found: %s", e.__class__.__name__)
d27d41
                 answers = []
d27d41
diff --git a/tests/test_ipa_dns.py b/tests/test_ipa_dns.py
d27d41
index 11e1aa9..43ddcb9 100644
d27d41
--- a/tests/test_ipa_dns.py
d27d41
+++ b/tests/test_ipa_dns.py
d27d41
@@ -27,6 +27,15 @@ from ipaserver.dns_data_management import (
d27d41
     IPA_DEFAULT_ADTRUST_SRV_REC
d27d41
 )
d27d41
 
d27d41
+try:
d27d41
+    # pylint: disable=unused-import
d27d41
+    from ipaserver.dns_data_management import IPA_DEFAULT_MASTER_URI_REC  # noqa
d27d41
+except ImportError:
d27d41
+    has_uri_support = False
d27d41
+else:
d27d41
+    has_uri_support = True
d27d41
+
d27d41
+
d27d41
 try:
d27d41
     # pylint: disable=unused-import
d27d41
     from ipaserver.install.installutils import resolve_rrsets_nss  # noqa: F401
d27d41
@@ -79,6 +88,45 @@ def query_srv(qname, ad_records=False):
d27d41
     return rdlist
d27d41
 
d27d41
 
d27d41
+def query_uri(hosts):
d27d41
+    """
d27d41
+    Return a list containing two answers, one for each uri type
d27d41
+    """
d27d41
+    answers = []
d27d41
+    if version.MAJOR < 2 or (version.MAJOR == 2 and version.MINOR == 0):
d27d41
+        m = message.Message()
d27d41
+    elif version.MAJOR == 2 and version.MINOR > 0:
d27d41
+        m = message.QueryMessage()  # pylint: disable=E1101
d27d41
+        m = message.make_response(m)  # pylint: disable=E1101
d27d41
+
d27d41
+    rdtype = rdatatype.URI
d27d41
+    for name in ('_kerberos.', '_kpasswd.'):
d27d41
+        qname = DNSName(name + m_api.env.domain)
d27d41
+        qname = qname.make_absolute()
d27d41
+        if version.MAJOR < 2:
d27d41
+            # pylint: disable=unexpected-keyword-arg
d27d41
+            answer = Answer(qname, rdataclass.IN, rdtype, m,
d27d41
+                            raise_on_no_answer=False)
d27d41
+            # pylint: enable=unexpected-keyword-arg
d27d41
+        else:
d27d41
+            if version.MAJOR == 2 and version.MINOR > 0:
d27d41
+                question = rrset.RRset(qname, rdataclass.IN, rdtype)
d27d41
+                m.question = [question]
d27d41
+            answer = Answer(qname, rdataclass.IN, rdtype, m)
d27d41
+
d27d41
+        rl = []
d27d41
+        for host in hosts:
d27d41
+            rlist = rrset.from_text_list(
d27d41
+                qname, 86400, rdataclass.IN,
d27d41
+                rdatatype.URI, ['0 100 "krb5srv:m:tcp:%s."' % host,
d27d41
+                                '0 100 "krb5srv:m:udp:%s."' % host, ]
d27d41
+            )
d27d41
+            rl.extend(rlist)
d27d41
+        answer.rrset = rl
d27d41
+        answers.append(answer)
d27d41
+    return answers
d27d41
+
d27d41
+
d27d41
 def gen_addrs(rdtype=rdatatype.A, num=1):
d27d41
     """Generate sequential IP addresses for the ipa-ca A record lookup"""
d27d41
     ips = []
d27d41
@@ -202,16 +250,19 @@ class TestDNSSystemRecords(BaseTest):
d27d41
 
d27d41
        1. The query_srv() override returns the set of configured
d27d41
           servers for each type of SRV record.
d27d41
-       2. fake_query() overrides dns.resolver.query to simulate
d27d41
+       2. fake_query() overrides ipahealthcheck.ipa.idns.resolve to simulate
d27d41
           A, AAAA and TXT record lookups.
d27d41
     """
d27d41
     @patch(resolve_rrsets_import)
d27d41
     @patch('ipapython.dnsutil.query_srv')
d27d41
-    @patch('dns.resolver.query')
d27d41
-    def test_dnsrecords_single(self, mock_query, mock_query_srv, mock_rrset):
d27d41
+    @patch('ipahealthcheck.ipa.idns.query_uri')
d27d41
+    @patch('ipahealthcheck.ipa.idns.resolve')
d27d41
+    def test_dnsrecords_single(self, mock_query, mock_query_uri,
d27d41
+                               mock_query_srv, mock_rrset):
d27d41
         """Test single CA master, all SRV records"""
d27d41
         mock_query.side_effect = fake_query_one
d27d41
         mock_query_srv.side_effect = query_srv([m_api.env.host])
d27d41
+        mock_query_uri.side_effect = query_uri([m_api.env.host])
d27d41
         mock_rrset.side_effect = [
d27d41
             resolve_rrsets(m_api.env.host, (rdatatype.A, rdatatype.AAAA))
d27d41
         ]
d27d41
@@ -233,7 +284,11 @@ class TestDNSSystemRecords(BaseTest):
d27d41
 
d27d41
         self.results = capture_results(f)
d27d41
 
d27d41
-        assert len(self.results) == 10
d27d41
+        if has_uri_support:
d27d41
+            expected = 14
d27d41
+        else:
d27d41
+            expected = 10
d27d41
+        assert len(self.results) == expected
d27d41
 
d27d41
         for result in self.results.results:
d27d41
             assert result.result == constants.SUCCESS
d27d41
@@ -242,13 +297,19 @@ class TestDNSSystemRecords(BaseTest):
d27d41
 
d27d41
     @patch(resolve_rrsets_import)
d27d41
     @patch('ipapython.dnsutil.query_srv')
d27d41
-    @patch('dns.resolver.query')
d27d41
-    def test_dnsrecords_two(self, mock_query, mock_query_srv, mock_rrset):
d27d41
+    @patch('ipahealthcheck.ipa.idns.query_uri')
d27d41
+    @patch('ipahealthcheck.ipa.idns.resolve')
d27d41
+    def test_dnsrecords_two(self, mock_query, mock_query_uri,
d27d41
+                            mock_query_srv, mock_rrset):
d27d41
         """Test two CA masters, all SRV records"""
d27d41
         mock_query_srv.side_effect = query_srv([
d27d41
             m_api.env.host,
d27d41
             'replica.' + m_api.env.domain
d27d41
         ])
d27d41
+        mock_query_uri.side_effect = query_uri([
d27d41
+            m_api.env.host,
d27d41
+            'replica.' + m_api.env.domain
d27d41
+        ])
d27d41
         mock_query.side_effect = fake_query_two
d27d41
         mock_rrset.side_effect = [
d27d41
             resolve_rrsets(m_api.env.host, (rdatatype.A, rdatatype.AAAA)),
d27d41
@@ -281,7 +342,11 @@ class TestDNSSystemRecords(BaseTest):
d27d41
 
d27d41
         self.results = capture_results(f)
d27d41
 
d27d41
-        assert len(self.results) == 19
d27d41
+        if has_uri_support:
d27d41
+            expected = 27
d27d41
+        else:
d27d41
+            expected = 19
d27d41
+        assert len(self.results) == expected
d27d41
 
d27d41
         for result in self.results.results:
d27d41
             assert result.result == constants.SUCCESS
d27d41
@@ -290,14 +355,21 @@ class TestDNSSystemRecords(BaseTest):
d27d41
 
d27d41
     @patch(resolve_rrsets_import)
d27d41
     @patch('ipapython.dnsutil.query_srv')
d27d41
-    @patch('dns.resolver.query')
d27d41
-    def test_dnsrecords_three(self, mock_query, mock_query_srv, mock_rrset):
d27d41
+    @patch('ipahealthcheck.ipa.idns.query_uri')
d27d41
+    @patch('ipahealthcheck.ipa.idns.resolve')
d27d41
+    def test_dnsrecords_three(self, mock_query, mock_query_uri,
d27d41
+                              mock_query_srv, mock_rrset):
d27d41
         """Test three CA masters, all SRV records"""
d27d41
         mock_query_srv.side_effect = query_srv([
d27d41
             m_api.env.host,
d27d41
             'replica.' + m_api.env.domain,
d27d41
             'replica2.' + m_api.env.domain
d27d41
         ])
d27d41
+        mock_query_uri.side_effect = query_uri([
d27d41
+            m_api.env.host,
d27d41
+            'replica.' + m_api.env.domain,
d27d41
+            'replica2.' + m_api.env.domain
d27d41
+        ])
d27d41
         mock_query.side_effect = fake_query_three
d27d41
         mock_rrset.side_effect = [
d27d41
             resolve_rrsets(m_api.env.host, (rdatatype.A, rdatatype.AAAA)),
d27d41
@@ -339,7 +411,11 @@ class TestDNSSystemRecords(BaseTest):
d27d41
 
d27d41
         self.results = capture_results(f)
d27d41
 
d27d41
-        assert len(self.results) == 28
d27d41
+        if has_uri_support:
d27d41
+            expected = 40
d27d41
+        else:
d27d41
+            expected = 28
d27d41
+        assert len(self.results) == expected
d27d41
 
d27d41
         for result in self.results.results:
d27d41
             assert result.result == constants.SUCCESS
d27d41
@@ -348,15 +424,21 @@ class TestDNSSystemRecords(BaseTest):
d27d41
 
d27d41
     @patch(resolve_rrsets_import)
d27d41
     @patch('ipapython.dnsutil.query_srv')
d27d41
-    @patch('dns.resolver.query')
d27d41
-    def test_dnsrecords_three_mixed(self, mock_query, mock_query_srv,
d27d41
-                                    mock_rrset):
d27d41
+    @patch('ipahealthcheck.ipa.idns.query_uri')
d27d41
+    @patch('ipahealthcheck.ipa.idns.resolve')
d27d41
+    def test_dnsrecords_three_mixed(self, mock_query, mock_query_uri,
d27d41
+                                    mock_query_srv, mock_rrset):
d27d41
         """Test three masters, only one with a CA, all SRV records"""
d27d41
         mock_query_srv.side_effect = query_srv([
d27d41
             m_api.env.host,
d27d41
             'replica.' + m_api.env.domain,
d27d41
             'replica2.' + m_api.env.domain
d27d41
         ])
d27d41
+        mock_query_uri.side_effect = query_uri([
d27d41
+            m_api.env.host,
d27d41
+            'replica.' + m_api.env.domain,
d27d41
+            'replica2.' + m_api.env.domain
d27d41
+        ])
d27d41
         mock_query.side_effect = fake_query_one
d27d41
         mock_rrset.side_effect = [
d27d41
             resolve_rrsets(m_api.env.host, (rdatatype.A, rdatatype.AAAA)),
d27d41
@@ -396,7 +478,11 @@ class TestDNSSystemRecords(BaseTest):
d27d41
 
d27d41
         self.results = capture_results(f)
d27d41
 
d27d41
-        assert len(self.results) == 24
d27d41
+        if has_uri_support:
d27d41
+            expected = 36
d27d41
+        else:
d27d41
+            expected = 24
d27d41
+        assert len(self.results) == expected
d27d41
 
d27d41
         for result in self.results.results:
d27d41
             assert result.result == constants.SUCCESS
d27d41
@@ -404,9 +490,10 @@ class TestDNSSystemRecords(BaseTest):
d27d41
 
d27d41
     @patch(resolve_rrsets_import)
d27d41
     @patch('ipapython.dnsutil.query_srv')
d27d41
-    @patch('dns.resolver.query')
d27d41
-    def test_dnsrecords_missing_server(self, mock_query, mock_query_srv,
d27d41
-                                       mock_rrset):
d27d41
+    @patch('ipahealthcheck.ipa.idns.query_uri')
d27d41
+    @patch('ipahealthcheck.ipa.idns.resolve')
d27d41
+    def test_dnsrecords_missing_server(self, mock_query, mock_query_uri,
d27d41
+                                       mock_query_srv, mock_rrset):
d27d41
         """Drop one of the masters from query_srv
d27d41
 
d27d41
            This will simulate missing SRV records and cause a number of
d27d41
@@ -417,6 +504,11 @@ class TestDNSSystemRecords(BaseTest):
d27d41
             'replica.' + m_api.env.domain
d27d41
             # replica2 is missing
d27d41
         ])
d27d41
+        mock_query_uri.side_effect = query_uri([
d27d41
+            m_api.env.host,
d27d41
+            'replica.' + m_api.env.domain,
d27d41
+            'replica2.' + m_api.env.domain
d27d41
+        ])
d27d41
         mock_query.side_effect = fake_query_three
d27d41
         mock_rrset.side_effect = [
d27d41
             resolve_rrsets(m_api.env.host, (rdatatype.A, rdatatype.AAAA)),
d27d41
@@ -458,21 +550,30 @@ class TestDNSSystemRecords(BaseTest):
d27d41
 
d27d41
         self.results = capture_results(f)
d27d41
 
d27d41
-        assert len(self.results) == 28
d27d41
+        if has_uri_support:
d27d41
+            expected = 40
d27d41
+        else:
d27d41
+            expected = 28
d27d41
+        assert len(self.results) == expected
d27d41
 
d27d41
         ok = get_results_by_severity(self.results.results, constants.SUCCESS)
d27d41
         warn = get_results_by_severity(self.results.results, constants.WARNING)
d27d41
-        assert len(ok) == 21
d27d41
-        assert len(warn) == 7
d27d41
+        if has_uri_support:
d27d41
+            assert len(ok) == 33
d27d41
+            assert len(warn) == 7
d27d41
+        else:
d27d41
+            assert len(ok) == 21
d27d41
+            assert len(warn) == 7
d27d41
 
d27d41
         for result in warn:
d27d41
             assert result.kw.get('msg') == 'Expected SRV record missing'
d27d41
 
d27d41
     @patch(resolve_rrsets_import)
d27d41
     @patch('ipapython.dnsutil.query_srv')
d27d41
-    @patch('dns.resolver.query')
d27d41
-    def test_dnsrecords_missing_ipa_ca(self, mock_query, mock_query_srv,
d27d41
-                                       mock_rrset):
d27d41
+    @patch('ipahealthcheck.ipa.idns.query_uri')
d27d41
+    @patch('ipahealthcheck.ipa.idns.resolve')
d27d41
+    def test_dnsrecords_missing_ipa_ca(self, mock_query, mock_query_uri,
d27d41
+                                       mock_query_srv, mock_rrset):
d27d41
         """Drop one of the masters from query_srv
d27d41
 
d27d41
            This will simulate missing SRV records and cause a number of
d27d41
@@ -483,6 +584,11 @@ class TestDNSSystemRecords(BaseTest):
d27d41
             'replica.' + m_api.env.domain,
d27d41
             'replica2.' + m_api.env.domain
d27d41
         ])
d27d41
+        mock_query_uri.side_effect = query_uri([
d27d41
+            m_api.env.host,
d27d41
+            'replica.' + m_api.env.domain,
d27d41
+            'replica2.' + m_api.env.domain
d27d41
+        ])
d27d41
         mock_query.side_effect = fake_query_two
d27d41
         mock_rrset.side_effect = [
d27d41
             resolve_rrsets(m_api.env.host, (rdatatype.A, rdatatype.AAAA)),
d27d41
@@ -524,12 +630,20 @@ class TestDNSSystemRecords(BaseTest):
d27d41
 
d27d41
         self.results = capture_results(f)
d27d41
 
d27d41
-        assert len(self.results) == 28
d27d41
+        if has_uri_support:
d27d41
+            expected = 40
d27d41
+        else:
d27d41
+            expected = 28
d27d41
+        assert len(self.results) == expected
d27d41
 
d27d41
         ok = get_results_by_severity(self.results.results, constants.SUCCESS)
d27d41
         warn = get_results_by_severity(self.results.results, constants.WARNING)
d27d41
-        assert len(ok) == 26
d27d41
-        assert len(warn) == 2
d27d41
+        if has_uri_support:
d27d41
+            assert len(ok) == 38
d27d41
+            assert len(warn) == 2
d27d41
+        else:
d27d41
+            assert len(ok) == 26
d27d41
+            assert len(warn) == 2
d27d41
 
d27d41
         for result in warn:
d27d41
             assert re.match(
d27d41
@@ -541,9 +655,10 @@ class TestDNSSystemRecords(BaseTest):
d27d41
 
d27d41
     @patch(resolve_rrsets_import)
d27d41
     @patch('ipapython.dnsutil.query_srv')
d27d41
-    @patch('dns.resolver.query')
d27d41
-    def test_dnsrecords_extra_srv(self, mock_query, mock_query_srv,
d27d41
-                                  mock_rrset):
d27d41
+    @patch('ipahealthcheck.ipa.idns.query_uri')
d27d41
+    @patch('ipahealthcheck.ipa.idns.resolve')
d27d41
+    def test_dnsrecords_extra_srv(self, mock_query, mock_query_uri,
d27d41
+                                  mock_query_srv, mock_rrset):
d27d41
         """An extra SRV record set exists, report it.
d27d41
 
d27d41
            Add an extra master to the query_srv() which will generate
d27d41
@@ -555,6 +670,11 @@ class TestDNSSystemRecords(BaseTest):
d27d41
             'replica2.' + m_api.env.domain,
d27d41
             'replica3.' + m_api.env.domain
d27d41
         ])
d27d41
+        mock_query_uri.side_effect = query_uri([
d27d41
+            m_api.env.host,
d27d41
+            'replica.' + m_api.env.domain,
d27d41
+            'replica2.' + m_api.env.domain,
d27d41
+        ])
d27d41
         mock_query.side_effect = fake_query_three
d27d41
         mock_rrset.side_effect = [
d27d41
             resolve_rrsets(m_api.env.host, (rdatatype.A, rdatatype.AAAA)),
d27d41
@@ -598,12 +718,20 @@ class TestDNSSystemRecords(BaseTest):
d27d41
 
d27d41
         self.results = capture_results(f)
d27d41
 
d27d41
-        assert len(self.results) == 35
d27d41
+        if has_uri_support:
d27d41
+            expected = 47
d27d41
+        else:
d27d41
+            expected = 35
d27d41
+        assert len(self.results) == expected
d27d41
 
d27d41
         ok = get_results_by_severity(self.results.results, constants.SUCCESS)
d27d41
         warn = get_results_by_severity(self.results.results, constants.WARNING)
d27d41
-        assert len(ok) == 28
d27d41
-        assert len(warn) == 7
d27d41
+        if has_uri_support:
d27d41
+            assert len(ok) == 40
d27d41
+            assert len(warn) == 7
d27d41
+        else:
d27d41
+            assert len(ok) == 28
d27d41
+            assert len(warn) == 7
d27d41
 
d27d41
         for result in warn:
d27d41
             assert result.kw.get('msg') == \
d27d41
@@ -611,12 +739,14 @@ class TestDNSSystemRecords(BaseTest):
d27d41
 
d27d41
     @patch(resolve_rrsets_import)
d27d41
     @patch('ipapython.dnsutil.query_srv')
d27d41
-    @patch('dns.resolver.query')
d27d41
-    def test_dnsrecords_bad_realm(self, mock_query, mock_query_srv,
d27d41
-                                  mock_rrset):
d27d41
+    @patch('ipahealthcheck.ipa.idns.query_uri')
d27d41
+    @patch('ipahealthcheck.ipa.idns.resolve')
d27d41
+    def test_dnsrecords_bad_realm(self, mock_query, mock_query_uri,
d27d41
+                                  mock_query_srv, mock_rrset):
d27d41
         """Unexpected Kerberos TXT record"""
d27d41
         mock_query.side_effect = fake_query_one_txt
d27d41
         mock_query_srv.side_effect = query_srv([m_api.env.host])
d27d41
+        mock_query_uri.side_effect = query_uri([m_api.env.host])
d27d41
         mock_rrset.side_effect = [
d27d41
             resolve_rrsets(m_api.env.host, (rdatatype.A, rdatatype.AAAA))
d27d41
         ]
d27d41
@@ -638,12 +768,20 @@ class TestDNSSystemRecords(BaseTest):
d27d41
 
d27d41
         self.results = capture_results(f)
d27d41
 
d27d41
-        assert len(self.results) == 10
d27d41
+        if has_uri_support:
d27d41
+            expected = 14
d27d41
+        else:
d27d41
+            expected = 10
d27d41
+        assert len(self.results) == expected
d27d41
 
d27d41
         ok = get_results_by_severity(self.results.results, constants.SUCCESS)
d27d41
         warn = get_results_by_severity(self.results.results, constants.WARNING)
d27d41
-        assert len(ok) == 9
d27d41
-        assert len(warn) == 1
d27d41
+        if has_uri_support:
d27d41
+            assert len(ok) == 13
d27d41
+            assert len(warn) == 1
d27d41
+        else:
d27d41
+            assert len(ok) == 9
d27d41
+            assert len(warn) == 1
d27d41
 
d27d41
         result = warn[0]
d27d41
         assert result.kw.get('msg') == 'expected realm missing'
d27d41
@@ -651,11 +789,13 @@ class TestDNSSystemRecords(BaseTest):
d27d41
 
d27d41
     @patch(resolve_rrsets_import)
d27d41
     @patch('ipapython.dnsutil.query_srv')
d27d41
-    @patch('dns.resolver.query')
d27d41
-    def test_dnsrecords_one_with_ad(self, mock_query, mock_query_srv,
d27d41
-                                    mock_rrset):
d27d41
+    @patch('ipahealthcheck.ipa.idns.query_uri')
d27d41
+    @patch('ipahealthcheck.ipa.idns.resolve')
d27d41
+    def test_dnsrecords_one_with_ad(self, mock_query, mock_query_uri,
d27d41
+                                    mock_query_srv, mock_rrset):
d27d41
         mock_query.side_effect = fake_query_one
d27d41
         mock_query_srv.side_effect = query_srv([m_api.env.host], True)
d27d41
+        mock_query_uri.side_effect = query_uri([m_api.env.host])
d27d41
         mock_rrset.side_effect = [
d27d41
             resolve_rrsets(m_api.env.host, (rdatatype.A, rdatatype.AAAA))
d27d41
         ]
d27d41
@@ -678,7 +818,11 @@ class TestDNSSystemRecords(BaseTest):
d27d41
 
d27d41
         self.results = capture_results(f)
d27d41
 
d27d41
-        assert len(self.results) == 16
d27d41
+        if has_uri_support:
d27d41
+            expected = 20
d27d41
+        else:
d27d41
+            expected = 16
d27d41
+        assert len(self.results) == expected
d27d41
 
d27d41
         for result in self.results.results:
d27d41
             assert result.result == constants.SUCCESS
d27d41
-- 
d27d41
2.31.1
d27d41