]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
split ede24 system test into separate modules
authorColin Vidal <colin@isc.org>
Thu, 6 Nov 2025 13:35:33 +0000 (14:35 +0100)
committerColin Vidal <colin@isc.org>
Thu, 6 Nov 2025 14:13:29 +0000 (15:13 +0100)
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.

bin/tests/system/ede24/common.py [new file with mode: 0644]
bin/tests/system/ede24/tests_ede24.py [deleted file]
bin/tests/system/ede24/tests_ede24_expired.py [new file with mode: 0644]
bin/tests/system/ede24/tests_ede24_noloaded.py [new file with mode: 0644]

diff --git a/bin/tests/system/ede24/common.py b/bin/tests/system/ede24/common.py
new file mode 100644 (file)
index 0000000..89b37b2
--- /dev/null
@@ -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()
diff --git a/bin/tests/system/ede24/tests_ede24.py b/bin/tests/system/ede24/tests_ede24.py
deleted file mode 100644 (file)
index a492ff7..0000000
+++ /dev/null
@@ -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()
diff --git a/bin/tests/system/ede24/tests_ede24_expired.py b/bin/tests/system/ede24/tests_ede24_expired.py
new file mode 100644 (file)
index 0000000..02e129f
--- /dev/null
@@ -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()
diff --git a/bin/tests/system/ede24/tests_ede24_noloaded.py b/bin/tests/system/ede24/tests_ede24_noloaded.py
new file mode 100644 (file)
index 0000000..90b77b8
--- /dev/null
@@ -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")