summaryrefslogtreecommitdiff
path: root/test/integration/test-bug-758153-versioned-provides-support
diff options
context:
space:
mode:
Diffstat (limited to 'test/integration/test-bug-758153-versioned-provides-support')
-rwxr-xr-xtest/integration/test-bug-758153-versioned-provides-support387
1 files changed, 387 insertions, 0 deletions
diff --git a/test/integration/test-bug-758153-versioned-provides-support b/test/integration/test-bug-758153-versioned-provides-support
new file mode 100755
index 000000000..fb8ed39e8
--- /dev/null
+++ b/test/integration/test-bug-758153-versioned-provides-support
@@ -0,0 +1,387 @@
+#!/bin/sh
+set -e
+
+# dpkg implements versioned provides in commit 5bb02fe80e9f40dcad9703a72f67cf615ff217b5
+# but previous versions seem to allow parsing, working and ignoring it.
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+insertinstalledpackage 'webapp' 'all' '1' 'Depends: httpd'
+insertinstalledpackage 'webserver' 'all' '1' 'Provides: httpd'
+
+insertpackage 'unstable' 'webapp' 'all' '2' 'Depends: httpd (>= 2)'
+insertpackage 'unstable' 'webserver' 'amd64' '2' 'Provides: httpd (= 2)'
+insertpackage 'unstable' 'foreign-webserver' 'i386' '2' 'Multi-Arch: foreign
+Provides: httpd (= 2)'
+
+insertpackage 'experimental' 'webapp' 'all' '3' 'Depends: httpd (>= 1.5)'
+insertpackage 'experimental' 'webserver' 'amd64' '3' 'Provides: httpd (= 3)'
+
+insertpackage 'experimental' 'foreign-webserver' 'i386' '4' 'Multi-Arch: foreign
+Provides: httpd (= 4)'
+insertpackage 'experimental' 'cool-webapp' 'all' '4' 'Depends: httpd (>= 4)'
+
+# arch-qualified provides, see #777071
+insertpackage 'unstable' 'foo' 'all' '1' 'Provides: bar:i386'
+insertpackage 'unstable' 'baz' 'i386,amd64' '1' 'Depends: bar'
+insertpackage 'experimental' 'baz' 'i386,amd64' '2' 'Depends: bar:i386'
+insertpackage 'experimental' 'baz-broken' 'i386' '2' 'Depends: bar:amd64'
+
+insertpackage 'unstable' 'next' 'amd64' '1' 'Multi-Arch: foreign
+Provides: next (= 2)'
+insertpackage 'unstable' 'needsrealnext' 'amd64,i386' '2' 'Depends: next (>= 2)'
+
+insertpackage 'unstable' 'virtualnext2' 'amd64' '1' 'Multi-Arch: foreign
+Provides: next2 (= 2)'
+insertpackage 'unstable' 'needsnext2' 'amd64,i386' '2' 'Depends: next2 (>= 2)'
+
+insertpackage 'unstable' 'virtualnext3' 'amd64' '1' 'Multi-Arch: no
+Provides: next3 (= 2)'
+insertpackage 'unstable' 'needsnext3' 'amd64,i386' '2' 'Depends: next3 (>= 2)'
+
+insertpackage 'unstable' 'selfprov' 'amd64' '2' 'Provides: selfprov (= 1)'
+insertpackage 'unstable' 'needsselfprov1' 'amd64' '1' 'Depends: selfprov (= 1)'
+insertpackage 'unstable' 'needsselfprov2' 'amd64' '1' 'Depends: selfprov (= 2)'
+insertpackage 'unstable' 'needsselfprov12' 'amd64' '1' 'Depends: selfprov (= 1), selfprov (= 2)'
+insertpackage 'unstable' 'needsselfprov123' 'amd64' '1' 'Depends: selfprov (= 1), selfprov (= 2), selfprov (= 3)'
+
+setupaptarchive
+
+SOMEPACKAGESCOULDNOT='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:
+
+The following packages have unmet dependencies:'
+
+for binary in 'aptget' 'apt'; do
+ for method in 'upgrade' 'dist-upgrade'; do
+ for solver in 'internal' 'apt'; do
+ if [ "$solver" = 'apt' ]; then
+ HEADER='Execute external solver...'
+ else
+ HEADER='Calculating upgrade...'
+ fi
+ testsuccessequal "Reading package lists...
+Building dependency tree...
+$HEADER
+The following packages will be upgraded:
+ webapp webserver
+2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Inst webserver [1] (2 unstable [amd64])
+Inst webapp [1] (2 unstable [all])
+Conf webserver (2 unstable [amd64])
+Conf webapp (2 unstable [all])" $binary $method -s --solver $solver
+ done
+ done
+done
+
+for solver in 'internal' 'apt'; do
+ msgmsg 'Testing with solver' "$solver"
+ HEADER_PRE='Reading package lists...
+Building dependency tree...'
+ HEADER_POST='Execute external solver...'
+ HEADER="${HEADER_PRE}"
+ if [ "$solver" = 'apt' ]; then
+ HEADER="${HEADER}
+${HEADER_POST}"
+ fi
+ testsuccessequal "$HEADER
+The following packages will be upgraded:
+ webapp webserver
+2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Inst webserver [1] (2 unstable [amd64])
+Inst webapp [1] (2 unstable [all])
+Conf webserver (2 unstable [amd64])
+Conf webapp (2 unstable [all])" aptget install webapp webserver -s --solver $solver
+
+ testsuccessequal "$HEADER
+The following packages will be upgraded:
+ webapp webserver
+2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Inst webserver [1] (2 unstable [amd64])
+Inst webapp [1] (3 experimental [all])
+Conf webserver (2 unstable [amd64])
+Conf webapp (3 experimental [all])" aptget install webapp=3 webserver -s --solver $solver
+
+ testsuccessequal "$HEADER
+The following packages will be upgraded:
+ webapp webserver
+2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Inst webserver [1] (3 experimental [amd64])
+Inst webapp [1] (2 unstable [all])
+Conf webserver (3 experimental [amd64])
+Conf webapp (2 unstable [all])" aptget install webapp webserver=3 -s --solver $solver
+
+ testsuccessequal "$HEADER
+The following NEW packages will be installed:
+ foreign-webserver:i386
+The following packages will be upgraded:
+ webapp
+1 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
+Inst foreign-webserver:i386 (2 unstable [i386])
+Inst webapp [1] (2 unstable [all])
+Conf foreign-webserver:i386 (2 unstable [i386])
+Conf webapp (2 unstable [all])" aptget install webapp foreign-webserver:i386 -s --solver $solver
+
+ testsuccessequal "$HEADER
+The following NEW packages will be installed:
+ foreign-webserver:i386
+The following packages will be upgraded:
+ webapp
+1 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
+Inst foreign-webserver:i386 (2 unstable [i386])
+Inst webapp [1] (3 experimental [all])
+Conf foreign-webserver:i386 (2 unstable [i386])
+Conf webapp (3 experimental [all])" aptget install webapp=3 foreign-webserver:i386 -s --solver $solver
+
+ testsuccessequal "$HEADER
+The following NEW packages will be installed:
+ foreign-webserver:i386
+The following packages will be upgraded:
+ webapp
+1 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
+Inst foreign-webserver:i386 (4 experimental [i386])
+Inst webapp [1] (2 unstable [all])
+Conf foreign-webserver:i386 (4 experimental [i386])
+Conf webapp (2 unstable [all])" aptget install webapp foreign-webserver:i386=4 -s --solver $solver
+
+ if [ "$solver" = 'apt' ]; then
+ WEBAPP_ERR="$HEADER
+The solver encountered an error of type: ERR_UNSOLVABLE
+The following information might help you to understand what is wrong:
+The following packages have unmet dependencies:
+ cool-webapp : Depends: httpd (>= 4)
+
+$SOMEPACKAGESCOULDNOT
+ cool-webapp : Depends: httpd (>= 4)
+E: External solver failed with: The following packages have unmet dependencies:"
+ else
+ WEBAPP_ERR="$HEADER
+$SOMEPACKAGESCOULDNOT
+ cool-webapp : Depends: httpd (>= 4)
+E: Unable to correct problems, you have held broken packages."
+ fi
+ testfailureequal "$WEBAPP_ERR" aptget install cool-webapp -s --solver $solver
+ testfailureequal "$WEBAPP_ERR" aptget install cool-webapp foreign-webserver:i386 -s --solver $solver
+
+ testsuccessequal "$HEADER
+The following NEW packages will be installed:
+ cool-webapp foreign-webserver:i386
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst foreign-webserver:i386 (4 experimental [i386])
+Inst cool-webapp (4 experimental [all])
+Conf foreign-webserver:i386 (4 experimental [i386])
+Conf cool-webapp (4 experimental [all])" aptget install cool-webapp foreign-webserver:i386=4 -s --solver $solver
+
+ testsuccessequal "$HEADER
+The following additional packages will be installed:
+ foo
+The following NEW packages will be installed:
+ baz:i386 foo
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst foo (1 unstable [all])
+Inst baz:i386 (1 unstable [i386])
+Conf foo (1 unstable [all])
+Conf baz:i386 (1 unstable [i386])" aptget install baz:i386 -s --solver $solver
+
+ if [ "$solver" = 'apt' ]; then
+ testfailureequal "$HEADER
+The solver encountered an error of type: ERR_UNSOLVABLE
+The following information might help you to understand what is wrong:
+The following packages have unmet dependencies:
+ baz : Depends: bar but it is not installable
+
+$SOMEPACKAGESCOULDNOT
+ baz : Depends: bar but it is not installable
+E: External solver failed with: The following packages have unmet dependencies:" aptget install baz:amd64 -s --solver $solver
+ else
+ testfailureequal "$HEADER
+$SOMEPACKAGESCOULDNOT
+ baz : Depends: bar but it is not installable
+E: Unable to correct problems, you have held broken packages." aptget install baz:amd64 -s --solver $solver
+ fi
+
+ HEADER="${HEADER_PRE}
+Selected version '2' (experimental [amd64]) for 'baz'"
+ if [ "$solver" = 'apt' ]; then
+ HEADER="${HEADER}
+${HEADER_POST}"
+ fi
+ testsuccessequal "$HEADER
+The following additional packages will be installed:
+ foo
+The following NEW packages will be installed:
+ baz foo
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst foo (1 unstable [all])
+Inst baz (2 experimental [amd64])
+Conf foo (1 unstable [all])
+Conf baz (2 experimental [amd64])" aptget install baz/experimental -s --solver $solver
+
+ HEADER="${HEADER_PRE}
+Selected version '2' (experimental [i386]) for 'baz:i386'"
+ if [ "$solver" = 'apt' ]; then
+ HEADER="${HEADER}
+${HEADER_POST}"
+ fi
+ testsuccessequal "$HEADER
+The following additional packages will be installed:
+ foo
+The following NEW packages will be installed:
+ baz:i386 foo
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst foo (1 unstable [all])
+Inst baz:i386 (2 experimental [i386])
+Conf foo (1 unstable [all])
+Conf baz:i386 (2 experimental [i386])" aptget install baz:i386/experimental -s --solver $solver
+
+ if [ "$solver" = 'apt' ]; then
+ HEADER="${HEADER_PRE}
+${HEADER_POST}"
+ else
+ HEADER="${HEADER_PRE}"
+ fi
+
+ if [ "$solver" = 'apt' ]; then
+ testfailureequal "$HEADER
+The solver encountered an error of type: ERR_UNSOLVABLE
+The following information might help you to understand what is wrong:
+The following packages have unmet dependencies:
+ baz-broken:i386 : Depends: bar:amd64 but it is not installable
+
+$SOMEPACKAGESCOULDNOT
+ baz-broken:i386 : Depends: bar:amd64 but it is not installable
+E: External solver failed with: The following packages have unmet dependencies:" aptget install baz-broken -s --solver $solver
+ else
+ testfailureequal "$HEADER
+$SOMEPACKAGESCOULDNOT
+ baz-broken:i386 : Depends: bar:amd64 but it is not installable
+E: Unable to correct problems, you have held broken packages." aptget install baz-broken -s --solver $solver
+ fi
+
+ testsuccessequal "$HEADER
+The following additional packages will be installed:
+ next
+The following NEW packages will be installed:
+ needsrealnext next
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst next (1 unstable [amd64])
+Inst needsrealnext (2 unstable [amd64])
+Conf next (1 unstable [amd64])
+Conf needsrealnext (2 unstable [amd64])" aptget install needsrealnext -s --solver $solver
+
+ testsuccessequal "$HEADER
+The following additional packages will be installed:
+ next
+The following NEW packages will be installed:
+ needsrealnext:i386 next
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst next (1 unstable [amd64])
+Inst needsrealnext:i386 (2 unstable [i386])
+Conf next (1 unstable [amd64])
+Conf needsrealnext:i386 (2 unstable [i386])" aptget install needsrealnext:i386 -s --solver $solver
+
+ testsuccessequal "$HEADER
+The following additional packages will be installed:
+ virtualnext2
+The following NEW packages will be installed:
+ needsnext2 virtualnext2
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst virtualnext2 (1 unstable [amd64])
+Inst needsnext2 (2 unstable [amd64])
+Conf virtualnext2 (1 unstable [amd64])
+Conf needsnext2 (2 unstable [amd64])" aptget install needsnext2 -s --solver $solver
+
+ testsuccessequal "$HEADER
+The following additional packages will be installed:
+ virtualnext2
+The following NEW packages will be installed:
+ needsnext2:i386 virtualnext2
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst virtualnext2 (1 unstable [amd64])
+Inst needsnext2:i386 (2 unstable [i386])
+Conf virtualnext2 (1 unstable [amd64])
+Conf needsnext2:i386 (2 unstable [i386])" aptget install needsnext2:i386 -s --solver $solver
+
+ testsuccessequal "$HEADER
+The following additional packages will be installed:
+ virtualnext3
+The following NEW packages will be installed:
+ needsnext3 virtualnext3
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst virtualnext3 (1 unstable [amd64])
+Inst needsnext3 (2 unstable [amd64])
+Conf virtualnext3 (1 unstable [amd64])
+Conf needsnext3 (2 unstable [amd64])" aptget install needsnext3 -s --solver $solver
+
+ if [ "$solver" = 'apt' ]; then
+ testfailureequal "$HEADER
+The solver encountered an error of type: ERR_UNSOLVABLE
+The following information might help you to understand what is wrong:
+The following packages have unmet dependencies:
+ needsnext3:i386 : Depends: next3:i386 (>= 2) but it is not installable
+
+$SOMEPACKAGESCOULDNOT
+ needsnext3:i386 : Depends: next3:i386 (>= 2) but it is not installable
+E: External solver failed with: The following packages have unmet dependencies:" aptget install needsnext3:i386 -s --solver $solver
+ else
+ testfailureequal "$HEADER
+$SOMEPACKAGESCOULDNOT
+ needsnext3:i386 : Depends: next3:i386 (>= 2) but it is not installable
+E: Unable to correct problems, you have held broken packages." aptget install needsnext3:i386 -s --solver $solver
+ fi
+
+ testsuccessequal "$HEADER
+The following additional packages will be installed:
+ selfprov
+The following NEW packages will be installed:
+ needsselfprov1 selfprov
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst selfprov (2 unstable [amd64])
+Inst needsselfprov1 (1 unstable [amd64])
+Conf selfprov (2 unstable [amd64])
+Conf needsselfprov1 (1 unstable [amd64])" aptget install needsselfprov1 -s --solver $solver
+ testsuccessequal "$HEADER
+The following additional packages will be installed:
+ selfprov
+The following NEW packages will be installed:
+ needsselfprov2 selfprov
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst selfprov (2 unstable [amd64])
+Inst needsselfprov2 (1 unstable [amd64])
+Conf selfprov (2 unstable [amd64])
+Conf needsselfprov2 (1 unstable [amd64])" aptget install needsselfprov2 -s --solver $solver
+ testsuccessequal "$HEADER
+The following additional packages will be installed:
+ selfprov
+The following NEW packages will be installed:
+ needsselfprov12 selfprov
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst selfprov (2 unstable [amd64])
+Inst needsselfprov12 (1 unstable [amd64])
+Conf selfprov (2 unstable [amd64])
+Conf needsselfprov12 (1 unstable [amd64])" aptget install needsselfprov12 -s --solver $solver
+ if [ "$solver" = 'apt' ]; then
+ testfailureequal "$HEADER
+The solver encountered an error of type: ERR_UNSOLVABLE
+The following information might help you to understand what is wrong:
+The following packages have unmet dependencies:
+ needsselfprov123 : Depends: selfprov (= 3)
+
+$SOMEPACKAGESCOULDNOT
+ needsselfprov123 : Depends: selfprov (= 1)
+ Depends: selfprov (= 2)
+ Depends: selfprov (= 3)
+E: External solver failed with: The following packages have unmet dependencies:" aptget install needsselfprov123 -s --solver $solver
+ else
+ testfailureequal "$HEADER
+$SOMEPACKAGESCOULDNOT
+ needsselfprov123 : Depends: selfprov (= 3)
+E: Unable to correct problems, you have held broken packages." aptget install needsselfprov123 -s --solver $solver
+ fi
+done