8000 Merge pull request #160 from dmitry-lipetsk/D20241207_001--remote_op-… · postgrespro/testgres@1c73113 · GitHub
[go: up one dir, main page]

Skip to content

Commit 1c73113

Browse files
Merge pull request #160 from dmitry-lipetsk/D20241207_001--remote_op-expect_error
RemoteOperations::exec_command must not raise an exception when 'expect_error' is True (#159)
2 parents 364d358 + cb87d0a commit 1c73113

File tree

6 files changed

+98
-18
lines changed
  • helpers
  • 6 files changed

    +98
    -18
    lines changed

    testgres/operations/remote_ops.py

    Lines changed: 14 additions & 14 deletions
    Original file line numberDiff line numberDiff line change
    @@ -83,26 +83,26 @@ def exec_command(self, cmd, wait_exit=False, verbose=False, expect_error=False,
    8383

    8484
    exit_status = process.returncode
    8585

    86-
    if encoding:
    87-
    result = result.decode(encoding)
    88-
    error = error.decode(encoding)
    89-
    90-
    if expect_error:
    91-
    raise Exception(result, error)
    86+
    assert type(result) == bytes # noqa: E721
    87+
    assert type(error) == bytes # noqa: E721
    9288

    9389
    if not error:
    94-
    error_found = 0
    90+
    error_found = False
    9591
    else:
    96-
    error = normalize_error(error)
    9792
    error_found = exit_status != 0 or any(
    98-
    marker in error for marker in ['error', 'Permission denied', 'fatal', 'No such file or directory']
    93+
    marker in error for marker in [b'error', b'Permission denied', b'fatal', b'No such file or directory']
    9994
    )
    10095

    101-
    if not ignore_errors and error_found:
    102-
    if isinstance(error, bytes):
    103-
    message = b"Utility exited with non-zero code. Error: " + error
    104-
    else:
    105-
    message = f"Utility exited with non-zero code. Error: {error}"
    96+
    assert type(error_found) == bool # noqa: E721
    97+
    98+
    if encoding:
    99+
    result = result.decode(encoding)
    100+
    error = error.decode(encoding)
    101+
    102+
    if not ignore_errors and error_found and not expect_error:
    103+
    error = normalize_error(error)
    104+
    assert type(error) == str # noqa: E721
    105+
    message = "Utility exited with non-zero code. Error: " + error
    106106
    raise ExecUtilException(message=message, command=cmd, exit_code=exit_status, out=result)
    107107

    108108
    if verbose:

    tests/__init__.py

    Whitespace-only changes.

    tests/helpers/__init__.py

    Whitespace-only changes.

    tests/helpers/run_conditions.py

    Lines changed: 11 additions & 0 deletions
    Original file line numberDiff line numberDiff line change
    @@ -0,0 +1,11 @@
    1+
    import pytest
    2+
    import platform
    3+
    4+
    5+
    class RunConditions:
    6+
    # It is not a test kit!
    7+
    __test__ = False
    8+
    9+
    def skip_if_windows():
    10+
    if platform.system().lower() == "windows":
    11+
    pytest.skip("This test does not support Windows.")

    tests/test_local.py

    Lines changed: 54 additions & 0 deletions
    Original file line numberDiff line numberDiff line change
    @@ -0,0 +1,54 @@
    1+
    import pytest
    2+
    3+
    from testgres import ExecUtilException
    4+
    from testgres import LocalOperations
    5+
    6+
    from .helpers.run_conditions import RunConditions
    7+
    8+
    9+
    class TestLocalOperations:
    10+
    11+
    @pytest.fixture(scope="function", autouse=True)
    12+
    def setup(self):
    13+
    self.operations = LocalOperations()
    14+
    15+
    def test_exec_command_success(self):
    16+
    """
    17+
    Test exec_command for successful command execution.
    18+
    """
    19+
    RunConditions.skip_if_windows()
    20+
    21+
    cmd = "python3 --version"
    22+
    response = self.operations.exec_command(cmd, wait_exit=True, shell=True)
    23+
    24+
    assert b'Python 3.' in response
    25+
    26+
    def test_exec_command_failure(self):
    27+
    """
    28+
    Test exec_command for command execution failure.
    29+
    """
    30+
    RunConditions.skip_if_windows()
    31+
    32+
    cmd = "nonexistent_command"
    33+
    while True:
    34+
    try:
    35+
    self.operations.exec_command(cmd, wait_exit=True, shell=True)
    36+
    except ExecUtilException as e:
    37+
    error = e.message
    38+
    break
    39+
    raise Exception("We wait an exception!")
    40+
    assert error == "Utility exited with non-zero code. Error `b'/bin/sh: 1: nonexistent_command: not found\\n'`"
    41+
    42+
    def test_exec_command_failure__expect_error(self):
    43+
    """
    44+
    Test exec_command for command execution failure.
    45+
    """
    46+
    RunConditions.skip_if_windows()
    47+
    48+
    cmd = "nonexistent_command"
    49+
    50+
    exit_status, result, error = self.operations.exec_command(cmd, verbose=True, wait_exit=True, shell=True, expect_error=True)
    51+
    52+
    assert error == b'/bin/sh: 1: nonexistent_command: not found\n'
    53+
    assert exit_status == 127
    54+
    assert result == b''

    tests/test_remote.py

    Lines changed: 19 additions & 4 deletions
    Original file line numberDiff line numberDiff line change
    @@ -30,12 +30,27 @@ def test_exec_command_failure(self):
    3030
    Test exec_command for command execution failure.
    3131
    """
    3232
    cmd = "nonexistent_command"
    33-
    try:
    34-
    exit_status, result, error = self.operations.exec_command(cmd, verbose=True, wait_exit=True)
    35-
    except ExecUtilException as e:
    36-
    error = e.message
    33+
    while True:
    34+
    try:
    35+
    self.operations.exec_command(cmd, verbose=True, wait_exit=True)
    36+
    except ExecUtilException as e:
    37+
    error = e.message
    38+
    break
    39+
    raise Exception("We wait an exception!")
    3740
    assert error == b'Utility exited with non-zero code. Error: bash: line 1: nonexistent_command: 9284 command not found\n'
    3841

    42+
    def test_exec_command_failure__expect_error(self):
    43+
    """
    44+
    Test exec_command for command execution failure.
    45+
    """
    46+
    cmd = "nonexistent_command"
    47+
    48+
    exit_status, result, error = self.operations.exec_command(cmd, verbose=True, wait_exit=True, shell=True, expect_error=True)
    49+
    50+
    assert error == b'bash: line 1: nonexistent_command: command not found\n'
    51+
    assert exit_status == 127
    52+
    assert result == b''
    53+
    3954
    def test_is_executable_true(self):
    4055
    """
    4156
    Test is_executable for an existing executable.

    0 commit comments

    Comments
     (0)
    0