X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/fb7b11ebb852fa255053ecab605bc9cfe9de0603..a5f9b45e4a67246f7af2c6fc62de9c531cd314a4:/test/integration/framework diff --git a/test/integration/framework b/test/integration/framework index 7eaa36415..bebcbf342 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -191,6 +191,7 @@ aptitude() { runapt aptitude "$@"; } aptextracttemplates() { runapt apt-extracttemplates "$@"; } aptinternalsolver() { runapt "${APTINTERNALSOLVER}" "$@"; } aptdumpsolver() { runapt "${APTDUMPSOLVER}" "$@"; } +aptinternalplanner() { runapt "${APTINTERNALPLANNER}" "$@"; } dpkg() { "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" "$@" @@ -289,6 +290,7 @@ setupenvironment() { APTWEBSERVERBINDIR="${APT_INTEGRATION_TESTS_WEBSERVER_BIN_DIR:-"${BUILDDIRECTORY}"}" APTINTERNALSOLVER="${APT_INTEGRATION_TESTS_INTERNAL_SOLVER:-"${BUILDDIRECTORY}/apt-internal-solver"}" APTDUMPSOLVER="${APT_INTEGRATION_TESTS_DUMP_SOLVER:-"${BUILDDIRECTORY}/apt-dump-solver"}" + APTINTERNALPLANNER="${APT_INTEGRATION_TESTS_INTERNAL_PLANNER:-"${BUILDDIRECTORY}/apt-internal-planner"}" test -x "${BUILDDIRECTORY}/apt-get" || msgdie "You need to build tree first" # ----- @@ -302,10 +304,13 @@ setupenvironment() { mkdir -p usr/lib/apt ln -s "${METHODSDIR}" usr/lib/apt/methods if [ "$BUILDDIRECTORY" = "$LIBRARYPATH" ]; then - mkdir -p usr/lib/apt/solvers + mkdir -p usr/lib/apt/solvers usr/lib/apt/planners ln -s "${BUILDDIRECTORY}/apt-dump-solver" usr/lib/apt/solvers/dump + ln -s "${BUILDDIRECTORY}/apt-dump-solver" usr/lib/apt/planners/dump ln -s "${BUILDDIRECTORY}/apt-internal-solver" usr/lib/apt/solvers/apt - echo "Dir::Bin::Solvers \"${TMPWORKINGDIRECTORY}/rootdir/usr/lib/apt/solvers\";" > etc/apt/apt.conf.d/externalsolver.conf + ln -s "${BUILDDIRECTORY}/apt-internal-planner" usr/lib/apt/planners/apt + echo "Dir::Bin::Solvers \"${TMPWORKINGDIRECTORY}/rootdir/usr/lib/apt/solvers\";" >> ../aptconfig.conf + echo "Dir::Bin::Planners \"${TMPWORKINGDIRECTORY}/rootdir/usr/lib/apt/planners\";" >> ../aptconfig.conf fi # use the autoremove from the BUILDDIRECTORY if its there, otherwise # system @@ -328,7 +333,7 @@ setupenvironment() { chmod 644 keys/* ln -s "${TMPWORKINGDIRECTORY}/keys/joesixpack.pub" rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg - echo "Dir \"${TMPWORKINGDIRECTORY}/rootdir\";" > aptconfig.conf + echo "Dir \"${TMPWORKINGDIRECTORY}/rootdir\";" >> aptconfig.conf echo "Dir::state::status \"${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/status\";" >> aptconfig.conf echo "APT::Get::Show-User-Simulation-Note \"false\";" >> aptconfig.conf echo "Dir::Bin::Methods \"${TMPWORKINGDIRECTORY}/rootdir/usr/lib/apt/methods\";" >> aptconfig.conf @@ -339,7 +344,10 @@ setupenvironment() { # destroys coverage reporting though, so we disable changing user for the calling gpgv echo "Dir::Bin::apt-key \"${BUILDDIRECTORY}/apt-key\";" >> aptconfig.conf if [ "$(id -u)" = '0' ]; then - echo 'Binary::gpgv::Debug::NoDropPrivs "true";' >>aptconfig.conf + echo 'Binary::gpgv::APT::Sandbox::User "root";' >> aptconfig.conf + # same for the solver executables + echo 'APT::Solver::RunAsUser "root";' >> aptconfig.conf + echo 'APT::Planner::RunAsUser "root";' >> aptconfig.conf fi cat > "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" < rootdir/etc/apt/apt.conf.d/no-sha1 fi + # most tests just need one signed Release file, not both + export APT_DONT_SIGN='Release.gpg' + msgdone "info" } @@ -534,6 +545,10 @@ EOF testempty --nomsg gcc -Wall -Wextra -fPIC -shared -o noopchroot.so noopchroot.c -ldl } configcompression() { + if [ "$1" = 'ALL' ]; then + configcompression '.' $(aptconfig dump APT::Compressor --format '%t %v%n' | sed -n 's#^Extension \.\(.*\)$#\1#p') + return + fi local CMD='apthelper cat-file -C' while [ -n "$1" ]; do case "$1" in @@ -579,7 +594,7 @@ Dir::Bin::uncompressed \"/does/not/exist\";" > "$CONFFILE" done } -setupsimplenativepackage() { +_setupsimplenativepackage() { local NAME="$1" local ARCH="$2" local VERSION="$3" @@ -588,62 +603,6 @@ setupsimplenativepackage() { local DESCRIPTION="${6:-"an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} If you find such a package installed on your system, something went horribly wrong! They are autogenerated - und used only by testcases and serve no other purpose…"}" - - local SECTION="${7:-others}" - local DISTSECTION - if [ "$SECTION" = "${SECTION#*/}" ]; then - DISTSECTION="main" - else - DISTSECTION="${SECTION%/*}" - fi - local BUILDDIR=incoming/${NAME}-${VERSION} - mkdir -p ${BUILDDIR}/debian/source - cd ${BUILDDIR} - echo "* most suckless software product ever" > FEATURES - test -e debian/copyright || echo "Copyleft by Joe Sixpack $(date -u +%Y)" > debian/copyright - test -e debian/changelog || echo "$NAME ($VERSION) $RELEASE; urgency=low - - * Initial release - - -- Joe Sixpack $(date -u -R)" > debian/changelog - test -e debian/control || echo "Source: $NAME -Section: $SECTION -Priority: optional -Maintainer: Joe Sixpack -Build-Depends: debhelper (>= 7) -Standards-Version: 3.9.1 - -Package: $NAME" > debian/control - if [ "$ARCH" = 'all' ]; then - echo "Architecture: all" >> debian/control - else - echo "Architecture: any" >> debian/control - fi - test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> debian/control - echo "Description: $DESCRIPTION" >> debian/control - - test -e debian/compat || echo "7" > debian/compat - test -e debian/source/format || echo "3.0 (native)" > debian/source/format - test -e debian/rules || cp /usr/share/doc/debhelper/examples/rules.tiny debian/rules - cd - > /dev/null -} - -buildsimplenativepackage() { - local NAME="$1" - local NM - if [ "$(echo "$NAME" | cut -c 1-3)" = 'lib' ]; then - NM="$(echo "$NAME" | cut -c 1-4)" - else - NM="$(echo "$NAME" | cut -c 1)" - fi - local ARCH="$2" - local VERSION="$3" - local RELEASE="${4:-unstable}" - local DEPENDENCIES="$5" - local DESCRIPTION="${6:-"an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} - If you find such a package installed on your system, - something went horribly wrong! They are autogenerated und used only by testcases and serve no other purpose…"}" local SECTION="${7:-others}" @@ -658,7 +617,6 @@ buildsimplenativepackage() { fi local BUILDDIR="${TMPWORKINGDIRECTORY}/incoming/${NAME}-${VERSION}" - msgtest "Build source package in version ${VERSION} for ${RELEASE} in ${DISTSECTION}" "$NAME" mkdir -p "$BUILDDIR/debian/source" echo "* most suckless software product ever" > "${BUILDDIR}/FEATURES" echo "#!/bin/sh @@ -694,6 +652,37 @@ Package: $NAME" } > "${BUILDDIR}/debian/control" echo '3.0 (native)' > "${BUILDDIR}/debian/source/format" +} + +setupsimplenativepackage() { + _setupsimplenativepackage "$@" + local NAME="$1" + local VERSION="$3" + local BUILDDIR="${TMPWORKINGDIRECTORY}/incoming/${NAME}-${VERSION}" + test -e "${BUILDDIR}/debian/compat" || echo '7' > "${BUILDDIR}/debian/compat" + test -e "${BUILDDIR}/debian/rules" || cp /usr/share/doc/debhelper/examples/rules.tiny "${BUILDDIR}/debian/rules" +} + +buildsimplenativepackage() { + local NAME="$1" + local ARCH="$2" + local VERSION="$3" + local RELEASE="${4:-unstable}" + local DEPENDENCIES="$5" + local DESCRIPTION="$6" + local SECTION="${7:-others}" + local PRIORITY="${8:-optional}" + local FILE_TREE="$9" + local COMPRESS_TYPE="${10:-gzip}" + local DISTSECTION + if [ "$SECTION" = "${SECTION#*/}" ]; then + DISTSECTION="main" + else + DISTSECTION="${SECTION%/*}" + fi + local BUILDDIR="${TMPWORKINGDIRECTORY}/incoming/${NAME}-${VERSION}" + msgtest "Build source package in version ${VERSION} for ${RELEASE} in ${DISTSECTION}" "$NAME" + _setupsimplenativepackage "$@" cd "${BUILDDIR}/.." testsuccess --nomsg dpkg-source -b ${NAME}-${VERSION} cd - >/dev/null @@ -727,6 +716,12 @@ Package: $NAME" echo "pool/${NAME}_${VERSION}_${arch}.deb" >> "${BUILDDIR}/../${RELEASE}.${DISTSECTION}.pkglist" done + local NM + if [ "$(echo "$NAME" | cut -c 1-3)" = 'lib' ]; then + NM="$(echo "$NAME" | cut -c 1-4)" + else + NM="$(echo "$NAME" | cut -c 1)" + fi local CHANGEPATH="${BUILDDIR}/../${DISTSECTION}/${NM}/${NAME}/${NAME}_${VERSION}" mkdir -p "$CHANGEPATH" cp "${BUILDDIR}/debian/changelog" "$CHANGEPATH" @@ -958,7 +953,7 @@ buildaptarchivefromfiles() { } compressfile() { - cat "${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf" | while read compressor extension command; do + while read compressor extension command; do if [ "$compressor" = '.' ]; then if [ -n "$2" ]; then touch -d "$2" "$1" @@ -969,7 +964,7 @@ compressfile() { if [ -n "$2" ]; then touch -d "$2" "${1}.${extension}" fi - done + done < "${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf" } # can be overridden by testcases for their pleasure @@ -1134,11 +1129,21 @@ signreleasefiles() { fi local GPG="aptkey --quiet --keyring ${KEY}.pub --secret-keyring ${KEY}.sec --readonly adv --batch --yes --digest-algo ${APT_TESTS_DIGEST_ALGO:-SHA512}" for RELEASE in $(find "${REPODIR}/" -name Release); do - testsuccess $GPG "$@" $SIGUSERS --armor --detach-sign --sign --output "${RELEASE}.gpg" "${RELEASE}" - local INRELEASE="$(echo "${RELEASE}" | sed 's#/Release$#/InRelease#')" - testsuccess $GPG "$@" $SIGUSERS --clearsign --output "$INRELEASE" "$RELEASE" # we might have set a specific date for the Release file, so copy it - touch -d "$(stat --format "%y" ${RELEASE})" "${RELEASE}.gpg" "${INRELEASE}" + local DATE="$(stat --format "%y" "${RELEASE}")" + if [ "$APT_DONT_SIGN" = 'Release.gpg' ]; then + rm -f "${RELEASE}.gpg" + else + testsuccess $GPG "$@" $SIGUSERS --armor --detach-sign --sign --output "${RELEASE}.gpg" "${RELEASE}" + touch -d "$DATE" "${RELEASE}.gpg" + fi + local INRELEASE="${RELEASE%/*}/InRelease" + if [ "$APT_DONT_SIGN" = 'InRelease' ]; then + rm -f "$INRELEASE" + else + testsuccess $GPG "$@" $SIGUSERS --clearsign --output "$INRELEASE" "$RELEASE" + touch -d "$DATE" "${INRELEASE}" + fi done if [ -f "$SECEXPIREBAK" ] && [ -f "$PUBEXPIREBAK" ]; then mv -f "$SECEXPIREBAK" "${REXKEY}.sec" @@ -1547,12 +1552,13 @@ msgfailoutput() { local MSG="$1" local OUTPUT="$2" shift 2 - if [ "$1" = 'grep' ]; then + local CMD="$1" + if [ "$1" = 'grep' -o "$1" = 'tail' -o "$1" = 'head' ]; then echo >&2 while [ -n "$2" ]; do shift; done echo "#### Complete file: $1 ####" catfile "$1" - echo '#### grep output ####' + echo "#### $CMD output ####" elif [ "$1" = 'test' ]; then echo >&2 # doesn't support ! or non-file flags @@ -1684,8 +1690,9 @@ testfailure() { local EXITCODE=$? if expr match "$1" '^apt.*' >/dev/null; then if [ "$1" = 'aptkey' ]; then - if grep -q -E " Can't check signature: " "$OUTPUT" || \ - grep -q -E " BAD signature from " "$OUTPUT"; then + if grep -q " Can't check signature: + BAD signature from + signature could not be verified" "$OUTPUT"; then msgpass else msgfailoutput "run failed with exitcode ${EXITCODE}, but no signature error" "$OUTPUT" "$@"