diff options
author | Guido Günther <agx@sigxcpu.org> | 2015-01-25 14:37:37 +0100 |
---|---|---|
committer | Guido Günther <agx@sigxcpu.org> | 2015-01-25 15:04:13 +0100 |
commit | 0104bae2b38fa14dd82feae22927f141dbcc0a17 (patch) | |
tree | 0f98140a90b562bb2d6a85279b54ddb2029a8a5f /tests/testutils | |
parent | 7ce15d2434ee42aa5a1afce3d03069c5efb2db1b (diff) |
Move testutils to separate module
Diffstat (limited to 'tests/testutils')
-rw-r--r-- | tests/testutils/__init__.py | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/tests/testutils/__init__.py b/tests/testutils/__init__.py new file mode 100644 index 00000000..2d389a5f --- /dev/null +++ b/tests/testutils/__init__.py @@ -0,0 +1,115 @@ +# vim: set fileencoding=utf-8 : + +from .. import context + +import os +import shutil +import subprocess +import tempfile +import unittest + +import gbp.log +import gbp.deb.git +import gbp.errors +from gbp.deb.changelog import ChangeLog + +class DebianGitTestRepo(unittest.TestCase): + """Scratch repo for a single unit test""" + + def setUp(self): + self.tmpdir = context.new_tmpdir(__name__) + + repodir = self.tmpdir.join('test_repo') + self.repo = gbp.deb.git.DebianGitRepository.create(repodir) + + def tearDown(self): + context.teardown() + + def add_file(self, name, content=None, msg=None): + """ + Add a single file with name I{name} and content I{content}. If + I{content} is C{none} the content of the file is undefined. + + @param name: the file's path relativ to the git repo + @type name: C{str} + @param content: the file's content + @type content: C{str} + """ + path = os.path.join(self.repo.path, name) + + d = os.path.dirname(path) + if not os.path.exists(d): + os.makedirs(d) + + with open(path, 'w+') as f: + content == None or f.write(content) + self.repo.add_files(name, force=True) + self.repo.commit_files(path, msg or "added %s" % name) + +class OsReleaseFile(object): + """Repesents a simple file with key-value pairs""" + + def __init__(self, filename): + self._values = {} + + try: + with open(filename, 'r') as filed: + for line in filed.readlines(): + try: + key, value = line.split('=', 1) + except ValueError: + pass + else: + self._values[key] = value.strip() + except IOError as err: + gbp.log.info('Failed to read OS release file %s: %s' % + (filename, err)) + + def __getitem__(self, key): + if key in self._values: + return self._values[key] + return None + + def __contains__(self, key): + return key in self._values + + def __str__(self): + return str(self._values) + + def __repr__(self): + return repr(self._values) + +class MockedChangeLog(ChangeLog): + contents = """foo (%s) experimental; urgency=low + + %s + + -- Debian Maintainer <maint@debian.org> Sat, 01 Jan 2012 00:00:00 +0100""" + + def __init__(self, version, changes = "a important change"): + ChangeLog.__init__(self, + contents=self.contents % (version, changes)) + + +def get_dch_default_urgency(): + """Determine the default urgency level used by dch""" + urgency = 'medium' + tempdir = tempfile.mkdtemp() + tmp_dch_name = os.path.join(tempdir, 'changelog') + try: + dch_cmd = ['dch', '--create', '--empty', '--changelog', tmp_dch_name, + '--package=foo', '--newversion=1', + '--distribution=UNRELEASED'] + ret = subprocess.Popen(dch_cmd).wait() + except OSError: + pass + else: + if ret == 0: + with open(tmp_dch_name) as dchfile: + header = dchfile.readline().strip() + urgency = header.split()[-1].replace('urgency=', '') + finally: + if os.path.isdir(tempdir): + shutil.rmtree(tempdir) + return urgency + |