#!/bin/sh set -e assert_correct_sources_file() { testequal "Package: bar Architecture: all Version: 1.0 Binary: bar Format: 3.0 (native) Directory: pool/main Files: 7b57dd065e51de5905288a5104d4bef5 406 bar_1.0.dsc d41d8cd98f00b204e9800998ecf8427e 0 bar_1.0.tar.gz Package-List: bar deb admin extra Checksums-Sha1: 17a40b76715f393ab7fd6485c9392a02f1adf903 406 bar_1.0.dsc da39a3ee5e6b4b0d3255bfef95601890afd80709 0 bar_1.0.tar.gz Checksums-Sha256: d9d7507f66a89258b6920aca47747d7a30e0e64b09ecabbf02b2efbdabf840a9 406 bar_1.0.dsc e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 bar_1.0.tar.gz Checksums-Sha512: ee0a9bfb6614159b45203fc29487d4f37387993ca0e6d6f27b80010498f3731d75753188ece307508ae9af0259bd11a6af15a1a38f0b87dbd5ea1273b7a7d53e 406 bar_1.0.dsc cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e 0 bar_1.0.tar.gz Package: foo Architecture: all Version: 1.0 Binary: foo Format: 3.0 (native) Directory: pool/main Files: d144826e6f02831c1933e910c92cd7e0 171 foo_1.0.dsc d41d8cd98f00b204e9800998ecf8427e 0 foo_1.0.tar.gz Package-List: foo deb admin extra Checksums-Sha1: 979306aa3ccff3d61bba062bb6977e2493c6f907 171 foo_1.0.dsc da39a3ee5e6b4b0d3255bfef95601890afd80709 0 foo_1.0.tar.gz Checksums-Sha256: 8c780af8b5a6d5b3c2e2f9518940beebea52ac6d6ad7b52c082dc925cfe5b532 171 foo_1.0.dsc e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 foo_1.0.tar.gz Checksums-Sha512: 3da0240fd764657c2f3661b4d750578a9a99b0580591b133756379d48117ebda87a5ed2467f513200d6e7eaf51422cbe91c15720eef7fb4bba2cc8ff81ebc547 171 foo_1.0.dsc cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e 0 foo_1.0.tar.gz " aptsortpkgs ./aptarchive/dists/test/main/source/Sources } create_source_files() { NAME="$1" REQUEST_CLEARSIGN="$2" TARFILE="aptarchive/pool/main/${NAME}_1.0.tar.gz" DSC_FILE="aptarchive/pool/main/${NAME}_1.0.dsc" touch $TARFILE if [ "$REQUEST_CLEARSIGN" = "CLEARSIGN" ]; then printf -- "-----BEGIN PGP SIGNED MESSAGE-----\n\n" > $DSC_FILE fi cat >> $DSC_FILE << EOF Format: 3.0 (native) Source: $NAME Binary: $NAME Architecture: all Version: 1.0 Package-List: $NAME deb admin extra Files: $(md5sum $TARFILE|cut -f1 -d' ') $(stat --print="%s" $TARFILE) ${NAME}_1.0.tar.gz EOF if [ "$REQUEST_CLEARSIGN" = "CLEARSIGN" ]; then cat >> $DSC_FILE <<EOF -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iEYEARECAAYFAk3k/VoACgkQliSD4VZixzQxlgCgpav7j68z48qNTDFuT9fLqwT5 DFwAoIXatJFENEC371bMKTkUKlwZxQEk =iI9V -----END PGP SIGNATURE----- EOF fi } create_clearsigned_source_files() { NAME="$1" create_source_files "$NAME" "CLEARSIGN" } # # main() # TESTDIR=$(readlink -f $(dirname $0)) . $TESTDIR/framework setupenvironment configarchitecture "i386" msgtest 'Test apt-ftparchive source with missing hashes in .dsc' mkdir -p aptarchive/pool/main create_source_files foo create_clearsigned_source_files bar mkdir -p aptarchive/dists/test/main/i18n/ mkdir -p aptarchive/dists/test/main/source/ mkdir aptarchive-overrides mkdir aptarchive-cache # generate with --db option (cd aptarchive && aptftparchive --db ./test.db sources pool/main/ \ -o APT::FTPArchive::ShowCacheMisses=1 \ > dists/test/main/source/Sources \ 2> stats-out.txt testequal " Misses in Cache: 2" grep Misses stats-out.txt ) assert_correct_sources_file # generate with --db option (again to ensure its in the cache) (cd aptarchive && aptftparchive --db ./test.db sources pool/main/ \ -o APT::FTPArchive::ShowCacheMisses=1 \ > dists/test/main/source/Sources \ 2> stats-out.txt testequal " Misses in Cache: 0" grep Misses stats-out.txt ) assert_correct_sources_file # get ready for the "apt-ftparchive generate" command cat > apt-ftparchive.conf <<"EOF" Dir { ArchiveDir "./aptarchive"; OverrideDir "./aptarchive-overrides"; CacheDir "./aptarchive-cache"; }; Default { Packages::Compress ". gzip bzip2"; Contents::Compress ". gzip bzip2"; LongDescription "false"; }; TreeDefault { BinCacheDB "packages-$(SECTION)-$(ARCH).db"; SrcCacheDB "sources-$(SECTION).db"; Directory "pool/$(SECTION)"; SrcDirectory "pool/$(SECTION)"; Sources "$(DIST)/$(SECTION)/source/Sources"; }; Tree "dists/test" { Sections "main"; Architectures "source"; }; EOF # generate (empty cachedb) aptftparchive generate apt-ftparchive.conf -o APT::FTPArchive::ShowCacheMisses=1 2> stats-out.txt testequal " Misses in Cache: 2" grep Misses stats-out.txt assert_correct_sources_file # generate again out of the cache rm -f ./aptarchive/dists/test/main/source/Sources aptftparchive generate apt-ftparchive.conf -o APT::FTPArchive::ShowCacheMisses=1 2> stats-out.txt testequal " Misses in Cache: 0" grep Misses stats-out.txt assert_correct_sources_file # generate invalid files mkdir aptarchive/pool/invalid printf "meep" > aptarchive/pool/invalid/invalid_1.0.dsc testequal " E: Could not find a record in the DSC 'aptarchive/pool/invalid/invalid_1.0.dsc'" aptftparchive sources aptarchive/pool/invalid rm -f aptarchive/pool/invalid/invalid_1.0.dsc printf "meep: yes" > aptarchive/pool/invalid/invalid_1.0.dsc testequal " E: Could not find a Source entry in the DSC 'aptarchive/pool/invalid/invalid_1.0.dsc'" aptftparchive sources aptarchive/pool/invalid rm -f aptarchive/pool/invalid/invalid_1.0.dsc dd if=/dev/zero of="aptarchive/pool/invalid/toobig_1.0.dsc" bs=1k count=129 2>/dev/null testequal " E: DSC file 'aptarchive/pool/invalid/toobig_1.0.dsc' is too large!" aptftparchive sources aptarchive/pool/invalid # ensure clean works rm -f aptarchive/pool/main/* aptftparchive clean apt-ftparchive.conf -o Debug::APT::FTPArchive::Clean=1 > clean-out.txt 2>&1 testequal "0 Number of unique keys in the tree" grep unique clean-out.txt testequal "sources-main.db" grep sources-main.db clean-out.txt