From 042f422cf4adfd46cca7f024f1e941bc7c91c911 Mon Sep 17 00:00:00 2001 From: Markus Lehtonen Date: Tue, 23 Jan 2018 10:48:58 +0200 Subject: tests.testutils: helpers for checking existence of commands Add new have_cmd() helper for checking if a command is available, and, a skip_without_cmd() decorator for skipping tests in case a command is missing. Convert existing checks for commands to use these new functions. Signed-off-by: Markus Lehtonen --- tests/11_test_dch_main.py | 5 ++--- tests/12_test_deb.py | 4 ++-- tests/13_test_gbp_pq.py | 2 +- tests/29_test_gbp_clone.py | 5 +++-- tests/doctests/test_Changelog.py | 5 +++-- tests/testutils/__init__.py | 16 +++++++++++++++- 6 files changed, 26 insertions(+), 11 deletions(-) (limited to 'tests') diff --git a/tests/11_test_dch_main.py b/tests/11_test_dch_main.py index d9023c3c..7fc82600 100644 --- a/tests/11_test_dch_main.py +++ b/tests/11_test_dch_main.py @@ -3,12 +3,11 @@ """Test L{gbp.scripts.dch} main""" from . import context -from .testutils import (DebianGitTestRepo, OsReleaseFile, +from .testutils import (DebianGitTestRepo, OsReleaseFile, skip_without_cmd, get_dch_default_urgency, capture_stderr) from gbp.scripts import dch -import unittest import os import re @@ -46,7 +45,7 @@ cl_debian = """test-package (0.9-1) unstable; urgency=%s """ % default_urgency -@unittest.skipIf(not os.path.exists('/usr/bin/debchange'), "Dch not found") +@skip_without_cmd('debchange') class TestScriptDch(DebianGitTestRepo): """Test git-dch""" diff --git a/tests/12_test_deb.py b/tests/12_test_deb.py index d06bc432..4a2388e2 100644 --- a/tests/12_test_deb.py +++ b/tests/12_test_deb.py @@ -136,7 +136,7 @@ Files: self.assertEquals(dsc.sigs, []) -@unittest.skipIf(not os.path.exists('/usr/bin/dpkg'), 'Dpkg not found') +@testutils.skip_without_cmd('dpkg') class TestDpkgCompareVersions(unittest.TestCase): """Test L{gbp.deb.DpkgCompareVersions}""" @@ -160,7 +160,7 @@ class TestDpkgCompareVersions(unittest.TestCase): self.cmp('_', '_ _') -@unittest.skipIf(not os.path.exists('/usr/bin/dpkg'), 'Dpkg not found') +@testutils.skip_without_cmd('dpkg') class TestDeb(unittest.TestCase): """Test L{gbp.deb.__init__} """ diff --git a/tests/13_test_gbp_pq.py b/tests/13_test_gbp_pq.py index 5f4668b6..dc53c260 100644 --- a/tests/13_test_gbp_pq.py +++ b/tests/13_test_gbp_pq.py @@ -77,7 +77,7 @@ class TestApplyAndCommit(testutils.DebianGitTestRepo): info = self.repo.get_commit_info('HEAD') self.assertIn('Gbp-Pq: Name foobar', info['body']) - @unittest.skipIf(not os.path.exists('/usr/bin/dpkg'), 'Dpkg not found') + @testutils.skip_without_cmd('dpkg') def test_debian_missing_author(self): """ Check if we parse the author from debian control if it's missing in the patch. diff --git a/tests/29_test_gbp_clone.py b/tests/29_test_gbp_clone.py index 17e958e1..f1ac3925 100644 --- a/tests/29_test_gbp_clone.py +++ b/tests/29_test_gbp_clone.py @@ -1,10 +1,11 @@ # vim: set fileencoding=utf-8 : from gbp.scripts.clone import vcs_git_url -import os import unittest from mock import patch +from . testutils import skip_without_cmd + class TestGbpClone(unittest.TestCase): show_src = """ @@ -26,7 +27,7 @@ Vcs-Git: git://honk.sigxcpu.org/git/git-buildpackage.git """ - @unittest.skipIf(not os.path.exists('/usr/bin/dpkg'), 'Dpkg not found') + @skip_without_cmd('dpkg') @patch('gbp.scripts.clone.apt_showsrc', return_value=show_src) def test_vcs_git_url(self, patch): self.assertEqual(vcs_git_url('git-buildpackage'), diff --git a/tests/doctests/test_Changelog.py b/tests/doctests/test_Changelog.py index dcaf08aa..1fb8a30b 100644 --- a/tests/doctests/test_Changelog.py +++ b/tests/doctests/test_Changelog.py @@ -4,7 +4,8 @@ Test L{gbp.deb.changelog.ChangeLog} """ from .. import context # noqa: 401 -import os +from .. testutils import have_cmd + import nose cl_debian = """git-buildpackage (0.5.32) unstable; urgency=low @@ -48,7 +49,7 @@ cl_epoch = """xserver-xorg-video-nv (1:1.2.0-3) unstable; urgency=low def setup(): """Setup test module""" - if not os.path.exists('/usr/bin/debchange'): + if not have_cmd('debchange'): raise nose.SkipTest('debchange tool not present') diff --git a/tests/testutils/__init__.py b/tests/testutils/__init__.py index c17bc815..6ce1bc59 100644 --- a/tests/testutils/__init__.py +++ b/tests/testutils/__init__.py @@ -7,6 +7,7 @@ import shutil import subprocess import tarfile import tempfile +import unittest import zipfile import gbp.log @@ -22,7 +23,7 @@ __all__ = ['GbpLogTester', 'DebianGitTestRepo', 'OsReleaseFile', 'MockedChangeLog', 'get_dch_default_urgency', 'capture_stderr', 'capture_stdout', 'ls_dir', 'ls_tar', 'ls_zip', - 'patch_popen'] + 'patch_popen', 'have_cmd', 'skip_without_cmd'] class OsReleaseFile(object): @@ -127,3 +128,16 @@ def ls_zip(archive, directories=True): return ls_dir(tmpdir, directories) finally: shutil.rmtree(tmpdir) + + +def have_cmd(cmd): + """Check if a command is available""" + return True if shutil.which(cmd) else False + + +def skip_without_cmd(cmd): + """Skip if a command is not available""" + if have_cmd(cmd): + return lambda func: func + else: + return unittest.skip("Command '%s' not found" % cmd) -- cgit v1.2.3