]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Add start/stop wrappers to control NamedInstance
authorNicki Křížek <nicki@isc.org>
Thu, 23 Jan 2025 15:00:36 +0000 (16:00 +0100)
committerMichal Nowak <mnowak@isc.org>
Tue, 4 Feb 2025 12:35:38 +0000 (12:35 +0000)
The start()/stop() functions can be used in the pytests in the same way
as start_server and stop_server functions were used in shell tests. Note
that the servers obtained through the servers fixture are still started
and stopped by the test runner at the start and end of the test. This
makes these functions mostly useful for restarting the server(s)
mid-test.

bin/tests/system/isctest/instance.py

index d3b3083262a4122c289a819a93027f3180ab42d5..97f42294e5f3d107bc8d6e61fc34ed848c9a0e77 100644 (file)
 # See the COPYRIGHT file distributed with this work for additional
 # information regarding copyright ownership.
 
-from typing import NamedTuple, Optional
+from typing import List, NamedTuple, Optional
 
 import logging
 import os
+from pathlib import Path
 import re
 
 from .rndc import RNDCBinaryExecutor, RNDCException, RNDCExecutor
+from .run import perl
 from .log import info, LogFile, WatchLogFromStart, WatchLogFromHere
 
 
@@ -67,6 +69,12 @@ class NamedInstance:
         `rndc_executor` is an object implementing the `RNDCExecutor` interface
         that is used for executing RNDC commands on this `named` instance.
         """
+        self.directory = Path(identifier).absolute()
+        if not self.directory.is_dir():
+            raise ValueError(f"{self.directory} isn't a directory")
+        self.system_test_name = self.directory.parent.name
+
+        self.identifier = identifier
         self.ip = self._identifier_to_ip(identifier)
         if ports is None:
             ports = NamedPorts.from_env()
@@ -175,3 +183,19 @@ class NamedInstance:
             info(fmt, args)
         else:
             self._rndc_logger.info(fmt, args)
+
+    def stop(self, args: Optional[List[str]] = None) -> None:
+        """Stop the instance."""
+        args = args or []
+        perl(
+            f"{os.environ['srcdir']}/stop.pl",
+            [self.system_test_name, self.identifier] + args,
+        )
+
+    def start(self, args: Optional[List[str]] = None) -> None:
+        """Start the instance."""
+        args = args or []
+        perl(
+            f"{os.environ['srcdir']}/start.pl",
+            [self.system_test_name, self.identifier] + args,
+        )