* apt-pkg/policy.cc:
[ntk/apt.git] / test / test-indexes.sh
dissimilarity index 74%
index e826330..50d54f6 100755 (executable)
-#!/bin/sh -e
-
-# Test behaviour of index retrieval and usage, in particular with uncompressed
-# and gzip compressed indexes.
-# Author: Martin Pitt <martin.pitt@ubuntu.com>
-# (C) 2010 Canonical Ltd.
-
-BUILDDIR=$(readlink -f $(dirname $0)/../build)
-
-TEST_SOURCE="http://ftp.debian.org/debian unstable contrib"
-TEST_SOURCE_KEYID=55BE302B
-GPG_KEYSERVER=gpg-keyserver.de
-# should be a small package with dependencies satisfiable in TEST_SOURCE, i. e.
-# ideally no depends at all
-TEST_PKG="python-psyco-doc"
-
-export LD_LIBRARY_PATH=$BUILDDIR/bin
-
-OPTS="-o RootDir=. -o Dir::Bin::Methods=$BUILDDIR/bin/methods -o Debug::NoLocking=true"
-DEBUG=""
-#DEBUG="-o Debug::pkgCacheGen=true"
-#DEBUG="-o Debug::pkgAcquire=true"
-APT_GET="$BUILDDIR/bin/apt-get $OPTS $DEBUG"
-APT_CACHE="$BUILDDIR/bin/apt-cache $OPTS $DEBUG"
-
-[ -x "$BUILDDIR/bin/apt-get" ] || {
-    echo "please build the tree first" >&2
-    exit 1
-}
-
-echo "---- building sandbox----"
-WORKDIR=$(mktemp -d)
-trap "cd /; rm -rf $WORKDIR" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM
-cd $WORKDIR
-
-rm -fr etc var
-rm -f home
-ln -s /home home
-mkdir -p etc/apt/preferences.d etc/apt/trusted.gpg.d var/cache/apt/archives/partial var/lib/apt/lists/partial var/lib/dpkg
-cp /etc/apt/trusted.gpg etc/apt
-touch var/lib/dpkg/status
-echo "deb $TEST_SOURCE" > etc/apt/sources.list
-echo "deb-src $TEST_SOURCE" >> etc/apt/sources.list
-
-# get keyring
-gpg --no-options --no-default-keyring --secret-keyring etc/apt/secring.gpg --trustdb-name etc/apt/trustdb.gpg --keyring etc/apt/trusted.gpg --primary-keyring etc/apt/trusted.gpg --keyserver $GPG_KEYSERVER --recv-keys $TEST_SOURCE_KEYID
-
-echo "---- uncompressed update ----"
-$APT_GET update
-test -e var/lib/apt/lists/*_Packages
-test -e var/lib/apt/lists/*_Sources
-! test -e var/lib/apt/lists/*_Packages.gz
-! test -e var/lib/apt/lists/*_Sources.gz
-
-echo "---- uncompressed cache ----"
-$APT_CACHE show $TEST_PKG | grep -q ^Version:
-# again (with cache)
-$APT_CACHE show $TEST_PKG | grep -q ^Version:
-rm var/cache/apt/*.bin
-$APT_CACHE policy $TEST_PKG | grep -q '500 http://'
-# again (with cache)
-$APT_CACHE policy $TEST_PKG | grep -q '500 http://'
-
-TEST_SRC=`$APT_CACHE show $TEST_PKG | grep ^Source: | awk '{print $2}'`
-rm var/cache/apt/*.bin
-$APT_CACHE showsrc $TEST_SRC | grep -q ^Binary:
-# again (with cache)
-$APT_CACHE showsrc $TEST_SRC | grep -q ^Binary:
-
-echo "---- uncompressed install ----"
-$APT_GET install -d $TEST_PKG 
-test -e var/cache/apt/archives/$TEST_PKG*.deb
-$APT_GET clean
-! test -e var/cache/apt/archives/$TEST_PKG*.deb
-
-echo "---- uncompressed get source ----"
-$APT_GET source $TEST_PKG
-test -f $TEST_SRC_*.dsc
-test -d $TEST_SRC-*
-rm -r $TEST_SRC*
-
-echo "----- uncompressed update with preexisting indexes, no pdiff ----"
-$APT_GET -o Acquire::PDiffs=false update
-test -e var/lib/apt/lists/*_Packages
-test -e var/lib/apt/lists/*_Sources
-! test -e var/lib/apt/lists/*_Packages.gz
-! test -e var/lib/apt/lists/*_Sources.gz
-
-echo "----- uncompressed update with preexisting indexes, with pdiff ----"
-$APT_GET -o Acquire::PDiffs=true update
-test -e var/lib/apt/lists/*_Packages
-test -e var/lib/apt/lists/*_Sources
-! test -e var/lib/apt/lists/*_Packages.gz
-! test -e var/lib/apt/lists/*_Sources.gz
-
-echo "----- compressed update ----"
-find var/lib/apt/lists/ -type f | xargs -r rm
-$APT_GET -o Acquire::GzipIndexes=true update
-! test -e var/lib/apt/lists/*_Packages
-! test -e var/lib/apt/lists/*_Sources
-test -e var/lib/apt/lists/*_Packages.gz
-test -e var/lib/apt/lists/*_Sources.gz
-
-echo "---- compressed cache ----"
-$APT_CACHE show $TEST_PKG | grep -q ^Version:
-# again (with cache)
-$APT_CACHE show $TEST_PKG | grep -q ^Version:
-rm var/cache/apt/*.bin
-$APT_CACHE policy $TEST_PKG | grep -q '500 http://'
-# again (with cache)
-$APT_CACHE policy $TEST_PKG | grep -q '500 http://'
-
-TEST_SRC=`$APT_CACHE show $TEST_PKG | grep ^Source: | awk '{print $2}'`
-rm var/cache/apt/*.bin
-$APT_CACHE showsrc $TEST_SRC | grep -q ^Binary:
-# again (with cache)
-$APT_CACHE showsrc $TEST_SRC | grep -q ^Binary:
-
-echo "---- compressed install ----"
-$APT_GET install -d $TEST_PKG 
-! test -e var/cache/apt/archives/$TEST_PKG*.deb
-
-echo "---- compressed get source ----"
-$APT_GET source $TEST_PKG
-test -f $TEST_SRC_*.dsc
-test -d $TEST_SRC-*
-rm -r $TEST_SRC*
-
-echo "----- compressed update with preexisting indexes, no pdiff ----"
-$APT_GET -o Acquire::PDiffs=false -o Acquire::GzipIndexes=true update
-! test -e var/lib/apt/lists/*_Packages
-! test -e var/lib/apt/lists/*_Sources
-test -e var/lib/apt/lists/*_Packages.gz
-test -e var/lib/apt/lists/*_Sources.gz
-
-echo "----- compressed update with preexisting indexes, with pdiff ----"
-$APT_GET -o Acquire::PDiffs=true -o Acquire::GzipIndexes=true update
-! test -e var/lib/apt/lists/*_Packages
-! test -e var/lib/apt/lists/*_Sources
-test -e var/lib/apt/lists/*_Packages.gz
-test -e var/lib/apt/lists/*_Sources.gz
-
-echo "---- ALL TESTS PASSED ----"
+#!/bin/sh -e
+
+# Test behaviour of index retrieval and usage, in particular with uncompressed
+# and gzip compressed indexes.
+# Author: Martin Pitt <martin.pitt@ubuntu.com>
+# (C) 2010 Canonical Ltd.
+
+BUILDDIR=$(readlink -f $(dirname $0)/../build)
+
+TEST_SOURCE="http://ftp.debian.org/debian unstable contrib"
+GPG_KEYSERVER=gpg-keyserver.de
+# should be a small package with dependencies satisfiable in TEST_SOURCE, i. e.
+# ideally no depends at all
+TEST_PKG="python-psyco-doc"
+
+export LD_LIBRARY_PATH=$BUILDDIR/bin
+
+OPTS="-qq -o Dir::Bin::Methods=$BUILDDIR/bin/methods -o Debug::NoLocking=true"
+DEBUG=""
+#DEBUG="-o Debug::pkgCacheGen=true"
+#DEBUG="-o Debug::pkgAcquire=true"
+APT_GET="$BUILDDIR/bin/apt-get $OPTS $DEBUG"
+APT_CACHE="$BUILDDIR/bin/apt-cache $OPTS $DEBUG"
+APT_FTPARCHIVE="$BUILDDIR/bin/apt-ftparchive"
+
+[ -x "$BUILDDIR/bin/apt-get" ] || {
+    echo "please build the tree first" >&2
+    exit 1
+}
+
+check_update() {
+    echo "--- apt-get update $@ (no trusted keys)"
+
+    rm -f etc/apt/trusted.gpg etc/apt/secring.gpg
+    touch etc/apt/trusted.gpg etc/apt/secring.gpg
+    find var/lib/apt/lists/ -type f | xargs -r rm
+
+    # first attempt should fail, no trusted GPG key
+    out=$($APT_GET "$@" update 2>&1)
+    echo "$out" | grep -q NO_PUBKEY
+    key=$(echo "$out" | sed -n '/NO_PUBKEY/ { s/^.*NO_PUBKEY \([[:alnum:]]\+\)$/\1/; p}')
+
+    # get keyring
+    gpg -q --no-options --no-default-keyring --secret-keyring etc/apt/secring.gpg --trustdb-name etc/apt/trustdb.gpg --keyring etc/apt/trusted.gpg --primary-keyring etc/apt/trusted.gpg --keyserver $GPG_KEYSERVER --recv-keys $key
+
+    # now it should work
+    echo "--- apt-get update $@ (with trusted keys)"
+    find var/lib/apt/lists/ -type f | xargs -r rm
+    $APT_GET "$@" update
+}
+
+# if $1 == "compressed", check that we have compressed indexes, otherwise
+# uncompressed ones
+check_indexes() {
+    echo "--- only ${1:-uncompressed} index files present"
+    local F
+    if [ "$1" = "compressed" ]; then
+       ! test -e var/lib/apt/lists/*_Packages || F=1
+       ! test -e var/lib/apt/lists/*_Sources || F=1
+       test -e var/lib/apt/lists/*_Packages.gz || F=1
+       test -e var/lib/apt/lists/*_Sources.gz || F=1
+    else
+       test -e var/lib/apt/lists/*_Packages || F=1
+       test -e var/lib/apt/lists/*_Sources || F=1
+       ! test -e var/lib/apt/lists/*_Packages.gz || F=1
+       ! test -e var/lib/apt/lists/*_Sources.gz || F=1
+    fi
+
+    if [ -n "$F" ]; then
+       ls -laR var/lib/apt/lists/
+       exit 1
+    fi
+}
+
+# test apt-cache commands
+check_cache() {
+    echo "--- apt-cache commands"
+
+    $APT_CACHE show $TEST_PKG | grep -q ^Version:
+    # again (with cache)
+    $APT_CACHE show $TEST_PKG | grep -q ^Version:
+    rm var/cache/apt/*.bin
+    $APT_CACHE policy $TEST_PKG | egrep -q '500 (http://|file:/)'
+    # again (with cache)
+    $APT_CACHE policy $TEST_PKG | egrep -q '500 (http://|file:/)'
+
+    TEST_SRC=`$APT_CACHE show $TEST_PKG | grep ^Source: | awk '{print $2}'`
+    rm var/cache/apt/*.bin
+    $APT_CACHE showsrc $TEST_SRC | grep -q ^Binary:
+    # again (with cache)
+    $APT_CACHE showsrc $TEST_SRC | grep -q ^Binary:
+}
+
+# test apt-get install
+check_install() {
+    echo "--- apt-get install"
+
+    $APT_GET install -d $TEST_PKG 
+    test -e var/cache/apt/archives/$TEST_PKG*.deb
+    $APT_GET clean
+    ! test -e var/cache/apt/archives/$TEST_PKG*.deb
+}
+
+# test apt-get source
+check_get_source() {
+    echo "--- apt-get source"
+    # quiesce: it'll complain about not being able to verify the signature
+    $APT_GET source $TEST_PKG >/dev/null 2>&1
+    test -f $TEST_SRC_*.dsc
+    test -d $TEST_SRC-*
+    rm -r $TEST_SRC*
+}
+
+############################################################################
+# main
+############################################################################
+
+echo "===== building sandbox ====="
+WORKDIR=$(mktemp -d)
+trap "cd /; rm -rf $WORKDIR" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM
+cd $WORKDIR
+
+rm -fr etc var
+rm -f home
+ln -s /home home
+mkdir -p etc/apt/preferences.d etc/apt/trusted.gpg.d etc/apt/apt.conf.d var/cache/apt/archives/partial var/lib/apt/lists/partial var/lib/dpkg
+cp /etc/apt/trusted.gpg etc/apt
+touch var/lib/dpkg/status
+echo "deb $TEST_SOURCE" > etc/apt/sources.list
+echo "deb-src $TEST_SOURCE" >> etc/apt/sources.list
+
+# specifying -o RootDir at the command line does not work for
+# etc/apt/apt.conf.d/ since it is parsed after pkgInitConfig(); $APT_CONFIG is
+# checked first, so this works
+echo "RootDir \"$WORKDIR\";" > apt_config
+export APT_CONFIG=`pwd`/apt_config
+
+echo "==== no indexes ===="
+echo '--- apt-get check works without indexes'
+[ -z `$APT_GET check` ]
+echo '--- apt-cache policy works without indexes'
+$APT_CACHE policy bash >/dev/null
+echo '--- apt-cache show works without indexes'
+! LC_MESSAGES=C $APT_CACHE show bash 2>&1| grep -q 'E: No packages found'
+
+echo "===== uncompressed indexes ====="
+echo 'Acquire::GzipIndexes "false";' > etc/apt/apt.conf.d/02compress-indexes
+check_update
+check_indexes
+check_cache
+check_install
+check_get_source
+
+echo "--- apt-get update with preexisting indexes"
+$APT_GET update
+check_indexes
+check_cache
+
+echo "--- apt-get update with preexisting indexes and pdiff mode"
+$APT_GET -o Acquire::PDiffs=true update
+check_indexes
+check_cache
+
+echo "===== compressed indexes (CLI option) ====="
+check_update -o Acquire::GzipIndexes=true
+check_indexes compressed
+check_cache
+check_install
+check_get_source
+
+echo "--- apt-get update with preexisting indexes"
+$APT_GET -o Acquire::GzipIndexes=true update
+check_indexes compressed
+check_cache
+
+echo "--- apt-get update with preexisting indexes and pdiff mode"
+$APT_GET -o Acquire::GzipIndexes=true -o Acquire::PDiffs=true update
+check_indexes compressed
+check_cache
+
+echo "===== compressed indexes (apt.conf.d option) ====="
+cat <<EOF > etc/apt/apt.conf.d/02compress-indexes
+Acquire::GzipIndexes "true";
+Acquire::CompressionTypes::Order:: "gz";
+EOF
+
+check_update
+check_indexes compressed
+check_cache
+check_install
+check_get_source
+
+echo "--- apt-get update with preexisting indexes"
+$APT_GET update
+check_indexes compressed
+check_cache
+
+echo "--- apt-get update with preexisting indexes and pdiff mode"
+$APT_GET -o Acquire::PDiffs=true update
+check_indexes compressed
+check_cache
+
+rm etc/apt/apt.conf.d/02compress-indexes
+
+echo "==== apt-ftparchive ===="
+mkdir arch
+$APT_GET install -d $TEST_PKG 
+cp var/cache/apt/archives/$TEST_PKG*.deb arch/
+cd arch
+$APT_GET source -d $TEST_PKG >/dev/null 2>&1
+$APT_FTPARCHIVE packages . | gzip -9 > Packages.gz
+$APT_FTPARCHIVE sources . | gzip -9 > Sources.gz
+cd ..
+
+echo "deb file://$WORKDIR/arch /
+deb-src file://$WORKDIR/arch /" > etc/apt/sources.list
+$APT_GET clean
+
+echo "==== uncompressed indexes from local file:// archive ===="
+echo "--- apt-get update"
+$APT_GET update
+check_indexes
+check_cache
+check_get_source
+
+echo "==== compressed indexes from local file:// archive ===="
+echo "--- apt-get update"
+$APT_GET -o Acquire::GzipIndexes=true update
+# EXFAIL: file:/ URIs currently decompress even with above option
+#check_indexes compressed
+check_indexes
+check_cache
+check_get_source
+
+echo "===== ALL TESTS PASSED ====="