diff options
Diffstat (limited to 'test/integration')
-rwxr-xr-x | test/integration/test-apt-get-autoremove | 42 | ||||
-rwxr-xr-x | test/integration/test-method-gpgv | 43 | ||||
-rwxr-xr-x | test/integration/test-snapshot | 19 | ||||
-rwxr-xr-x | test/integration/test-snapshot-upgrades | 156 |
4 files changed, 253 insertions, 7 deletions
diff --git a/test/integration/test-apt-get-autoremove b/test/integration/test-apt-get-autoremove index 9454df5..af47420 100755 --- a/test/integration/test-apt-get-autoremove +++ b/test/integration/test-apt-get-autoremove @@ -264,3 +264,45 @@ Purg foo-plus-2 [1]' apt autopurge -s testdpkgstatus 'pi' '1' 'unrelated' testsuccess apt purge unrelated -y + +insertinstalledpackage 'foo-has-update' 'all' '1' +insertpackage 'stable' 'foo-has-update' 'all' '2' +testsuccess aptmark auto 'foo-has-update' + +setupaptarchive + +# Test removed package version (with -V flag), when package has update +testsuccessequal 'Reading package lists... +Building dependency tree... +Reading state information... +The following packages will be REMOVED: + foo-has-update (1) + foo-multi1-1 (1) + foo-multi1-2 (1) + foo-multi2-1 (1) + foo-multi2-2 (1) + foo-plus-1 (1) + foo-plus-2 (1) +0 upgraded, 0 newly installed, 7 to remove and 0 not upgraded. +Remv foo-has-update [1] +Remv foo-multi1-1 [1] +Remv foo-multi1-2 [1] +Remv foo-multi2-1 [1] +Remv foo-multi2-2 [1] +Remv foo-plus-1 [1] +Remv foo-plus-2 [1]' apt autoremove -sV + +# Test automatic removed package version (with -V flag), when package has update +testsuccessequal "Reading package lists... +Building dependency tree... +Reading state information... +The following packages were automatically installed and are no longer required: + foo-has-update (1) + foo-multi1-1 (1) + foo-multi1-2 (1) + foo-multi2-1 (1) + foo-multi2-2 (1) + foo-plus-1 (1) + foo-plus-2 (1) +Use 'apt autoremove' to remove them. +0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded." apt remove -sV diff --git a/test/integration/test-method-gpgv b/test/integration/test-method-gpgv index 0f014e3..ffaa72c 100755 --- a/test/integration/test-method-gpgv +++ b/test/integration/test-method-gpgv @@ -48,6 +48,14 @@ testrun() { [GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2016-09-01 1472742625 0 4 0 1 11 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE [GNUPG:] ASSERT_PUBKEY_ALGO 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 1 rsa1024' + testgpgv 'Not asserted in the next level' 'SoonWorthless: 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE, ' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE!' '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org> +[GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2016-09-01 1472742625 0 4 0 1 11 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE +[GNUPG:] ASSERT_PUBKEY_ALGO 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 1 brainpoolP256r1' + + testgpgv 'Not asserted in the future level' 'LaterWorthless: 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE, ' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE!' '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org> +[GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2016-09-01 1472742625 0 4 0 1 11 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE +[GNUPG:] ASSERT_PUBKEY_ALGO 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 1 nistp256' + testgpgv 'Good subkey signed with long keyid' 'Good: GOODSIG 5B6896415D44C43E' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE, 4281DEDBD466EAE8C1F4157E5B6896415D44C43E!' '[GNUPG:] GOODSIG 5B6896415D44C43E Sebastian Subkey <subkey@example.org> [GNUPG:] VALIDSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E 2018-08-16 1534459673 0 4 0 1 11 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE' testgpgv 'Good subkey signed with fingerprint' 'Good: GOODSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE, 4281DEDBD466EAE8C1F4157E5B6896415D44C43E!' '[GNUPG:] GOODSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E Sebastian Subkey <subkey@example.org> @@ -108,6 +116,9 @@ gpgvmethod() { Config-Item: Debug::Acquire::gpgv=1 Config-Item: Dir::Bin::apt-key=./faked-apt-key Config-Item: APT::Hashes::SHA1::Weak=true +Config-Item: APT::Key::Assert-Pubkey-Algo=>=rsa2048,nistp256,brainpoolP256r1 +Config-Item: APT::Key::Assert-Pubkey-Algo::Next=>=rsa2048,nistp256 +Config-Item: APT::Key::Assert-Pubkey-Algo::Future=>=rsa2048 600 URI Acquire URI: file://${TMPWORKINGDIRECTORY}/message.sig @@ -121,6 +132,9 @@ gpgvmethod() { Config-Item: Debug::Acquire::gpgv=1 Config-Item: Dir::Bin::apt-key=./faked-apt-key Config-Item: APT::Hashes::SHA1::Weak=true +Config-Item: APT::Key::Assert-Pubkey-Algo=>=rsa2048,nistp256,brainpoolP256r1 +Config-Item: APT::Key::Assert-Pubkey-Algo::Next=>=rsa2048,nistp256 +Config-Item: APT::Key::Assert-Pubkey-Algo::Future=>=rsa2048 600 URI Acquire URI: file://${TMPWORKINGDIRECTORY}/message.sig @@ -135,6 +149,9 @@ gpgvmethod() { Config-Item: Debug::Acquire::gpgv=1 Config-Item: Dir::Bin::apt-key=./faked-apt-key Config-Item: APT::Hashes::SHA1::Weak=true +Config-Item: APT::Key::Assert-Pubkey-Algo=>=rsa2048,nistp256,brainpoolP256r1 +Config-Item: APT::Key::Assert-Pubkey-Algo::Next=>=rsa2048,nistp256 +Config-Item: APT::Key::Assert-Pubkey-Algo::Future=>=rsa2048 600 URI Acquire URI: file://${TMPWORKINGDIRECTORY}/message.sig @@ -158,6 +175,9 @@ gpgvmethod() { Config-Item: Debug::Acquire::gpgv=1 Config-Item: Dir::Bin::apt-key=./faked-apt-key Config-Item: APT::Hashes::SHA1::Weak=true +Config-Item: APT::Key::Assert-Pubkey-Algo=>=rsa2048,nistp256,brainpoolP256r1 +Config-Item: APT::Key::Assert-Pubkey-Algo::Next=>=rsa2048,nistp256 +Config-Item: APT::Key::Assert-Pubkey-Algo::Future=>=rsa2048 600 URI Acquire URI: file://${TMPWORKINGDIRECTORY}/message.sig @@ -199,3 +219,26 @@ echo '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Sebastian Subkey <subkey@example.org> [GNUPG:] VALIDSIG 0000000000000000000000000000000000000000 2018-08-16 1534459673 0 4 0 1 11 00 4281DEDBD466EAE8C1F4157E5B6896415D44C43E' > gpgv.output testfailure apt update -o Dir::Bin::apt-key="./faked-apt-key" -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1 rm -rf rootdir/var/lib/apt/lists + +gpgvmethod() { + echo "601 Configuration +Config-Item: Debug::Acquire::gpgv=1 +Config-Item: Dir::Bin::apt-key=./faked-apt-key +Config-Item: APT::Hashes::SHA1::Weak=true +Config-Item: APT::Key::Assert-Pubkey-Algo::Next=>=invalid + +600 URI Acquire +URI: file://${TMPWORKINGDIRECTORY}/message.sig +Filename: ${TMPWORKINGDIRECTORY}/message.data +Signed-By: 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE! +" | runapt "${METHODSDIR}/gpgv" +} + + +echo '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org> +[GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2016-09-01 1472742625 0 4 0 1 11 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE +[GNUPG:] ASSERT_PUBKEY_ALGO 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 1 brainpoolP256r1' > gpgv.output + +msgtest "Warns about invalid specification" ">=invalid" +gpgvmethod >method.output 2>&1 || true +testsuccess --nomsg grep "Message: Unrecognized public key specification '>=invalid' in option APT::Key::Assert-Pubkey-Algo::Next" method.output diff --git a/test/integration/test-snapshot b/test/integration/test-snapshot index 26ef5a7..31a02ca 100755 --- a/test/integration/test-snapshot +++ b/test/integration/test-snapshot @@ -66,7 +66,7 @@ testsuccessequal "'http://localhost:${APTHTTPPORT}/dists/stable/InRelease' local 'http://localhost:${APTHTTPPORT}/dists/stable/main/binary-all/Packages.xz' localhost:${APTHTTPPORT}_dists_stable_main_binary-all_Packages 0 'http://localhost:${APTHTTPPORT}/dists/stable/main/i18n/Translation-en.xz' localhost:${APTHTTPPORT}_dists_stable_main_i18n_Translation-en 0 " aptget update --print-uris -for option in -S --snapshot; do +for option in '-S' '-S ' '--snapshot ' '--snapshot=' '-o APT::Snapshot='; do testsuccessequal "'https://snapshot.debian.org/archive/debian/BANANA/dists/stable/InRelease' snapshot.debian.org_archive_debian_BANANA_dists_stable_InRelease 0 'https://snapshot.debian.org/archive/debian/BANANA/dists/stable/main/source/Sources.xz' snapshot.debian.org_archive_debian_BANANA_dists_stable_main_source_Sources 0 'https://snapshot.debian.org/archive/debian/BANANA/dists/stable/main/binary-amd64/Packages.xz' snapshot.debian.org_archive_debian_BANANA_dists_stable_main_binary-amd64_Packages 0 @@ -76,7 +76,7 @@ testsuccessequal "'https://snapshot.debian.org/archive/debian/BANANA/dists/stabl 'http://localhost:${APTHTTPPORT}/dists/stable/main/source/Sources.xz' localhost:${APTHTTPPORT}_dists_stable_main_source_Sources 0 'http://localhost:${APTHTTPPORT}/dists/stable/main/binary-amd64/Packages.xz' localhost:${APTHTTPPORT}_dists_stable_main_binary-amd64_Packages 0 'http://localhost:${APTHTTPPORT}/dists/stable/main/binary-all/Packages.xz' localhost:${APTHTTPPORT}_dists_stable_main_binary-all_Packages 0 -'http://localhost:${APTHTTPPORT}/dists/stable/main/i18n/Translation-en.xz' localhost:${APTHTTPPORT}_dists_stable_main_i18n_Translation-en 0 " aptget update --print-uris $option BANANA +'http://localhost:${APTHTTPPORT}/dists/stable/main/i18n/Translation-en.xz' localhost:${APTHTTPPORT}_dists_stable_main_i18n_Translation-en 0 " aptget update --print-uris ${option}BANANA done @@ -93,6 +93,12 @@ Get:6 http://localhost:${APTHTTPPORT}/snapshot/BANANA stable/main Translation-en Reading package lists..." \ aptget update -o Acquire::Snapshots::URI::Label::Testcases="http://localhost:${APTHTTPPORT}/snapshot/@SNAPSHOTID@/" -SBANANA +for option in '-S' '-S ' '--snapshot ' '--snapshot=' '-o APT::Snapshot='; do + testsuccessequal 'Listing...' apt list --upgradable -o Acquire::Snapshots::URI::Label::Testcases="http://localhost:${APTHTTPPORT}/snapshot/@SNAPSHOTID@/" ${option}BANANA + testsuccessequal 'Listing... +awesome/stable 42 amd64' apt list awesome -o Acquire::Snapshots::URI::Label::Testcases="http://localhost:${APTHTTPPORT}/snapshot/@SNAPSHOTID@/" ${option}BANANA +done + msgmsg "Cache constructed without snapshot" testsuccessequal "Package files: 500 http://localhost:${APTHTTPPORT} stable/main all Packages @@ -102,7 +108,7 @@ testsuccessequal "Package files: release o=Debian,a=stable,n=stable,l=Testcases,c=main,b=amd64 origin localhost Pinned packages:" \ - aptcache policy -o Acquire::Snapshots::URI::Label::Testcases="http://localhost:${APTHTTPPORT}/snapshot/@SNAPSHOTID@/" + aptcache policy -o Acquire::Snapshots::URI::Label::Testcases="http://localhost:${APTHTTPPORT}/snapshot/@SNAPSHOTID@/" testsuccessequal "'http://localhost:${APTHTTPPORT}/pool/awesome_42_amd64.deb' awesome_42_amd64.deb $(stat -c %s aptarchive/pool/awesome_42_amd64.deb) " \ aptget install --print-uris -qq awesome @@ -121,7 +127,6 @@ Pinned packages:" \ testsuccessequal "'http://localhost:${APTHTTPPORT}/snapshot/BANANA/pool/awesome_42_amd64.deb' awesome_42_amd64.deb $(stat -c %s aptarchive/pool/awesome_42_amd64.deb) " \ aptget install --print-uris -qq awesome -o Acquire::Snapshots::URI::Label::Testcases="http://localhost:${APTHTTPPORT}/snapshot/@SNAPSHOTID@/" -SBANANA - msgmsg "Origin: Ubuntu" releasechanger 'Origin' 'Ubuntu' testsuccessequal "'https://snapshot.ubuntu.com/ubuntu/BANANA/dists/stable/InRelease' snapshot.ubuntu.com_ubuntu_BANANA_dists_stable_InRelease 0 @@ -133,7 +138,7 @@ testsuccessequal "'https://snapshot.ubuntu.com/ubuntu/BANANA/dists/stable/InRele 'http://localhost:${APTHTTPPORT}/dists/stable/main/source/Sources.xz' localhost:${APTHTTPPORT}_dists_stable_main_source_Sources 0 'http://localhost:${APTHTTPPORT}/dists/stable/main/binary-amd64/Packages.xz' localhost:${APTHTTPPORT}_dists_stable_main_binary-amd64_Packages 0 'http://localhost:${APTHTTPPORT}/dists/stable/main/binary-all/Packages.xz' localhost:${APTHTTPPORT}_dists_stable_main_binary-all_Packages 0 -'http://localhost:${APTHTTPPORT}/dists/stable/main/i18n/Translation-en.xz' localhost:${APTHTTPPORT}_dists_stable_main_i18n_Translation-en 0 " aptget update --print-uris $option BANANA +'http://localhost:${APTHTTPPORT}/dists/stable/main/i18n/Translation-en.xz' localhost:${APTHTTPPORT}_dists_stable_main_i18n_Translation-en 0 " aptget update --print-uris -S BANANA msgmsg "Label: Debian" releasechanger 'Label' 'Debian' @@ -146,7 +151,7 @@ testsuccessequal "'https://snapshot.ubuntu.com/ubuntu/BANANA/dists/stable/InRele 'http://localhost:${APTHTTPPORT}/dists/stable/main/source/Sources.xz' localhost:${APTHTTPPORT}_dists_stable_main_source_Sources 0 'http://localhost:${APTHTTPPORT}/dists/stable/main/binary-amd64/Packages.xz' localhost:${APTHTTPPORT}_dists_stable_main_binary-amd64_Packages 0 'http://localhost:${APTHTTPPORT}/dists/stable/main/binary-all/Packages.xz' localhost:${APTHTTPPORT}_dists_stable_main_binary-all_Packages 0 -'http://localhost:${APTHTTPPORT}/dists/stable/main/i18n/Translation-en.xz' localhost:${APTHTTPPORT}_dists_stable_main_i18n_Translation-en 0 " aptget update --print-uris $option BANANA +'http://localhost:${APTHTTPPORT}/dists/stable/main/i18n/Translation-en.xz' localhost:${APTHTTPPORT}_dists_stable_main_i18n_Translation-en 0 " aptget update --print-uris -S BANANA testsuccessequal "'http://localhost:${APTHTTPPORT}/dists/stable/InRelease' localhost:${APTHTTPPORT}_dists_stable_InRelease 0 'http://localhost:${APTHTTPPORT}/snapshot/BANANA/dists/stable/InRelease' localhost:${APTHTTPPORT}_snapshot_BANANA_dists_stable_InRelease 0 @@ -171,7 +176,7 @@ testsuccessequal "'https://example.org/snapshots//BANANA/dists/stable/InRelease' 'http://localhost:${APTHTTPPORT}/dists/stable/main/source/Sources.xz' localhost:${APTHTTPPORT}_dists_stable_main_source_Sources 0 'http://localhost:${APTHTTPPORT}/dists/stable/main/binary-amd64/Packages.xz' localhost:${APTHTTPPORT}_dists_stable_main_binary-amd64_Packages 0 'http://localhost:${APTHTTPPORT}/dists/stable/main/binary-all/Packages.xz' localhost:${APTHTTPPORT}_dists_stable_main_binary-all_Packages 0 -'http://localhost:${APTHTTPPORT}/dists/stable/main/i18n/Translation-en.xz' localhost:${APTHTTPPORT}_dists_stable_main_i18n_Translation-en 0 " aptget update --print-uris $option BANANA -o Acquire::Snapshots::URI::Host::localhost="https://example.org/snapshots/@PATH@/@SNAPSHOTID@/" +'http://localhost:${APTHTTPPORT}/dists/stable/main/i18n/Translation-en.xz' localhost:${APTHTTPPORT}_dists_stable_main_i18n_Translation-en 0 " aptget update --print-uris -S BANANA -o Acquire::Snapshots::URI::Host::localhost="https://example.org/snapshots/@PATH@/@SNAPSHOTID@/" msgmsg "Snapshots: set in the InRelease file" sed -i '/^Origin: / a\ diff --git a/test/integration/test-snapshot-upgrades b/test/integration/test-snapshot-upgrades new file mode 100755 index 0000000..d5e8006 --- /dev/null +++ b/test/integration/test-snapshot-upgrades @@ -0,0 +1,156 @@ +#!/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 |