import re import tempfile from pathlib import Path from lib import BaseTest def trimTrailingWhitespace(_, s): return re.sub(r'\s*$', '', s, flags=re.MULTILINE) class DiffSnapshot1Test(BaseTest): """ diff two snapshots: normal diff """ fixtureDB = True fixtureCmds = [ "aptly snapshot create snap1 from mirror wheezy-main", "aptly snapshot create snap2 from mirror wheezy-backports", "aptly snapshot pull snap1 snap2 snap3 'rsyslog (>= 7.4.4)'" ] runCmd = "aptly snapshot diff snap1 snap3" outputMatchPrepare = trimTrailingWhitespace class DiffSnapshot2Test(BaseTest): """ diff two snapshots: normal diff II """ fixtureDB = True fixtureCmds = [ "aptly snapshot create snap1 from mirror wheezy-main", "aptly snapshot create snap2 from mirror wheezy-backports", ] runCmd = "aptly snapshot diff snap1 snap2" outputMatchPrepare = trimTrailingWhitespace class DiffSnapshot3Test(BaseTest): """ diff two snapshots: normal diff II + only-matching """ fixtureDB = True fixtureCmds = [ "aptly snapshot create snap1 from mirror wheezy-main", "aptly snapshot create snap2 from mirror wheezy-backports", ] runCmd = "aptly snapshot diff -only-matching snap1 snap2" outputMatchPrepare = trimTrailingWhitespace class DiffSnapshot4Test(BaseTest): """ diff two snapshots: doesn't exist """ fixtureDB = True fixtureCmds = [ "aptly snapshot create snap1 from mirror wheezy-main", ] runCmd = "aptly snapshot diff -only-matching snap1 snap-no" expectedCode = 1 class DiffSnapshot5Test(BaseTest): """ diff two snapshots: doesn't exist """ fixtureDB = True fixtureCmds = [ "aptly snapshot create snap2 from mirror wheezy-main", ] runCmd = "aptly snapshot diff -only-matching snap-no snap2" expectedCode = 1 class DiffSnapshot6Test(BaseTest): """ diff two snapshots: identical snapshots """ fixtureDB = True fixtureCmds = [ "aptly snapshot create snap1 from mirror wheezy-main", "aptly snapshot create snap2 from mirror wheezy-main", ] runCmd = "aptly snapshot diff snap1 snap2" class DiffSnapshotArchitectureVariantTest(BaseTest): """ snapshot diff: display base and variant architectures independently """ runCmd = "aptly snapshot diff variant-empty variant-normal" def prepare_fixture(self): super().prepare_fixture() self.run_cmd("aptly repo create variant-display") self.run_cmd("aptly snapshot create variant-empty empty") with tempfile.TemporaryDirectory(prefix="aptly-diff-variant-") as tmp: for arch in ("amd64", "amd64v3"): package_dir = Path(tmp) / arch control_dir = package_dir / "DEBIAN" control_dir.mkdir(parents=True) control = ( "Package: 3cpio\n" "Version: 0.14.0-1ubuntu1\n" "Architecture: amd64\n" "Maintainer: Aptly Test \n" "Description: Snapshot diff display fixture\n" ) if arch == "amd64v3": control += "Architecture-Variant: amd64v3\n" (control_dir / "control").write_text(control) package_file = str(Path(tmp) / ( "3cpio_0.14.0-1ubuntu1_" + arch + ".deb")) self.run_cmd(["dpkg-deb", "--build", str(package_dir), package_file]) self.run_cmd(["aptly", "repo", "add", "variant-display", package_file]) snapshot = "variant-normal" if arch == "amd64" else "variant-both" self.run_cmd([ "aptly", "snapshot", "create", snapshot, "from", "repo", "variant-display", ]) def check(self): def check_row(output, expected): lines = output.strip().splitlines() self.check_equal(len(lines), 2) self.check_equal(" ".join(lines[0].split()), "Arch | Package | Version in A | Version in B") self.check_equal(" ".join(lines[1].split()), expected) check_row(self.output, "+ amd64 | 3cpio | - | 0.14.0-1ubuntu1") for left, right, expected in ( ("variant-normal", "variant-both", "+ amd64v3 | 3cpio | - | 0.14.0-1ubuntu1"), ("variant-both", "variant-normal", "- amd64v3 | 3cpio | 0.14.0-1ubuntu1 | -"), ("variant-normal", "variant-empty", "- amd64 | 3cpio | 0.14.0-1ubuntu1 | -"), ): check_row(self.run_cmd(["aptly", "snapshot", "diff", left, right]), expected)