import pytest
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
-
import isctest
from isctest.instance import NamedInstance
ResponseAction,
)
-try:
- dns_namerelation_equal = dns.name.NameRelation.EQUAL
- dns_namerelation_subdomain = dns.name.NameRelation.SUBDOMAIN
-except AttributeError: # dnspython < 2.3.0 compat
- dns_namerelation_equal = dns.name.NAMERELN_EQUAL # type: ignore
- dns_namerelation_subdomain = dns.name.NAMERELN_SUBDOMAIN # type: ignore
-
def get_dname_rrset_at_name(
zone: dns.zone.Zone, name: dns.name.Name
relation, _, _ = qctx.qname.fullcompare(self_example_dname)
- if relation in (dns_namerelation_equal, dns_namerelation_subdomain):
+ if relation in (dns.name.NameRelation.EQUAL, dns.name.NameRelation.SUBDOMAIN):
del qctx.response.authority[:]
qctx.response.set_rcode(dns.rcode.NOERROR)
- if relation == dns_namerelation_subdomain:
+ if relation == dns.name.NameRelation.SUBDOMAIN:
qctx.response.answer.append(dname_rrset)
cname_rrset = dns.rrset.from_text(
qctx.qname,
import pytest
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
-
pytestmark = pytest.mark.extra_artifacts(
[
"dig.out.*",
import isctest
import pytest
-pytest.importorskip("dns", minversion="2.0.0")
import dns.exception
import dns.message
import dns.name
import pytest
-pytest.importorskip("dns", minversion="2.5.0")
-
import dns.message
import isctest
import pytest
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
-
pytestmark = pytest.mark.extra_artifacts(
[
"dig.out.*",
import pytest
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
-
pytestmark = pytest.mark.extra_artifacts(
[
"delv.out.*",
import pytest
import isctest
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
-
import dns.message
pytestmark = pytest.mark.extra_artifacts(
import pytest
pytest.importorskip("cryptography")
-pytest.importorskip(
- "dns", minversion="2.7.0"
-) # dns.dnssec.sign_zone(deterministic=...) needed
from cryptography.hazmat.primitives.asymmetric import ec
import isctest
from isctest.util import param
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
-
pytestmark = pytest.mark.extra_artifacts(
[
# See the COPYRIGHT file distributed with this work for additional
# information regarding copyright ownership.
-import pytest
from dns import flags
import isctest
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
-
def bootstrap():
return {
# information regarding copyright ownership.
import isctest
-import pytest
-
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
def bootstrap():
import isctest
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
-
pytestmark = pytest.mark.extra_artifacts(
[
import isctest
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
-
pytestmark = pytest.mark.extra_artifacts(
[
import pytest
-pytest.importorskip("dns", minversion="2.0.0")
from isctest.kasp import SettimeOptions
import isctest
import isctest
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
-
pytestmark = pytest.mark.extra_artifacts(
[
import time
from dns import flags, name, rdataclass, rdatatype
+from dns.edns import EDECode
import pytest
import isctest
-from isctest.compat import EDECode
import isctest.mark
from isctest.util import param
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
pytestmark = pytest.mark.extra_artifacts(
[
import isctest
-import pytest
-
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
-
def bootstrap():
return {
import isctest
-import pytest
-
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
-
def bootstrap():
assert not os.path.exists("ns4/managed-keys.bind.jnl")
# information regarding copyright ownership.
+from dns.edns import EDECode
import pytest
import isctest
-from isctest.compat import EDECode
from isctest.util import param
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
-
def bootstrap():
return {
import isctest
-import pytest
-
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
-
def bootstrap():
return {
import isctest.mark
import pytest
-pytest.importorskip("dns", minversion="2.0.0")
import dns.rrset
pytestmark = [
import pytest
-pytest.importorskip("dns")
+import dns
import dns.exception
import dns.name
import dns.rdataclass
# See the COPYRIGHT file distributed with this work for additional
# information regarding copyright ownership.
+from dns.edns import EDECode
+
import isctest
-from isctest.compat import EDECode
def check_soa_noerror():
import pytest
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
pytestmark = pytest.mark.extra_artifacts(
[
import pytest
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
pytestmark = pytest.mark.extra_artifacts(
[
import isctest
-pytest.importorskip("dns", minversion="2.0.0")
pytestmark = pytest.mark.extra_artifacts(
[
import pytest
import isctest
-pytest.importorskip("dns")
pytestmark = pytest.mark.extra_artifacts(["conf/*.conf"])
tcp_handler: Optional[_TcpHandler],
pidfile: Optional[str] = None,
) -> None:
- self._abort_if_on_dnspython_version_less_than_2_0_0()
logging.basicConfig(
format="%(asctime)s %(levelname)8s %(message)s",
level=os.environ.get("ANS_LOG_LEVEL", "INFO").upper(),
self._pidfile: Optional[str] = pidfile
self._work_done: Optional[asyncio.Future] = None
- @classmethod
- def _abort_if_on_dnspython_version_less_than_2_0_0(cls) -> None:
- if dns.version.MAJOR < 2:
- error = f"Using {cls.__name__} requires dnspython >= 2.0.0; "
- error += 'add `pytest.importorskip("dns", minversion="2.0.0")` '
- error += "to the test module to skip this test."
- raise RuntimeError(error)
-
def _get_ipv4_address_from_directory_name(self) -> str:
containing_directory = pathlib.Path().absolute().stem
match_result = re.match(r"ans(?P<index>\d+)", containing_directory)
from typing import cast, List, Optional
import dns.edns
+from dns.edns import EDECode, EDEOption
import dns.flags
import dns.message
import dns.rcode
import dns.zone
import isctest.log
-from isctest.compat import dns_rcode, EDECode, EDEOption
def rcode(message: dns.message.Message, expected_rcode) -> None:
def noerror(message: dns.message.Message) -> None:
- rcode(message, dns_rcode.NOERROR)
+ rcode(message, dns.rcode.NOERROR)
def notimp(message: dns.message.Message) -> None:
- rcode(message, dns_rcode.NOTIMP)
+ rcode(message, dns.rcode.NOTIMP)
def refused(message: dns.message.Message) -> None:
- rcode(message, dns_rcode.REFUSED)
+ rcode(message, dns.rcode.REFUSED)
def servfail(message: dns.message.Message) -> None:
- rcode(message, dns_rcode.SERVFAIL)
+ rcode(message, dns.rcode.SERVFAIL)
def adflag(message: dns.message.Message) -> None:
def noede(message: dns.message.Message) -> None:
"""Check that message contains no EDE option."""
- if not hasattr(dns.edns, "EDECode"):
- # dnspython<2.2.0 doesn't support EDE, skip check
- return
-
ede_options = _extract_ede_options(message)
assert not ede_options, f"unexpected EDE options {ede_options} in {message}"
message: dns.message.Message, code: EDECode, text: Optional[str] = None
) -> None:
"""Check if message contains expected EDE code (and its text)."""
- if not hasattr(dns.edns, "EDECode"):
- # dnspython<2.2.0 doesn't support EDE, skip check
- return
-
msg_opts = _extract_ede_options(message)
matching_opts = [opt for opt in msg_opts if opt.code == code]
def named_alive(named_proc, resolver_ip):
assert named_proc.poll() is None, "named isn't running"
msg = isctest.query.create("version.bind", "TXT", "CH")
- isctest.query.tcp(msg, resolver_ip, expected_rcode=dns_rcode.NOERROR)
+ isctest.query.tcp(msg, resolver_ip, expected_rcode=dns.rcode.NOERROR)
def notauth(message: dns.message.Message) -> None:
+++ /dev/null
-# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
-#
-# SPDX-License-Identifier: MPL-2.0
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, you can obtain one at https://mozilla.org/MPL/2.0/.
-#
-# See the COPYRIGHT file distributed with this work for additional
-# information regarding copyright ownership.
-
-from typing import Any, TYPE_CHECKING
-
-import dns.edns
-import dns.rcode
-
-# compatiblity with dnspython<2.0.0
-try:
- # In dnspython>=2.0.0, dns.rcode.Rcode class is available
- # pylint: disable=invalid-name
- dns_rcode = dns.rcode.Rcode # type: Any
-except AttributeError:
- # In dnspython<2.0.0, selected rcodes are available as integers directly
- # from dns.rcode
- dns_rcode = dns.rcode
-
-
-if TYPE_CHECKING:
- EDECode = dns.edns.EDECode
- EDEOption = dns.edns.EDEOption
-else:
- try: # compatiblity with dnspython<2.2.0
- EDECode = dns.edns.EDECode
- except AttributeError:
- # In dnspython<2.2.0, the dns.edns.EDECode doesn't exist.
- #
- # The primary use-case is for us to use existing EDECode objects from the
- # class, e.g. EDECode.FILTERED. To mimick this behavior, use a string
- # factory that just turns the attribute name into a string.
- #
- # The used compatibility hack doesn't really matter (as long as EDECode.xxx
- # doesn't raise exception), as with dnspython versions prior to 2.2.0, any
- # EDE checking will be skipped anyway.
- class _CompatEDECode:
- def __getattr__(self, name: str) -> str:
- return name
-
- EDECode = _CompatEDECode()
- try:
- EDEOption = dns.edns.EDEOption
- except AttributeError:
- # In dnspython<2.2.0, the dns.edns.EDEOption doesn't exist, so we stub it to be
- # able to use it in type annotations.
- class EDEOption:
- def __new__(cls, *args, **kwargs):
- raise RuntimeError("Using EDEOption requires dnspython>=2.2.0")
-
-
-# pylint: disable=unused-import
-try:
- from dns.dnssec import DSDigest
-except ImportError: # dnspython<2.0.0
- import enum
-
- class DSDigest(enum.IntEnum): # type: ignore
- """DNSSEC Delgation Signer Digest Algorithm"""
-
- SHA1 = 1
- SHA256 = 2
- SHA384 = 4
RDATACLASS_MAX = RDATATYPE_MAX = 65535
-try:
- dns_rdataclasses = builds(dns.rdataclass.RdataClass, integers(0, RDATACLASS_MAX))
- dns_rdatatypes = builds(dns.rdatatype.RdataType, integers(0, RDATATYPE_MAX))
-except AttributeError:
- # In old dnspython versions, RDataTypes and RDataClasses are int and not enums.
- dns_rdataclasses = integers(0, RDATACLASS_MAX) # type: ignore
- dns_rdatatypes = integers(0, RDATATYPE_MAX) # type: ignore
+dns_rdataclasses = builds(dns.rdataclass.RdataClass, integers(0, RDATACLASS_MAX))
+dns_rdatatypes = builds(dns.rdatatype.RdataType, integers(0, RDATATYPE_MAX))
dns_rdataclasses_without_meta = dns_rdataclasses.filter(dns.rdataclass.is_metaclass)
# NOTE: This should really be `dns_rdatatypes_without_meta = dns_rdatatypes_without_meta.filter(dns.rdatatype.is_metatype()`,
from pathlib import Path
import re
-import dns.message
+import dns.update
import dns.rcode
from .log import debug, WatchLogFromStart, WatchLogFromHere
return self._rndc(command, timeout=timeout, **kwargs)
def nsupdate(
- self, update_msg: dns.message.Message, expected_rcode=dns.rcode.NOERROR
+ self, update_msg: dns.update.UpdateMessage, expected_rcode=dns.rcode.NOERROR
):
"""
Issue a dynamic update to a server's zone.
"""
- # FUTURE update_msg is actually dns.update.UpdateMessage, but it not
- # typed properly here in order to support use of this module with
- # dnspython<2.0.0
zone = str(update_msg.zone[0].name) # type: ignore[attr-defined]
try:
response = udp(
import dns.rrset
import dns.tsig
-import pytest
-
import isctest.log
import isctest.query
import isctest.util
-from isctest.compat import DSDigest
from isctest.instance import NamedInstance
from isctest.template import TrustAnchor
from isctest.run import EnvCmd
@property
def dnskey(self) -> dns.rrset.RRset:
- pytest.importorskip("dns", minversion="2.2.0") # dns.zonefile.read_rrsets
with open(self.keyfile, "r", encoding="utf-8") as file:
rrsets = dns.zonefile.read_rrsets(
file.read(),
), f"DNSKEY not found in {self.keyfile}"
return dnskey_rr
- def into_ta(self, ta_type: str, dsdigest=DSDigest.SHA256) -> TrustAnchor:
+ def into_ta(self, ta_type: str, dsdigest=dns.dnssec.DSDigest.SHA256) -> TrustAnchor:
dnskey = self.dnskey
if ta_type in ["static-ds", "initial-ds"]:
ds = dns.dnssec.make_ds(dnskey.name, dnskey[0], dsdigest)
return cls(zonedb)
def __init__(self, zone: dns.zone.Zone):
- self._abort_on_old_dnspython()
self.zone = zone
assert self.zone.origin # mypy hack
# based on individual nodes but not relationship between nodes
.union(self.reachable_dnames)
)
- def _abort_on_old_dnspython(self):
- if not hasattr(dns.name, "NameRelation"):
- raise RuntimeError(
- "ZoneAnalyzer requires dnspython>=2.3.0 for dns.name.NameRelation support. "
- "Use pytest.importorskip('dns', minversion='2.3.0') to the test module to "
- "skip this test."
- )
-
def get_names_with_type(self, rdtype) -> FrozenSet[Name]:
return frozenset(
name for name in self.zone if self.zone.get_rdataset(name, rdtype)
import dns.message
import isctest.log
-from isctest.compat import dns_rcode
QUERY_TIMEOUT = 10
source: Optional[str] = None,
timeout: int = QUERY_TIMEOUT,
attempts: int = 10,
- expected_rcode: dns_rcode = None,
+ expected_rcode: Optional[dns.rcode.Rcode] = None,
verify: bool = False,
log_query: bool = True,
log_response: bool = True,
time.sleep(1)
if expected_rcode is not None:
- last_rcode = dns_rcode.to_text(res.rcode()) if res else None
+ last_rcode = dns.rcode.to_text(res.rcode()) if res else None
isctest.log.debug(
- f"isc.query.{query_func.__name__}(): expected rcode={dns_rcode.to_text(expected_rcode)}, last rcode={last_rcode}"
+ f"isc.query.{query_func.__name__}(): expected rcode={dns.rcode.to_text(expected_rcode)}, last rcode={last_rcode}"
)
raise dns.exception.Timeout
import pytest
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
-
pytestmark = pytest.mark.extra_artifacts(
[
"dig.out*",
import dns.update
import pytest
-pytest.importorskip("dns", minversion="2.0.0")
import isctest
import isctest.mark
from isctest.kasp import (
import isctest
import pytest
-# Everything from getting a big answer to creating an RR set with thousands
-# of records takes minutes of CPU and real time with dnspython < 2.0.0.
-pytest.importorskip("dns", minversion="2.0.0")
import dns.rrset
# information regarding copyright ownership.
import os
-
from datetime import timedelta
import pytest
-pytest.importorskip("dns", minversion="2.0.0")
import isctest
import isctest.mark
import pytest
-pytest.importorskip("dns", minversion="2.0.0")
import dns
import dns.update
# See the COPYRIGHT file distributed with this work for additional
# information regarding copyright ownership.
-import pytest
-
-pytest.importorskip("dns", minversion="2.7.0")
-
import isctest
import pytest
-pytest.importorskip("dns", minversion="2.5.0")
import dns.dnssec
import dns.message
import dns.name
import shutil
import time
+import dns
import dns.update
import pytest
-pytest.importorskip("dns", minversion="2.0.0")
import isctest
import isctest.mark
from isctest.vars.algorithms import RSASHA1
import os
+import dns
import dns.update
import pytest
-pytest.importorskip("dns", minversion="2.0.0")
import isctest
import isctest.mark
from isctest.vars.algorithms import RSASHA1
import shutil
import time
+import dns
import dns.update
import pytest
-pytest.importorskip("dns", minversion="2.0.0")
import isctest
import isctest.mark
from isctest.vars.algorithms import RSASHA1
import shutil
import time
+import dns
import pytest
-pytest.importorskip("dns", minversion="2.0.0")
import isctest
from nsec3.common import (
ALGORITHM,
import os
+import dns
import dns.update
import pytest
-pytest.importorskip("dns", minversion="2.0.0")
import isctest
import isctest.mark
from nsec3.common import (
# pylint: disable=redefined-outer-name,unused-import
+from datetime import timedelta
import os
import shutil
-from datetime import timedelta
-
+import dns
import dns.update
import pytest
-pytest.importorskip("dns", minversion="2.0.0")
import isctest
import isctest.mark
from isctest.vars.algorithms import RSASHA256
import pytest
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
-
pytestmark = pytest.mark.extra_artifacts(
[
"Kxxx*",
import isctest
import pytest
-pytest.importorskip("dns", minversion="2.0.0")
+import dns
import dns.exception
import dns.message
import dns.name
import pytest
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
pytestmark = pytest.mark.extra_artifacts(
[
import pytest
-pytest.importorskip("dns", minversion="2.0.0")
+import dns
import dns.update
import isctest
import pytest
-pytest.importorskip("dns", minversion="2.0.0")
+import dns
import dns.rcode
import dns.rrset
import isctest
-from isctest.compat import dns_rcode
pytestmark = pytest.mark.extra_artifacts(
msg,
ip="10.53.0.3",
source="10.53.0.2",
- expected_rcode=dns_rcode.NOERROR,
+ expected_rcode=dns.rcode.NOERROR,
)
isctest.query.tcp(
msg,
ip="10.53.0.3",
source="10.53.0.5",
- expected_rcode=dns_rcode.NOERROR,
+ expected_rcode=dns.rcode.NOERROR,
)
msg = isctest.query.create(qname, "A")
import pytest
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
pytestmark = pytest.mark.extra_artifacts(
[
import itertools
from pathlib import Path
+import dns
import dns.name
from dns.name import Name
import pytest
import isctest
import isctest.name
-pytest.importorskip("dns", minversion="2.3.0")
# set of properies present in the tested zone - read by tests_zone_analyzer.py
CATEGORIES = frozenset(
import time
+from dns.edns import EDECode
+
import isctest
-from isctest.compat import EDECode
def check_sfcache_ede(ns, ede):
import pytest
-pytest.importorskip("dns", minversion="2.0.0")
+import dns
import dns.exception
import isctest
import pytest
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
pytestmark = pytest.mark.extra_artifacts(
[
from datetime import datetime
import pytest
+import requests
import isctest.mark
pytest.register_assert_rewrite("generic")
import generic
-requests = pytest.importorskip("requests")
pytestmark = [
isctest.mark.with_json_c,
import xml.etree.ElementTree as ET
import pytest
+import requests
import isctest.mark
pytest.register_assert_rewrite("generic")
import generic
-requests = pytest.importorskip("requests")
pytestmark = [
isctest.mark.with_libxml2,
import pytest
-pytest.importorskip("dns", minversion="2.0.0")
+import dns
import dns.message
import dns.query
import pytest
-pytest.importorskip("dns", minversion="2.0.0")
+import dns
import dns.edns
import dns.message
import dns.name
from hypothesis import strategies, given, settings
-pytest.importorskip("dns.dnssectypes")
from dns.dnssectypes import NSEC3Hash
import dns.dnssec
import pytest
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
-
import dns.message
import dns.query
import dns.tsigkeyring
]
)
-# TSIG queries not supported by isctest.asyncserver with old dnspython
-pytest.importorskip("dns", minversion="2.0.0")
-
def test_tsig(run_tests_sh):
run_tests_sh()
import pytest
-pytest.importorskip("dns", minversion="2.7.0") # TSIG parsing without validation
-
import dns.exception
import dns.message
import dns.name
import isctest
-pytest.importorskip("dns")
+import dns
import dns.message
import dns.name
import dns.rdata
import pytest
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
pytestmark = pytest.mark.extra_artifacts(
[
import pytest
-pytest.importorskip("dns", minversion="2.0.0")
+import dns
import dns.message
import dns.name
import dns.query
import pytest
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
pytestmark = pytest.mark.extra_artifacts(
[
import pytest
-# isctest.asyncserver requires dnspython >= 2.0.0
-pytest.importorskip("dns", minversion="2.0.0")
pytestmark = pytest.mark.extra_artifacts(
[