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