]> git.saurik.com Git - apt.git/blobdiff - test/integration/framework
Fix bug where the problemresolve can put a pkg into a heisenstate
[apt.git] / test / integration / framework
index 004d24417fa8e276d704b8d84b77cf61ee612277..a1db232e9c7266f7f4e62201099f73cfb91be2af 100644 (file)
@@ -95,7 +95,7 @@ msgfail() {
        if [ $# -gt 0 ] && [ -n "$1" ]; then printf "${CFAIL}FAIL: $*${CNORMAL}\n" >&2;
        else printf "${CFAIL}FAIL${CNORMAL}\n" >&2; fi
        if [ -n "$APT_DEBUG_TESTS" ]; then
-               $SHELL
+               runapt $SHELL
        fi
        EXIT_CODE=$((EXIT_CODE+1));
 }
@@ -173,8 +173,9 @@ runapt() {
        sh|aptitude|*/*|command) ;;
        *) CMD="${BUILDDIRECTORY}/$CMD";;
        esac
-       MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG="$(getaptconfig)" LD_LIBRARY_PATH=${LIBRARYPATH} "$CMD" "$@"
+       MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG="$(getaptconfig)" LD_LIBRARY_PATH="${LIBRARYPATH}:${LD_LIBRARY_PATH}" "$CMD" "$@"
 }
+runpython3() { runapt command python3 "$@"; }
 aptconfig() { runapt apt-config "$@"; }
 aptcache() { runapt apt-cache "$@"; }
 aptcdrom() { runapt apt-cdrom "$@"; }
@@ -389,8 +390,9 @@ EOF
        echo "Acquire::https::CaInfo \"${TMPWORKINGDIRECTORY}/rootdir/etc/webserver.pem\";" > rootdir/etc/apt/apt.conf.d/99https
        echo "Apt::Cmd::Disable-Script-Warning \"1\";" > rootdir/etc/apt/apt.conf.d/apt-binary
        echo 'Acquire::Connect::AddrConfig "false";' > rootdir/etc/apt/apt.conf.d/connect-addrconfig
+
        configcompression '.' 'gz' #'bz2' 'lzma' 'xz'
-       confighashes 'SHA1' # these are tests, not security best-practices
+       confighashes 'SHA256' # these are tests, not security best-practices
 
        # create some files in /tmp and look at user/group to get what this means
        TEST_DEFAULT_USER="$(id -un)"
@@ -407,6 +409,12 @@ EOF
        unset LANGUAGE APT_CONFIG
        unset GREP_OPTIONS DEB_BUILD_PROFILES
        unset http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy
+
+       # If gpgv supports --weak-digest, pass it to make sure we can disable SHA1
+       if aptkey verify --weak-digest SHA1 --help 2>/dev/null >/dev/null; then
+               echo 'Acquire::gpgv::Options { "--weak-digest"; "sha1"; };' > rootdir/etc/apt/apt.conf.d/no-sha1
+       fi
+
        msgdone "info"
 }
 
@@ -517,17 +525,16 @@ int execvp(const char *file, char *const argv[]) {
        return func_execvp(newfile, argv);
 }
 EOF
-       testsuccess --nomsg gcc -Wall -fPIC -shared -o noopchroot.so noopchroot.c -ldl
+       testempty --nomsg gcc -Wall -Wextra -fPIC -shared -o noopchroot.so noopchroot.c -ldl
 }
 configcompression() {
+       local CMD='apthelper cat-file -C'
        while [ -n "$1" ]; do
                case "$1" in
                '.') printf ".\t.\tcat\n";;
-               'gz') printf "gzip\tgz\tgzip\n";;
-               'bz2') printf "bzip2\tbz2\tbzip2\n";;
-               'lzma') printf "lzma\tlzma\txz --format=lzma\n";;
-               'xz') printf "xz\txz\txz\n";;
-               *) printf "$1\t$1\t$1\n";;
+               'gz') printf "gzip\tgz\t$CMD $1\n";;
+               'bz2') printf "bzip2\tbz2\t$CMD $1\n";;
+               *) printf "$1\t$1\t$CMD $1\n";;
                esac
                shift
        done > "${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf"
@@ -550,32 +557,15 @@ confighashes() {
 }
 forcecompressor() {
        COMPRESSOR="$1"
-       COMPRESSOR_CMD="$1"
+       COMPRESS="$1"
+       COMPRESSOR_CMD="apthelper cat-file -C $1"
        case $COMPRESSOR in
        gzip) COMPRESS='gz';;
        bzip2) COMPRESS='bz2';;
-       lzma) COMPRESS='lzma';;
-       xz) COMPRESS='xz';;
-       *) msgdie "Compressor $COMPRESSOR is unknown to framework, so can't be forced by forcecompressor!";;
        esac
        local CONFFILE="${TMPWORKINGDIRECTORY}/rootdir/etc/apt/apt.conf.d/00force-compressor"
        echo "Acquire::CompressionTypes::Order { \"${COMPRESS}\"; };
-Dir::Bin::uncompressed \"/does/not/exist\";
-Dir::Bin::gzip \"/does/not/exist\";
-Dir::Bin::bzip2 \"/does/not/exist\";
-Dir::Bin::lzma \"/does/not/exist\";
-Dir::Bin::xz \"/does/not/exist\";" > "$CONFFILE"
-       if [ -e "/bin/${COMPRESSOR}" ]; then
-               echo "Dir::Bin::${COMPRESSOR} \"/bin/${COMPRESSOR}\";" >> "$CONFFILE"
-       elif [ -e "/usr/bin/${COMPRESSOR}" ]; then
-               echo "Dir::Bin::${COMPRESSOR} \"/usr/bin/${COMPRESSOR}\";" >> "$CONFFILE"
-       elif [ "${COMPRESSOR}" = 'lzma' ]; then
-               echo 'Dir::Bin::xz "/usr/bin/xz";' >> "$CONFFILE"
-               COMPRESSOR_CMD='xz --format=lzma'
-       else
-               msgtest 'Test for availability of compressor' "${COMPRESSOR}"
-               msgfail "${COMPRESSOR} not available"
-       fi
+Dir::Bin::uncompressed \"/does/not/exist\";" > "$CONFFILE"
 }
 
 setupsimplenativepackage() {
@@ -867,31 +857,33 @@ Description-en: $DESCRIPTION
 }
 
 insertsource() {
-       local RELEASE="$1"
+       local RELEASES="$1"
        local NAME="$2"
        local ARCH="$3"
        local VERSION="$4"
        local DEPENDENCIES="$5"
-        local BINARY="${6:-$NAME}"
+       local BINARY="${6:-$NAME}"
        local ARCHS=""
-       local SPATH="aptarchive/dists/${RELEASE}/main/source"
-       mkdir -p $SPATH
-       local FILE="${SPATH}/Sources"
-       local DSCFILE="${NAME}_${VERSION}.dsc"
-       local TARFILE="${NAME}_${VERSION}.tar.gz"
-       echo "Package: $NAME
+       for RELEASE in $(printf '%s' "$RELEASES" | tr ',' '\n'); do
+               local SPATH="aptarchive/dists/${RELEASE}/main/source"
+               mkdir -p $SPATH
+               local FILE="${SPATH}/Sources"
+               local DSCFILE="${NAME}_${VERSION}.dsc"
+               local TARFILE="${NAME}_${VERSION}.tar.gz"
+               echo "Package: $NAME
 Binary: $BINARY
 Version: $VERSION
 Maintainer: Joe Sixpack <joe@example.org>
 Architecture: $ARCH" >> $FILE
-       test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> "$FILE"
-       echo "Files:
+               test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> "$FILE"
+               echo "Files:
  $(echo -n "$DSCFILE" | md5sum | cut -d' ' -f 1) $(echo -n "$DSCFILE" | wc -c) "$DSCFILE"
  $(echo -n "$TARFILE" | md5sum | cut -d' ' -f 1) $(echo -n "$TARFILE" | wc -c) "$TARFILE"
 Checksums-Sha256:
  $(echo -n "$DSCFILE" | sha256sum | cut -d' ' -f 1) $(echo -n "$DSCFILE" | wc -c) "$DSCFILE"
  $(echo -n "$TARFILE" | sha256sum | cut -d' ' -f 1) $(echo -n "$TARFILE" | wc -c) "$TARFILE"
 " >> "$FILE"
+       done
 }
 
 insertinstalledpackage() {
@@ -1082,7 +1074,7 @@ signreleasefiles() {
        local SIGNER="${1:-Joe Sixpack}"
        local REPODIR="${2:-aptarchive}"
        local KEY="keys/$(echo "$SIGNER" | tr 'A-Z' 'a-z' | sed 's# ##g')"
-       local GPG="aptkey --quiet --keyring ${KEY}.pub --secret-keyring ${KEY}.sec --readonly adv --batch --yes"
+       local GPG="aptkey --quiet --keyring ${KEY}.pub --secret-keyring ${KEY}.sec --readonly adv --batch --yes --digest-algo SHA512"
        msgninfo "\tSign archive with $SIGNER key $KEY… "
        local REXKEY='keys/rexexpired'
        local SECEXPIREBAK="${REXKEY}.sec.bak"
@@ -1329,9 +1321,13 @@ testfileequal() {
 
 testempty() {
        msggroup 'testempty'
-       msgtest "Test for no output of" "$*"
+       if [ "$1" = '--nomsg' ]; then
+               shift
+       else
+               msgtest "Test for no output of" "$*"
+       fi
        local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testempty.comparefile"
-       if ("$@" >"$COMPAREFILE" 2>&1 || true) && test ! -s "$COMPAREFILE"; then
+       if "$@" >"$COMPAREFILE" 2>&1 && test ! -s "$COMPAREFILE"; then
                msgpass
        else
                msgfailoutput '' "$COMPAREFILE" "$@"
@@ -1538,6 +1534,14 @@ msgfailoutput() {
                        msgfailoutputstatfile "$2" "$3"
                done
                echo '#### test output ####'
+       elif [ "$1" = 'cmp' ]; then
+               echo >&2
+               while [ -n "$2" ]; do
+                       echo "#### Complete file: $2 ####"
+                       cat >&2 "$2" || true
+                       shift
+               done
+               echo '#### cmp output ####'
        fi
        cat >&2 "$OUTPUT"
        msgfail "$MSG"
@@ -1781,8 +1785,18 @@ createlistofkeys() {
        local OUTPUT="$1"
        shift
        while [ -n "$1" ]; do
+               # gpg 2.1.something starts printing [SC] at some point
+               if grep -q ' rsa2048/' "$OUTPUT" && grep -qF '[SC]' "$OUTPUT"; then
+                       case "$1" in
+                               *Joe*|*Sixpack*) echo 'pub   rsa2048/DBAC8DAE 2010-08-18 [SC]';;
+                               *Rex*|*Expired*) echo 'pub   rsa2048/27CE74F9 2013-07-12 [SC] [expired: 2013-07-13]';;
+                               *Marvin*|*Paranoid*) echo 'pub   rsa2048/528144E2 2011-01-16 [SC]';;
+                               oldarchive) echo 'pub   rsa1024/F68C85A3 2013-12-19 [SC]';;
+                               newarchive) echo 'pub   rsa2048/DBAC8DAE 2010-08-18 [SC]';;
+                               *) echo 'UNKNOWN KEY';;
+                       esac
                # gpg 2.1 has a slightly different output format
-               if grep -q ' rsa2048/' "$OUTPUT"; then
+               elif grep -q ' rsa2048/' "$OUTPUT"; then
                        case "$1" in
                                *Joe*|*Sixpack*) echo 'pub   rsa2048/DBAC8DAE 2010-08-18';;
                                *Rex*|*Expired*) echo 'pub   rsa2048/27CE74F9 2013-07-12 [expired: 2013-07-13]';;
@@ -1828,6 +1842,12 @@ listcurrentlistsdirectory() {
                done
        } | sort
 }
+forallsupportedcompressors() {
+       for COMP in $(aptconfig dump 'APT::Compressor' --format '%f%n' | cut -d':' -f 5 | uniq); do
+               if [ -z "$COMP" -o "$COMP" = '.' ]; then continue; fi
+               "$@" "$COMP"
+       done
+}
 
 ### convenience hacks ###
 mkdir() {
@@ -1854,7 +1874,7 @@ aptautotest() {
        local TESTCALL="$1"
        local CMD="$2"
        local FIRSTOPT="$3"
-       local AUTOTEST="aptautotest_$(echo "${CMD##*/}_${FIRSTOPT}" | tr -d '-')"
+       local AUTOTEST="aptautotest_$(echo "${CMD##*/}_${FIRSTOPT}" | tr -d -c 'A-za-z0-9')"
        if command -v $AUTOTEST >/dev/null; then
                shift 3
                # save and restore the *.output files from other tests