191 lines
6.2 KiB
Bash
Executable file
191 lines
6.2 KiB
Bash
Executable file
#!/bin/sh
|
|
set -e
|
|
|
|
assert_correct_sources_file() {
|
|
testsuccessequal "Package: bar
|
|
Format: 3.0 (native)
|
|
Binary: bar
|
|
Architecture: all
|
|
Version: 1.0
|
|
Directory: pool/main
|
|
Package-List:
|
|
bar deb admin extra
|
|
Files:
|
|
7b57dd065e51de5905288a5104d4bef5 406 bar_1.0.dsc
|
|
d41d8cd98f00b204e9800998ecf8427e 0 bar_1.0.tar.gz
|
|
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
|
|
Format: 3.0 (native)
|
|
Binary: foo
|
|
Architecture: all
|
|
Version: 1.0
|
|
Directory: pool/main
|
|
Package-List:
|
|
foo deb admin extra
|
|
Files:
|
|
d144826e6f02831c1933e910c92cd7e0 171 foo_1.0.dsc
|
|
d41d8cd98f00b204e9800998ecf8427e 0 foo_1.0.tar.gz
|
|
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 -o APT::SortPkgs::Source=true
|
|
}
|
|
|
|
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"
|
|
confighashes 'MD5' 'SHA1' 'SHA256' 'SHA512'
|
|
|
|
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
|
|
|
|
msgtest '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 && msgpass || msgfail
|
|
testsuccess grep Misses stats-out.txt
|
|
testfileequal '../rootdir/tmp/testsuccess.output' ' Misses in Cache: 2'
|
|
cd ..
|
|
assert_correct_sources_file
|
|
|
|
msgtest '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 && msgpass || msgfail
|
|
testsuccess grep Misses stats-out.txt
|
|
testfileequal '../rootdir/tmp/testsuccess.output' ' Misses in Cache: 0'
|
|
cd ..
|
|
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
|
|
|
|
msgtest 'generate (empty cachedb)'
|
|
testsuccess aptftparchive generate apt-ftparchive.conf -o APT::FTPArchive::ShowCacheMisses=1
|
|
cp rootdir/tmp/testsuccess.output stats-out.txt
|
|
testsuccess grep Misses stats-out.txt
|
|
testfileequal rootdir/tmp/testsuccess.output ' Misses in Cache: 2'
|
|
assert_correct_sources_file
|
|
|
|
msgtest 'generate again out of the cache'
|
|
rm -f ./aptarchive/dists/test/main/source/Sources
|
|
testsuccess aptftparchive generate apt-ftparchive.conf -o APT::FTPArchive::ShowCacheMisses=1
|
|
cp rootdir/tmp/testsuccess.output stats-out.txt
|
|
testsuccess grep Misses stats-out.txt
|
|
testfileequal rootdir/tmp/testsuccess.output ' Misses in Cache: 0'
|
|
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
|
|
|
|
# ensure clean works
|
|
rm -f aptarchive/pool/main/*
|
|
testsuccess aptftparchive clean apt-ftparchive.conf -o Debug::APT::FTPArchive::Clean=1
|
|
cp rootdir/tmp/testsuccess.output clean-out.txt
|
|
testsuccess grep unique clean-out.txt
|
|
testfileequal 'rootdir/tmp/testsuccess.output' "0 Number of unique keys in the tree"
|
|
testsuccess grep sources-main.db clean-out.txt
|
|
testfileequal 'rootdir/tmp/testsuccess.output' "sources-main.db"
|