#!/bin/sh set -e TESTDIR="$(readlink -f "$(dirname "$0")")" . "$TESTDIR/framework" setupenvironment configarchitecture 'amd64' for T in T1 T2; do mkdir "aptarchive/${T}" ln -s ../../incoming "aptarchive/${T}/pool" done buildsimplenativepackage 'awesome' 'amd64' '2' 'stable' 'Depends: libfoo (>= 2)' buildsimplenativepackage 'libfoo' 'amd64' '2' 'stable' setupaptarchive --no-update mv aptarchive/dists aptarchive/T1 rm incoming/stable.main.pkglist incoming/stable.main.srclist buildsimplenativepackage 'awesome' 'amd64' '3' 'stable' 'Depends: libfoo (>= 2)' setupaptarchive --no-update mv aptarchive/dists aptarchive/T2 rm incoming/stable.main.pkglist incoming/stable.main.srclist buildsimplenativepackage 'libfoo' 'amd64' '42' 'stable' buildsimplenativepackage 'awesome' 'amd64' '42' 'stable' setupaptarchive --no-update changetowebserver sed -i 's/http:/[snapshot=enable] http:/' rootdir/etc/apt/sources.list.d/* echo "Acquire::Snapshots::URI::Host::localhost \"http://localhost:${APTHTTPPORT}/@SNAPSHOTID@/\";" > rootdir/etc/apt/apt.conf.d/snapshot.conf testsuccess aptget update --snapshot T1 testsuccess aptget update --snapshot T2 --no-list-cleanup insertinstalledpackage 'awesome' 'amd64' '1' 'Depends: libfoo (>= 1)' insertinstalledpackage 'libfoo' 'amd64' '1' msgmsg 'Snapshotting policy' testsuccessequal "libfoo: Installed: 1 Candidate: 42 Version table: 42 500 500 http://localhost:${APTHTTPPORT} stable/main amd64 Packages *** 1 100 100 ${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/status awesome: Installed: 1 Candidate: 42 Version table: 42 500 500 http://localhost:${APTHTTPPORT} stable/main amd64 Packages *** 1 100 100 ${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/status" apt policy libfoo awesome testsuccessequal "libfoo: Installed: 1 Candidate: 2 Version table: 2 500 500 http://localhost:${APTHTTPPORT}/T1 stable/main amd64 Packages *** 1 100 100 ${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/status awesome: Installed: 1 Candidate: 2 Version table: 2 500 500 http://localhost:${APTHTTPPORT}/T1 stable/main amd64 Packages *** 1 100 100 ${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/status" apt policy libfoo awesome -S T1 testsuccessequal "libfoo: Installed: 1 Candidate: 1 Version table: *** 1 100 100 ${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/status awesome: Installed: 1 Candidate: 3 Version table: 3 500 500 http://localhost:${APTHTTPPORT}/T2 stable/main amd64 Packages *** 1 100 100 ${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/status" apt policy libfoo awesome -S T2 msgmsg 'Snapshotting show' testsuccessequalgrep() { local CMP="$1" local GREP="$2" shift 2 testsuccess "$@" mv rootdir/tmp/testsuccess.output base.output testsuccessequal "$CMP" grep "$GREP" base.output } testsuccessequalgrep 'Version: 42 Version: 1 Version: 42 Version: 1' '^Version: ' aptcache show libfoo awesome testsuccessequalgrep 'Version: 2 Version: 1 Version: 2 Version: 1' '^Version: ' aptcache show libfoo awesome -S T1 testsuccessequalgrep 'Version: 1 Version: 3 Version: 1' '^Version: ' aptcache show libfoo awesome -S T2 msgmsg 'Snapshotting list' testsuccessequal 'Listing... awesome/stable 42 amd64 [upgradable from: 1] libfoo/stable 42 amd64 [upgradable from: 1]' apt list --upgradeable testsuccessequal 'Listing... awesome/stable 2 amd64 [upgradable from: 1] libfoo/stable 2 amd64 [upgradable from: 1]' apt list --upgradeable -S T1 testsuccessequal "Listing... awesome/stable 3 amd64 [upgradable from: 1] N: There is 1 additional version. Please use the '-a' switch to see it" apt list --upgradeable -S T2 msgmsg 'Snapshotting upgrade' testsuccessequal 'Reading package lists... Building dependency tree... Calculating upgrade... The following packages will be upgraded: awesome libfoo 2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Inst awesome [1] (42 stable [amd64]) Inst libfoo [1] (42 stable [amd64]) Conf awesome (42 stable [amd64]) Conf libfoo (42 stable [amd64])' apt upgrade -s testsuccessequal 'Reading package lists... Building dependency tree... Calculating upgrade... The following packages will be upgraded: awesome libfoo 2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Inst libfoo [1] (2 stable [amd64]) Inst awesome [1] (2 stable [amd64]) Conf libfoo (2 stable [amd64]) Conf awesome (2 stable [amd64])' apt upgrade -s -S T1 testsuccessequal 'Reading package lists... Building dependency tree... Calculating upgrade... The following packages have been kept back: awesome 0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.' apt upgrade -s -S T2 msgmsg 'Snapshotting real installs' testsuccessequalgrep 'Version: 1' '^Version: ' apt show libfoo/now testsuccess apt install libfoo -S T1 -y testsuccessequalgrep 'Version: 2' '^Version: ' apt show libfoo/now testsuccessequalgrep 'Version: 1' '^Version: ' apt show awesome/now testsuccess apt upgrade -S T2 -y testsuccessequalgrep 'Version: 3' '^Version: ' apt show awesome/now