]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Ensure named always terminates in the shutdown test
authorTom Krizek <tkrizek@isc.org>
Thu, 6 Apr 2023 12:05:30 +0000 (14:05 +0200)
committerTom Krizek <tkrizek@isc.org>
Wed, 10 May 2023 08:56:22 +0000 (10:56 +0200)
Previously, if an exception would happen inside the `with` block, the
error handler would wait indefinitely for the process to end. That would
never happen, since the termination signal was never sent to named and
the test would get stuck.

Using the try-finally block ensures that the named process is always
killed and any exception or errors will be handled gracefully.

bin/tests/system/shutdown/tests_shutdown.py

index 8a099067d1d1dca31b7a90ca9c54588f61311597..dee0fb3cf8b6fd8f3b634b4c1ba28ce8efe1f80b 100755 (executable)
@@ -189,15 +189,18 @@ def test_named_shutdown(named_port, control_port):
     for kill_method in ("rndc", "sigterm"):
         named_cmdline = [named, "-c", cfg_file, "-f"]
         with subprocess.Popen(named_cmdline, cwd=cfg_dir) as named_proc:
-            assert named_proc.poll() is None, "named isn't running"
-            assert wait_for_named_loaded(resolver)
-            do_work(
-                named_proc,
-                resolver,
-                rndc_cmd,
-                kill_method,
-                n_workers=12,
-                n_queries=16,
-            )
-            assert wait_for_proc_termination(named_proc)
-            assert named_proc.returncode == 0, "named crashed"
+            try:
+                assert named_proc.poll() is None, "named isn't running"
+                assert wait_for_named_loaded(resolver)
+                do_work(
+                    named_proc,
+                    resolver,
+                    rndc_cmd,
+                    kill_method,
+                    n_workers=12,
+                    n_queries=16,
+                )
+                assert wait_for_proc_termination(named_proc)
+                assert named_proc.returncode == 0, "named crashed"
+            finally:  # Ensure named is terminated in case of an exception
+                named_proc.kill()