1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202
|
#!/bin/sh
set -e
TESTDIR="$(readlink -f "$(dirname "$0")")"
. "$TESTDIR/framework"
setupenvironment
configarchitecture 'amd64'
insertpackage 'unstable' 'okay' 'all' '1'
insertpackage 'unstable' 'upgrade' 'all' '2'
insertpackage 'unstable' 'unneeded' 'all' '1'
insertpackage 'unstable' 'unneeded2' 'all' '1' 'Depends: bad-level1'
insertpackage 'unstable' 'later' 'all' '1'
insertpackage 'unstable' 'bad-level0' 'all' '1' 'Depends: unneeded, unknown'
insertpackage 'unstable' 'bad-level1' 'all' '1' 'Depends: bad-level0'
insertpackage 'unstable' 'bad-upgrade-level0' 'all' '2' 'Depends: unneeded, unknown'
insertpackage 'unstable' 'bad-upgrade-level1' 'all' '2' 'Depends: bad-upgrade-level0 (>= 2), unneeded2'
insertpackage 'unstable' 'bad-conflict-level0' 'all' '1' 'Depends: unneeded
Conflicts: bad-conflict-level2'
insertpackage 'unstable' 'bad-conflict-level1' 'all' '1' 'Depends: bad-conflict-level0'
insertpackage 'unstable' 'bad-conflict-level2' 'all' '1' 'Depends: bad-conflict-level1, unneeded2'
insertinstalledpackage 'upgrade' 'all' '1'
insertinstalledpackage 'bad-upgrade' 'all' '1'
insertinstalledpackage 'bad-upgrade-level0' 'all' '1'
insertinstalledpackage 'bad-upgrade-level1' 'all' '1'
insertfoos() {
insertpackage 'unstable' "foo-${1}-level0" 'all' '1' "${2}: unknown | unknown | okay | later"
insertpackage 'unstable' "foo-${1}-level1" 'all' '1' "${2}: bad-level0 | bad-level0 | okay | later"
insertpackage 'unstable' "foo-${1}-level2" 'all' '1' "${2}: bad-level1 | bad-level1 | okay | later"
insertpackage 'unstable' "foo-${1}-upgrade-level0" 'all' '1' "${2}: bad-upgrade (>= 2) | okay | upgrade (>= 2) | later"
insertpackage 'unstable' "foo-${1}-upgrade-level1" 'all' '1' "${2}: bad-upgrade-level0 (>= 2) | bad-upgrade-level0 (>= 2) | bad-level0 | okay | upgrade (>= 2) | later"
insertpackage 'unstable' "foo-${1}-upgrade-level2" 'all' '1' "${2}: bad-upgrade-level1 (>= 2) | bad-upgrade-level1 (>= 2) | bad-level1 | okay | upgrade (>= 2) | later"
insertpackage 'unstable' "foo-${1}-conflict" 'all' '1' "${2}: unknown | bad-conflict-level2 | okay | later"
}
insertfoos 'd' 'Depends'
insertfoos 'r' 'Recommends'
setupaptarchive
_testsuccessheadtailequal() {
local TYPE="$1"
shift
msggroup "testsuccess${TYPE}equal"
local HEADLINES="$1"
local CMP="$2"
shift 2
testsuccesswithglobalerror 'testsuccess' 'EW' "$@"
cp "${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output" "${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess${TYPE}equal.output"
testsuccessequal "$CMP" "${TYPE}" -n "$HEADLINES" "${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess${TYPE}equal.output"
msggroup
}
testsuccessheadequal() {
msg="$1"
shift
testsuccess "$@"
cp "${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output" "${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess-no-sim-equal.output"
testsuccessequal "$msg" awk '{print} /not upgraded.$/ {exit}' "${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess-no-sim-equal.output"
}
testsuccesstailequal() {
_testsuccessheadtailequal 'tail' "$@"
}
checkfoos() {
msgmsg 'Install checks with foos dependency type' "$2"
for level in 0 1 2; do
testsuccessheadequal "Reading package lists...
Building dependency tree...
The following additional packages will be installed:
okay
The following NEW packages will be installed:
foo-${1}-level${level} okay
0 upgraded, 2 newly installed, 0 to remove and 3 not upgraded." apt install foo-${1}-level${level} -s
testsuccessheadequal "Reading package lists...
Building dependency tree...
The following additional packages will be installed:
upgrade
The following NEW packages will be installed:
foo-${1}-upgrade-level${level}
The following packages will be upgraded:
upgrade
1 upgraded, 1 newly installed, 0 to remove and 2 not upgraded." apt install foo-${1}-upgrade-level${level} -s
done
testsuccessheadequal "Reading package lists...
Building dependency tree...
The following additional packages will be installed:
okay
The following NEW packages will be installed:
foo-${1}-conflict okay
0 upgraded, 2 newly installed, 0 to remove and 3 not upgraded." apt install foo-${1}-conflict -s
}
checkfoos 'd' 'Depends'
# FIXME? The 3.0 solver solves Recommends after Depends, so they do not influence our decisions here.
[ "$APT_SOLVER" != "internal" ] || checkfoos 'r' 'Recommends'
testsuccessequal 'Reading package lists...
Building dependency tree...
Calculating upgrade...
The following NEW packages will be installed:
foo-d-upgrade-level2 (1)
The following packages have been kept back:
bad-upgrade-level0 (1 => 2)
bad-upgrade-level1 (1 => 2)
The following packages will be upgraded:
upgrade (1 => 2)
1 upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
Inst upgrade [1] (2 unstable [all])
Inst foo-d-upgrade-level2 (1 unstable [all])
Conf upgrade (2 unstable [all])
Conf foo-d-upgrade-level2 (1 unstable [all])' apt full-upgrade foo-d-upgrade-level2 -sV
TEST_WITH_APTITUDE=false
msgtest 'Check if aptitude is available for additional tests'
if dpkg-checkbuilddeps -d 'aptitude' /dev/null >/dev/null 2>&1; then
TEST_WITH_APTITUDE=true
# we don't document aptitude config options
sed -i -e '/^#x-apt-configure-index/ d' "$(getaptconfig)"
msgpass
else
msgskip 'not installed'
fi
if $TEST_WITH_APTITUDE; then
OKAYAPTITUDE='0 packages upgraded, 2 newly installed, 0 to remove and 3 not upgraded.
Need to get 0 B/84 B of archives. After unpacking 86.0 kB will be used.
Would download/install/remove packages.'
testsuccesstailequal 3 "$OKAYAPTITUDE" aptitude install foo-d-level2 -sy
[ "$APT_SOLVER" != "internal" ] || testsuccesstailequal 3 "$OKAYAPTITUDE" aptitude install foo-r-level2 -sy # FIXME: See above for 3.0
testsuccesstailequal 3 "$OKAYAPTITUDE" aptitude install foo-d-conflict -sy
[ "$APT_SOLVER" != "internal" ] || testsuccesstailequal 3 "$OKAYAPTITUDE" aptitude install foo-r-conflict -sy # FIXME: See above for 3.0
fi
BADSOLVETEXT='Reading package lists...
Building dependency tree...
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
'
BADSOLVETEXT3='Reading package lists...
Building dependency tree...
Solving dependencies...
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
'
testfailureequal "$BADSOLVETEXT
The following packages have unmet dependencies:
bad-level0 : Depends: unknown but it is not installable
bad-upgrade-level0 : Depends: unknown but it is not installable
E: Unable to correct problems, you have held broken packages." apt install bad-upgrade-level1 -s --solver internal
testfailureequal "$BADSOLVETEXT3
The following packages have unmet dependencies:
bad-upgrade-level1 : Depends: bad-upgrade-level0 (>= 2) but 1 is to be installed
Depends: unneeded2 but it is not going to be installed
E: Unable to satisfy dependencies. Reached two conflicting assignments:
1. bad-upgrade-level0:amd64=2 is selected as an upgrade because:
1. bad-upgrade-level1:amd64=2 is selected as an upgrade
2. bad-upgrade-level1:amd64=2 Depends bad-upgrade-level0 (>= 2)
2. bad-upgrade-level0:amd64=2 Depends unknown
but none of the choices are installable:
[no choices]" apt install bad-upgrade-level1 -s --solver 3.0
testfailureequal "$BADSOLVETEXT
The following packages have unmet dependencies:
bad-conflict-level0 : Conflicts: bad-conflict-level2 but 1 is to be installed
bad-level0 : Depends: unknown but it is not installable
E: Unable to correct problems, you have held broken packages." apt install bad-conflict-level2 -s --solver internal
testfailureequal "$BADSOLVETEXT3
The following packages have unmet dependencies:
bad-conflict-level2 : Depends: bad-conflict-level1 but it is not going to be installed
Depends: unneeded2 but it is not going to be installed
E: Unable to satisfy dependencies. Reached two conflicting assignments:
1. bad-conflict-level1:amd64 is selected for install because:
1. bad-conflict-level2:amd64=1 is selected for install
2. bad-conflict-level2:amd64 Depends bad-conflict-level1
2. bad-conflict-level1:amd64 Depends bad-conflict-level0
but none of the choices are installable:
- bad-conflict-level0:amd64 is not selected for install because:
1. bad-conflict-level2:amd64=1 is selected for install as above
2. bad-conflict-level0:amd64 Conflicts bad-conflict-level2" apt install bad-conflict-level2 -s --solver 3.0
if $TEST_WITH_APTITUDE; then
testsuccesstailequal 6 'The following packages have been kept back:
bad-upgrade-level1
No packages will be installed, upgraded, or removed.
0 packages upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Need to get 0 B of archives. After unpacking 0 B will be used.
Would download/install/remove packages.' aptitude install bad-upgrade-level1 -sy
# aptitude does not show the kept back message in this caseā¦
testsuccesstailequal 4 'No packages will be installed, upgraded, or removed.
0 packages upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Need to get 0 B of archives. After unpacking 0 B will be used.
Would download/install/remove packages.' aptitude install bad-conflict-level2 -sy
fi
|