]> git.saurik.com Git - apt.git/blobdiff - test/integration/framework
msgstr with elipses need three dots
[apt.git] / test / integration / framework
index 5439244f709b5e14f8db46fdf95076a292e65f0a..bf6fa0218f132112406bbbc3141dad09615b4edb 100644 (file)
@@ -111,12 +111,18 @@ aptftparchive() { runapt apt-ftparchive "$@"; }
 aptkey() { runapt apt-key "$@"; }
 aptmark() { runapt apt-mark "$@"; }
 apt() { runapt apt "$@"; }
+apthelper() { 
+  LD_LIBRARY_PATH=${APTHELPERBINDIR} ${APTHELPERBINDIR}/apt-helper "$@";
+}
 aptwebserver() {
   LD_LIBRARY_PATH=${APTWEBSERVERBINDIR} ${APTWEBSERVERBINDIR}/aptwebserver "$@";
 }
 dpkg() {
        command dpkg --root=${TMPWORKINGDIRECTORY}/rootdir --force-not-root --force-bad-path --log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log "$@"
 }
+dpkgcheckbuilddeps() {
+       command dpkg-checkbuilddeps --admindir=${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg "$@"
+}
 aptitude() {
        if [ -f ./aptconfig.conf ]; then
                APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY}  command aptitude "$@"
@@ -177,6 +183,7 @@ setupenvironment() {
         # allow overriding the default BUILDDIR location
        BUILDDIRECTORY=${APT_INTEGRATION_TESTS_BUILD_DIR:-"${TESTDIRECTORY}/../../build/bin"}
         METHODSDIR=${APT_INTEGRATION_TESTS_METHODS_DIR:-"${BUILDDIRECTORY}/methods"}
+        APTHELPERBINDIR=${APT_INTEGRATION_TESTS_LIBEXEC_DIR:-"${BUILDDIRECTORY}"}
         APTWEBSERVERBINDIR=${APT_INTEGRATION_TESTS_WEBSERVER_BIN_DIR:-"${BUILDDIRECTORY}"}
        test -x "${BUILDDIRECTORY}/apt-get" || msgdie "You need to build tree first"
         # -----
@@ -190,7 +197,7 @@ setupenvironment() {
        mkdir -p var/lib/dpkg/info var/lib/dpkg/updates var/lib/dpkg/triggers
        touch var/lib/dpkg/available
        mkdir -p usr/lib/apt
-       ln -s ${BUILDDIRECTORY}/methods usr/lib/apt/methods
+       ln -s ${METHODSDIR} usr/lib/apt/methods
        cd ..
        local PACKAGESFILE=$(echo "$(basename $0)" | sed -e 's/^test-/Packages-/' -e 's/^skip-/Packages-/')
        if [ -f "${TESTDIRECTORY}/${PACKAGESFILE}" ]; then
@@ -219,8 +226,6 @@ setupenvironment() {
        echo 'quiet::NoUpdate "true";' >> aptconfig.conf
        echo "Acquire::https::CaInfo \"${TESTDIR}/apt.pem\";" > rootdir/etc/apt/apt.conf.d/99https
         echo "Apt::Cmd::Disable-Script-Warning \"1\";" > rootdir/etc/apt/apt.conf.d/apt-binary
-       export LC_ALL=C.UTF-8
-       export PATH="${PATH}:/usr/local/sbin:/usr/sbin:/sbin"
        configcompression '.' 'gz' #'bz2' 'lzma' 'xz'
 
        # gpg needs a trustdb to function, but it can't be invalid (not even empty)
@@ -236,6 +241,12 @@ setupenvironment() {
        # newer gpg versions are fine without it, but play it safe for now
        gpg --quiet --check-trustdb --secret-keyring $SECRETKEYRING --keyring $SECRETKEYRING >/dev/null 2>&1
 
+       # cleanup the environment a bit
+       export PATH="${PATH}:/usr/local/sbin:/usr/sbin:/sbin"
+       export LC_ALL=C.UTF-8
+       unset LANGUAGE
+       unset GREP_OPTIONS DEB_BUILD_PROFILES
+
        msgdone "info"
 }
 
@@ -377,6 +388,7 @@ buildsimplenativepackage() {
        local SECTION="${7:-others}"
        local PRIORITY="${8:-optional}"
         local FILE_TREE="$9"
+        local COMPRESS_TYPE="${10:-gzip}"
        local DISTSECTION
        if [ "$SECTION" = "$(echo "$SECTION" | cut -d'/' -f 2)" ]; then
                DISTSECTION="main"
@@ -442,7 +454,7 @@ Package: $NAME" >> ${BUILDDIR}/debian/control
                local LOG="${BUILDDIR}/../${NAME}_${VERSION}_${arch}.dpkg-deb.log"
                # ensure the right permissions as dpkg-deb ensists
                chmod 755 ${BUILDDIR}/debian/tmp/DEBIAN
-               if ! dpkg-deb --build ${BUILDDIR}/debian/tmp ${BUILDDIR}/.. >$LOG 2>&1; then
+               if ! dpkg-deb -Z${COMPRESS_TYPE} --build ${BUILDDIR}/debian/tmp ${BUILDDIR}/.. >$LOG 2>&1; then
                        cat $LOG
                        false
                fi
@@ -880,7 +892,8 @@ changetowebserver() {
        fi
        if test -x ${APTWEBSERVERBINDIR}/aptwebserver; then
                cd aptarchive
-               if ! aptwebserver -o aptwebserver::fork=1 "$@" >webserver.log 2>&1 ; then
+               local LOG="webserver.log"
+               if ! aptwebserver -o aptwebserver::fork=1 "$@" >$LOG 2>&1 ; then
                        cat $LOG
                        false
                fi
@@ -900,7 +913,7 @@ changetohttpswebserver() {
                msgdie 'You need to install stunnel4 for https testcases'
        fi
        if [ ! -e "${TMPWORKINGDIRECTORY}/aptarchive/aptwebserver.pid" ]; then
-               changetowebserver --no-rewrite
+               changetowebserver --no-rewrite "$@"
        fi
        echo "pid = ${TMPWORKINGDIRECTORY}/aptarchive/stunnel.pid
 cert = ${TESTDIRECTORY}/apt.pem
@@ -919,50 +932,30 @@ connect = 8080
 changetocdrom() {
        mkdir -p rootdir/media/cdrom/.disk
        local CD="$(readlink -f rootdir/media/cdrom)"
-       echo "acquire::cdrom::mount \"${CD}\";" > rootdir/etc/apt/apt.conf.d/00cdrom
-       echo 'acquire::cdrom::autodetect 0;' >> rootdir/etc/apt/apt.conf.d/00cdrom
+       echo "acquire::cdrom::mount \"${CD}\";
+acquire::cdrom::${CD}/::mount \"mv ${CD}-unmounted ${CD}\";
+acquire::cdrom::${CD}/::umount \"mv ${CD} ${CD}-unmounted\";
+acquire::cdrom::autodetect 0;" > rootdir/etc/apt/apt.conf.d/00cdrom
        echo -n "$1" > ${CD}/.disk/info
        if [ ! -d aptarchive/dists ]; then
                msgdie 'Flat file archive cdroms can not be created currently'
                return 1
        fi
-       mv aptarchive/dists $CD
+       mv aptarchive/dists "$CD"
        ln -s "$(readlink -f ./incoming)" $CD/pool
        find rootdir/etc/apt/sources.list.d/ -name 'apt-test-*.list' -delete
+       # start with an unmounted disk
+       mv "${CD}" "${CD}-unmounted"
+       # we don't want the disk to be modifiable
+       addtrap 'prefix' "chmod -f -R +w $PWD/rootdir/media/cdrom/dists/ $PWD/rootdir/media/cdrom-unmounted/dists/ || true;"
+       chmod -R -w rootdir/media/cdrom-unmounted/dists
 }
 
 downloadfile() {
-       PROTO="$(echo "$1" | cut -d':' -f 1)"
-       local DOWNLOG="${TMPWORKINGDIRECTORY}/download.log"
-       rm -f "$DOWNLOG"
-       touch "$DOWNLOG"
-       {
-               echo "601 Configuration
-Config-Item: Acquire::https::CaInfo=${TESTDIR}/apt.pem
-Config-Item: Debug::Acquire::${PROTO}=1
-
-600 Acquire URI
-URI: $1
-Filename: ${2}
-"
-               # simple worker keeping stdin open until we are done (201) or error (400)
-               # and requesting new URIs on try-agains/redirects inbetween
-               { tail -n 999 -f "$DOWNLOG" & echo "TAILPID: $!"; } | while read f1 f2; do
-                       if [ "$f1" = 'TAILPID:' ]; then
-                               TAILPID="$f2"
-                       elif [ "$f1" = 'New-URI:' ]; then
-                               echo "600 Acquire URI
-URI: $f2
-Filename: ${2}
-"
-                       elif [ "$f1" = '201' ] || [ "$f1" = '400' ]; then
-                               # tail would only die on next read – which never happens
-                               test -z "$TAILPID" || kill -s HUP "$TAILPID"
-                               break
-                       fi
-               done
-       } | LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/methods/${PROTO} 2>&1 | tee "$DOWNLOG"
-       rm "$DOWNLOG"
+        PROTO="$(echo "$1" | cut -d':' -f 1)"
+        apthelper -o Acquire::https::CaInfo=${TESTDIR}/apt.pem \
+                  -o Debug::Acquire::${PROTO}=1 \
+                  download-file "$1" "$2" 2>&1
        # only if the file exists the download was successful
        if [ -e "$2" ]; then
                return 0
@@ -1006,7 +999,6 @@ testequal() {
        fi
 
        local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequal.comparefile"
-       addtrap "rm $COMPAREFILE;"
        echo "$1" > $COMPAREFILE
        shift
 
@@ -1025,11 +1017,15 @@ testequalor2() {
        shift 2
        msgtest "Test for equality OR of" "$*"
        $* >$COMPAREAGAINST 2>&1 || true
-       (checkdiff $COMPAREFILE1 $COMPAREAGAINST 1> /dev/null ||
-               checkdiff $COMPAREFILE2 $COMPAREAGAINST 1> /dev/null) && msgpass ||
-               ( echo "\n${CINFO}Diff against OR 1${CNORMAL}" "$(checkdiff $COMPAREFILE1 $COMPAREAGAINST)" \
-                      "\n${CINFO}Diff against OR 2${CNORMAL}" "$(checkdiff $COMPAREFILE2 $COMPAREAGAINST)" &&
-                 msgfail )
+       if checkdiff $COMPAREFILE1 $COMPAREAGAINST 1> /dev/null || checkdiff $COMPAREFILE2 $COMPAREAGAINST 1> /dev/null; then
+               msgpass
+       else
+               echo -n "\n${CINFO}Diff against OR 1${CNORMAL}"
+               checkdiff $COMPAREFILE1 $COMPAREAGAINST || true
+               echo -n "${CINFO}Diff against OR 2${CNORMAL}"
+               checkdiff $COMPAREFILE2 $COMPAREAGAINST || true
+               msgfail
+       fi
 }
 
 testshowvirtual() {
@@ -1119,7 +1115,7 @@ testfailure() {
        if [ "$1" = '--nomsg' ]; then
                shift
        else
-               msgtest 'Test for failure in  execution of' "$*"
+               msgtest 'Test for failure in execution of' "$*"
        fi
        local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testfailure.output"
        if $@ >${OUTPUT} 2>&1; then