]> git.saurik.com Git - apt.git/blob - test/integration/test-apt-ftparchive-src-cachedb
Merge remote-tracking branch 'mvo/feature/apt-ftparchive-srccache2' into debian/sid
[apt.git] / test / integration / test-apt-ftparchive-src-cachedb
1 #!/bin/sh
2 set -e
3
4 assert_correct_sources_file() {
5 testequal "Package: bar
6 Binary: bar
7 Version: 1.0
8 Architecture: all
9 Format: 3.0 (native)
10 Directory: pool/main
11 Files:
12 7b57dd065e51de5905288a5104d4bef5 406 bar_1.0.dsc
13 d41d8cd98f00b204e9800998ecf8427e 0 bar_1.0.tar.gz
14 Package-List:
15 bar deb admin extra
16 Checksums-Sha1:
17 17a40b76715f393ab7fd6485c9392a02f1adf903 406 bar_1.0.dsc
18 da39a3ee5e6b4b0d3255bfef95601890afd80709 0 bar_1.0.tar.gz
19 Checksums-Sha256:
20 d9d7507f66a89258b6920aca47747d7a30e0e64b09ecabbf02b2efbdabf840a9 406 bar_1.0.dsc
21 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 bar_1.0.tar.gz
22 Checksums-Sha512:
23 ee0a9bfb6614159b45203fc29487d4f37387993ca0e6d6f27b80010498f3731d75753188ece307508ae9af0259bd11a6af15a1a38f0b87dbd5ea1273b7a7d53e 406 bar_1.0.dsc
24 cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e 0 bar_1.0.tar.gz
25
26 Package: foo
27 Binary: foo
28 Version: 1.0
29 Architecture: all
30 Format: 3.0 (native)
31 Directory: pool/main
32 Files:
33 d144826e6f02831c1933e910c92cd7e0 171 foo_1.0.dsc
34 d41d8cd98f00b204e9800998ecf8427e 0 foo_1.0.tar.gz
35 Package-List:
36 foo deb admin extra
37 Checksums-Sha1:
38 979306aa3ccff3d61bba062bb6977e2493c6f907 171 foo_1.0.dsc
39 da39a3ee5e6b4b0d3255bfef95601890afd80709 0 foo_1.0.tar.gz
40 Checksums-Sha256:
41 8c780af8b5a6d5b3c2e2f9518940beebea52ac6d6ad7b52c082dc925cfe5b532 171 foo_1.0.dsc
42 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 foo_1.0.tar.gz
43 Checksums-Sha512:
44 3da0240fd764657c2f3661b4d750578a9a99b0580591b133756379d48117ebda87a5ed2467f513200d6e7eaf51422cbe91c15720eef7fb4bba2cc8ff81ebc547 171 foo_1.0.dsc
45 cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e 0 foo_1.0.tar.gz
46 " cat ./aptarchive/dists/test/main/source/Sources
47 }
48
49 create_source_files() {
50 NAME="$1"
51 REQUEST_CLEARSIGN="$2"
52
53 TARFILE="aptarchive/pool/main/${NAME}_1.0.tar.gz"
54 DSC_FILE="aptarchive/pool/main/${NAME}_1.0.dsc"
55 touch $TARFILE
56 if [ "$REQUEST_CLEARSIGN" = "CLEARSIGN" ]; then
57 printf -- "-----BEGIN PGP SIGNED MESSAGE-----\n\n" > $DSC_FILE
58 fi
59 cat >> $DSC_FILE << EOF
60 Format: 3.0 (native)
61 Source: $NAME
62 Binary: $NAME
63 Architecture: all
64 Version: 1.0
65 Package-List:
66 $NAME deb admin extra
67 Files:
68 $(md5sum $TARFILE|cut -f1 -d' ') $(stat --print="%s" $TARFILE) ${NAME}_1.0.tar.gz
69 EOF
70 if [ "$REQUEST_CLEARSIGN" = "CLEARSIGN" ]; then
71 cat >> $DSC_FILE <<EOF
72
73 -----BEGIN PGP SIGNATURE-----
74 Version: GnuPG v1.4.11 (GNU/Linux)
75
76 iEYEARECAAYFAk3k/VoACgkQliSD4VZixzQxlgCgpav7j68z48qNTDFuT9fLqwT5
77 DFwAoIXatJFENEC371bMKTkUKlwZxQEk
78 =iI9V
79 -----END PGP SIGNATURE-----
80 EOF
81 fi
82 }
83
84 create_clearsigned_source_files() {
85 NAME="$1"
86 create_source_files "$NAME" "CLEARSIGN"
87 }
88
89 #
90 # main()
91 #
92 TESTDIR=$(readlink -f $(dirname $0))
93 . $TESTDIR/framework
94 setupenvironment
95 configarchitecture "i386"
96
97 msgtest 'Test apt-ftparchive source with missing hashes in .dsc'
98
99 mkdir -p aptarchive/pool/main
100 create_source_files foo
101 create_clearsigned_source_files bar
102
103 mkdir -p aptarchive/dists/test/main/i18n/
104 mkdir -p aptarchive/dists/test/main/source/
105
106 mkdir aptarchive-overrides
107 mkdir aptarchive-cache
108
109
110
111 # generate with --db option
112 (cd aptarchive && aptftparchive --db ./test.db sources pool/main/ \
113 -o APT::FTPArchive::ShowCacheMisses=1 \
114 > dists/test/main/source/Sources \
115 2> stats-out.txt
116 testequal " Misses in Cache: 2" grep Misses stats-out.txt
117 )
118 assert_correct_sources_file
119
120 # generate with --db option (again to ensure its in the cache)
121 (cd aptarchive && aptftparchive --db ./test.db sources pool/main/ \
122 -o APT::FTPArchive::ShowCacheMisses=1 \
123 > dists/test/main/source/Sources \
124 2> stats-out.txt
125 testequal " Misses in Cache: 0" grep Misses stats-out.txt
126 )
127 assert_correct_sources_file
128
129
130
131 # get ready for the "apt-ftparchive generate" command
132 cat > apt-ftparchive.conf <<"EOF"
133 Dir {
134 ArchiveDir "./aptarchive";
135 OverrideDir "./aptarchive-overrides";
136 CacheDir "./aptarchive-cache";
137 };
138
139 Default {
140 Packages::Compress ". gzip bzip2";
141 Contents::Compress ". gzip bzip2";
142 LongDescription "false";
143 };
144
145 TreeDefault {
146 BinCacheDB "packages-$(SECTION)-$(ARCH).db";
147 SrcCacheDB "sources-$(SECTION).db";
148
149 Directory "pool/$(SECTION)";
150 SrcDirectory "pool/$(SECTION)";
151
152 Sources "$(DIST)/$(SECTION)/source/Sources";
153 };
154
155 Tree "dists/test" {
156 Sections "main";
157 Architectures "source";
158
159 };
160 EOF
161
162 # generate (empty cachedb)
163 aptftparchive generate apt-ftparchive.conf -o APT::FTPArchive::ShowCacheMisses=1 2> stats-out.txt
164 testequal " Misses in Cache: 2" grep Misses stats-out.txt
165 assert_correct_sources_file
166
167
168 # generate again out of the cache
169 rm -f ./aptarchive/dists/test/main/source/Sources
170 aptftparchive generate apt-ftparchive.conf -o APT::FTPArchive::ShowCacheMisses=1 2> stats-out.txt
171 testequal " Misses in Cache: 0" grep Misses stats-out.txt
172 assert_correct_sources_file
173
174
175
176 # generate invalid files
177 mkdir aptarchive/pool/invalid
178 printf "meep" > aptarchive/pool/invalid/invalid_1.0.dsc
179 testequal "
180 E: Could not find a Source entry in the DSC 'aptarchive/pool/invalid/invalid_1.0.dsc'" aptftparchive sources aptarchive/pool/invalid
181 rm -f aptarchive/pool/invalid/invalid_1.0.dsc
182
183 dd if=/dev/zero of="aptarchive/pool/invalid/toobig_1.0.dsc" bs=1k count=129 2>/dev/null
184 testequal "
185 E: DSC file 'aptarchive/pool/invalid/toobig_1.0.dsc' is too large!" aptftparchive sources aptarchive/pool/invalid
186
187 # ensure clean works
188 rm -f aptarchive/pool/main/*
189 aptftparchive clean apt-ftparchive.conf -o Debug::APT::FTPArchive::Clean=1 > clean-out.txt 2>&1
190 testequal "0 Number of unique keys in the tree" grep unique clean-out.txt
191 testequal "sources-main.db" grep sources-main.db clean-out.txt
192
193