diff --git a/borg/testsuite/archiver.py b/borg/testsuite/archiver.py index c92775ec6..cecc6016c 100644 --- a/borg/testsuite/archiver.py +++ b/borg/testsuite/archiver.py @@ -1,5 +1,6 @@ from binascii import hexlify from configparser import RawConfigParser +import errno import os from io import StringIO import stat @@ -70,20 +71,6 @@ class environment_variable: else: os.environ[k] = v - -@pytest.fixture(params=['python', 'binary']) -def cmd(request): - if request.param == 'python': - exe = None - elif request.param == 'binary': - exe = 'borg.exe' - else: - raise ValueError("param must be 'python' or 'binary'") - def exec_fn(*args, **kw): - return exec_cmd(*args, exe=exe, fork=True, **kw) - return exec_fn - - def exec_cmd(*args, archiver=None, fork=False, exe=None, **kw): if fork: try: @@ -112,6 +99,29 @@ def exec_cmd(*args, archiver=None, fork=False, exe=None, **kw): sys.stdin, sys.stdout, sys.stderr = stdin, stdout, stderr +# check if the binary "borg.exe" is available +try: + exec_cmd('help', exe='borg.exe', fork=True) + BORG_EXES = ['python', 'binary', ] +except IOError as err: + if err.errno != errno.ENOENT: + raise + BORG_EXES = ['python', ] + + +@pytest.fixture(params=BORG_EXES) +def cmd(request): + if request.param == 'python': + exe = None + elif request.param == 'binary': + exe = 'borg.exe' + else: + raise ValueError("param must be 'python' or 'binary'") + def exec_fn(*args, **kw): + return exec_cmd(*args, exe=exe, fork=True, **kw) + return exec_fn + + class ArchiverTestCaseBase(BaseTestCase): prefix = ''