From a07f10658c0be5c2647e4cc299881b8b1c08b538 Mon Sep 17 00:00:00 2001 From: vshepard Date: Sun, 30 Jun 2024 22:07:05 +0200 Subject: [PATCH] Add expect_error to pg_upgrade --- testgres/node.py | 5 +++-- testgres/operations/local_ops.py | 13 +++++++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/testgres/node.py b/testgres/node.py index 13d13294..36c1b3c2 100644 --- a/testgres/node.py +++ b/testgres/node.py @@ -1627,7 +1627,7 @@ def set_auto_conf(self, options, config='postgresql.auto.conf', rm_options={}): self.os_ops.write(path, auto_conf, truncate=True) - def upgrade_from(self, old_node, options=None): + def upgrade_from(self, old_node, options=None, expect_error=False): """ Upgrade this node from an old node using pg_upgrade. @@ -1656,10 +1656,11 @@ def upgrade_from(self, old_node, options=None): "--new-datadir", self.data_dir, "--old-port", str(old_node.port), "--new-port", str(self.port), + "--copy" ] upgrade_command += options - return self.os_ops.exec_command(upgrade_command) + return self.os_ops.exec_command(upgrade_command, expect_error=expect_error) def _get_bin_path(self, filename): if self.bin_dir: diff --git a/testgres/operations/local_ops.py b/testgres/operations/local_ops.py index 313d7060..756f5449 100644 --- a/testgres/operations/local_ops.py +++ b/testgres/operations/local_ops.py @@ -19,13 +19,18 @@ CMD_TIMEOUT_SEC = 60 error_markers = [b'error', b'Permission denied', b'fatal'] +err_out_markers = [b'Failure'] -def has_errors(output): +def has_errors(output=None, error=None): if output: if isinstance(output, str): output = output.encode(get_default_encoding()) - return any(marker in output for marker in error_markers) + return any(marker in output for marker in err_out_markers) + if error: + if isinstance(error, str): + error = error.encode(get_default_encoding()) + return any(marker in error for marker in error_markers) return False @@ -107,8 +112,8 @@ def exec_command(self, cmd, wait_exit=False, verbose=False, expect_error=False, process, output, error = self._run_command(cmd, shell, input, stdin, stdout, stderr, get_process, timeout, encoding) if get_process: return process - if process.returncode != 0 or (has_errors(error) and not expect_error): - self._raise_exec_exception('Utility exited with non-zero code. Error `{}`', cmd, process.returncode, error) + if (process.returncode != 0 or has_errors(output=output, error=error)) and not expect_error: + self._raise_exec_exception('Utility exited with non-zero code. Error `{}`', cmd, process.returncode, error or output) if verbose: return process.returncode, output, error