]> git.saurik.com Git - apt.git/blobdiff - test/integration/framework
show item ID in Hit, Ign and Err lines as well
[apt.git] / test / integration / framework
index 50c027a2c8d48e87dadb0a05632f11d4557ff9b5..1b99929e2f19d78b5cd95843b6272d0e5191acd6 100644 (file)
@@ -3,7 +3,7 @@
 EXIT_CODE=0
 
 # we all like colorful messages
-if [ "$MSGCOLOR" != 'NO' ]; then
+if [ "$MSGCOLOR" != 'NO' ] && [ "$MSGCOLOR" != 'ALWAYS' ]; then
        if [ ! -t 1 ]; then # but check that we output to a terminal
                export MSGCOLOR='NO'
        fi
@@ -137,7 +137,14 @@ dpkgcheckbuilddeps() {
        command dpkg-checkbuilddeps --admindir=${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg "$@"
 }
 gdb() {
-       local CMD="$1"
+       local CMD
+       case "$1" in
+       aptget) CMD="apt-get";;
+       aptcache) CMD="apt-cache";;
+       aptmark) CMD="apt-mark";;
+       apthelper) CMD="apt-helper";;
+       *) CMD="$1";;
+       esac
        shift
        runapt command gdb --quiet -ex run "${BUILDDIRECTORY}/$CMD" --args "${BUILDDIRECTORY}/$CMD" "$@"
 }
@@ -189,6 +196,7 @@ setupenvironment() {
 
        TESTDIRECTORY=$(readlink -f $(dirname $0))
         # allow overriding the default BUILDDIR location
+       SOURCEDIRECTORY=${APT_INTEGRATION_TESTS_SOURCE_DIR:-"${TESTDIRECTORY}/../../"}
        BUILDDIRECTORY=${APT_INTEGRATION_TESTS_BUILD_DIR:-"${TESTDIRECTORY}/../../build/bin"}
        LIBRARYPATH=${APT_INTEGRATION_TESTS_LIBRARY_PATH:-"${BUILDDIRECTORY}"}
         METHODSDIR=${APT_INTEGRATION_TESTS_METHODS_DIR:-"${BUILDDIRECTORY}/methods"}
@@ -512,6 +520,12 @@ Package: $NAME" > debian/control
 
 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}"
@@ -592,15 +606,15 @@ Package: $NAME" >> ${BUILDDIR}/debian/control
                (cd ${BUILDDIR}; dpkg-gencontrol -DArchitecture=$arch)
                (cd ${BUILDDIR}/debian/tmp; md5sum $(find usr/ -type f) > DEBIAN/md5sums)
                local LOG="${BUILDDIR}/../${NAME}_${VERSION}_${arch}.dpkg-deb.log"
-               # ensure the right permissions as dpkg-deb ensists
+               # ensure the right permissions as dpkg-deb insists
                chmod 755 ${BUILDDIR}/debian/tmp/DEBIAN
                testsuccess --nomsg dpkg-deb -Z${COMPRESS_TYPE} --build ${BUILDDIR}/debian/tmp ${BUILDDIR}/..
                echo "pool/${NAME}_${VERSION}_${arch}.deb" >> ${BUILDDIR}/../${RELEASE}.${DISTSECTION}.pkglist
        done
 
-       mkdir -p ${BUILDDIR}/../${NAME}_${VERSION}
-       cp ${BUILDDIR}/debian/changelog ${BUILDDIR}/../${NAME}_${VERSION}/
-       cp ${BUILDDIR}/debian/changelog ${BUILDDIR}/../${NAME}_${VERSION}.changelog
+       local CHANGEPATH="${BUILDDIR}/../${DISTSECTION}/${NM}/${NAME}/${NAME}_${VERSION}"
+       mkdir -p $CHANGEPATH
+       cp ${BUILDDIR}/debian/changelog $CHANGEPATH
        rm -rf "${BUILDDIR}"
        msgdone "info"
 }
@@ -834,7 +848,9 @@ buildaptarchivefromincoming() {
 
 buildaptarchivefromfiles() {
        msginfo "Build APT archive for ${CCMD}$(basename $0)${CINFO} based on prebuild files…"
-       find aptarchive -name 'Packages' -o -name 'Sources' -o -name 'Translation-*' | while read line; do
+       local DIR='aptarchive'
+       if [ -d "${DIR}/dists" ]; then DIR="${DIR}/dists"; fi
+       find "$DIR" -name 'Packages' -o -name 'Sources' -o -name 'Translation-*' | while read line; do
                msgninfo "\t${line} file… "
                compressfile "$line" "$1"
                msgdone "info"
@@ -866,6 +882,7 @@ getcodenamefromsuite() {
 }
 getreleaseversionfromsuite() { true; }
 getlabelfromsuite() { true; }
+getoriginfromsuite() { true; }
 
 generatereleasefiles() {
        # $1 is the Date header and $2 is the ValidUntil header to be set
@@ -877,16 +894,21 @@ generatereleasefiles() {
                        local CODENAME="$(getcodenamefromsuite $SUITE)"
                        local VERSION="$(getreleaseversionfromsuite $SUITE)"
                        local LABEL="$(getlabelfromsuite $SUITE)"
+                       local ORIGIN="$(getoriginfromsuite $SUITE)"
                        if [ -n "$VERSION" ]; then
                                VERSION="-o APT::FTPArchive::Release::Version=${VERSION}"
                        fi
                        if [ -n "$LABEL" ]; then
                                LABEL="-o APT::FTPArchive::Release::Label=${LABEL}"
                        fi
+                       if [ -n "$ORIGIN" ]; then
+                               ORIGIN="-o APT::FTPArchive::Release::Origin=${ORIGIN}"
+                       fi
                        aptftparchive -qq release $dir \
                                -o APT::FTPArchive::Release::Suite="${SUITE}" \
                                -o APT::FTPArchive::Release::Codename="${CODENAME}" \
                                ${LABEL} \
+                               ${ORIGIN} \
                                ${VERSION} \
                                        | sed -e '/0 Release$/ d' > $dir/Release # remove the self reference
                        if [ "$SUITE" = "experimental" -o "$SUITE" = "experimental2" ]; then
@@ -1004,7 +1026,17 @@ signreleasefiles() {
        msgdone "info"
 }
 
+redatereleasefiles() {
+       local DATE="$(date -d "$1" '+%a, %d %b %Y %H:%M:%S %Z')"
+       for release in $(find aptarchive/ -name 'Release'); do
+               sed -i "s/^Date: .*$/Date: ${DATE}/" $release
+               touch -d "$DATE" $release
+       done
+       signreleasefiles "${2:-Joe Sixpack}"
+}
+
 webserverconfig() {
+       local WEBSERVER="${3:-http://localhost:8080}"
        local NOCHECK=false
        if [ "$1" = '--no-check' ]; then
                NOCHECK=true
@@ -1016,10 +1048,10 @@ webserverconfig() {
        local URI
        if [ -n "$2" ]; then
                msgtest "Set webserver config option '${1}' to" "$2"
-               URI="http://localhost:8080/_config/set/${1}/${2}"
+               URI="${WEBSERVER}/_config/set/${1}/${2}"
        else
                msgtest 'Clear webserver config option' "${1}"
-               URI="http://localhost:8080/_config/clear/${1}"
+               URI="${WEBSERVER}/_config/clear/${1}"
        fi
        if downloadfile "$URI" "$STATUS" > "$DOWNLOG"; then
                msgpass
@@ -1126,7 +1158,7 @@ acquire::cdrom::autodetect 0;" > rootdir/etc/apt/apt.conf.d/00cdrom
 downloadfile() {
        local PROTO="${1%%:*}"
        if ! apthelper -o Debug::Acquire::${PROTO}=1 -o Debug::pkgAcquire::Worker=1 \
-               download-file "$1" "$2" 2>&1 ; then
+               download-file "$1" "$2" "$3" 2>&1 ; then
                return 1
        fi
        # only if the file exists the download was successful
@@ -1153,9 +1185,9 @@ testfileequal() {
        shift
        msgtest "Test for correctness of file" "$FILE"
        if [ -z "$*" ]; then
-               echo -n "" | checkdiff $FILE - && msgpass || msgfail
+               echo -n "" | checkdiff - $FILE && msgpass || msgfail
        else
-               echo "$*" | checkdiff $FILE - && msgpass || msgfail
+               echo "$*" | checkdiff - $FILE && msgpass || msgfail
        fi
 }
 
@@ -1430,9 +1462,9 @@ testfilestats() {
                msgpass
        else
                echo >&2
-               ls -ld >&2 "$1"
+               ls -ld >&2 "$1" || true
                echo -n >&2 "stat(1) reports for $2: "
-               stat --format "$2" "$1"
+               stat --format "$2" "$1" || true
                msgfail
        fi
 }
@@ -1467,12 +1499,14 @@ pause() {
 }
 
 listcurrentlistsdirectory() {
-       find rootdir/var/lib/apt/lists -maxdepth 1 -type d | while read line; do
-               stat --format '%U:%G:%a:%n' "$line"
-       done
-       find rootdir/var/lib/apt/lists -maxdepth 1 \! -type d | while read line; do
-               stat --format '%U:%G:%a:%s:%y:%n' "$line"
-       done
+       {
+               find rootdir/var/lib/apt/lists -maxdepth 1 -type d | while read line; do
+                       stat --format '%U:%G:%a:%n' "$line"
+               done
+               find rootdir/var/lib/apt/lists -maxdepth 1 \! -type d | while read line; do
+                       stat --format '%U:%G:%a:%s:%y:%n' "$line"
+               done
+       } | sort
 }
 
 ### convinience hacks ###
@@ -1516,20 +1550,31 @@ aptautotest() {
 }
 
 aptautotest_aptget_update() {
+       local TESTCALL="$1"
+       while [ -n "$2" ]; do
+               if [ "$2" = '--print-uris' ]; then return; fi # simulation mode
+               shift
+       done
        if ! test -d "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists"; then return; fi
        testfilestats "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:755"
        testfilestats "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:755"
        # all copied files are properly chmodded
-       for file in $(find "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists" -maxdepth 1 -type f ! -name 'lock'); do
+       for file in $(find "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists" -type f ! -name 'lock'); do
                testfilestats "$file" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:644"
        done
+       if [ "$TESTCALL" = 'testsuccess' ]; then
+               # failure cases can retain partial files and such
+               testempty find "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/partial" -mindepth 1 ! \( -name 'lock' -o -name '*.FAILED' \)
+       fi
 }
 aptautotest_apt_update() { aptautotest_aptget_update "$@"; }
+aptautotest_aptcdrom_add() { aptautotest_aptget_update "$@"; }
 
 testaptautotestnodpkgwarning() {
        local TESTCALL="$1"
        while [ -n "$2" ]; do
-               if expr match "$2" '^-[a-z]*s' >/dev/null 2>&1; then return; fi
+               if expr match "$2" '^-[a-z]*s' >/dev/null 2>&1; then return; fi # simulation mode
+               if expr match "$2" '^-dy\?' >/dev/null 2>&1; then return; fi # download-only mode
                shift
        done
        testfailure grep '^dpkg: warning:.*ignor.*' "${TMPWORKINGDIRECTORY}/rootdir/tmp-before/${TESTCALL}.output"