Rev 463: Happy path tests R us. bzrtools_import file id resolution fix tested. in http://people.canonical.com/~robertc/baz2.0/plugins/builddeb/trunk
Robert Collins
robertc at robertcollins.net
Tue Jul 6 06:33:05 BST 2010
At http://people.canonical.com/~robertc/baz2.0/plugins/builddeb/trunk
------------------------------------------------------------
revno: 463
revision-id: robertc at robertcollins.net-20100706053259-fxvy27p8yyn7h1w8
parent: robertc at robertcollins.net-20100704103022-ds7aot5v1f55xln4
committer: Robert Collins <robertc at robertcollins.net>
branch nick: trunk
timestamp: Tue 2010-07-06 15:32:59 +1000
message:
Happy path tests R us. bzrtools_import file id resolution fix tested.
=== modified file 'dh_make.py'
--- a/dh_make.py 2010-05-05 07:20:17 +0000
+++ b/dh_make.py 2010-07-06 05:32:59 +0000
@@ -108,8 +108,17 @@
tree.add("debian/source/format")
command = ["dh_make", "--addmissing", "--packagename",
"%s_%s" % (package_name, version)]
+ if getattr(sys.stdin, 'fileno', None) is None:
+ # running in a test or something
+ stdin = subprocess.PIPE
+ input = "s\n\n"
+ else:
+ stdin = sys.stdin
+ input = None
proc = subprocess.Popen(command, cwd=tree.basedir,
- preexec_fn=util.subprocess_setup, stdin=sys.stdin)
+ preexec_fn=util.subprocess_setup, stdin=stdin)
+ if input:
+ proc.stdin.write(input)
retcode = proc.wait()
if retcode != 0:
raise bzr_errors.BzrCommandError("dh_make failed.")
=== modified file 'tests/blackbox/test_merge_upstream.py'
--- a/tests/blackbox/test_merge_upstream.py 2008-03-05 17:00:51 +0000
+++ b/tests/blackbox/test_merge_upstream.py 2010-07-06 05:32:59 +0000
@@ -18,12 +18,141 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
-from bzrlib.plugins.builddeb.tests import BuilddebTestCase
+import os.path
+
+import bzrlib.export
+
+from bzrlib.plugins.builddeb.tests import (
+ BuilddebTestCase,
+ SourcePackageBuilder,
+ )
+
+
+class Fixture(object):
+ """A test fixture."""
+
+ def __init__(self):
+ pass
+
+ def setUp(self, test_case):
+ test_case.addCleanup(self.tearDown)
+
+ def tearDown(self):
+ pass
+
+
+class Upstream(Fixture):
+ """An upstream.
+
+ :ivar tree: The tree of the upstream.
+ """
+
+ def setUp(self, test_case):
+ Fixture.setUp(self, test_case)
+ treename = test_case.getUniqueString()
+ tree = test_case.make_branch_and_tree(treename)
+ filename = test_case.getUniqueString()
+ test_case.build_tree(["%s/%s" % (treename, filename)])
+ tree.add([filename])
+ tree.commit(test_case.getUniqueString())
+ self.tree = tree
+
+
+class ExportedTarball(Fixture):
+ """An exported tarball 'release'."""
+
+ def __init__(self, upstream, version):
+ self.upstream = upstream
+ self.version = version
+
+ def setUp(self, test_case):
+ filename = "project-%s.tar.gz" % self.version
+ tree = self.upstream.tree.branch.repository.revision_tree(
+ self.upstream.tree.branch.last_revision())
+ bzrlib.export.export(tree, filename)
+ self.tarball = filename
+
+
+class DHMadePackage(Fixture):
+ """A package made via dh-make."""
+
+ def __init__(self, tar, upstream):
+ self.tar = tar
+ self.upstream = upstream
+
+ def setUp(self, test_case):
+ branchpath = test_case.getUniqueString()
+ tree = self.upstream.tree.bzrdir.sprout(branchpath).open_workingtree()
+ # UGH: spews, because the subprocess output isn't captured. Be nicer to
+ # use closer to the metal functions here, but I'm overwhelmed by the
+ # API today, and there is a grue.
+ test_case.run_bzr(['dh-make', 'package', str(self.tar.version),
+ os.path.abspath(self.tar.tarball)], working_dir=branchpath)
+ tree.smart_add([tree.basedir])
+ tree.commit('debianised.') # Honestly.
+ self.tree = tree
+
+
+class FileMovedReplacedUpstream(Fixture):
+ """An upstream that has been changed by moving and replacing a file."""
+
+ def __init__(self, upstream):
+ self.upstream = upstream
+
+ def setUp(self, test_case):
+ branchpath = test_case.getUniqueString()
+ tree = self.upstream.tree.bzrdir.sprout(branchpath).open_workingtree()
+ self.tree = tree
+ tree.lock_write()
+ try:
+ newpath = test_case.getUniqueString()
+ for child in tree.inventory.root.children.values():
+ if child.kind == 'file':
+ oldpath = child.name
+ tree.rename_one(oldpath, newpath)
+ test_case.build_tree(["%s/%s" % (os.path.basename(tree.basedir),
+ oldpath)])
+ tree.add([oldpath])
+ tree.commit('yo, renaming and replacing')
+ finally:
+ tree.unlock()
+
class TestMergeUpstream(BuilddebTestCase):
- def test_merge_upstream_available(self):
- self.run_bzr('merge-upstream --help')
-
-# vim: ts=2 sts=2 sw=2
+ def test_merge_upstream_available(self):
+ self.run_bzr('merge-upstream --help')
+
+ def make_upstream(self):
+ result = Upstream()
+ result.setUp(self)
+ return result
+
+ def release_upstream(self, upstream):
+ tar = ExportedTarball(upstream, version=self.getUniqueInteger())
+ tar.setUp(self)
+ return tar
+
+ def import_upstream(self, tar, upstream):
+ packaging = DHMadePackage(tar, upstream)
+ packaging.setUp(self)
+ return packaging
+
+ def file_moved_replaced_upstream(self, upstream):
+ result = FileMovedReplacedUpstream(upstream)
+ result.setUp(self)
+ return result
+
+ def test_smoke_renamed_file(self):
+ # When a file is renamed by upstream, it should still import ok.
+ upstream = self.make_upstream()
+ rel1 = self.release_upstream(upstream)
+ package = self.import_upstream(rel1, upstream)
+ changed_upstream = self.file_moved_replaced_upstream(upstream)
+ rel2 = self.release_upstream(changed_upstream)
+ self.run_bzr(['merge-upstream', '--version', str(rel2.version),
+ os.path.abspath(rel2.tarball), changed_upstream.tree.basedir],
+ working_dir=package.tree.basedir)
+
+# vim: ts=4 sts=4 sw=4
More information about the bazaar-commits
mailing list