mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-11 03:19:59 -04:00
split ede24 system test into separate modules
Because ede24 system tests require stopping/restarting server, there is always the risk that the test ends (with a failure) with server in an wrong and impredictible state. This would make the other tests to fail in a strange way as well. To avoid this problem, split the test into different modules, so if a module fails, the other module is not impacted as it uses separate server instances.
This commit is contained in:
parent
611a556a6c
commit
11a4df7ec5
4 changed files with 103 additions and 78 deletions
39
bin/tests/system/ede24/common.py
Normal file
39
bin/tests/system/ede24/common.py
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
# 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.
|
||||
|
||||
import isctest
|
||||
|
||||
|
||||
def check_soa_noerror():
|
||||
msg = isctest.query.create("foo.fr", "SOA")
|
||||
res = isctest.query.udp(msg, "10.53.0.2")
|
||||
isctest.check.noerror(res)
|
||||
|
||||
|
||||
def check_soa_servfail_ede24(edemsg):
|
||||
msg = isctest.query.create("foo.fr", "SOA")
|
||||
res = isctest.query.udp(msg, "10.53.0.2")
|
||||
isctest.check.servfail(res)
|
||||
|
||||
# Few CI machines uses old version of dnspython which doesn't supports
|
||||
# EDNS, so we effectively bypass the check for those one. (It's fine, a
|
||||
# bunch of other CI machines _does_ have recent version of dnspython).
|
||||
if hasattr(res, "extended_errors"):
|
||||
assert len(res.extended_errors()) == 1
|
||||
assert res.extended_errors()[0].to_text() == f"EDE 24 (Invalid Data): {edemsg}"
|
||||
|
||||
|
||||
def check_ns2_ready(ns2):
|
||||
# Sanity check that everything works first, once we're sure the foo.fr zone
|
||||
# has transfered to ns2.
|
||||
with ns2.watch_log_from_start() as watcher:
|
||||
watcher.wait_for_line("Transfer status: success")
|
||||
check_soa_noerror()
|
||||
|
|
@ -1,78 +0,0 @@
|
|||
# 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.
|
||||
|
||||
import os
|
||||
|
||||
import isctest
|
||||
|
||||
|
||||
def check_soa_noerror():
|
||||
msg = isctest.query.create("foo.fr", "SOA")
|
||||
res = isctest.query.udp(msg, "10.53.0.2")
|
||||
isctest.check.noerror(res)
|
||||
|
||||
|
||||
def check_soa_servfail_ede24(edemsg):
|
||||
msg = isctest.query.create("foo.fr", "SOA")
|
||||
res = isctest.query.udp(msg, "10.53.0.2")
|
||||
isctest.check.servfail(res)
|
||||
|
||||
# Few CI machines uses old version of dnspython which doesn't supports
|
||||
# EDNS, so we effectively bypass the check for those one. (It's fine, a
|
||||
# bunch of other CI machines _does_ have recent version of dnspython).
|
||||
if hasattr(res, "extended_errors"):
|
||||
assert len(res.extended_errors()) == 1
|
||||
assert res.extended_errors()[0].to_text() == f"EDE 24 (Invalid Data): {edemsg}"
|
||||
|
||||
|
||||
def test_ede24_noloaded(ns1, ns2):
|
||||
# Sanity check that everything works first, once we're sure the foo.fr zone
|
||||
# has transfered to ns2.
|
||||
with ns2.watch_log_from_start() as watcher:
|
||||
watcher.wait_for_line("Transfer status: success")
|
||||
check_soa_noerror()
|
||||
|
||||
# Stop all servers, and we'll restart only ns2.
|
||||
ns1.stop()
|
||||
ns2.stop()
|
||||
with ns2.watch_log_from_here() as watcher:
|
||||
ns2.start(["--noclean", "--restart", "--port", os.environ["PORT"]])
|
||||
watcher.wait_for_line("failure trying primary 10.53.0.1")
|
||||
|
||||
# ns2 attempts an XFR but ns1 since is off the zone DB can't be loaded.
|
||||
check_soa_servfail_ede24("zone not loaded")
|
||||
|
||||
|
||||
def test_ede24_expired(ns1, ns2):
|
||||
# Restart ns1 then checks the server notify the zone in ns2 and ns2 serves
|
||||
# the zone again.
|
||||
with ns2.watch_log_from_here() as watcher:
|
||||
ns1.start(["--noclean", "--restart", "--port", os.environ["PORT"]])
|
||||
watcher.wait_for_line("Transfer status: success")
|
||||
check_soa_noerror()
|
||||
|
||||
# Stop the primary and wait for expiration of the zone in the secondary.
|
||||
with ns2.watch_log_from_here() as watcher:
|
||||
ns1.stop()
|
||||
log_sequence = [
|
||||
" zone foo.fr/IN: expired",
|
||||
" zone foo.fr/IN: stop zone timer",
|
||||
]
|
||||
watcher.wait_for_sequence(log_sequence)
|
||||
|
||||
# ns2 can't answer anymore.
|
||||
check_soa_servfail_ede24("zone expired")
|
||||
|
||||
# Restart the primary and wait for the zone to be back up again.
|
||||
with ns2.watch_log_from_here() as watcher:
|
||||
ns1.start(["--noclean", "--restart", "--port", os.environ["PORT"]])
|
||||
watcher.wait_for_line("Transfer status: success")
|
||||
check_soa_noerror()
|
||||
36
bin/tests/system/ede24/tests_ede24_expired.py
Normal file
36
bin/tests/system/ede24/tests_ede24_expired.py
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
# 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.
|
||||
|
||||
import os
|
||||
|
||||
from ede24.common import check_ns2_ready, check_soa_noerror, check_soa_servfail_ede24
|
||||
|
||||
|
||||
def test_ede24_expired(ns1, ns2):
|
||||
check_ns2_ready(ns2)
|
||||
|
||||
# Stop the primary and wait for expiration of the zone in the secondary.
|
||||
with ns2.watch_log_from_here() as watcher:
|
||||
ns1.stop()
|
||||
log_sequence = [
|
||||
" zone foo.fr/IN: expired",
|
||||
" zone foo.fr/IN: stop zone timer",
|
||||
]
|
||||
watcher.wait_for_sequence(log_sequence)
|
||||
|
||||
# ns2 can't answer anymore.
|
||||
check_soa_servfail_ede24("zone expired")
|
||||
|
||||
# Restart the primary and wait for the zone to be back up again.
|
||||
with ns2.watch_log_from_here() as watcher:
|
||||
ns1.start(["--noclean", "--restart", "--port", os.environ["PORT"]])
|
||||
watcher.wait_for_line("Transfer status: success")
|
||||
check_soa_noerror()
|
||||
28
bin/tests/system/ede24/tests_ede24_noloaded.py
Normal file
28
bin/tests/system/ede24/tests_ede24_noloaded.py
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
# 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.
|
||||
|
||||
import os
|
||||
|
||||
from ede24.common import check_ns2_ready, check_soa_servfail_ede24
|
||||
|
||||
|
||||
def test_ede24_noloaded(ns1, ns2):
|
||||
check_ns2_ready(ns2)
|
||||
|
||||
# Stop all servers, and we'll restart only ns2.
|
||||
ns1.stop()
|
||||
ns2.stop()
|
||||
with ns2.watch_log_from_here() as watcher:
|
||||
ns2.start(["--noclean", "--restart", "--port", os.environ["PORT"]])
|
||||
watcher.wait_for_line("failure trying primary 10.53.0.1")
|
||||
|
||||
# ns2 attempts an XFR but ns1 since is off the zone DB can't be loaded.
|
||||
check_soa_servfail_ede24("zone not loaded")
|
||||
Loading…
Reference in a new issue