summaryrefslogtreecommitdiffhomepage
path: root/tests/testutils
diff options
context:
space:
mode:
authorGuido Günther <agx@sigxcpu.org>2015-01-25 14:37:37 +0100
committerGuido Günther <agx@sigxcpu.org>2015-01-25 15:04:13 +0100
commit0104bae2b38fa14dd82feae22927f141dbcc0a17 (patch)
tree0f98140a90b562bb2d6a85279b54ddb2029a8a5f /tests/testutils
parent7ce15d2434ee42aa5a1afce3d03069c5efb2db1b (diff)
Move testutils to separate module
Diffstat (limited to 'tests/testutils')
-rw-r--r--tests/testutils/__init__.py115
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
+