From c204d1482e085f5453c0d99ee5a9a8e99ca90e38 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 17 Apr 2012 23:45:52 +0200 Subject: ensure that not --assert-multi-arch supporting dpkg's do not generate output in the testcases by redirecting to /dev/null --- test/integration/framework | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 0670d6a78..b80b02922 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -151,7 +151,7 @@ setupenvironment() { echo "DPKG::options:: \"--root=${TMPWORKINGDIRECTORY}/rootdir\";" >> aptconfig.conf echo "DPKG::options:: \"--force-not-root\";" >> aptconfig.conf echo "DPKG::options:: \"--force-bad-path\";" >> aptconfig.conf - if ! $(which dpkg) --assert-multi-arch; then + if ! $(which dpkg) --assert-multi-arch 2>&1 > /dev/null; then echo "DPKG::options:: \"--force-architecture\";" >> aptconfig.conf # Added to test multiarch before dpkg is ready for it… fi echo "DPKG::options:: \"--log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log\";" >> aptconfig.conf @@ -199,7 +199,7 @@ configdpkg() { echo -n > rootdir/var/lib/dpkg/status fi fi - if $(which dpkg) --assert-multi-arch; then + if $(which dpkg) --assert-multi-arch 2>&1 > /dev/null; then local ARCHS="$(getarchitectures)" if echo "$ARCHS" | grep -E -q '[^ ]+ [^ ]+'; then DPKGARCH="$(dpkg --print-architecture)" -- cgit v1.2.3-70-g09d2 From 04d24dbdcc2eabf616b26878084d3b8790e30086 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 19 Apr 2012 10:29:02 +0200 Subject: ignore the order used for the 'apt' package as long as it is valid either way --- ...-ubuntu-bug-835625-multiarch-lockstep-installed-first | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'test/integration') diff --git a/test/integration/test-ubuntu-bug-835625-multiarch-lockstep-installed-first b/test/integration/test-ubuntu-bug-835625-multiarch-lockstep-installed-first index a9a4069cf..269038d0f 100755 --- a/test/integration/test-ubuntu-bug-835625-multiarch-lockstep-installed-first +++ b/test/integration/test-ubuntu-bug-835625-multiarch-lockstep-installed-first @@ -14,7 +14,7 @@ insertpackage 'unstable' 'apt' 'i386' '2' 'Depends: libsame (= 2)' setupaptarchive -testequal 'Reading package lists... +testequalor2 'Reading package lists... Building dependency tree... The following extra packages will be installed: apt:i386 libsame:i386 @@ -28,4 +28,18 @@ Inst libsame (2 unstable [amd64]) [apt:i386 ] Conf libsame:i386 (2 unstable [i386]) [apt:i386 ] Conf libsame (2 unstable [amd64]) [apt:i386 ] Inst apt:i386 [1] (2 unstable [i386]) +Conf apt:i386 (2 unstable [i386])' 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + apt:i386 libsame:i386 +The following NEW packages will be installed: + libsame +The following packages will be upgraded: + apt:i386 libsame:i386 +2 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst apt:i386 [1] (2 unstable [i386]) [] +Inst libsame:i386 [1] (2 unstable [i386]) +Inst libsame (2 unstable [amd64]) +Conf libsame:i386 (2 unstable [i386]) +Conf libsame (2 unstable [amd64]) Conf apt:i386 (2 unstable [i386])' aptget install libsame:amd64 -s -- cgit v1.2.3-70-g09d2 From f0633b216cd019ac0c508a46440943c91f07f65d Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 19 Apr 2012 22:41:25 +0200 Subject: add a very simple testcase for the lp#985852 fix in the previous commit --- ...-ubuntu-bug-985852-pre-depends-or-group-ordering | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100755 test/integration/test-ubuntu-bug-985852-pre-depends-or-group-ordering (limited to 'test/integration') diff --git a/test/integration/test-ubuntu-bug-985852-pre-depends-or-group-ordering b/test/integration/test-ubuntu-bug-985852-pre-depends-or-group-ordering new file mode 100755 index 000000000..462acad00 --- /dev/null +++ b/test/integration/test-ubuntu-bug-985852-pre-depends-or-group-ordering @@ -0,0 +1,21 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'amd64' + +insertinstalledpackage 'custom' 'amd64' '1.0' 'Pre-Depends: grub-pc | grub' +insertinstalledpackage 'grub' 'amd64' '1.0' +insertpackage 'unstable' 'custom' 'amd64' '2.0' 'Pre-Depends: grub-pc | grub' + +setupaptarchive + +testequal 'Reading package lists... +Building dependency tree... +The following packages will be upgraded: + custom +1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. +Inst custom [1.0] (2.0 unstable [amd64]) +Conf custom (2.0 unstable [amd64])' aptget dist-upgrade -s -- cgit v1.2.3-70-g09d2 From e6a12579e9e5d5735eda450cf2bb3986d828ab65 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 20 Apr 2012 10:13:17 +0200 Subject: * apt-pkg/cacheset.cc: - actually return to the fallback modifier if we have detected we should for packagenames which look like modifiers (Closes: #669591) --- apt-pkg/cacheset.cc | 7 +++++-- debian/changelog | 5 ++++- test/integration/test-bug-593360-modifiers-in-names | 5 +++++ 3 files changed, 14 insertions(+), 3 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/cacheset.cc b/apt-pkg/cacheset.cc index b892ab4bf..e2dbe0e57 100644 --- a/apt-pkg/cacheset.cc +++ b/apt-pkg/cacheset.cc @@ -217,6 +217,7 @@ bool PackageContainerInterface::FromModifierCommandLine(unsigned short &modID, P pkgCacheFile &Cache, const char * cmdline, std::list const &mods, CacheSetHelper &helper) { std::string str = cmdline; + unsigned short fallback = modID; bool modifierPresent = false; for (std::list::const_iterator mod = mods.begin(); mod != mods.end(); ++mod) { @@ -243,6 +244,7 @@ bool PackageContainerInterface::FromModifierCommandLine(unsigned short &modID, P helper.showErrors(errors); if (Pkg.end() == false) { pci->insert(Pkg); + modID = fallback; return true; } } @@ -281,13 +283,14 @@ bool VersionContainerInterface::FromModifierCommandLine(unsigned short &modID, modifierPresent = true; break; } - if (modifierPresent == true) { bool const errors = helper.showErrors(false); bool const found = VersionContainerInterface::FromString(vci, Cache, cmdline, select, helper, true); helper.showErrors(errors); - if (found == true) + if (found == true) { + modID = fallback; return true; + } } return FromString(vci, Cache, str, select, helper); } diff --git a/debian/changelog b/debian/changelog index 4d4d6a70e..18242e081 100644 --- a/debian/changelog +++ b/debian/changelog @@ -12,6 +12,9 @@ apt (0.9.2) unstable; urgency=low - do not use the input data directly but memcpy it instead as it could be unaligned as in the http-transport which causes a sigbus error on sparc (Closes: #669061) + * apt-pkg/cacheset.cc: + - actually return to the fallback modifier if we have detected we + should for packagenames which look like modifiers (Closes: #669591) [ Malcolm Scott ] @@ -19,7 +22,7 @@ apt (0.9.2) unstable; urgency=low - iterate over all pre-depends or-group member instead of looping endlessly over the first member in SmartUnpack (LP: #985852) - -- David Kalnischkies Fri, 20 Apr 2012 09:52:21 +0200 + -- David Kalnischkies Fri, 20 Apr 2012 10:11:24 +0200 apt (0.9.1) unstable; urgency=low diff --git a/test/integration/test-bug-593360-modifiers-in-names b/test/integration/test-bug-593360-modifiers-in-names index 83a3cfabf..74826cbdb 100755 --- a/test/integration/test-bug-593360-modifiers-in-names +++ b/test/integration/test-bug-593360-modifiers-in-names @@ -15,6 +15,11 @@ The following NEW packages will be installed: Inst g++ (4:4.4.5-1 localhost [i386]) Conf g++ (4:4.4.5-1 localhost [i386])' aptget install g++ -s +testequal "Reading package lists... +Building dependency tree... +Package 'g++' is not installed, so not removed +0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget remove g++ -s + testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: -- cgit v1.2.3-70-g09d2 From 074da0970c68879d548b6b4f64d0da7f38151248 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 23 Apr 2012 17:46:11 +0200 Subject: * apt-pkg/depcache.cc: - clearly separate 'positive' and 'negative' dependencies and their upgrade-resolution tries in MarkInstall and especially don't treat Conflicts differently compared to Breaks here --- apt-pkg/depcache.cc | 25 ++-- debian/changelog | 6 +- .../test-ignore-provides-if-versioned-breaks | 150 +++++++++++++++++++++ .../test-ignore-provides-if-versioned-conflicts | 150 +++++++++++++++++++++ 4 files changed, 318 insertions(+), 13 deletions(-) create mode 100755 test/integration/test-ignore-provides-if-versioned-breaks create mode 100755 test/integration/test-ignore-provides-if-versioned-conflicts (limited to 'test/integration') diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 1eea55560..daf7c8c4d 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -1152,9 +1152,8 @@ bool pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, } /* This bit is for processing the possibilty of an install/upgrade - fixing the problem */ - if (Start->Type != Dep::DpkgBreaks && - (DepState[Start->ID] & DepCVer) == DepCVer) + fixing the problem for "positive" dependencies */ + if (Start.IsNegative() == false && (DepState[Start->ID] & DepCVer) == DepCVer) { APT::VersionList verlist; pkgCache::VerIterator Cand = PkgState[Start.TargetPkg()->ID].CandidateVerIter(*this); @@ -1198,13 +1197,13 @@ bool pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, } continue; } - - /* For conflicts we just de-install the package and mark as auto, - Conflicts may not have or groups. For dpkg's Breaks we try to - upgrade the package. */ - if (Start.IsNegative() == true) + /* Negative dependencies have no or-group + If the dependency isn't versioned, we try if an upgrade might solve the problem. + Otherwise we remove the offender if needed */ + else if (Start.IsNegative() == true && Start->Type != pkgCache::Dep::Obsoletes) { SPtrArray List = Start.AllTargets(); + pkgCache::PkgIterator TrgPkg = Start.TargetPkg(); for (Version **I = List; *I != 0; I++) { VerIterator Ver(*this,*I); @@ -1215,15 +1214,17 @@ bool pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, if (PkgState[Pkg->ID].InstallVer == 0) continue; - if (PkgState[Pkg->ID].CandidateVer != *I && - Start->Type == Dep::DpkgBreaks && + if ((Start->Version != 0 || TrgPkg != Pkg) && + PkgState[Pkg->ID].CandidateVer != PkgState[Pkg->ID].InstallVer && + PkgState[Pkg->ID].CandidateVer != *I && MarkInstall(Pkg,true,Depth + 1, false, ForceImportantDeps) == true) continue; - else if (MarkDelete(Pkg,false,Depth + 1, false) == false) + else if ((Start->Type == pkgCache::Dep::Conflicts || Start->Type == pkgCache::Dep::DpkgBreaks) && + MarkDelete(Pkg,false,Depth + 1, false) == false) break; } continue; - } + } } return Dep.end() == true; diff --git a/debian/changelog b/debian/changelog index 145da311e..e585530ff 100644 --- a/debian/changelog +++ b/debian/changelog @@ -12,8 +12,12 @@ apt (0.9.3) unstable; urgency=low - implement --empty and --format option for dump * apt-pkg/cdrom.cc: - use Dump() to generate the configuration output + * apt-pkg/depcache.cc: + - clearly separate 'positive' and 'negative' dependencies and + their upgrade-resolution tries in MarkInstall and especially don't + treat Conflicts differently compared to Breaks here - -- David Kalnischkies Sun, 22 Apr 2012 13:01:04 +0200 + -- David Kalnischkies Mon, 23 Apr 2012 17:43:53 +0200 apt (0.9.2) unstable; urgency=low diff --git a/test/integration/test-ignore-provides-if-versioned-breaks b/test/integration/test-ignore-provides-if-versioned-breaks new file mode 100755 index 000000000..f8b4544a0 --- /dev/null +++ b/test/integration/test-ignore-provides-if-versioned-breaks @@ -0,0 +1,150 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'i386' 'amd64' + +insertpackage 'unstable' 'unrlated' 'all' '1.0' + +insertinstalledpackage 'foo' 'i386' '2.0' +insertpackage 'unstable' 'foo' 'i386' '4.0' +insertpackage 'unstable' 'foo-provider' 'i386' '1.0' 'Provides: foo' +insertpackage 'unstable' 'foo-breaker-3' 'i386' '1.0' 'Breaks: foo (<< 3.0)' +insertpackage 'unstable' 'foo-breaker-2' 'i386' '1.0' 'Breaks: foo (<< 2.0)' +insertpackage 'unstable' 'foo-breaker-none' 'i386' '1.0' 'Breaks: foo' + +insertinstalledpackage 'foo-foreign' 'amd64' '2.0' 'Multi-Arch: foreign' +insertpackage 'unstable' 'foo-foreign' 'amd64' '4.0' 'Multi-Arch: foreign' +insertpackage 'unstable' 'foo-foreign-provider' 'i386' '1.0' 'Provides: foo-foreign' +insertpackage 'unstable' 'foo-foreign-breaker-3' 'i386' '1.0' 'Breaks: foo-foreign (<< 3.0)' +insertpackage 'unstable' 'foo-foreign-breaker-2' 'i386' '1.0' 'Breaks: foo-foreign (<< 2.0)' +insertpackage 'unstable' 'foo-foreign-breaker-none' 'i386' '1.0' 'Breaks: foo-foreign' + +insertinstalledpackage 'foo-same' 'i386,amd64' '2.0' 'Multi-Arch: same' +insertpackage 'unstable' 'foo-same' 'i386,amd64' '4.0' 'Multi-Arch: same' +insertpackage 'unstable' 'foo-same-provider' 'i386' '1.0' 'Provides: foo-same' +insertpackage 'unstable' 'foo-same-breaker-3' 'i386' '1.0' 'Breaks: foo-same (<< 3.0)' +insertpackage 'unstable' 'foo-same-breaker-2' 'i386' '1.0' 'Breaks: foo-same (<< 2.0)' +insertpackage 'unstable' 'foo-same-breaker-none' 'i386' '1.0' 'Breaks: foo-same' + + + +setupaptarchive + +testequal '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: + +The following packages have unmet dependencies: + foo-breaker-none : Breaks: foo +E: Unable to correct problems, you have held broken packages.' aptget install foo-provider foo-breaker-none -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + foo-breaker-2 foo-provider +0 upgraded, 2 newly installed, 0 to remove and 4 not upgraded. +Inst foo-breaker-2 (1.0 unstable [i386]) +Inst foo-provider (1.0 unstable [i386]) +Conf foo-breaker-2 (1.0 unstable [i386]) +Conf foo-provider (1.0 unstable [i386])' aptget install foo-provider foo-breaker-2 -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + foo +The following NEW packages will be installed: + foo-breaker-3 foo-provider +The following packages will be upgraded: + foo +1 upgraded, 2 newly installed, 0 to remove and 3 not upgraded. +Inst foo [2.0] (4.0 unstable [i386]) +Inst foo-breaker-3 (1.0 unstable [i386]) +Inst foo-provider (1.0 unstable [i386]) +Conf foo (4.0 unstable [i386]) +Conf foo-breaker-3 (1.0 unstable [i386]) +Conf foo-provider (1.0 unstable [i386])' aptget install foo-provider foo-breaker-3 -s + +testequal '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: + +The following packages have unmet dependencies: + foo-foreign-breaker-none : Breaks: foo-foreign +E: Unable to correct problems, you have held broken packages.' aptget install foo-foreign-provider foo-foreign-breaker-none -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + foo-foreign-breaker-2 foo-foreign-provider +0 upgraded, 2 newly installed, 0 to remove and 4 not upgraded. +Inst foo-foreign-breaker-2 (1.0 unstable [i386]) +Inst foo-foreign-provider (1.0 unstable [i386]) +Conf foo-foreign-breaker-2 (1.0 unstable [i386]) +Conf foo-foreign-provider (1.0 unstable [i386])' aptget install foo-foreign-provider foo-foreign-breaker-2 -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + foo-foreign:amd64 +The following NEW packages will be installed: + foo-foreign-breaker-3 foo-foreign-provider +The following packages will be upgraded: + foo-foreign:amd64 +1 upgraded, 2 newly installed, 0 to remove and 3 not upgraded. +Inst foo-foreign:amd64 [2.0] (4.0 unstable [amd64]) +Inst foo-foreign-breaker-3 (1.0 unstable [i386]) +Inst foo-foreign-provider (1.0 unstable [i386]) +Conf foo-foreign:amd64 (4.0 unstable [amd64]) +Conf foo-foreign-breaker-3 (1.0 unstable [i386]) +Conf foo-foreign-provider (1.0 unstable [i386])' aptget install foo-foreign-provider foo-foreign-breaker-3 -s + +testequal '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: + +The following packages have unmet dependencies: + foo-same-breaker-none : Breaks: foo-same +E: Unable to correct problems, you have held broken packages.' aptget install foo-same-provider foo-same-breaker-none -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + foo-same-breaker-2 foo-same-provider +0 upgraded, 2 newly installed, 0 to remove and 4 not upgraded. +Inst foo-same-breaker-2 (1.0 unstable [i386]) +Inst foo-same-provider (1.0 unstable [i386]) +Conf foo-same-breaker-2 (1.0 unstable [i386]) +Conf foo-same-provider (1.0 unstable [i386])' aptget install foo-same-provider foo-same-breaker-2 -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + foo-same:amd64 foo-same +The following NEW packages will be installed: + foo-same-breaker-3 foo-same-provider +The following packages will be upgraded: + foo-same:amd64 foo-same +2 upgraded, 2 newly installed, 0 to remove and 2 not upgraded. +Inst foo-same:amd64 [2.0] (4.0 unstable [amd64]) [foo-same:amd64 on foo-same:i386] [foo-same:i386 on foo-same:amd64] [foo-same:i386 ] +Inst foo-same [2.0] (4.0 unstable [i386]) +Conf foo-same:amd64 (4.0 unstable [amd64]) +Conf foo-same (4.0 unstable [i386]) +Inst foo-same-breaker-3 (1.0 unstable [i386]) +Inst foo-same-provider (1.0 unstable [i386]) +Conf foo-same-breaker-3 (1.0 unstable [i386]) +Conf foo-same-provider (1.0 unstable [i386])' aptget install foo-same-provider foo-same-breaker-3 -s diff --git a/test/integration/test-ignore-provides-if-versioned-conflicts b/test/integration/test-ignore-provides-if-versioned-conflicts new file mode 100755 index 000000000..44eafcff1 --- /dev/null +++ b/test/integration/test-ignore-provides-if-versioned-conflicts @@ -0,0 +1,150 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'i386' 'amd64' + +insertpackage 'unstable' 'unrlated' 'all' '1.0' + +insertinstalledpackage 'foo' 'i386' '2.0' +insertpackage 'unstable' 'foo' 'i386' '4.0' +insertpackage 'unstable' 'foo-provider' 'i386' '1.0' 'Provides: foo' +insertpackage 'unstable' 'foo-breaker-3' 'i386' '1.0' 'Conflicts: foo (<< 3.0)' +insertpackage 'unstable' 'foo-breaker-2' 'i386' '1.0' 'Conflicts: foo (<< 2.0)' +insertpackage 'unstable' 'foo-breaker-none' 'i386' '1.0' 'Conflicts: foo' + +insertinstalledpackage 'foo-foreign' 'amd64' '2.0' 'Multi-Arch: foreign' +insertpackage 'unstable' 'foo-foreign' 'amd64' '4.0' 'Multi-Arch: foreign' +insertpackage 'unstable' 'foo-foreign-provider' 'i386' '1.0' 'Provides: foo-foreign' +insertpackage 'unstable' 'foo-foreign-breaker-3' 'i386' '1.0' 'Conflicts: foo-foreign (<< 3.0)' +insertpackage 'unstable' 'foo-foreign-breaker-2' 'i386' '1.0' 'Conflicts: foo-foreign (<< 2.0)' +insertpackage 'unstable' 'foo-foreign-breaker-none' 'i386' '1.0' 'Conflicts: foo-foreign' + +insertinstalledpackage 'foo-same' 'i386,amd64' '2.0' 'Multi-Arch: same' +insertpackage 'unstable' 'foo-same' 'i386,amd64' '4.0' 'Multi-Arch: same' +insertpackage 'unstable' 'foo-same-provider' 'i386' '1.0' 'Provides: foo-same' +insertpackage 'unstable' 'foo-same-breaker-3' 'i386' '1.0' 'Conflicts: foo-same (<< 3.0)' +insertpackage 'unstable' 'foo-same-breaker-2' 'i386' '1.0' 'Conflicts: foo-same (<< 2.0)' +insertpackage 'unstable' 'foo-same-breaker-none' 'i386' '1.0' 'Conflicts: foo-same' + + + +setupaptarchive + +testequal '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: + +The following packages have unmet dependencies: + foo-breaker-none : Conflicts: foo +E: Unable to correct problems, you have held broken packages.' aptget install foo-provider foo-breaker-none -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + foo-breaker-2 foo-provider +0 upgraded, 2 newly installed, 0 to remove and 4 not upgraded. +Inst foo-breaker-2 (1.0 unstable [i386]) +Inst foo-provider (1.0 unstable [i386]) +Conf foo-breaker-2 (1.0 unstable [i386]) +Conf foo-provider (1.0 unstable [i386])' aptget install foo-provider foo-breaker-2 -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + foo +The following NEW packages will be installed: + foo-breaker-3 foo-provider +The following packages will be upgraded: + foo +1 upgraded, 2 newly installed, 0 to remove and 3 not upgraded. +Inst foo [2.0] (4.0 unstable [i386]) +Inst foo-breaker-3 (1.0 unstable [i386]) +Inst foo-provider (1.0 unstable [i386]) +Conf foo (4.0 unstable [i386]) +Conf foo-breaker-3 (1.0 unstable [i386]) +Conf foo-provider (1.0 unstable [i386])' aptget install foo-provider foo-breaker-3 -s + +testequal '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: + +The following packages have unmet dependencies: + foo-foreign-breaker-none : Conflicts: foo-foreign +E: Unable to correct problems, you have held broken packages.' aptget install foo-foreign-provider foo-foreign-breaker-none -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + foo-foreign-breaker-2 foo-foreign-provider +0 upgraded, 2 newly installed, 0 to remove and 4 not upgraded. +Inst foo-foreign-breaker-2 (1.0 unstable [i386]) +Inst foo-foreign-provider (1.0 unstable [i386]) +Conf foo-foreign-breaker-2 (1.0 unstable [i386]) +Conf foo-foreign-provider (1.0 unstable [i386])' aptget install foo-foreign-provider foo-foreign-breaker-2 -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + foo-foreign:amd64 +The following NEW packages will be installed: + foo-foreign-breaker-3 foo-foreign-provider +The following packages will be upgraded: + foo-foreign:amd64 +1 upgraded, 2 newly installed, 0 to remove and 3 not upgraded. +Inst foo-foreign:amd64 [2.0] (4.0 unstable [amd64]) +Inst foo-foreign-breaker-3 (1.0 unstable [i386]) +Inst foo-foreign-provider (1.0 unstable [i386]) +Conf foo-foreign:amd64 (4.0 unstable [amd64]) +Conf foo-foreign-breaker-3 (1.0 unstable [i386]) +Conf foo-foreign-provider (1.0 unstable [i386])' aptget install foo-foreign-provider foo-foreign-breaker-3 -s + +testequal '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: + +The following packages have unmet dependencies: + foo-same-breaker-none : Conflicts: foo-same +E: Unable to correct problems, you have held broken packages.' aptget install foo-same-provider foo-same-breaker-none -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + foo-same-breaker-2 foo-same-provider +0 upgraded, 2 newly installed, 0 to remove and 4 not upgraded. +Inst foo-same-breaker-2 (1.0 unstable [i386]) +Inst foo-same-provider (1.0 unstable [i386]) +Conf foo-same-breaker-2 (1.0 unstable [i386]) +Conf foo-same-provider (1.0 unstable [i386])' aptget install foo-same-provider foo-same-breaker-2 -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + foo-same:amd64 foo-same +The following NEW packages will be installed: + foo-same-breaker-3 foo-same-provider +The following packages will be upgraded: + foo-same:amd64 foo-same +2 upgraded, 2 newly installed, 0 to remove and 2 not upgraded. +Inst foo-same:amd64 [2.0] (4.0 unstable [amd64]) [foo-same:amd64 on foo-same:i386] [foo-same:i386 on foo-same:amd64] [foo-same:i386 ] +Inst foo-same [2.0] (4.0 unstable [i386]) +Conf foo-same:amd64 (4.0 unstable [amd64]) +Conf foo-same (4.0 unstable [i386]) +Inst foo-same-breaker-3 (1.0 unstable [i386]) +Inst foo-same-provider (1.0 unstable [i386]) +Conf foo-same-breaker-3 (1.0 unstable [i386]) +Conf foo-same-provider (1.0 unstable [i386])' aptget install foo-same-provider foo-same-breaker-3 -s -- cgit v1.2.3-70-g09d2 From 3fa950f16cb2997bccd97475f75c5f3e37609dd3 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 10 May 2012 18:47:51 +0200 Subject: add a small wrapper to call gdb in the framework setting --- test/integration/framework | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index b80b02922..5a0e1070f 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -107,6 +107,10 @@ aptitude() { LD_LIBRARY_PATH=${BUILDDIRECTORY} $(which aptitude) $* fi } +gdb() { + echo "gdb: run »$*«" + APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} $(which gdb) ${BUILDDIRECTORY}/$1 +} addtrap() { CURRENTTRAP="$CURRENTTRAP $1" -- cgit v1.2.3-70-g09d2 From 57194e03a40d2ff323588acb8353eef2b881e5b2 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 14 May 2012 18:07:34 +0200 Subject: adapt manual testcase to check redirects of dists/, too --- test/integration/skip-bug-602412-dequote-redirect | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'test/integration') diff --git a/test/integration/skip-bug-602412-dequote-redirect b/test/integration/skip-bug-602412-dequote-redirect index a63d36246..689b671ce 100755 --- a/test/integration/skip-bug-602412-dequote-redirect +++ b/test/integration/skip-bug-602412-dequote-redirect @@ -19,18 +19,20 @@ echo "server.modules = ( \"mod_redirect\" ) server.document-root = \"$(readlink -f ./aptarchive)\" server.port = 8080 server.stat-cache-engine = \"disable\" -url.redirect = ( \"^/pool/(.*)$\" => \"/newpool/\$1\" )" > lighttpd.conf +url.redirect = ( \"^/pool/(.*)$\" => \"/newpool/\$1\", + \"^/dists/(.*)$\" => \"/newdists/\$1\" )" > lighttpd.conf mv aptarchive/pool aptarchive/newpool +mv aptarchive/dists aptarchive/newdists + lighttpd -t -f lighttpd.conf >/dev/null || msgdie 'Can not change to webserver: our lighttpd config is invalid' lighttpd -D -f lighttpd.conf 2>/dev/null >/dev/null & addtrap "kill $!;" -local APTARCHIVE="file://$(readlink -f ./aptarchive)" +APTARCHIVE="file://$(readlink -f ./aptarchive)" for LIST in $(find rootdir/etc/apt/sources.list.d/ -name 'apt-test-*.list'); do sed -i $LIST -e "s#$APTARCHIVE#http://localhost:8080/#" done -aptget update -qq || msgdie 'apt-get update failed' -aptget install unrelated --download-only -qq || msgdie 'downloading package failed' - +aptget update || msgdie 'apt-get update failed' +aptget install unrelated --download-only || msgdie 'downloading package failed' -- cgit v1.2.3-70-g09d2 From 65f9983436be310c768c4c42531ceea1e3a6d4ac Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 16 May 2012 16:44:15 +0200 Subject: * cmdline/apt-get.cc: - use the host architecture, not the build architecture for matching of [architecture restrictions] in Build-Depends (Closes: #672927) * --- apt-pkg/srcrecords.h | 1 + cmdline/apt-get.cc | 14 ++++- debian/changelog | 6 ++ .../test-bug-632221-cross-dependency-satisfaction | 66 ++++++++++++++-------- 4 files changed, 61 insertions(+), 26 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/srcrecords.h b/apt-pkg/srcrecords.h index 06f0dce6c..ed69d0d72 100644 --- a/apt-pkg/srcrecords.h +++ b/apt-pkg/srcrecords.h @@ -71,6 +71,7 @@ class pkgSrcRecords virtual std::string Section() const = 0; virtual const char **Binaries() = 0; // Ownership does not transfer + //FIXME: Add a parameter to specify which architecture to use for [wildcard] matching virtual bool BuildDepends(std::vector &BuildDeps, bool const &ArchOnly, bool const &StripMultiArch = true) = 0; static const char *BuildDepType(unsigned char const &Type); diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index dd9313bff..c996017b8 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -2789,8 +2789,18 @@ bool DoBuildDep(CommandLine &CmdL) // Process the build-dependencies vector BuildDeps; - if (Last->BuildDepends(BuildDeps, _config->FindB("APT::Get::Arch-Only", false), StripMultiArch) == false) - return _error->Error(_("Unable to get build-dependency information for %s"),Src.c_str()); + // FIXME: Can't specify architecture to use for [wildcard] matching, so switch default arch temporary + if (hostArch.empty() == false) + { + std::string nativeArch = _config->Find("APT::Architecture"); + _config->Set("APT::Architecture", hostArch); + bool Success = Last->BuildDepends(BuildDeps, _config->FindB("APT::Get::Arch-Only", false), StripMultiArch); + _config->Set("APT::Architecture", nativeArch); + if (Success == false) + return _error->Error(_("Unable to get build-dependency information for %s"),Src.c_str()); + } + else if (Last->BuildDepends(BuildDeps, _config->FindB("APT::Get::Arch-Only", false), StripMultiArch) == false) + return _error->Error(_("Unable to get build-dependency information for %s"),Src.c_str()); // Also ensure that build-essential packages are present Configuration::Item const *Opts = _config->Tree("APT::Build-Essential"); diff --git a/debian/changelog b/debian/changelog index 922c0720b..64af5bf60 100644 --- a/debian/changelog +++ b/debian/changelog @@ -24,6 +24,9 @@ apt (0.9.4) UNRELEASED; urgency=low * apt-pkg/contrib/fileutl.cc: - ensure that we close compressed fds, wait for forks and such even if the FileFd itself is set to not autoclose the given Fd + * cmdline/apt-get.cc: + - use the host architecture, not the build architecture for matching + of [architecture restrictions] in Build-Depends (Closes: #672927) [ Raphael Geissert ] * apt-pkg/acquire*.cc: @@ -39,6 +42,9 @@ apt (0.9.4) UNRELEASED; urgency=low * apt-pkg/algorithms.cc: - fix memory leak of Flags in pkgSimulate by a proper destructor + [ David Kalnischkies ] + * + -- David Kalnischkies Fri, 11 May 2012 23:26:59 +0200 apt (0.9.3) unstable; urgency=low diff --git a/test/integration/test-bug-632221-cross-dependency-satisfaction b/test/integration/test-bug-632221-cross-dependency-satisfaction index 30df48604..a128366c5 100755 --- a/test/integration/test-bug-632221-cross-dependency-satisfaction +++ b/test/integration/test-bug-632221-cross-dependency-satisfaction @@ -18,8 +18,10 @@ insertpackage 'unstable' 'libfwibble-dev' 'amd64,armel' '1.0' 'Depends: libfwibb insertpackage 'unstable' 'cool' 'amd64,armel' '1.0' 'Multi-Arch: allowed' insertpackage 'unstable' 'amdboot' 'amd64' '1.0' insertpackage 'unstable' 'foreigner' 'amd64,armel' '1.0' 'Multi-Arch: foreign' +insertpackage 'unstable' 'arm-stuff' 'armel' '1.0' +insertpackage 'unstable' 'linux-stuff' 'amd64,armel' '1.0' -insertsource 'unstable' 'apt' 'any' '0.8.15' 'Build-Depends: doxygen, libc6-dev, libc6-dev:native, cool:any, amdboot:amd64, foreigner, libfwibble-dev' +insertsource 'unstable' 'apt' 'any' '0.8.15' 'Build-Depends: doxygen, libc6-dev, libc6-dev:native, cool:any, amdboot:amd64, foreigner, libfwibble-dev, arm-stuff [any-arm] | linux-stuff [ linux-any]' setupaptarchive @@ -27,7 +29,8 @@ testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: amdboot cool doxygen foreigner libc6 libc6-dev libfwibble-dev libfwibble1 -0 upgraded, 8 newly installed, 0 to remove and 0 not upgraded. + linux-stuff +0 upgraded, 9 newly installed, 0 to remove and 0 not upgraded. Inst amdboot (1.0 unstable [amd64]) Inst cool (1.0 unstable [amd64]) Inst doxygen (1.0 unstable [amd64]) @@ -36,6 +39,7 @@ Inst libc6 (1.0 unstable [amd64]) Inst libc6-dev (1.0 unstable [amd64]) Inst libfwibble1 (1.0 unstable [amd64]) Inst libfwibble-dev (1.0 unstable [amd64]) +Inst linux-stuff (1.0 unstable [amd64]) Conf amdboot (1.0 unstable [amd64]) Conf cool (1.0 unstable [amd64]) Conf doxygen (1.0 unstable [amd64]) @@ -43,15 +47,17 @@ Conf foreigner (1.0 unstable [amd64]) Conf libc6 (1.0 unstable [amd64]) Conf libc6-dev (1.0 unstable [amd64]) Conf libfwibble1 (1.0 unstable [amd64]) -Conf libfwibble-dev (1.0 unstable [amd64])' aptget build-dep apt -s +Conf libfwibble-dev (1.0 unstable [amd64]) +Conf linux-stuff (1.0 unstable [amd64])' aptget build-dep apt -s testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: - amdboot cool doxygen foreigner libc6 libc6:armel libc6-dev libc6-dev:armel - libfwibble-dev:armel libfwibble1:armel -0 upgraded, 10 newly installed, 0 to remove and 0 not upgraded. + amdboot arm-stuff:armel cool doxygen foreigner libc6 libc6:armel libc6-dev + libc6-dev:armel libfwibble-dev:armel libfwibble1:armel +0 upgraded, 11 newly installed, 0 to remove and 0 not upgraded. Inst amdboot (1.0 unstable [amd64]) +Inst arm-stuff:armel (1.0 unstable [armel]) Inst cool (1.0 unstable [amd64]) Inst doxygen (1.0 unstable [amd64]) Inst foreigner (1.0 unstable [amd64]) @@ -62,6 +68,7 @@ Inst libc6-dev:armel (1.0 unstable [armel]) Inst libfwibble1:armel (1.0 unstable [armel]) Inst libfwibble-dev:armel (1.0 unstable [armel]) Conf amdboot (1.0 unstable [amd64]) +Conf arm-stuff:armel (1.0 unstable [armel]) Conf cool (1.0 unstable [amd64]) Conf doxygen (1.0 unstable [amd64]) Conf foreigner (1.0 unstable [amd64]) @@ -77,10 +84,11 @@ configarchitecture 'armel' 'amd64' testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: - amdboot:amd64 cool doxygen foreigner libc6 libc6-dev libfwibble-dev - libfwibble1 -0 upgraded, 8 newly installed, 0 to remove and 0 not upgraded. + amdboot:amd64 arm-stuff cool doxygen foreigner libc6 libc6-dev + libfwibble-dev libfwibble1 +0 upgraded, 9 newly installed, 0 to remove and 0 not upgraded. Inst amdboot:amd64 (1.0 unstable [amd64]) +Inst arm-stuff (1.0 unstable [armel]) Inst cool (1.0 unstable [armel]) Inst doxygen (1.0 unstable [armel]) Inst foreigner (1.0 unstable [armel]) @@ -89,6 +97,7 @@ Inst libc6-dev (1.0 unstable [armel]) Inst libfwibble1 (1.0 unstable [armel]) Inst libfwibble-dev (1.0 unstable [armel]) Conf amdboot:amd64 (1.0 unstable [amd64]) +Conf arm-stuff (1.0 unstable [armel]) Conf cool (1.0 unstable [armel]) Conf doxygen (1.0 unstable [armel]) Conf foreigner (1.0 unstable [armel]) @@ -101,8 +110,8 @@ testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: amdboot:amd64 cool doxygen foreigner libc6:amd64 libc6 libc6-dev:amd64 - libc6-dev libfwibble-dev:amd64 libfwibble1:amd64 -0 upgraded, 10 newly installed, 0 to remove and 0 not upgraded. + libc6-dev libfwibble-dev:amd64 libfwibble1:amd64 linux-stuff:amd64 +0 upgraded, 11 newly installed, 0 to remove and 0 not upgraded. Inst amdboot:amd64 (1.0 unstable [amd64]) Inst cool (1.0 unstable [armel]) Inst doxygen (1.0 unstable [armel]) @@ -113,6 +122,7 @@ Inst libc6-dev:amd64 (1.0 unstable [amd64]) Inst libc6-dev (1.0 unstable [armel]) Inst libfwibble1:amd64 (1.0 unstable [amd64]) Inst libfwibble-dev:amd64 (1.0 unstable [amd64]) +Inst linux-stuff:amd64 (1.0 unstable [amd64]) Conf amdboot:amd64 (1.0 unstable [amd64]) Conf cool (1.0 unstable [armel]) Conf doxygen (1.0 unstable [armel]) @@ -122,7 +132,8 @@ Conf libc6 (1.0 unstable [armel]) Conf libc6-dev:amd64 (1.0 unstable [amd64]) Conf libc6-dev (1.0 unstable [armel]) Conf libfwibble1:amd64 (1.0 unstable [amd64]) -Conf libfwibble-dev:amd64 (1.0 unstable [amd64])' aptget build-dep apt -s -a amd64 +Conf libfwibble-dev:amd64 (1.0 unstable [amd64]) +Conf linux-stuff:amd64 (1.0 unstable [amd64])' aptget build-dep apt -s -a amd64 configarchitecture 'amd64' 'armel' @@ -132,28 +143,31 @@ insertinstalledpackage 'foreigner' 'armel' '0.5' testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: - amdboot doxygen libc6 libc6-dev libfwibble-dev libfwibble1 -0 upgraded, 6 newly installed, 0 to remove and 2 not upgraded. + amdboot doxygen libc6 libc6-dev libfwibble-dev libfwibble1 linux-stuff +0 upgraded, 7 newly installed, 0 to remove and 2 not upgraded. Inst amdboot (1.0 unstable [amd64]) Inst doxygen (1.0 unstable [amd64]) Inst libc6 (1.0 unstable [amd64]) Inst libc6-dev (1.0 unstable [amd64]) Inst libfwibble1 (1.0 unstable [amd64]) Inst libfwibble-dev (1.0 unstable [amd64]) +Inst linux-stuff (1.0 unstable [amd64]) Conf amdboot (1.0 unstable [amd64]) Conf doxygen (1.0 unstable [amd64]) Conf libc6 (1.0 unstable [amd64]) Conf libc6-dev (1.0 unstable [amd64]) Conf libfwibble1 (1.0 unstable [amd64]) -Conf libfwibble-dev (1.0 unstable [amd64])' aptget build-dep apt -s +Conf libfwibble-dev (1.0 unstable [amd64]) +Conf linux-stuff (1.0 unstable [amd64])' aptget build-dep apt -s testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: - amdboot doxygen libc6 libc6:armel libc6-dev libc6-dev:armel + amdboot arm-stuff:armel doxygen libc6 libc6:armel libc6-dev libc6-dev:armel libfwibble-dev:armel libfwibble1:armel -0 upgraded, 8 newly installed, 0 to remove and 2 not upgraded. +0 upgraded, 9 newly installed, 0 to remove and 2 not upgraded. Inst amdboot (1.0 unstable [amd64]) +Inst arm-stuff:armel (1.0 unstable [armel]) Inst doxygen (1.0 unstable [amd64]) Inst libc6 (1.0 unstable [amd64]) Inst libc6:armel (1.0 unstable [armel]) @@ -162,6 +176,7 @@ Inst libc6-dev:armel (1.0 unstable [armel]) Inst libfwibble1:armel (1.0 unstable [armel]) Inst libfwibble-dev:armel (1.0 unstable [armel]) Conf amdboot (1.0 unstable [amd64]) +Conf arm-stuff:armel (1.0 unstable [armel]) Conf doxygen (1.0 unstable [amd64]) Conf libc6 (1.0 unstable [amd64]) Conf libc6:armel (1.0 unstable [armel]) @@ -178,10 +193,12 @@ Building dependency tree... The following packages will be REMOVED: cool:amd64 The following NEW packages will be installed: - amdboot:amd64 cool doxygen libc6 libc6-dev libfwibble-dev libfwibble1 -0 upgraded, 7 newly installed, 1 to remove and 1 not upgraded. + amdboot:amd64 arm-stuff cool doxygen libc6 libc6-dev libfwibble-dev + libfwibble1 +0 upgraded, 8 newly installed, 1 to remove and 1 not upgraded. Remv cool:amd64 [0.5] Inst amdboot:amd64 (1.0 unstable [amd64]) +Inst arm-stuff (1.0 unstable [armel]) Inst cool (1.0 unstable [armel]) Inst doxygen (1.0 unstable [armel]) Inst libc6 (1.0 unstable [armel]) @@ -189,6 +206,7 @@ Inst libc6-dev (1.0 unstable [armel]) Inst libfwibble1 (1.0 unstable [armel]) Inst libfwibble-dev (1.0 unstable [armel]) Conf amdboot:amd64 (1.0 unstable [amd64]) +Conf arm-stuff (1.0 unstable [armel]) Conf cool (1.0 unstable [armel]) Conf doxygen (1.0 unstable [armel]) Conf libc6 (1.0 unstable [armel]) @@ -200,8 +218,8 @@ testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: amdboot:amd64 doxygen libc6:amd64 libc6 libc6-dev:amd64 libc6-dev - libfwibble-dev:amd64 libfwibble1:amd64 -0 upgraded, 8 newly installed, 0 to remove and 2 not upgraded. + libfwibble-dev:amd64 libfwibble1:amd64 linux-stuff:amd64 +0 upgraded, 9 newly installed, 0 to remove and 2 not upgraded. Inst amdboot:amd64 (1.0 unstable [amd64]) Inst doxygen (1.0 unstable [armel]) Inst libc6:amd64 (1.0 unstable [amd64]) @@ -210,6 +228,7 @@ Inst libc6-dev:amd64 (1.0 unstable [amd64]) Inst libc6-dev (1.0 unstable [armel]) Inst libfwibble1:amd64 (1.0 unstable [amd64]) Inst libfwibble-dev:amd64 (1.0 unstable [amd64]) +Inst linux-stuff:amd64 (1.0 unstable [amd64]) Conf amdboot:amd64 (1.0 unstable [amd64]) Conf doxygen (1.0 unstable [armel]) Conf libc6:amd64 (1.0 unstable [amd64]) @@ -217,6 +236,5 @@ Conf libc6 (1.0 unstable [armel]) Conf libc6-dev:amd64 (1.0 unstable [amd64]) Conf libc6-dev (1.0 unstable [armel]) Conf libfwibble1:amd64 (1.0 unstable [amd64]) -Conf libfwibble-dev:amd64 (1.0 unstable [amd64])' aptget build-dep apt -s -a amd64 - - +Conf libfwibble-dev:amd64 (1.0 unstable [amd64]) +Conf linux-stuff:amd64 (1.0 unstable [amd64])' aptget build-dep apt -s -a amd64 -- cgit v1.2.3-70-g09d2 From 177645edb5775337ccf6d3971835a122b12318d4 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 19 May 2012 23:07:30 +0200 Subject: * apt-pkg/packagemanager.cc: - do not run into loop on new-pre-depends-breaks (Closes: #673536) --- apt-pkg/packagemanager.cc | 2 +- debian/changelog | 2 ++ .../test-673536-pre-depends-breaks-loop | 23 ++++++++++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100755 test/integration/test-673536-pre-depends-breaks-loop (limited to 'test/integration') diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc index 06151a165..46fc499c6 100644 --- a/apt-pkg/packagemanager.cc +++ b/apt-pkg/packagemanager.cc @@ -785,7 +785,7 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int c VerIterator V(Cache,*I); PkgIterator P = V.ParentPkg(); // we are checking for installation as an easy 'protection' against or-groups and (unchosen) providers - if (P->CurrentVer == 0 || P != Pkg || (P.CurrentVer() != V && Cache[P].InstallVer != V)) + if (P != Pkg || (P.CurrentVer() != V && Cache[P].InstallVer != V)) continue; circle = true; break; diff --git a/debian/changelog b/debian/changelog index d419f9986..196b94c8e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -33,6 +33,8 @@ apt (0.9.4) UNRELEASED; urgency=low to get the correct section titles provided by docbook * doc/po/de.po: - updated german manpage translation by Chris Leick, thanks! + * apt-pkg/packagemanager.cc: + - do not run into loop on new-pre-depends-breaks (Closes: #673536) [ Raphael Geissert ] * apt-pkg/acquire*.cc: diff --git a/test/integration/test-673536-pre-depends-breaks-loop b/test/integration/test-673536-pre-depends-breaks-loop new file mode 100755 index 000000000..e9d3c4de6 --- /dev/null +++ b/test/integration/test-673536-pre-depends-breaks-loop @@ -0,0 +1,23 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'native' + +buildsimplenativepackage 'basic' 'native' '1' 'stable' +buildsimplenativepackage 'basic' 'native' '2' 'unstable' 'Pre-Depends: common' +buildsimplenativepackage 'common' 'native' '2' 'unstable' 'Breaks: basic (<= 1)' + +setupaptarchive + +# we check with 'real' packages here as the simulation reports a 'Conf broken' +# which is technical correct for the simulation, but testing errormsg is ugly + +aptget install basic=1 -qq > /dev/null +testdpkginstalled basic +testdpkgnotinstalled common + +aptget dist-upgrade -qq > /dev/null +testdpkginstalled basic common -- cgit v1.2.3-70-g09d2 From a98b6615254f8f7251d43c52de8f1f605c821ed7 Mon Sep 17 00:00:00 2001 From: Daniel Hartwig Date: Sun, 10 Jun 2012 00:18:19 +0200 Subject: * cmdline/apt-get.cc: - print URIs for all changelogs in case of --print-uris, thanks to Daniel Hartwig for the patch! (Closes: #674897) --- cmdline/apt-get.cc | 6 +++++- debian/changelog | 2 ++ test/integration/test-apt-get-changelog | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) (limited to 'test/integration') diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 6ef046089..0636489cb 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -3244,9 +3244,13 @@ bool DoChangelog(CommandLine &CmdL) pkgAcquire Fetcher; if (_config->FindB("APT::Get::Print-URIs", false) == true) + { + bool Success = true; for (APT::VersionList::const_iterator Ver = verset.begin(); Ver != verset.end(); ++Ver) - return DownloadChangelog(Cache, Fetcher, Ver, ""); + Success &= DownloadChangelog(Cache, Fetcher, Ver, ""); + return Success; + } AcqTextStatus Stat(ScreenWidth, _config->FindI("quiet",0)); Fetcher.Setup(&Stat); diff --git a/debian/changelog b/debian/changelog index 3a8ae4002..d8adba89a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -8,6 +8,8 @@ apt (0.9.5.2) UNRELEASED; urgency=low * cmdline/apt-get.cc: - do not show 'list of broken packages' header if no package is broken as it happens e.g. for external resolver errors + - print URIs for all changelogs in case of --print-uris, + thanks to Daniel Hartwig for the patch! (Closes: #674897) * debian/apt-utils.links: - the internal resolver 'apt' is now directly installed in /usr/lib/apt/solvers, so don't instruct dh to create a broken link diff --git a/test/integration/test-apt-get-changelog b/test/integration/test-apt-get-changelog index 0a80cc08c..d013cc458 100755 --- a/test/integration/test-apt-get-changelog +++ b/test/integration/test-apt-get-changelog @@ -17,6 +17,9 @@ echo 'Apt::Changelogs::Server "http://localhost:8080/";' >> ./aptconfig.conf testequal "'http://localhost:8080//pool/apt_1.0/changelog'" aptget changelog apt --print-uris +testequal "'http://localhost:8080//pool/apt_1.0/changelog' +'http://localhost:8080//pool/apt_1.0/changelog'" aptget changelog apt apt --print-uris + aptget changelog apt -qq > apt.changelog testfileequal 'apt.changelog' "$(cat aptarchive/pool/apt_1.0/changelog)" rm apt.changelog -- cgit v1.2.3-70-g09d2 From d5dea0bed00ff1811fac1b56c2046d63c937a3f6 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 11 Jun 2012 00:16:51 +0200 Subject: check build-dep candidate if install is forbidden --- cmdline/apt-get.cc | 58 +++++++++++++++------- debian/changelog | 1 + test/integration/framework | 3 +- .../test-bug-632221-cross-dependency-satisfaction | 14 ++++++ 4 files changed, 56 insertions(+), 20 deletions(-) (limited to 'test/integration') diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index a4fd3cfb9..870c77280 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -2889,33 +2889,42 @@ bool DoBuildDep(CommandLine &CmdL) else Pkg = Cache->FindPkg(D->Package); - // We need to decide if host or build arch, so find a version we can look at - pkgCache::VerIterator Ver; - // a bad version either is invalid or doesn't satify dependency - #define BADVER(Ver) Ver.end() == true || \ - (Ver.end() == false && D->Version.empty() == false && \ - Cache->VS().CheckDep(Ver.VerStr(),D->Op,D->Version.c_str()) == false) + #define BADVER(Ver) (Ver.end() == true || \ + (D->Version.empty() == false && \ + Cache->VS().CheckDep(Ver.VerStr(),D->Op,D->Version.c_str()) == false)) + APT::VersionList verlist; if (Pkg.end() == false) { - Ver = (*Cache)[Pkg].InstVerIter(*Cache); - if (BADVER(Ver)) - Ver = (*Cache)[Pkg].CandidateVerIter(*Cache); + pkgCache::VerIterator Ver = (*Cache)[Pkg].InstVerIter(*Cache); + if (BADVER(Ver) == false) + verlist.insert(Ver); + Ver = (*Cache)[Pkg].CandidateVerIter(*Cache); + if (BADVER(Ver) == false) + verlist.insert(Ver); } - if (BADVER(Ver)) + if (verlist.empty() == true) { pkgCache::PkgIterator HostPkg = Cache->FindPkg(D->Package, hostArch); if (HostPkg.end() == false) { - Ver = (*Cache)[HostPkg].InstVerIter(*Cache); - if (BADVER(Ver)) - Ver = (*Cache)[HostPkg].CandidateVerIter(*Cache); + pkgCache::VerIterator Ver = (*Cache)[HostPkg].InstVerIter(*Cache); + if (BADVER(Ver) == false) + verlist.insert(Ver); + Ver = (*Cache)[HostPkg].CandidateVerIter(*Cache); + if (BADVER(Ver) == false) + verlist.insert(Ver); } } - if ((BADVER(Ver)) == false) + #undef BADVER + + string forbidden; + // We need to decide if host or build arch, so find a version we can look at + APT::VersionList::const_iterator Ver = verlist.begin(); + for (; Ver != verlist.end(); ++Ver) { - string forbidden; + forbidden.clear(); if (Ver->MultiArch == pkgCache::Version::None || Ver->MultiArch == pkgCache::Version::All) { if (colon == string::npos) @@ -2953,10 +2962,24 @@ bool DoBuildDep(CommandLine &CmdL) } // native gets buildArch } + if (forbidden.empty() == false) { if (_config->FindB("Debug::BuildDeps",false) == true) - cout << D->Package.substr(colon, string::npos) << " is not allowed from " << forbidden << " package " << (*D).Package << endl; + cout << D->Package.substr(colon, string::npos) << " is not allowed from " << forbidden << " package " << (*D).Package << " (" << Ver.VerStr() << ")" << endl; + continue; + } + + //we found a good version + break; + } + if (Ver == verlist.end()) + { + if (_config->FindB("Debug::BuildDeps",false) == true) + cout << " No multiarch info as we have no satisfying installed nor candidate for " << D->Package << " on build or host arch" << endl; + + if (forbidden.empty() == false) + { if (hasAlternatives) continue; return _error->Error(_("%s dependency for %s can't be satisfied " @@ -2965,9 +2988,6 @@ bool DoBuildDep(CommandLine &CmdL) D->Package.c_str(), forbidden.c_str()); } } - else if (_config->FindB("Debug::BuildDeps",false) == true) - cout << " No multiarch info as we have no satisfying installed nor candidate for " << D->Package << " on build or host arch" << endl; - #undef BADVER } else Pkg = Cache->FindPkg(D->Package); diff --git a/debian/changelog b/debian/changelog index 720b07273..ee108b059 100644 --- a/debian/changelog +++ b/debian/changelog @@ -11,6 +11,7 @@ apt (0.9.5.2) UNRELEASED; urgency=low - print URIs for all changelogs in case of --print-uris, thanks to Daniel Hartwig for the patch! (Closes: #674897) - show 'bzr branch' as 'bzr get' is deprecated (LP: #1011032) + - check build-dep candidate if install is forbidden * debian/apt-utils.links: - the internal resolver 'apt' is now directly installed in /usr/lib/apt/solvers, so don't instruct dh to create a broken link diff --git a/test/integration/framework b/test/integration/framework index 5a0e1070f..dba8c0162 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -508,7 +508,8 @@ Architecture: $ARCH" >> $FILE test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> $FILE echo "Files: d41d8cd98f00b204e9800998ecf8427e 0 ${NAME}_${VERSION}.dsc - d41d8cd98f00b204e9800998ecf8427e 0 ${NAME}_${VERSION}.tar.gz" >> $FILE + d41d8cd98f00b204e9800998ecf8427e 0 ${NAME}_${VERSION}.tar.gz +" >> $FILE } insertinstalledpackage() { diff --git a/test/integration/test-bug-632221-cross-dependency-satisfaction b/test/integration/test-bug-632221-cross-dependency-satisfaction index a128366c5..93cc153e6 100755 --- a/test/integration/test-bug-632221-cross-dependency-satisfaction +++ b/test/integration/test-bug-632221-cross-dependency-satisfaction @@ -23,8 +23,22 @@ insertpackage 'unstable' 'linux-stuff' 'amd64,armel' '1.0' insertsource 'unstable' 'apt' 'any' '0.8.15' 'Build-Depends: doxygen, libc6-dev, libc6-dev:native, cool:any, amdboot:amd64, foreigner, libfwibble-dev, arm-stuff [any-arm] | linux-stuff [ linux-any]' +insertsource 'unstable' 'forbidden-none' 'any' '1' 'Build-Depends: amdboot:any' +insertsource 'unstable' 'forbidden-same' 'any' '1' 'Build-Depends: libc6:any' +insertsource 'unstable' 'forbidden-foreign' 'any' '1' 'Build-Depends: doxygen:any' + setupaptarchive +testequal "Reading package lists... +Building dependency tree... +E: Build-Depends dependency for forbidden-none can't be satisfied because amdboot:any is not allowed on 'Multi-Arch: none' packages" aptget build-dep forbidden-none -s -a armel +testequal "Reading package lists... +Building dependency tree... +E: Build-Depends dependency for forbidden-same can't be satisfied because libc6:any is not allowed on 'Multi-Arch: same' packages" aptget build-dep forbidden-same -s -a armel +testequal "Reading package lists... +Building dependency tree... +E: Build-Depends dependency for forbidden-foreign can't be satisfied because doxygen:any is not allowed on 'Multi-Arch: foreign' packages" aptget build-dep forbidden-foreign -s -a armel + testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: -- cgit v1.2.3-70-g09d2 From 249a02f55a2b311fc130efe3b3a99995b6a71360 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 11 Jun 2012 02:17:17 +0200 Subject: add a few tests to check that arch-specific qualifiers work --- .../test-bug-632221-cross-dependency-satisfaction | 43 ++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'test/integration') diff --git a/test/integration/test-bug-632221-cross-dependency-satisfaction b/test/integration/test-bug-632221-cross-dependency-satisfaction index 93cc153e6..208c613a2 100755 --- a/test/integration/test-bug-632221-cross-dependency-satisfaction +++ b/test/integration/test-bug-632221-cross-dependency-satisfaction @@ -27,6 +27,12 @@ insertsource 'unstable' 'forbidden-none' 'any' '1' 'Build-Depends: amdboot:any' insertsource 'unstable' 'forbidden-same' 'any' '1' 'Build-Depends: libc6:any' insertsource 'unstable' 'forbidden-foreign' 'any' '1' 'Build-Depends: doxygen:any' +insertpackage 'unstable' 'specific' 'amd64' '1.0' 'Depends: libc6:amd64' +insertpackage 'unstable' 'specific' 'armel' '1.0' 'Depends: libc6:armel' + +insertsource 'unstable' 'source-specific-amd64' 'amd64' '1' 'Build-Depends: specific:amd64' +insertsource 'unstable' 'source-specific-armel' 'armel' '1' 'Build-Depends: specific:armel' + setupaptarchive testequal "Reading package lists... @@ -39,6 +45,43 @@ testequal "Reading package lists... Building dependency tree... E: Build-Depends dependency for forbidden-foreign can't be satisfied because doxygen:any is not allowed on 'Multi-Arch: foreign' packages" aptget build-dep forbidden-foreign -s -a armel +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + libc6 specific +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst libc6 (1.0 unstable [amd64]) +Inst specific (1.0 unstable [amd64]) +Conf libc6 (1.0 unstable [amd64]) +Conf specific (1.0 unstable [amd64])' aptget build-dep source-specific-amd64 -s +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + libc6 specific +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst libc6 (1.0 unstable [amd64]) +Inst specific (1.0 unstable [amd64]) +Conf libc6 (1.0 unstable [amd64]) +Conf specific (1.0 unstable [amd64])' aptget build-dep source-specific-amd64 -s -a armel +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + libc6:armel specific:armel +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst libc6:armel (1.0 unstable [armel]) +Inst specific:armel (1.0 unstable [armel]) +Conf libc6:armel (1.0 unstable [armel]) +Conf specific:armel (1.0 unstable [armel])' aptget build-dep source-specific-armel -s +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + libc6:armel specific:armel +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst libc6:armel (1.0 unstable [armel]) +Inst specific:armel (1.0 unstable [armel]) +Conf libc6:armel (1.0 unstable [armel]) +Conf specific:armel (1.0 unstable [armel])' aptget build-dep source-specific-armel -s -a armel + testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: -- cgit v1.2.3-70-g09d2 From 82c6f7528d583431722ef180b6064b86b644ad85 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 12 Jun 2012 15:40:56 +0200 Subject: add a testcase for #675449, which i forgot to commit --- .../test-673536-pre-depends-breaks-loop | 23 ------ .../test-bug-673536-pre-depends-breaks-loop | 23 ++++++ .../test-bug-675449-essential-are-protected | 88 ++++++++++++++++++++++ 3 files changed, 111 insertions(+), 23 deletions(-) delete mode 100755 test/integration/test-673536-pre-depends-breaks-loop create mode 100755 test/integration/test-bug-673536-pre-depends-breaks-loop create mode 100755 test/integration/test-bug-675449-essential-are-protected (limited to 'test/integration') diff --git a/test/integration/test-673536-pre-depends-breaks-loop b/test/integration/test-673536-pre-depends-breaks-loop deleted file mode 100755 index e9d3c4de6..000000000 --- a/test/integration/test-673536-pre-depends-breaks-loop +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh -set -e - -TESTDIR=$(readlink -f $(dirname $0)) -. $TESTDIR/framework -setupenvironment -configarchitecture 'native' - -buildsimplenativepackage 'basic' 'native' '1' 'stable' -buildsimplenativepackage 'basic' 'native' '2' 'unstable' 'Pre-Depends: common' -buildsimplenativepackage 'common' 'native' '2' 'unstable' 'Breaks: basic (<= 1)' - -setupaptarchive - -# we check with 'real' packages here as the simulation reports a 'Conf broken' -# which is technical correct for the simulation, but testing errormsg is ugly - -aptget install basic=1 -qq > /dev/null -testdpkginstalled basic -testdpkgnotinstalled common - -aptget dist-upgrade -qq > /dev/null -testdpkginstalled basic common diff --git a/test/integration/test-bug-673536-pre-depends-breaks-loop b/test/integration/test-bug-673536-pre-depends-breaks-loop new file mode 100755 index 000000000..e9d3c4de6 --- /dev/null +++ b/test/integration/test-bug-673536-pre-depends-breaks-loop @@ -0,0 +1,23 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'native' + +buildsimplenativepackage 'basic' 'native' '1' 'stable' +buildsimplenativepackage 'basic' 'native' '2' 'unstable' 'Pre-Depends: common' +buildsimplenativepackage 'common' 'native' '2' 'unstable' 'Breaks: basic (<= 1)' + +setupaptarchive + +# we check with 'real' packages here as the simulation reports a 'Conf broken' +# which is technical correct for the simulation, but testing errormsg is ugly + +aptget install basic=1 -qq > /dev/null +testdpkginstalled basic +testdpkgnotinstalled common + +aptget dist-upgrade -qq > /dev/null +testdpkginstalled basic common diff --git a/test/integration/test-bug-675449-essential-are-protected b/test/integration/test-bug-675449-essential-are-protected new file mode 100755 index 000000000..7d8cc3484 --- /dev/null +++ b/test/integration/test-bug-675449-essential-are-protected @@ -0,0 +1,88 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'amd64' 'i386' + +insertinstalledpackage 'pkg-native' 'amd64' '1' 'Multi-Arch: foreign +Essential: yes' +insertinstalledpackage 'pkg-foreign' 'i386' '1' 'Multi-Arch: foreign +Essential: yes' +insertinstalledpackage 'pkg-none-native' 'amd64' '1' 'Essential: yes' +insertinstalledpackage 'pkg-none-foreign' 'i386' '1' 'Essential: yes' + +insertpackage 'unstable' 'pkg-native' 'amd64,i386' '2' 'Multi-Arch: foreign +Essential: yes' +insertpackage 'unstable' 'pkg-foreign' 'amd64,i386' '2' 'Multi-Arch: foreign +Depends: pkg-depends-new +Essential: yes' +insertpackage 'unstable' 'pkg-none-native' 'amd64,i386' '2' 'Essential: yes' +insertpackage 'unstable' 'pkg-none-foreign' 'amd64,i386' '2' 'Essential: yes +Depends: pkg-depends-new' + +insertpackage 'unstable' 'pkg-none-new' 'amd64,i386' '2' 'Essential: yes' +insertpackage 'unstable' 'pkg-depends-new' 'amd64,i386' '2' 'Essential: yes' + +setupaptarchive + +testequal 'Reading package lists... +Building dependency tree... +The following packages will be REMOVED: + pkg-native* +WARNING: The following essential packages will be removed. +This should NOT be done unless you know exactly what you are doing! + pkg-native +0 upgraded, 0 newly installed, 1 to remove and 3 not upgraded. +Purg pkg-native [1]' aptget purge pkg-native -s + +testequal 'Reading package lists... +Building dependency tree... +The following packages will be REMOVED: + pkg-foreign:i386* +WARNING: The following essential packages will be removed. +This should NOT be done unless you know exactly what you are doing! + pkg-foreign:i386 +0 upgraded, 0 newly installed, 1 to remove and 3 not upgraded. +Purg pkg-foreign:i386 [1]' aptget purge pkg-foreign:i386 -s + +testequal 'Reading package lists... +Building dependency tree... +The following packages will be REMOVED: + pkg-none-native* +WARNING: The following essential packages will be removed. +This should NOT be done unless you know exactly what you are doing! + pkg-none-native +0 upgraded, 0 newly installed, 1 to remove and 3 not upgraded. +Purg pkg-none-native [1]' aptget purge pkg-none-native -s + +testequal 'Reading package lists... +Building dependency tree... +The following packages will be REMOVED: + pkg-none-foreign:i386* +WARNING: The following essential packages will be removed. +This should NOT be done unless you know exactly what you are doing! + pkg-none-foreign:i386 +0 upgraded, 0 newly installed, 1 to remove and 3 not upgraded. +Purg pkg-none-foreign:i386 [1]' aptget purge pkg-none-foreign:i386 -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + pkg-depends-new:i386 pkg-none-new +The following packages will be upgraded: + pkg-foreign:i386 pkg-native pkg-none-foreign:i386 pkg-none-native +4 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst pkg-depends-new:i386 (2 unstable [i386]) +Conf pkg-depends-new:i386 (2 unstable [i386]) +Inst pkg-foreign:i386 [1] (2 unstable [i386]) +Conf pkg-foreign:i386 (2 unstable [i386]) +Inst pkg-native [1] (2 unstable [amd64]) +Conf pkg-native (2 unstable [amd64]) +Inst pkg-none-foreign:i386 [1] (2 unstable [i386]) +Conf pkg-none-foreign:i386 (2 unstable [i386]) +Inst pkg-none-native [1] (2 unstable [amd64]) +Conf pkg-none-native (2 unstable [amd64]) +Inst pkg-none-new (2 unstable [amd64]) +Conf pkg-none-new (2 unstable [amd64])' aptget dist-upgrade -s -- cgit v1.2.3-70-g09d2 From 01f520ce27c7f466dc6191c45507ace79d685725 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 14 Jun 2012 19:07:15 +0200 Subject: add two tests for architecture specifications --- test/integration/framework | 13 ++- .../test-architecture-specification-parsing | 96 ++++++++++++++++++++++ .../test-cachecontainer-architecture-specification | 87 ++++++++++++++++++++ test/libapt/parsedepends_test.cc | 10 +-- 4 files changed, 197 insertions(+), 9 deletions(-) create mode 100755 test/integration/test-architecture-specification-parsing create mode 100755 test/integration/test-cachecontainer-architecture-specification (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index dba8c0162..2d6ada117 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -304,23 +304,28 @@ echo '$NAME says \"Hello!\"'" > ${BUILDDIR}/${NAME} Section: $SECTION Priority: $PRIORITY Maintainer: Joe Sixpack -Standards-Version: 3.9.1 +Standards-Version: 3.9.3" > ${BUILDDIR}/debian/control + local BUILDDEPS="$(echo "$DEPENDENCIES" | grep '^Build-')" + test -z "$BUILDDEPS" || echo "$BUILDDEPS" >> ${BUILDDIR}/debian/control + echo " +Package: $NAME" >> ${BUILDDIR}/debian/control -Package: $NAME" > ${BUILDDIR}/debian/control if [ "$ARCH" = 'all' ]; then echo "Architecture: all" >> ${BUILDDIR}/debian/control else echo "Architecture: any" >> ${BUILDDIR}/debian/control fi - test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> ${BUILDDIR}/debian/control + local DEPS="$(echo "$DEPENDENCIES" | grep -v '^Build-')" + test -z "$DEPS" || echo "$DEPS" >> ${BUILDDIR}/debian/control if [ -z "$DESCRIPTION" ]; then echo "Description: an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} If you find such a package installed on your system, YOU did something horribly wrong! They are autogenerated und used only by testcases for APT and surf no other propose…" >> ${BUILDDIR}/debian/control else - echo "Description: $DESCRIPTION" >> ${BUILDIR}/debian/control + echo "Description: $DESCRIPTION" >> ${BUILDDIR}/debian/control fi + echo '3.0 (native)' > ${BUILDDIR}/debian/source/format local SRCS="$( (cd ${BUILDDIR}/..; dpkg-source -b ${NAME}-${VERSION} 2>&1) | grep '^dpkg-source: info: building' | grep -o '[a-z0-9._+~-]*$')" for SRC in $SRCS; do diff --git a/test/integration/test-architecture-specification-parsing b/test/integration/test-architecture-specification-parsing new file mode 100755 index 000000000..8f365dd55 --- /dev/null +++ b/test/integration/test-architecture-specification-parsing @@ -0,0 +1,96 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'amd64' + +buildsimplenativepackage 'pkg-arch-foo' 'amd64' '1.0' 'stable' 'Build-Depends: foo [amd64 !amd64] +Depends: foo [amd64 !amd64]' +buildsimplenativepackage 'pkg-arch-no-foo' 'amd64' '1.0' 'stable' 'Build-Depends: foo [!amd64 amd64] +Depends: foo [!amd64 amd64]' +buildsimplenativepackage 'pkg-arch-foo-unrelated-no' 'amd64' '1.0' 'stable' 'Build-Depends: foo [!kfreebsd-any amd64] +Depends: foo [!kfreebsd-any amd64]' +buildsimplenativepackage 'pkg-arch-foo-unrelated-no2' 'amd64' '1.0' 'stable' 'Build-Depends: foo [amd64 !kfreebsd-any] +Depends: foo [amd64 !kfreebsd-any]' + +buildsimplenativepackage 'foo' 'amd64' '1.0' 'stable' + +insertinstalledpackage 'build-essential' 'all' '11.5' 'Multi-Arch: foreign' + +setupaptarchive + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + foo +The following NEW packages will be installed: + foo pkg-arch-foo +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst foo (1.0 stable [amd64]) +Inst pkg-arch-foo (1.0 stable [amd64]) +Conf foo (1.0 stable [amd64]) +Conf pkg-arch-foo (1.0 stable [amd64])' aptget install pkg-arch-foo -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + pkg-arch-no-foo +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst pkg-arch-no-foo (1.0 stable [amd64]) +Conf pkg-arch-no-foo (1.0 stable [amd64])' aptget install pkg-arch-no-foo -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + foo +The following NEW packages will be installed: + foo pkg-arch-foo-unrelated-no +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst foo (1.0 stable [amd64]) +Inst pkg-arch-foo-unrelated-no (1.0 stable [amd64]) +Conf foo (1.0 stable [amd64]) +Conf pkg-arch-foo-unrelated-no (1.0 stable [amd64])' aptget install pkg-arch-foo-unrelated-no -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + foo +The following NEW packages will be installed: + foo pkg-arch-foo-unrelated-no2 +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst foo (1.0 stable [amd64]) +Inst pkg-arch-foo-unrelated-no2 (1.0 stable [amd64]) +Conf foo (1.0 stable [amd64]) +Conf pkg-arch-foo-unrelated-no2 (1.0 stable [amd64])' aptget install pkg-arch-foo-unrelated-no2 -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + foo +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst foo (1.0 stable [amd64]) +Conf foo (1.0 stable [amd64])' aptget build-dep pkg-arch-foo -s + +testequal 'Reading package lists... +Building dependency tree... +0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget build-dep pkg-arch-no-foo -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + foo +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst foo (1.0 stable [amd64]) +Conf foo (1.0 stable [amd64])' aptget build-dep pkg-arch-foo-unrelated-no -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + foo +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst foo (1.0 stable [amd64]) +Conf foo (1.0 stable [amd64])' aptget build-dep pkg-arch-foo-unrelated-no2 -s + + diff --git a/test/integration/test-cachecontainer-architecture-specification b/test/integration/test-cachecontainer-architecture-specification new file mode 100755 index 000000000..174efb087 --- /dev/null +++ b/test/integration/test-cachecontainer-architecture-specification @@ -0,0 +1,87 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'amd64' 'armel' + +#insertinstalledpackage 'xserver-xorg-core' 'amd64' '2:1.7.6-2ubuntu7.10' +insertpackage 'unstable' 'libsame' 'armel,amd64' '1' 'Multi-Arch: same' + +setupaptarchive + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + libsame +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst libsame (1 unstable [amd64]) +Conf libsame (1 unstable [amd64])' aptget -s install libsame +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + libsame:armel +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst libsame:armel (1 unstable [armel]) +Conf libsame:armel (1 unstable [armel])' aptget -s install libsame:armel +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + libsame +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst libsame (1 unstable [amd64]) +Conf libsame (1 unstable [amd64])' aptget -s install libsame:amd64 +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + libsame libsame:armel +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst libsame (1 unstable [amd64]) +Inst libsame:armel (1 unstable [armel]) +Conf libsame (1 unstable [amd64]) +Conf libsame:armel (1 unstable [armel])' aptget -s install libsame:armel libsame:amd64 +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + libsame libsame:armel +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst libsame (1 unstable [amd64]) +Inst libsame:armel (1 unstable [armel]) +Conf libsame (1 unstable [amd64]) +Conf libsame:armel (1 unstable [armel])' aptget -s install libsame:* +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + libsame +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst libsame (1 unstable [amd64]) +Conf libsame (1 unstable [amd64])' aptget -s install libsame:any +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + libsame libsame:armel +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst libsame (1 unstable [amd64]) +Inst libsame:armel (1 unstable [armel]) +Conf libsame (1 unstable [amd64]) +Conf libsame:armel (1 unstable [armel])' aptget -s install libsame:a* +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + libsame +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst libsame (1 unstable [amd64]) +Conf libsame (1 unstable [amd64])' aptget -s install libsame:linux-any +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + libsame libsame:armel +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst libsame (1 unstable [amd64]) +Inst libsame:armel (1 unstable [armel]) +Conf libsame (1 unstable [amd64]) +Conf libsame:armel (1 unstable [armel])' aptget -s install libsame:linux-* +testequal 'Reading package lists... +Building dependency tree... +E: Unable to locate package libsame' aptget -s install libsame:windows-any diff --git a/test/libapt/parsedepends_test.cc b/test/libapt/parsedepends_test.cc index b5d92d9d2..677b1c892 100644 --- a/test/libapt/parsedepends_test.cc +++ b/test/libapt/parsedepends_test.cc @@ -10,7 +10,7 @@ int main(int argc,char *argv[]) { unsigned int Null = 0; bool StripMultiArch = true; bool ParseArchFlags = false; - _config->Set("APT::Architecture","dsk"); + _config->Set("APT::Architecture","amd64"); const char* Depends = "debhelper:any (>= 5.0), " @@ -19,13 +19,13 @@ int main(int argc,char *argv[]) { "libcurl4-gnutls-dev:native | libcurl3-gnutls-dev (>> 7.15.5), " "debiandoc-sgml, " "apt (>= 0.7.25), " - "not-for-me [ !dsk ], " - "only-for-me [ dsk ], " + "not-for-me [ !amd64 ], " + "only-for-me [ amd64 ], " "any-for-me [ any ], " "not-for-darwin [ !darwin-any ], " - "cpu-for-me [ any-dsk ], " + "cpu-for-me [ any-amd64 ], " "os-for-me [ linux-any ], " - "cpu-not-for-me [ any-amd64 ], " + "cpu-not-for-me [ any-armel ], " "os-not-for-me [ kfreebsd-any ], " "overlord-dev:any (= 7.15.3~) | overlord-dev:native (>> 7.15.5), " ; -- cgit v1.2.3-70-g09d2 From 567785b979d9b71ceb92edda82e4f15bb40a2e61 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 18 Jun 2012 13:19:47 +0200 Subject: * cmdline/apt-get.cc: - print a friendly message in 'download' if a package can't be downloaded (Closes: #677887) --- cmdline/apt-get.cc | 16 ++++++++++++++-- debian/changelog | 3 +++ test/integration/test-apt-get-download | 4 ++++ 3 files changed, 21 insertions(+), 2 deletions(-) (limited to 'test/integration') diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 870c77280..d4c7f4200 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -2362,6 +2362,8 @@ bool DoDownload(CommandLine &CmdL) pkgRecords Recs(Cache); pkgSourceList *SrcList = Cache.GetSourceList(); + bool gotAll = true; + for (APT::VersionList::const_iterator Ver = verset.begin(); Ver != verset.end(); ++Ver) @@ -2372,11 +2374,19 @@ bool DoDownload(CommandLine &CmdL) pkgRecords::Parser &rec=Recs.Lookup(Ver.FileList()); pkgCache::VerFileIterator Vf = Ver.FileList(); if (Vf.end() == true) - return _error->Error("Can not find VerFile"); + { + _error->Error("Can not find VerFile for %s in version %s", Pkg.FullName().c_str(), Ver.VerStr()); + gotAll = false; + continue; + } pkgCache::PkgFileIterator F = Vf.File(); pkgIndexFile *index; if(SrcList->FindIndex(F, index) == false) - return _error->Error("FindIndex failed"); + { + _error->Error(_("Can't find a source to download version '%s' of '%s'"), Ver.VerStr(), Pkg.FullName().c_str()); + gotAll = false; + continue; + } string uri = index->ArchiveURI(rec.FileName()); strprintf(descr, _("Downloading %s %s"), Pkg.Name(), Ver.VerStr()); // get the most appropriate hash @@ -2392,6 +2402,8 @@ bool DoDownload(CommandLine &CmdL) // get the file new pkgAcqFile(&Fetcher, uri, hash.toStr(), (*Ver)->Size, descr, Pkg.Name(), "."); } + if (gotAll == false) + return false; // Just print out the uris and exit if the --print-uris flag was used if (_config->FindB("APT::Get::Print-URIs") == true) diff --git a/debian/changelog b/debian/changelog index ad5a4a1a3..281915837 100644 --- a/debian/changelog +++ b/debian/changelog @@ -20,6 +20,9 @@ apt (0.9.6.1) UNRELEASED; urgency=low * buildlib/configure.mak: - print a message detailing how to get config.guess and config.sub in case they are not in /usr/share/misc (Closes: #677312) + * cmdline/apt-get.cc: + - print a friendly message in 'download' if a package can't be + downloaded (Closes: #677887) -- David Kalnischkies Thu, 14 Jun 2012 15:45:13 +0200 diff --git a/test/integration/test-apt-get-download b/test/integration/test-apt-get-download index 4edb7c173..b164f7dba 100755 --- a/test/integration/test-apt-get-download +++ b/test/integration/test-apt-get-download @@ -9,6 +9,7 @@ configarchitecture "i386" buildsimplenativepackage 'apt' 'all' '1.0' 'stable' buildsimplenativepackage 'apt' 'all' '2.0' 'unstable' +insertinstalledpackage 'vrms' 'all' '1.0' setupaptarchive @@ -26,3 +27,6 @@ testdownload apt_2.0_all.deb apt DEBFILE="$(readlink -f aptarchive)/pool/apt_2.0_all.deb" testequal "'file://${DEBFILE}' apt_2.0_all.deb $(stat -c%s $DEBFILE) sha256:$(sha256sum $DEBFILE | cut -d' ' -f 1)" aptget download apt --print-uris + +# deb:677887 +testequal "E: Can't find a source to download version '1.0' of 'vrms:i386'" aptget download vrms -- cgit v1.2.3-70-g09d2 From e6cd40dc17722bbe6c9d734c3a58b39a18c34174 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 9 Jul 2012 17:38:40 +0200 Subject: start implementing an extremely simple webserver for testing APT --- test/integration/framework | 7 +- test/integration/skip-aptwebserver | 25 ++++ test/interactive-helper/aptwebserver.cc | 216 ++++++++++++++++++++++++++++++++ test/interactive-helper/makefile | 7 ++ 4 files changed, 254 insertions(+), 1 deletion(-) create mode 100755 test/integration/skip-aptwebserver create mode 100644 test/interactive-helper/aptwebserver.cc (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 2d6ada117..a514bef20 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -688,7 +688,12 @@ signreleasefiles() { } changetowebserver() { - if which weborf > /dev/null; then + if test -x ${BUILDDIRECTORY}/aptwebserver; then + cd aptarchive + LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/aptwebserver 2> /dev/null > /dev/null & + addtrap "kill $!;" + cd - > /dev/null + elif which weborf > /dev/null; then weborf -xb aptarchive/ 2>&1 > /dev/null & addtrap "kill $!;" elif which gatling > /dev/null; then diff --git a/test/integration/skip-aptwebserver b/test/integration/skip-aptwebserver new file mode 100755 index 000000000..0622941ce --- /dev/null +++ b/test/integration/skip-aptwebserver @@ -0,0 +1,25 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +configarchitecture 'amd64' + +buildsimplenativepackage 'apt' 'all' '1.0' 'stable' + +setupaptarchive +changetowebserver + +rm -rf rootdir/var/lib/apt/lists +aptget update -qq +testequal 'Hit http://localhost stable InRelease +Hit http://localhost stable/main Sources +Hit http://localhost stable/main amd64 Packages +Hit http://localhost stable/main Translation-en +Reading package lists...' aptget update + +mv rootdir/var/lib/apt/lists/localhost* rootdir/var/lib/apt/lists/partial +aptget update + diff --git a/test/interactive-helper/aptwebserver.cc b/test/interactive-helper/aptwebserver.cc new file mode 100644 index 000000000..7a3624b6e --- /dev/null +++ b/test/interactive-helper/aptwebserver.cc @@ -0,0 +1,216 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +char const * const httpcodeToStr(int httpcode) { /*{{{*/ + switch (httpcode) { + // Informational 1xx + case 100: return "100 Continue"; + case 101: return "101 Switching Protocols"; + // Successful 2xx + case 200: return "200 OK"; + case 201: return "201 Created"; + case 202: return "202 Accepted"; + case 203: return "203 Non-Authoritative Information"; + case 204: return "204 No Content"; + case 205: return "205 Reset Content"; + case 206: return "206 Partial Conent"; + // Redirections 3xx + case 300: return "300 Multiple Choices"; + case 301: return "301 Moved Permanently"; + case 302: return "302 Found"; + case 303: return "303 See Other"; + case 304: return "304 Not Modified"; + case 305: return "304 Use Proxy"; + case 307: return "307 Temporary Redirect"; + // Client errors 4xx + case 400: return "400 Bad Request"; + case 401: return "401 Unauthorized"; + case 402: return "402 Payment Required"; + case 403: return "403 Forbidden"; + case 404: return "404 Not Found"; + case 405: return "405 Method Not Allowed"; + case 406: return "406 Not Acceptable"; + case 407: return "Proxy Authentication Required"; + case 408: return "Request Time-out"; + case 409: return "Conflict"; + case 410: return "Gone"; + case 411: return "Length Required"; + case 412: return "Precondition Failed"; + case 413: return "Request Entity Too Large"; + case 414: return "Request-URI Too Large"; + case 415: return "Unsupported Media Type"; + case 416: return "Requested range not satisfiable"; + case 417: return "Expectation Failed"; + // Server error 5xx + case 500: return "Internal Server Error"; + case 501: return "Not Implemented"; + case 502: return "Bad Gateway"; + case 503: return "Service Unavailable"; + case 504: return "Gateway Time-out"; + case 505: return "HTTP Version not supported"; + } + return NULL; +} /*}}}*/ +void addFileHeaders(std::list &headers, FileFd &data) { /*{{{*/ + std::ostringstream contentlength; + contentlength << "Content-Length: " << data.FileSize(); + headers.push_back(contentlength.str()); + + std::string lastmodified("Last-Modified: "); + lastmodified.append(TimeRFC1123(data.ModificationTime())); + headers.push_back(lastmodified); +} /*}}}*/ +bool sendHead(int client, int httpcode, std::list &headers) { /*{{{*/ + string response("HTTP/1.1 "); + response.append(httpcodeToStr(httpcode)); + headers.push_front(response); + + headers.push_back("Server: APT webserver"); + + std::string date("Date: "); + date.append(TimeRFC1123(time(NULL))); + headers.push_back(date); + + std::clog << ">>> RESPONSE >>>" << std::endl; + bool Success = true; + for (std::list::const_iterator h = headers.begin(); + Success == true && h != headers.end(); ++h) { + Success &= FileFd::Write(client, h->c_str(), h->size()); + Success &= FileFd::Write(client, "\r\n", 2); + std::clog << *h << std::endl; + } + Success &= FileFd::Write(client, "\r\n", 2); + std::clog << "<<<<<<<<<<<<<<<<" << std::endl; + return Success; +} /*}}}*/ +bool sendFile(int client, FileFd &data) { /*{{{*/ + bool Success = true; + char buffer[500]; + unsigned long long actual = 0; + while ((Success &= data.Read(buffer, sizeof(buffer), &actual)) == true) { + if (actual == 0) + break; + Success &= FileFd::Write(client, buffer, actual); + } + Success &= FileFd::Write(client, "\r\n", 2); + return Success; +} /*}}}*/ +bool sendData(int client, std::string &data) { /*{{{*/ + bool Success = true; + Success &= FileFd::Write(client, data.c_str(), data.size()); + Success &= FileFd::Write(client, "\r\n", 2); + return Success; +} /*}}}*/ +void sendError(int client, int httpcode, string request, bool content) { /*{{{*/ + std::list headers; + sendHead(client, httpcode, headers); + if (content == false) + return; + string response(""); + response.append(httpcodeToStr(httpcode)).append(""); + response.append("

").append(httpcodeToStr(httpcode)).append(""); + response.append(request).append(""); + sendData(client, response); +} /*}}}*/ + +int main(int argc, const char *argv[]) +{ + // create socket, bind and listen to it {{{ + int sock = socket(AF_INET6, SOCK_STREAM, 0); + if(sock < 0 ) { + _error->Errno("aptwerbserver", "Couldn't create socket"); + _error->DumpErrors(std::cerr); + return 1; + } + + // ensure that we accept all connections: v4 or v6 + int const iponly = 0; + setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, &iponly, sizeof(iponly)); + // to not linger to an address + int const enable = 1; + setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(enable)); + + struct sockaddr_in6 locAddr; + memset(&locAddr, 0, sizeof(locAddr)); + locAddr.sin6_family = AF_INET6; + locAddr.sin6_port = htons(8080); + locAddr.sin6_addr = in6addr_any; + + if (bind(sock, (struct sockaddr*) &locAddr, sizeof(locAddr)) < 0) { + _error->Errno("aptwerbserver", "Couldn't bind"); + _error->DumpErrors(std::cerr); + return 2; + } + + listen(sock, 1); + /*}}}*/ + + std::vector messages; + int client; + while ((client = accept(sock, NULL, NULL)) != -1) { + std::clog << "ACCEPT client " << client << " on socket " << sock << std::endl; + + while (ReadMessages(client, messages)) { + for (std::vector::const_iterator m = messages.begin(); + m != messages.end(); ++m) { + std::clog << ">>> REQUEST >>>>" << std::endl << *m << std::endl << "<<<<<<<<<<<<<<<<" << std::endl; + std::list headers; + bool sendContent = true; + if (strncmp(m->c_str(), "HEAD ", 5) == 0) + sendContent = false; + if (strncmp(m->c_str(), "GET ", 4) != 0) + sendError(client, 501, *m, true); + + std::string host = LookupTag(*m, "Host", ""); + if (host.empty() == true) { + // RFC 2616 §14.23 Host + sendError(client, 400, *m, sendContent); + continue; + } + + size_t const filestart = m->find(' ', 5); + string filename = m->substr(5, filestart - 5); + + if (RealFileExists(filename) == false) + sendError(client, 404, *m, sendContent); + else { + FileFd data(filename, FileFd::ReadOnly); + std::string condition = LookupTag(*m, "If-Modified-Since", ""); + if (condition.empty() == false) { + time_t cache; + if (RFC1123StrToTime(condition.c_str(), cache) == true && cache >= data.ModificationTime()) { + sendError(client, 304, *m, false); + continue; + } + } + addFileHeaders(headers, data); + sendHead(client, 200, headers); + if (sendContent == true) + sendFile(client, data); + } + } + _error->DumpErrors(std::cerr); + messages.clear(); + } + + std::clog << "CLOSE client " << client << " on socket " << sock << std::endl; + close(client); + } + return 0; +} diff --git a/test/interactive-helper/makefile b/test/interactive-helper/makefile index 10d1e44ec..fee94cd77 100644 --- a/test/interactive-helper/makefile +++ b/test/interactive-helper/makefile @@ -37,3 +37,10 @@ include $(PROGRAM_H) #SLIBS = -lapt-pkg -lrpm #SOURCE = rpmver.cc #include $(PROGRAM_H) + +# very simple webserver for APT testing +PROGRAM=aptwebserver +SLIBS = -lapt-pkg +LIB_MAKES = apt-pkg/makefile +SOURCE = aptwebserver.cc +include $(PROGRAM_H) -- cgit v1.2.3-70-g09d2 From da3ebfe79d570c3aeb5f0a407cfec7996f44420c Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 10 Jul 2012 12:01:46 +0200 Subject: add failing regression test for bug #346386 --- test/integration/framework | 9 ++++++++- test/integration/test-ubuntu-bug346386 | 19 +++++++++++++++++++ test/interactive-helper/aptwebserver.cc | 8 ++++---- 3 files changed, 31 insertions(+), 5 deletions(-) create mode 100755 test/integration/test-ubuntu-bug346386 (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index a514bef20..bf46ae0c5 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -687,10 +687,17 @@ signreleasefiles() { msgdone "info" } +simulatebrokenwebserver() { + if ! test -x ${BUILDDIRECTORY}/aptwebserver; then + msgdie 'Need the aptwebserver to simulate broken connections' + fi + changetowebserver '--simulate-paywall' +} + changetowebserver() { if test -x ${BUILDDIRECTORY}/aptwebserver; then cd aptarchive - LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/aptwebserver 2> /dev/null > /dev/null & + LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/aptwebserver $@ 2> /dev/null > /dev/null & addtrap "kill $!;" cd - > /dev/null elif which weborf > /dev/null; then diff --git a/test/integration/test-ubuntu-bug346386 b/test/integration/test-ubuntu-bug346386 new file mode 100755 index 000000000..57004f343 --- /dev/null +++ b/test/integration/test-ubuntu-bug346386 @@ -0,0 +1,19 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +configarchitecture 'amd64' + +buildsimplenativepackage 'apt' 'all' '1.0' 'stable' + +setupaptarchive +simulatebrokenwebserver + +rm -rf rootdir/var/lib/apt/lists +aptget update +testequal 'partial' "$(ls rootdir/var/lib/apt/lists/)" + + diff --git a/test/interactive-helper/aptwebserver.cc b/test/interactive-helper/aptwebserver.cc index 3c476ad05..c7b815925 100644 --- a/test/interactive-helper/aptwebserver.cc +++ b/test/interactive-helper/aptwebserver.cc @@ -244,11 +244,11 @@ int main(int argc, const char *argv[]) } _error->DumpErrors(std::cerr); messages.clear(); - } - std::clog << "CLOSE client " << client - << " on socket " << sock << std::endl; - close(client); + std::clog << "CLOSE client " << client + << " on socket " << sock << std::endl; + close(client); + } } return 0; } -- cgit v1.2.3-70-g09d2 From 3ce22d4f714414d6deb8b044c5b08a8fe7a78967 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 10 Jul 2012 13:19:54 +0200 Subject: cleanup, thanks to donkult for his feedback --- test/integration/framework | 9 +++------ test/integration/test-ubuntu-bug346386 | 2 +- test/interactive-helper/aptwebserver.cc | 2 +- 3 files changed, 5 insertions(+), 8 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index bf46ae0c5..8f37d4a03 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -687,14 +687,11 @@ signreleasefiles() { msgdone "info" } -simulatebrokenwebserver() { - if ! test -x ${BUILDDIRECTORY}/aptwebserver; then - msgdie 'Need the aptwebserver to simulate broken connections' +changetowebserver() { + if [ -n "$1" ] && ! test -x ${BUILDDIRECTORY}/aptwebserver; then + msgdie 'Need the aptwebserver when passing arguments' fi - changetowebserver '--simulate-paywall' -} -changetowebserver() { if test -x ${BUILDDIRECTORY}/aptwebserver; then cd aptarchive LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/aptwebserver $@ 2> /dev/null > /dev/null & diff --git a/test/integration/test-ubuntu-bug346386 b/test/integration/test-ubuntu-bug346386 index 57004f343..a5f502853 100755 --- a/test/integration/test-ubuntu-bug346386 +++ b/test/integration/test-ubuntu-bug346386 @@ -10,7 +10,7 @@ configarchitecture 'amd64' buildsimplenativepackage 'apt' 'all' '1.0' 'stable' setupaptarchive -simulatebrokenwebserver +changetowebserver --simulate-paywall rm -rf rootdir/var/lib/apt/lists aptget update diff --git a/test/interactive-helper/aptwebserver.cc b/test/interactive-helper/aptwebserver.cc index ebe04d2a3..8fbb9eab9 100644 --- a/test/interactive-helper/aptwebserver.cc +++ b/test/interactive-helper/aptwebserver.cc @@ -154,7 +154,7 @@ int main(int argc, const char *argv[]) }; CommandLine CmdL(Args, _config); - if(pkgInitConfig(*_config) == false || CmdL.Parse(argc,argv) == false) { + if(CmdL.Parse(argc,argv) == false) { _error->DumpErrors(); exit(1); } -- cgit v1.2.3-70-g09d2 From 549b49394848d051dc116600571df55d7160eeaa Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 10 Jul 2012 14:10:19 +0200 Subject: improve test some more --- test/integration/framework | 1 + test/integration/test-ubuntu-bug346386 | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 8f37d4a03..d15fd0e01 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -688,6 +688,7 @@ signreleasefiles() { } changetowebserver() { + if [ -n "$1" ] && ! test -x ${BUILDDIRECTORY}/aptwebserver; then msgdie 'Need the aptwebserver when passing arguments' fi diff --git a/test/integration/test-ubuntu-bug346386 b/test/integration/test-ubuntu-bug346386 index a5f502853..1fbfb5ca4 100755 --- a/test/integration/test-ubuntu-bug346386 +++ b/test/integration/test-ubuntu-bug346386 @@ -1,6 +1,24 @@ #!/bin/sh set -e +ensure_n_canary_strings_in_dir() { + DIR=$1 + CANARY_STRING=$2 + EXPECTED_N=$3 + + msgtest "Testing for $EXPECTED_N canary strings '$CANARY_STRING' in in $DIR" + + + N=$(grep "$CANARY_STRING" $DIR/* 2>/dev/null |wc -l ) + if [ "$N" = "$EXPECTED_N" ]; then + msgpass + return 0 + else + msgfail "Expected $EXPECTED_N canaries, got $N" + return 1 + fi +} + TESTDIR=$(readlink -f $(dirname $0)) . $TESTDIR/framework @@ -13,7 +31,17 @@ setupaptarchive changetowebserver --simulate-paywall rm -rf rootdir/var/lib/apt/lists -aptget update -testequal 'partial' "$(ls rootdir/var/lib/apt/lists/)" +if aptget update -qq 2>/dev/null; then + msgfail "excpected apt-get update failure" +fi +ensure_n_canary_strings_in_dir rootdir/var/lib/apt/lists/ "ni ni ni" 0 +testequal 'partial' ls rootdir/var/lib/apt/lists/ +# again, this time with pre-existing files valid data +for f in Release Release.gpg main_binary-amd64_Packages stable_main_source_Sources; do + echo "canary" > rootdir/var/lib/apt/lists/localhost:8080_dists_stable_${f} +done +# this will fail, the important part is that the canaries remain +aptget update -qq 2>/dev/null || true +ensure_n_canary_strings_in_dir rootdir/var/lib/apt/lists/ "canary" 4 -- cgit v1.2.3-70-g09d2 From 721b05b8501b3ffffcaef4d90b4f24e2a72b0fef Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 10 Jul 2012 15:28:28 +0200 Subject: rename the paywall testcase and reformat it a bit --- .../test-ubuntu-bug-346386-apt-get-update-paywall | 47 ++++++++++++++++++++++ test/integration/test-ubuntu-bug346386 | 47 ---------------------- 2 files changed, 47 insertions(+), 47 deletions(-) create mode 100755 test/integration/test-ubuntu-bug-346386-apt-get-update-paywall delete mode 100755 test/integration/test-ubuntu-bug346386 (limited to 'test/integration') diff --git a/test/integration/test-ubuntu-bug-346386-apt-get-update-paywall b/test/integration/test-ubuntu-bug-346386-apt-get-update-paywall new file mode 100755 index 000000000..25cccf067 --- /dev/null +++ b/test/integration/test-ubuntu-bug-346386-apt-get-update-paywall @@ -0,0 +1,47 @@ +#!/bin/sh +set -e + +ensure_n_canary_strings_in_dir() { + DIR=$1 + CANARY_STRING=$2 + EXPECTED_N=$3 + + msgtest "Testing for $EXPECTED_N canary strings '$CANARY_STRING' in in" "$DIR" + + N=$(grep "$CANARY_STRING" $DIR/* 2>/dev/null |wc -l ) + if [ "$N" = "$EXPECTED_N" ]; then + msgpass + return 0 + else + msgfail "Expected $EXPECTED_N canaries, got $N" + return 1 + fi +} + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +configarchitecture 'native' + +insertpackage 'unstable' 'unrelated' 'all' '1.0' 'stable' + +setupaptarchive +changetowebserver --simulate-paywall + +rm -rf rootdir/var/lib/apt/lists +msgtest 'excpected failure of' 'apt-get update' +aptget update -qq 2>/dev/null && msgfail || msgpass + +ensure_n_canary_strings_in_dir rootdir/var/lib/apt/lists/ 'ni ni ni' 0 +testequal 'partial' ls rootdir/var/lib/apt/lists/ + +# again, this time with pre-existing files valid data +for f in Release Release.gpg main_binary-amd64_Packages stable_main_source_Sources; do + echo "canary" > rootdir/var/lib/apt/lists/localhost:8080_dists_stable_${f} +done + +# this will fail, the important part is that the canaries remain +msgtest 'excpected failure of' 'apt-get update' +aptget update -qq 2>/dev/null && msgfail || msgpass +ensure_n_canary_strings_in_dir rootdir/var/lib/apt/lists/ 'canary' 4 diff --git a/test/integration/test-ubuntu-bug346386 b/test/integration/test-ubuntu-bug346386 deleted file mode 100755 index 1fbfb5ca4..000000000 --- a/test/integration/test-ubuntu-bug346386 +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh -set -e - -ensure_n_canary_strings_in_dir() { - DIR=$1 - CANARY_STRING=$2 - EXPECTED_N=$3 - - msgtest "Testing for $EXPECTED_N canary strings '$CANARY_STRING' in in $DIR" - - - N=$(grep "$CANARY_STRING" $DIR/* 2>/dev/null |wc -l ) - if [ "$N" = "$EXPECTED_N" ]; then - msgpass - return 0 - else - msgfail "Expected $EXPECTED_N canaries, got $N" - return 1 - fi -} - -TESTDIR=$(readlink -f $(dirname $0)) -. $TESTDIR/framework - -setupenvironment -configarchitecture 'amd64' - -buildsimplenativepackage 'apt' 'all' '1.0' 'stable' - -setupaptarchive -changetowebserver --simulate-paywall - -rm -rf rootdir/var/lib/apt/lists -if aptget update -qq 2>/dev/null; then - msgfail "excpected apt-get update failure" -fi -ensure_n_canary_strings_in_dir rootdir/var/lib/apt/lists/ "ni ni ni" 0 -testequal 'partial' ls rootdir/var/lib/apt/lists/ - -# again, this time with pre-existing files valid data -for f in Release Release.gpg main_binary-amd64_Packages stable_main_source_Sources; do - echo "canary" > rootdir/var/lib/apt/lists/localhost:8080_dists_stable_${f} -done -# this will fail, the important part is that the canaries remain -aptget update -qq 2>/dev/null || true -ensure_n_canary_strings_in_dir rootdir/var/lib/apt/lists/ "canary" 4 - -- cgit v1.2.3-70-g09d2 From 3522b1a8f16f45cf9c0c45b8b86cc886f1368df4 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 11 Jul 2012 10:39:51 +0200 Subject: do not hardcode /dev/null in changetowebserver so it can be changed for debugging easily --- test/integration/framework | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index d15fd0e01..965f984ca 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -688,30 +688,30 @@ signreleasefiles() { } changetowebserver() { + if [ -n "$1" ] && ! test -x ${BUILDDIRECTORY}/aptwebserver; then + msgdie 'Need the aptwebserver when passing arguments' + fi - if [ -n "$1" ] && ! test -x ${BUILDDIRECTORY}/aptwebserver; then - msgdie 'Need the aptwebserver when passing arguments' - fi - + local LOG='/dev/null' if test -x ${BUILDDIRECTORY}/aptwebserver; then cd aptarchive - LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/aptwebserver $@ 2> /dev/null > /dev/null & + LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/aptwebserver $@ 2> $LOG > $LOG & addtrap "kill $!;" cd - > /dev/null elif which weborf > /dev/null; then - weborf -xb aptarchive/ 2>&1 > /dev/null & + weborf -xb aptarchive/ 2> $LOG > $LOG & addtrap "kill $!;" elif which gatling > /dev/null; then cd aptarchive - gatling -p 8080 -F -S 2>&1 > /dev/null & + gatling -p 8080 -F -S 2> $LOG > $LOG & addtrap "kill $!;" cd - > /dev/null elif which lighttpd > /dev/null; then echo "server.document-root = \"$(readlink -f ./aptarchive)\" server.port = 8080 server.stat-cache-engine = \"disable\"" > lighttpd.conf - lighttpd -t -f lighttpd.conf >/dev/null || msgdie 'Can not change to webserver: our lighttpd config is invalid' - lighttpd -D -f lighttpd.conf 2>/dev/null >/dev/null & + lighttpd -t -f lighttpd.conf 2> $LOG > $LOG || msgdie 'Can not change to webserver: our lighttpd config is invalid' + lighttpd -D -f lighttpd.conf 2> $LOG > $LOG & addtrap "kill $!;" else msgdie 'You have to install weborf or lighttpd first' -- cgit v1.2.3-70-g09d2 From d37911acee3eb34368e6d9e6a0046c9150d2bce6 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 11 Jul 2012 11:07:54 +0200 Subject: add simple url rewriting to the webserver --- test/integration/skip-bug-602412-dequote-redirect | 38 ----------------------- test/integration/test-bug-602412-dequote-redirect | 29 +++++++++++++++++ test/interactive-helper/aptwebserver.cc | 19 ++++++++++-- 3 files changed, 46 insertions(+), 40 deletions(-) delete mode 100755 test/integration/skip-bug-602412-dequote-redirect create mode 100755 test/integration/test-bug-602412-dequote-redirect (limited to 'test/integration') diff --git a/test/integration/skip-bug-602412-dequote-redirect b/test/integration/skip-bug-602412-dequote-redirect deleted file mode 100755 index 689b671ce..000000000 --- a/test/integration/skip-bug-602412-dequote-redirect +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/sh -set -e - -TESTDIR=$(readlink -f $(dirname $0)) -. $TESTDIR/framework -setupenvironment -configarchitecture 'i386' - -if ! which lighttpd > /dev/null; then - msgdie 'You need lighttpd for this testcase, sorry…' - exit 1 -fi - -buildsimplenativepackage 'unrelated' 'all' '0.5~squeeze1' 'unstable' - -setupaptarchive - -echo "server.modules = ( \"mod_redirect\" ) -server.document-root = \"$(readlink -f ./aptarchive)\" -server.port = 8080 -server.stat-cache-engine = \"disable\" -url.redirect = ( \"^/pool/(.*)$\" => \"/newpool/\$1\", - \"^/dists/(.*)$\" => \"/newdists/\$1\" )" > lighttpd.conf - -mv aptarchive/pool aptarchive/newpool -mv aptarchive/dists aptarchive/newdists - -lighttpd -t -f lighttpd.conf >/dev/null || msgdie 'Can not change to webserver: our lighttpd config is invalid' -lighttpd -D -f lighttpd.conf 2>/dev/null >/dev/null & -addtrap "kill $!;" - -APTARCHIVE="file://$(readlink -f ./aptarchive)" -for LIST in $(find rootdir/etc/apt/sources.list.d/ -name 'apt-test-*.list'); do - sed -i $LIST -e "s#$APTARCHIVE#http://localhost:8080/#" -done - -aptget update || msgdie 'apt-get update failed' -aptget install unrelated --download-only || msgdie 'downloading package failed' diff --git a/test/integration/test-bug-602412-dequote-redirect b/test/integration/test-bug-602412-dequote-redirect new file mode 100755 index 000000000..f1e67c6d8 --- /dev/null +++ b/test/integration/test-bug-602412-dequote-redirect @@ -0,0 +1,29 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'amd64' + +buildsimplenativepackage 'unrelated' 'all' '0.5~squeeze1' 'unstable' + +setupaptarchive +changetowebserver -o aptwebserver::redirect::replace::/pool/=/newpool/ \ + -o aptwebserver::redirect::replace::/dists/=/newdists/ + +mv aptarchive/pool aptarchive/newpool +mv aptarchive/dists aptarchive/newdists + +msgtest 'Test redirection works in' 'apt-get update' +aptget update -qq && msgpass || msgfail + +# check that I-M-S header is kept in redirections +testequal 'Hit http://localhost unstable InRelease +Hit http://localhost unstable/main Sources +Hit http://localhost unstable/main amd64 Packages +Hit http://localhost unstable/main Translation-en +Reading package lists...' aptget update + +msgtest 'Test redirection works in' 'package download' +aptget install unrelated --download-only -qq && msgpass || msgfail diff --git a/test/interactive-helper/aptwebserver.cc b/test/interactive-helper/aptwebserver.cc index 2052fe6d8..7fa322ea9 100644 --- a/test/interactive-helper/aptwebserver.cc +++ b/test/interactive-helper/aptwebserver.cc @@ -137,7 +137,7 @@ void sendError(int const client, int const httpcode, std::string const &request, std::list headers; std::string response(""); response.append(httpcodeToStr(httpcode)).append(""); - response.append("

").append(httpcodeToStr(httpcode)).append("

").append(httpcodeToStr(httpcode)).append("

"); response.append("This error is a result of the request:
");
    response.append(request).append("
"); addDataHeaders(headers, response); @@ -255,6 +255,8 @@ int main(int const argc, const char * argv[]) {0, "simulate-paywall", "aptwebserver::Simulate-Paywall", CommandLine::Boolean}, {0, "port", "aptwebserver::port", CommandLine::HasArg}, + {'c',"config-file",0,CommandLine::ConfigFile}, + {'o',"option",0,CommandLine::ArbItem}, {0,0,0,0} }; @@ -366,7 +368,20 @@ int main(int const argc, const char * argv[]) sendRedirect(client, 301, filename.append("/"), *m, sendContent); } else - sendError(client, 404, *m, false); + { + ::Configuration::Item const *Replaces = _config->Tree("aptwebserver::redirect::replace"); + if (Replaces != NULL) { + std::string redirect = "/" + filename; + for (::Configuration::Item *I = Replaces->Child; I != NULL; I = I->Next) + redirect = SubstVar(redirect, I->Tag, I->Value); + redirect.erase(0,1); + if (redirect != filename) { + sendRedirect(client, 301, redirect, *m, sendContent); + continue; + } + } + sendError(client, 404, *m, sendContent); + } } _error->DumpErrors(std::cerr); messages.clear(); -- cgit v1.2.3-70-g09d2