diff options
| author | Julian Andres Klode <jak@debian.org> | 2022-06-29 13:30:03 +0000 |
|---|---|---|
| committer | Julian Andres Klode <jak@debian.org> | 2022-06-29 13:30:03 +0000 |
| commit | e4230878687c6d9bd3b13552bb2c1053b9d7d7d8 (patch) | |
| tree | 6f1583b7198ce4c8f2e8a66936f53186857f2caf /test/integration | |
| parent | edffb0ae26935d948ffeb3be229fdcf37d2a1ee1 (diff) | |
| parent | 20739359fa936c0851a4c0f37667526d98c22761 (diff) | |
Merge branch 'pu/phasing-better' into 'main'
Rewrite phased updates using a keep-back approach
See merge request apt-team/apt!245
Diffstat (limited to 'test/integration')
| -rwxr-xr-x | test/integration/test-phased-updates | 28 | ||||
| -rwxr-xr-x | test/integration/test-phased-updates-upgrade | 256 |
2 files changed, 284 insertions, 0 deletions
diff --git a/test/integration/test-phased-updates b/test/integration/test-phased-updates index c06d6f5a1..7377f910f 100755 --- a/test/integration/test-phased-updates +++ b/test/integration/test-phased-updates @@ -6,6 +6,7 @@ TESTDIR="$(readlink -f "$(dirname "$0")")" setupenvironment echo 'Debug::Phasing "1";' > rootdir/etc/apt/apt.conf.d/debug-phasing +echo 'APT::Get::Phase-Policy "1";' > rootdir/etc/apt/apt.conf.d/debug-phasing configarchitecture 'i386' 'armel' @@ -24,6 +25,16 @@ insertpackage 'unstable' 'phased1' 'all' '50' 'Phased-Update-Percentage: 50' insertpackage 'unstable' 'phased2' 'all' '50' 'Phased-Update-Percentage: 50' insertpackage 'unstable' 'phased3' 'all' '50' 'Phased-Update-Percentage: 50' +insertinstalledpackage 'phased-and-pinned' 'all' '1' +insertpackage 'unstable' 'phased-and-pinned' 'all' '10' 'Phased-Update-Percentage: 0' +insertpackage 'unstable' 'phased-and-pinned-new' 'all' '10' 'Phased-Update-Percentage: 0' + +cat > rootdir/etc/apt/preferences.d/phased-and-pinned << EOF +Package: phased-and-pinned phased-and-pinned-new +Pin: release * +Pin-Priority: -12 +EOF + setupaptarchive msgmsg "Basic test" @@ -62,6 +73,23 @@ phased3: 10 1 (phased 10%) 500 file:${TMPWORKINGDIRECTORY}/aptarchive unstable/main all Packages" aptcache policy phased1 phased2 phased3 +testsuccessequal "phased-and-pinned: + Installed: 1 + Candidate: (none) + Version table: + 10 -12 (phased 0%) + 500 file:${TMPWORKINGDIRECTORY}/aptarchive unstable/main all Packages + *** 1 -12 + 100 ${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/status" aptcache policy phased-and-pinned + +testsuccessequal "phased-and-pinned-new: + Installed: (none) + Candidate: (none) + Version table: + 10 -12 (phased 0%) + 500 file:${TMPWORKINGDIRECTORY}/aptarchive unstable/main all Packages" aptcache policy phased-and-pinned-new + + msgmsg "Test for always-include-phased-updates" for always in Update-Manager::Always-Include-Phased-Updates APT::Get::Always-Include-Phased-Updates; do testsuccessequal "phased1: diff --git a/test/integration/test-phased-updates-upgrade b/test/integration/test-phased-updates-upgrade new file mode 100755 index 000000000..ab39681de --- /dev/null +++ b/test/integration/test-phased-updates-upgrade @@ -0,0 +1,256 @@ +#!/bin/sh +set -e + +TESTDIR="$(readlink -f "$(dirname "$0")")" +. "$TESTDIR/framework" + +setupenvironment +echo 'Debug::Phasing "1";' > rootdir/etc/apt/apt.conf.d/debug-phasing +configarchitecture 'i386' 'armel' + + + +# Test case phased: The package is installed and has a phased update available +insertinstalledpackage 'phased' 'all' '1' +insertpackage 'unstable-updates' 'phased' 'all' '3' 'Phased-Update-Percentage: 0' + +# Test case phased-security: A phased package is in security and will be installed +insertinstalledpackage 'phased-security' 'all' '1' +insertpackage 'unstable-security' 'phased-security' 'all' '2' +insertpackage 'unstable-updates' 'phased-security' 'all' '3' 'Phased-Update-Percentage: 0' + +# Test case phased-dep: A released update depends on the phased dependency phased-dep +insertinstalledpackage 'phased-dep' 'all' '1' +insertinstalledpackage 'depends-phased-dep' 'all' '1' +insertpackage 'unstable-updates' 'phased-dep' 'all' '3' 'Phased-Update-Percentage: 0' +insertpackage 'unstable-updates' 'depends-phased-dep' 'all' '3' 'Depends: phased-dep (= 3)' + +# Test case phased-new: A release update depends on a new package that's phasing +insertinstalledpackage 'depends-phased-new' 'all' '1' +insertpackage 'unstable-updates' 'phased-new' 'all' '3' 'Phased-Update-Percentage: 0' +insertpackage 'unstable-updates' 'depends-phased-new' 'all' '3' 'Depends: phased-new (= 3)' + +setupaptarchive + +msgmsg "Testing with default (upgrade-based) implementation" + +testsuccessequal "Reading package lists... +Building dependency tree... +Calculating upgrade... +The following NEW packages will be installed: + phased-new +The following packages have been kept back: + depends-phased-dep phased phased-dep +The following packages will be upgraded: + depends-phased-new phased-security +2 upgraded, 1 newly installed, 0 to remove and 3 not upgraded. +Inst phased-new (3 unstable-updates [all]) +Inst depends-phased-new [1] (3 unstable-updates [all]) +Inst phased-security [1] (3 unstable-updates [all]) +Conf phased-new (3 unstable-updates [all]) +Conf depends-phased-new (3 unstable-updates [all]) +Conf phased-security (3 unstable-updates [all])" aptget dist-upgrade -s -q + +for always in APT::Get::Always-Include-Phased-Updates Update-Manager::Always-Include-Phased-Updates; do +testsuccessequal "Reading package lists... +Building dependency tree... +Calculating upgrade... +The following NEW packages will be installed: + phased-new +The following packages will be upgraded: + depends-phased-dep depends-phased-new phased phased-dep phased-security +5 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst phased-dep [1] (3 unstable-updates [all]) +Inst depends-phased-dep [1] (3 unstable-updates [all]) +Inst phased-new (3 unstable-updates [all]) +Inst depends-phased-new [1] (3 unstable-updates [all]) +Inst phased [1] (3 unstable-updates [all]) +Inst phased-security [1] (3 unstable-updates [all]) +Conf phased-dep (3 unstable-updates [all]) +Conf depends-phased-dep (3 unstable-updates [all]) +Conf phased-new (3 unstable-updates [all]) +Conf depends-phased-new (3 unstable-updates [all]) +Conf phased (3 unstable-updates [all]) +Conf phased-security (3 unstable-updates [all])" aptget dist-upgrade -s -q -o $always=1 +done + +SOURCE_DATE_EPOCH=1 testsuccessequal "Reading package lists... +Building dependency tree... +Calculating upgrade... +The following NEW packages will be installed: + phased-new +The following packages will be upgraded: + depends-phased-dep depends-phased-new phased phased-dep phased-security +5 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst phased-dep [1] (3 unstable-updates [all]) +Inst depends-phased-dep [1] (3 unstable-updates [all]) +Inst phased-new (3 unstable-updates [all]) +Inst depends-phased-new [1] (3 unstable-updates [all]) +Inst phased [1] (3 unstable-updates [all]) +Inst phased-security [1] (3 unstable-updates [all]) +Conf phased-dep (3 unstable-updates [all]) +Conf depends-phased-dep (3 unstable-updates [all]) +Conf phased-new (3 unstable-updates [all]) +Conf depends-phased-new (3 unstable-updates [all]) +Conf phased (3 unstable-updates [all]) +Conf phased-security (3 unstable-updates [all])" aptget dist-upgrade -s -q -o with-source-date-epoch=1 + +for never in APT::Get::Never-Include-Phased-Updates Update-Manager::Never-Include-Phased-Updates; do +testsuccessequal "Reading package lists... +Building dependency tree... +Calculating upgrade... +The following NEW packages will be installed: + phased-new +The following packages have been kept back: + depends-phased-dep phased phased-dep +The following packages will be upgraded: + depends-phased-new phased-security +2 upgraded, 1 newly installed, 0 to remove and 3 not upgraded. +Inst phased-new (3 unstable-updates [all]) +Inst depends-phased-new [1] (3 unstable-updates [all]) +Inst phased-security [1] (3 unstable-updates [all]) +Conf phased-new (3 unstable-updates [all]) +Conf depends-phased-new (3 unstable-updates [all]) +Conf phased-security (3 unstable-updates [all])" aptget dist-upgrade -s -q -o $never=1 +done + +testsuccessequal "Reading package lists... +Building dependency tree... +Calculating upgrade... +The following NEW packages will be installed: + phased-new +The following packages have been kept back: + depends-phased-dep phased phased-dep +The following packages will be upgraded: + depends-phased-new phased-security +2 upgraded, 1 newly installed, 0 to remove and 3 not upgraded. +Inst phased-new (3 unstable-updates [all]) +Inst depends-phased-new [1] (3 unstable-updates [all]) +Inst phased-security [1] (3 unstable-updates [all]) +Conf phased-new (3 unstable-updates [all]) +Conf depends-phased-new (3 unstable-updates [all]) +Conf phased-security (3 unstable-updates [all])" aptget upgrade -s -q --with-new-pkgs + +testsuccessequal "Reading package lists... +Building dependency tree... +Calculating upgrade... +The following packages have been kept back: + depends-phased-dep depends-phased-new phased phased-dep +The following packages will be upgraded: + phased-security +1 upgraded, 0 newly installed, 0 to remove and 4 not upgraded. +Inst phased-security [1] (3 unstable-updates [all]) +Conf phased-security (3 unstable-updates [all])" aptget upgrade -s -q + + +msgmsg "Testing with policy based implementation" +echo 'APT::Get::Phase-Policy "1";' > rootdir/etc/apt/apt.conf.d/phase-by-policy + +testsuccessequal "Reading package lists... +Building dependency tree... +Calculating upgrade... +The following NEW packages will be installed: + phased-new +The following packages have been kept back: + depends-phased-dep +The following packages will be upgraded: + depends-phased-new phased-security +2 upgraded, 1 newly installed, 0 to remove and 1 not upgraded. +Inst phased-new (3 unstable-updates [all]) +Inst depends-phased-new [1] (3 unstable-updates [all]) +Inst phased-security [1] (2 unstable-security [all]) +Conf phased-new (3 unstable-updates [all]) +Conf depends-phased-new (3 unstable-updates [all]) +Conf phased-security (2 unstable-security [all])" aptget dist-upgrade -s -q + +for always in APT::Get::Always-Include-Phased-Updates Update-Manager::Always-Include-Phased-Updates; do +testsuccessequal "Reading package lists... +Building dependency tree... +Calculating upgrade... +The following NEW packages will be installed: + phased-new +The following packages will be upgraded: + depends-phased-dep depends-phased-new phased phased-dep phased-security +5 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst phased-dep [1] (3 unstable-updates [all]) +Inst depends-phased-dep [1] (3 unstable-updates [all]) +Inst phased-new (3 unstable-updates [all]) +Inst depends-phased-new [1] (3 unstable-updates [all]) +Inst phased [1] (3 unstable-updates [all]) +Inst phased-security [1] (3 unstable-updates [all]) +Conf phased-dep (3 unstable-updates [all]) +Conf depends-phased-dep (3 unstable-updates [all]) +Conf phased-new (3 unstable-updates [all]) +Conf depends-phased-new (3 unstable-updates [all]) +Conf phased (3 unstable-updates [all]) +Conf phased-security (3 unstable-updates [all])" aptget dist-upgrade -s -q -o $always=1 +done + +# In the policy implementation, we can update security +for never in APT::Get::Never-Include-Phased-Updates Update-Manager::Never-Include-Phased-Updates; do +testsuccessequal "Reading package lists... +Building dependency tree... +Calculating upgrade... +The following NEW packages will be installed: + phased-new +The following packages have been kept back: + depends-phased-dep +The following packages will be upgraded: + depends-phased-new phased-security +2 upgraded, 1 newly installed, 0 to remove and 1 not upgraded. +Inst phased-new (3 unstable-updates [all]) +Inst depends-phased-new [1] (3 unstable-updates [all]) +Inst phased-security [1] (2 unstable-security [all]) +Conf phased-new (3 unstable-updates [all]) +Conf depends-phased-new (3 unstable-updates [all]) +Conf phased-security (2 unstable-security [all])" aptget dist-upgrade -s -q -o $never=1 +done + +SOURCE_DATE_EPOCH=1 testsuccessequal "Reading package lists... +Building dependency tree... +Calculating upgrade... +The following NEW packages will be installed: + phased-new +The following packages will be upgraded: + depends-phased-dep depends-phased-new phased phased-dep phased-security +5 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst phased-dep [1] (3 unstable-updates [all]) +Inst depends-phased-dep [1] (3 unstable-updates [all]) +Inst phased-new (3 unstable-updates [all]) +Inst depends-phased-new [1] (3 unstable-updates [all]) +Inst phased [1] (3 unstable-updates [all]) +Inst phased-security [1] (3 unstable-updates [all]) +Conf phased-dep (3 unstable-updates [all]) +Conf depends-phased-dep (3 unstable-updates [all]) +Conf phased-new (3 unstable-updates [all]) +Conf depends-phased-new (3 unstable-updates [all]) +Conf phased (3 unstable-updates [all]) +Conf phased-security (3 unstable-updates [all])" aptget dist-upgrade -s -q -o with-source-date-epoch=1 + +testsuccessequal "Reading package lists... +Building dependency tree... +Calculating upgrade... +The following NEW packages will be installed: + phased-new +The following packages have been kept back: + depends-phased-dep +The following packages will be upgraded: + depends-phased-new phased-security +2 upgraded, 1 newly installed, 0 to remove and 1 not upgraded. +Inst phased-new (3 unstable-updates [all]) +Inst depends-phased-new [1] (3 unstable-updates [all]) +Inst phased-security [1] (2 unstable-security [all]) +Conf phased-new (3 unstable-updates [all]) +Conf depends-phased-new (3 unstable-updates [all]) +Conf phased-security (2 unstable-security [all])" aptget upgrade -s -q --with-new-pkgs + +testsuccessequal "Reading package lists... +Building dependency tree... +Calculating upgrade... +The following packages have been kept back: + depends-phased-dep depends-phased-new +The following packages will be upgraded: + phased-security +1 upgraded, 0 newly installed, 0 to remove and 2 not upgraded. +Inst phased-security [1] (2 unstable-security [all]) +Conf phased-security (2 unstable-security [all])" aptget upgrade -s -q |
