]> git.saurik.com Git - apt.git/blob - test/test-indexes.sh
merged from apt-get-download
[apt.git] / test / test-indexes.sh
1 #!/bin/sh -e
2
3 # Test behaviour of index retrieval and usage, in particular with uncompressed
4 # and gzip compressed indexes.
5 # Author: Martin Pitt <martin.pitt@ubuntu.com>
6 # (C) 2010 Canonical Ltd.
7
8 BUILDDIR=$(readlink -f $(dirname $0)/../build)
9
10 TEST_SOURCE="http://ftp.debian.org/debian unstable contrib"
11 GPG_KEYSERVER=gpg-keyserver.de
12 # should be a small package with dependencies satisfiable in TEST_SOURCE, i. e.
13 # ideally no depends at all
14 TEST_PKG="python-psyco-doc"
15
16 export LD_LIBRARY_PATH=$BUILDDIR/bin
17
18 OPTS="-qq -o Dir::Bin::Methods=$BUILDDIR/bin/methods -o Debug::NoLocking=true"
19 DEBUG=""
20 #DEBUG="-o Debug::pkgCacheGen=true"
21 #DEBUG="-o Debug::pkgAcquire=true"
22 APT_GET="$BUILDDIR/bin/apt-get $OPTS $DEBUG"
23 APT_CACHE="$BUILDDIR/bin/apt-cache $OPTS $DEBUG"
24 APT_FTPARCHIVE="$BUILDDIR/bin/apt-ftparchive"
25
26 [ -x "$BUILDDIR/bin/apt-get" ] || {
27 echo "please build the tree first" >&2
28 exit 1
29 }
30
31 check_update() {
32 echo "--- apt-get update $@ (no trusted keys)"
33
34 rm -f etc/apt/trusted.gpg etc/apt/secring.gpg
35 touch etc/apt/trusted.gpg etc/apt/secring.gpg
36 find var/lib/apt/lists/ -type f | xargs -r rm
37
38 # first attempt should fail, no trusted GPG key
39 out=$($APT_GET "$@" update 2>&1)
40 echo "$out" | grep -q NO_PUBKEY
41 key=$(echo "$out" | sed -n '/NO_PUBKEY/ { s/^.*NO_PUBKEY \([[:alnum:]]\+\)$/\1/; p}')
42
43 # get keyring
44 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
45
46 # now it should work
47 echo "--- apt-get update $@ (with trusted keys)"
48 find var/lib/apt/lists/ -type f | xargs -r rm
49 $APT_GET "$@" update
50 }
51
52 # if $1 == "compressed", check that we have compressed indexes, otherwise
53 # uncompressed ones
54 check_indexes() {
55 echo "--- only ${1:-uncompressed} index files present"
56 local F
57 if [ "$1" = "compressed" ]; then
58 ! test -e var/lib/apt/lists/*_Packages || F=1
59 ! test -e var/lib/apt/lists/*_Sources || F=1
60 test -e var/lib/apt/lists/*_Packages.gz || F=1
61 test -e var/lib/apt/lists/*_Sources.gz || F=1
62 else
63 test -e var/lib/apt/lists/*_Packages || F=1
64 test -e var/lib/apt/lists/*_Sources || F=1
65 ! test -e var/lib/apt/lists/*_Packages.gz || F=1
66 ! test -e var/lib/apt/lists/*_Sources.gz || F=1
67 fi
68
69 if [ -n "$F" ]; then
70 ls -laR var/lib/apt/lists/
71 exit 1
72 fi
73 }
74
75 # test apt-cache commands
76 check_cache() {
77 echo "--- apt-cache commands"
78
79 $APT_CACHE show $TEST_PKG | grep -q ^Version:
80 # again (with cache)
81 $APT_CACHE show $TEST_PKG | grep -q ^Version:
82 rm var/cache/apt/*.bin
83 $APT_CACHE policy $TEST_PKG | egrep -q '500 (http://|file:/)'
84 # again (with cache)
85 $APT_CACHE policy $TEST_PKG | egrep -q '500 (http://|file:/)'
86
87 TEST_SRC=`$APT_CACHE show $TEST_PKG | grep ^Source: | awk '{print $2}'`
88 rm var/cache/apt/*.bin
89 $APT_CACHE showsrc $TEST_SRC | grep -q ^Binary:
90 # again (with cache)
91 $APT_CACHE showsrc $TEST_SRC | grep -q ^Binary:
92 }
93
94 # test apt-get install
95 check_install() {
96 echo "--- apt-get install"
97
98 $APT_GET install -d $TEST_PKG
99 test -e var/cache/apt/archives/$TEST_PKG*.deb
100 $APT_GET clean
101 ! test -e var/cache/apt/archives/$TEST_PKG*.deb
102 }
103
104 # test apt-get source
105 check_get_source() {
106 echo "--- apt-get source"
107 # quiesce: it'll complain about not being able to verify the signature
108 $APT_GET source $TEST_PKG >/dev/null 2>&1
109 test -f $TEST_SRC_*.dsc
110 test -d $TEST_SRC-*
111 rm -r $TEST_SRC*
112 }
113
114 ############################################################################
115 # main
116 ############################################################################
117
118 echo "===== building sandbox ====="
119 WORKDIR=$(mktemp -d)
120 trap "cd /; rm -rf $WORKDIR" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM
121 cd $WORKDIR
122
123 rm -fr etc var
124 rm -f home
125 ln -s /home home
126 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
127 cp /etc/apt/trusted.gpg etc/apt
128 touch var/lib/dpkg/status
129 echo "deb $TEST_SOURCE" > etc/apt/sources.list
130 echo "deb-src $TEST_SOURCE" >> etc/apt/sources.list
131
132 # specifying -o RootDir at the command line does not work for
133 # etc/apt/apt.conf.d/ since it is parsed after pkgInitConfig(); $APT_CONFIG is
134 # checked first, so this works
135 echo "RootDir \"$WORKDIR\";" > apt_config
136 export APT_CONFIG=`pwd`/apt_config
137
138 echo "==== no indexes ===="
139 echo '--- apt-get check works without indexes'
140 [ -z `$APT_GET check` ]
141 echo '--- apt-cache policy works without indexes'
142 $APT_CACHE policy bash >/dev/null
143 echo '--- apt-cache show works without indexes'
144 ! LC_MESSAGES=C $APT_CACHE show bash 2>&1| grep -q 'E: No packages found'
145
146 echo "===== uncompressed indexes ====="
147 check_update
148 check_indexes
149 check_cache
150 check_install
151 check_get_source
152
153 echo "--- apt-get update with preexisting indexes"
154 $APT_GET update
155 check_indexes
156 check_cache
157
158 echo "--- apt-get update with preexisting indexes and pdiff mode"
159 $APT_GET -o Acquire::PDiffs=true update
160 check_indexes
161 check_cache
162
163 echo "===== compressed indexes (CLI option) ====="
164 check_update -o Acquire::GzipIndexes=true
165 check_indexes compressed
166 check_cache
167 check_install
168 check_get_source
169
170 echo "--- apt-get update with preexisting indexes"
171 $APT_GET -o Acquire::GzipIndexes=true update
172 check_indexes compressed
173 check_cache
174
175 echo "--- apt-get update with preexisting indexes and pdiff mode"
176 $APT_GET -o Acquire::GzipIndexes=true -o Acquire::PDiffs=true update
177 check_indexes compressed
178 check_cache
179
180 echo "===== compressed indexes (apt.conf.d option) ====="
181 cat <<EOF > etc/apt/apt.conf.d/02compress-indexes
182 Acquire::GzipIndexes "true";
183 Acquire::CompressionTypes::Order:: "gz";
184 EOF
185
186 check_update
187 check_indexes compressed
188 check_cache
189 check_install
190 check_get_source
191
192 echo "--- apt-get update with preexisting indexes"
193 $APT_GET update
194 check_indexes compressed
195 check_cache
196
197 echo "--- apt-get update with preexisting indexes and pdiff mode"
198 $APT_GET -o Acquire::PDiffs=true update
199 check_indexes compressed
200 check_cache
201
202 rm etc/apt/apt.conf.d/02compress-indexes
203
204 echo "==== apt-ftparchive ===="
205 mkdir arch
206 $APT_GET install -d $TEST_PKG
207 cp var/cache/apt/archives/$TEST_PKG*.deb arch/
208 cd arch
209 $APT_GET source -d $TEST_PKG >/dev/null 2>&1
210 $APT_FTPARCHIVE packages . | gzip -9 > Packages.gz
211 $APT_FTPARCHIVE sources . | gzip -9 > Sources.gz
212 cd ..
213
214 echo "deb file://$WORKDIR/arch /
215 deb-src file://$WORKDIR/arch /" > etc/apt/sources.list
216 $APT_GET clean
217
218 echo "==== uncompressed indexes from local file:// archive ===="
219 echo "--- apt-get update"
220 $APT_GET update
221 check_indexes
222 check_cache
223 check_get_source
224
225 echo "==== compressed indexes from local file:// archive ===="
226 echo "--- apt-get update"
227 $APT_GET -o Acquire::GzipIndexes=true update
228 # EXFAIL: file:/ URIs currently decompress even with above option
229 #check_indexes compressed
230 check_indexes
231 check_cache
232 check_get_source
233
234 echo "===== ALL TESTS PASSED ====="