Mercurial > treepkg
view test/test_listpackages.py @ 251:243f206574cb
Make bin/listpackages.py prefer the newest packages by start-time, not
revision number. Change test_listpackages.py so that it uses more
realistic status files for the individual revisions and adapt the test
cases to the new behavior.
author | Bernhard Herzog <bh@intevation.de> |
---|---|
date | Thu, 09 Apr 2009 18:59:44 +0000 |
parents | 5dd710b167d2 |
children | 2e0b373414b8 |
line wrap: on
line source
# Copyright (C) 2009 by Intevation GmbH # Authors: # Bernhard Herzog <bh@intevation.de> # # This program is free software under the GPL (>=v2) # Read the file COPYING coming with the software for details. import sys import os import difflib import unittest from datetime import datetime, timedelta from filesupport import FileTestMixin from treepkg.run import call, capture_output, SubprocessError from treepkg.status import RevisionStatus def package_track_files(track, version, binaries, revisions): src_templates = ["%s_%s.%%s%s" % (track, version, suffix) for suffix in [".orig.tar.gz", "-1.diff.gz", "-1.dsc"]] bin_templates = ["%s_%s.%%s-1_i386.deb" % (basename, version) for basename in binaries] start_time = datetime.now() build_duration = timedelta(minutes=30) check_interval = timedelta(minutes=60) package_dirs = [] for revision in revisions: rev, rules_rev = revision status = RevisionStatus(None) status.binary_package_created() status.start = start_time status.stop = start_time + build_duration start_time += check_interval package_dirs.append(("%s-%s" % (rev, rules_rev), [("status", "".join(status.serialize())), ("src", [(template % (rev,), "") for template in src_templates]), ("binary", [(template % (rev,), "") for template in bin_templates])])) return (track, [("pkg", package_dirs)]) class ListPackagesTest(unittest.TestCase, FileTestMixin): treepkg_cfg_template = """\ [DEFAULT] tracks_dir: %(tracksdir)s root_cmd: true pbuilderrc: deb_email: packager@example.com deb_fullname: Sample Packager debrevision_prefix: treepkg handle_dependencies: False [treepkg] check_interval: 3600 instructions_file: [pkg_kdepim] svn_url: svn://anonsvn.kde.org/home/kde/branches/kdepim/enterprise/kdepim base_dir: %%(tracks_dir)s/kdepim packager_class: recipes.kde_enterprise_3_5.kdepim [pkg_kdepimlibs] svn_url: svn://anonsvn.kde.org/home/kde/branches/kdepim/enterprise/kdepimlibs base_dir: %%(tracks_dir)s/kdepimlibs packager_class: recipes.kde_enterprise_3_5.kdepim """ track_files = [] def setUp(self): self.bindir = os.path.join(os.path.dirname(__file__), os.pardir, "bin") self.listpackages = os.path.join(self.bindir, "listpackages.py") self.tracksdir = self.create_files("tracks", self.track_files) config = self.treepkg_cfg_template % dict(tracksdir=self.tracksdir) self.config_file = self.create_temp_file("treepkg.cfg", config) self.base_command = [sys.executable, self.listpackages, "--config-file=" + self.config_file] def run_command(self, extra_args, expected_exit_code=0): cmd = self.base_command + list(extra_args) try: output = capture_output(cmd) except SubprocessError, exc: if expected_exit_code != exc.returncode: raise output = exc.output return output def check_cmd(self, args, expected): expected_lines = [os.path.join(self.tracksdir, filename) + "\n" for filename in expected.splitlines()] try: output_lines = [line + "\n" for line in self.run_command(args).splitlines()] except SubprocessError, exc: print >>sys.stderr, "Unexpected output:", exc.output raise # the order of the listed packages doesn't matter, so sort the # lists before comparing them expected_lines.sort() output_lines.sort() if expected_lines != output_lines: diff = difflib.unified_diff(expected_lines, output_lines, "expected", "found") raise self.failureException("\n" + "".join(diff)) class TestListPackagesNoPackages(ListPackagesTest): track_files = [] def test_listpackages_noargs(self): # if nothing has been packaged yet, the output is simply empty self.check_cmd(["--source"], "") def test_listpackages_revision(self): # if nothing has been packaged yet, the output is simply empty self.assertEquals(self.run_command(["--source", "--revision=12345", "--track=kdepim"], expected_exit_code=1), "No revision 12345\n") def test_listpackages_revision_rulesrev(self): # if nothing has been packaged yet, the output is simply empty self.assertEquals(self.run_command(["--source", "--revision=12345-321", "--track=kdepim"], expected_exit_code=1), "No revision 12345-321\n") class TestListPackagesTrackNoRevision(ListPackagesTest): track_files = [package_track_files("kdepim", "1.0.1", ["kdepim", "kleopatra"], [(704195, 31), (702432, 47)])] def test_listpackages_source(self): self.check_cmd(["--track=kdepim", "--source"], """\ kdepim/pkg/702432-47/src/kdepim_1.0.1.702432-1.diff.gz kdepim/pkg/702432-47/src/kdepim_1.0.1.702432-1.dsc kdepim/pkg/702432-47/src/kdepim_1.0.1.702432.orig.tar.gz """) def test_listpackages_binary(self): self.check_cmd(["--track=kdepim", "--binary"], """\ kdepim/pkg/702432-47/binary/kdepim_1.0.1.702432-1_i386.deb kdepim/pkg/702432-47/binary/kleopatra_1.0.1.702432-1_i386.deb """) class TestListPackagesNoTrackNoRevision(ListPackagesTest): track_files = [package_track_files("kdepim", "1.0.1", ["kdepim", "kleopatra"], [(702432, 47), (704195, 31)]), package_track_files("kdepimlibs", "1.0.1", ["kdepimlibs"], [(803691, 4321), (803692, 4322)]), ] def test_listpackages_source(self): self.check_cmd(["--source"], """\ kdepim/pkg/704195-31/src/kdepim_1.0.1.704195-1.diff.gz kdepim/pkg/704195-31/src/kdepim_1.0.1.704195-1.dsc kdepim/pkg/704195-31/src/kdepim_1.0.1.704195.orig.tar.gz kdepimlibs/pkg/803692-4322/src/kdepimlibs_1.0.1.803692-1.diff.gz kdepimlibs/pkg/803692-4322/src/kdepimlibs_1.0.1.803692-1.dsc kdepimlibs/pkg/803692-4322/src/kdepimlibs_1.0.1.803692.orig.tar.gz""") def test_listpackages_binary(self): self.check_cmd(["--binary"], """\ kdepim/pkg/704195-31/binary/kdepim_1.0.1.704195-1_i386.deb kdepim/pkg/704195-31/binary/kleopatra_1.0.1.704195-1_i386.deb kdepimlibs/pkg/803692-4322/binary/kdepimlibs_1.0.1.803692-1_i386.deb""") class TestListPackagesTrackRevision(ListPackagesTest): track_files = [package_track_files("kdepim", "1.0.1", ["kdepim", "kleopatra"], [(704195, 31), (702432, 47)]), package_track_files("kdepimlibs", "1.0.1", ["kdepimlibs"], [(803691, 4321), (803692, 4322)]), ] def test_listpackages_source(self): self.check_cmd(["--source", "--track=kdepim", "--revision=702432"], """\ kdepim/pkg/702432-47/src/kdepim_1.0.1.702432-1.diff.gz kdepim/pkg/702432-47/src/kdepim_1.0.1.702432-1.dsc kdepim/pkg/702432-47/src/kdepim_1.0.1.702432.orig.tar.gz""") def test_listpackages_binary(self): self.check_cmd(["--binary", "--track=kdepim", "--revision=702432"], """\ kdepim/pkg/702432-47/binary/kdepim_1.0.1.702432-1_i386.deb kdepim/pkg/702432-47/binary/kleopatra_1.0.1.702432-1_i386.deb""") class TestListPackagesMultipleRulesRevisions(ListPackagesTest): track_files = [package_track_files("kdepim", "1.0.1", ["kdepim", "kleopatra"], [(702432, 47), (704195, 31), (704195, 33)]), package_track_files("kdepimlibs", "1.0.1", ["kdepimlibs"], [(803691, 4321), (803692, 4322)]), ] def test_listpackages_source_no_rev(self): self.check_cmd(["--source", "--track=kdepim"], """\ kdepim/pkg/704195-33/src/kdepim_1.0.1.704195-1.diff.gz kdepim/pkg/704195-33/src/kdepim_1.0.1.704195-1.dsc kdepim/pkg/704195-33/src/kdepim_1.0.1.704195.orig.tar.gz""") def test_listpackages_binary_no_rev(self): self.check_cmd(["--binary", "--track=kdepim"], """\ kdepim/pkg/704195-33/binary/kdepim_1.0.1.704195-1_i386.deb kdepim/pkg/704195-33/binary/kleopatra_1.0.1.704195-1_i386.deb""") def test_listpackages_source_and_binary_no_rev(self): self.check_cmd(["--source", "--track=kdepim", "--binary"], """\ kdepim/pkg/704195-33/binary/kdepim_1.0.1.704195-1_i386.deb kdepim/pkg/704195-33/binary/kleopatra_1.0.1.704195-1_i386.deb kdepim/pkg/704195-33/src/kdepim_1.0.1.704195-1.diff.gz kdepim/pkg/704195-33/src/kdepim_1.0.1.704195-1.dsc kdepim/pkg/704195-33/src/kdepim_1.0.1.704195.orig.tar.gz """) def test_listpackages_source_no_rulesrev(self): self.check_cmd(["--source", "--track=kdepim", "--revision=704195"], """\ kdepim/pkg/704195-33/src/kdepim_1.0.1.704195-1.diff.gz kdepim/pkg/704195-33/src/kdepim_1.0.1.704195-1.dsc kdepim/pkg/704195-33/src/kdepim_1.0.1.704195.orig.tar.gz""") def test_listpackages_binary_no_rulesrev(self): self.check_cmd(["--binary", "--track=kdepim", "--revision=704195"], """\ kdepim/pkg/704195-33/binary/kdepim_1.0.1.704195-1_i386.deb kdepim/pkg/704195-33/binary/kleopatra_1.0.1.704195-1_i386.deb""") def test_listpackages_source_rulesrev(self): self.check_cmd(["--source", "--track=kdepim", "--revision=704195-31"], """\ kdepim/pkg/704195-31/src/kdepim_1.0.1.704195-1.diff.gz kdepim/pkg/704195-31/src/kdepim_1.0.1.704195-1.dsc kdepim/pkg/704195-31/src/kdepim_1.0.1.704195.orig.tar.gz""") def test_listpackages_binary_rulesrev(self): self.check_cmd(["--binary", "--track=kdepim", "--revision=704195-31"], """\ kdepim/pkg/704195-31/binary/kdepim_1.0.1.704195-1_i386.deb kdepim/pkg/704195-31/binary/kleopatra_1.0.1.704195-1_i386.deb""")