179 lines
7.1 KiB
Bash
Executable file
179 lines
7.1 KiB
Bash
Executable file
#!/bin/sh
|
|
set -e
|
|
|
|
db_dump=db_dump
|
|
if command -v db_dump-5 >/dev/null 2>&1; then
|
|
db_dump=db_dump-5
|
|
fi
|
|
|
|
ensure_correct_packages_file() {
|
|
testequal "Package: foo
|
|
Architecture: i386
|
|
Version: 1
|
|
Priority: optional
|
|
Section: others
|
|
Maintainer: Joe Sixpack <joe@example.org>
|
|
$(dpkg-deb -I ./aptarchive/pool/main/foo_1_i386.deb | grep 'Installed-Size:' | sed 's#^ ##')
|
|
Filename: pool/main/foo_1_i386.deb" head -n8 ./aptarchive/dists/test/main/binary-i386/Packages
|
|
}
|
|
|
|
ensure_correct_contents_file() {
|
|
testfileequal ./aptarchive/dists/test/Contents-i386 "usr/bin/foo-i386 others/foo
|
|
usr/share/doc/foo/FEATURES others/foo
|
|
usr/share/doc/foo/changelog others/foo
|
|
usr/share/doc/foo/copyright others/foo"
|
|
}
|
|
|
|
#
|
|
# main()
|
|
#
|
|
TESTDIR="$(readlink -f "$(dirname "$0")")"
|
|
. "$TESTDIR/framework"
|
|
setupenvironment
|
|
configarchitecture 'i386'
|
|
|
|
mkdir -p aptarchive/dists/test/main/i18n/
|
|
mkdir -p aptarchive/dists/test/main/source/
|
|
mkdir -p aptarchive/dists/test/main/binary-i386
|
|
mkdir -p aptarchive/pool/main
|
|
|
|
mkdir aptarchive-overrides
|
|
touch aptarchive-overrides/bin-override
|
|
touch aptarchive-overrides/extra-override
|
|
mkdir aptarchive-cache
|
|
cat > 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";
|
|
|
|
Directory "pool/$(SECTION)";
|
|
SrcDirectory "pool/$(SECTION)";
|
|
|
|
Packages "$(DIST)/$(SECTION)/binary-$(ARCH)/Packages";
|
|
Contents "$(DIST)/Contents-$(ARCH)";
|
|
};
|
|
|
|
Tree "dists/test" {
|
|
Sections "main";
|
|
Architectures "i386";
|
|
BinOverride "bin-override";
|
|
ExtraOverride "extra-override";
|
|
//FileList "file-list";
|
|
};
|
|
EOF
|
|
|
|
# build one package
|
|
buildsimplenativepackage 'foo' 'i386' '1' 'test'
|
|
mv incoming/* aptarchive/pool/main/
|
|
|
|
# generate (empty cachedb)
|
|
testsuccess aptftparchive generate ftparchive.conf -o APT::FTPArchive::ShowCacheMisses=1
|
|
cp rootdir/tmp/testsuccess.output stats-out.txt
|
|
ensure_correct_packages_file
|
|
ensure_correct_contents_file
|
|
testsuccessequal ' Misses in Cache: 2
|
|
dists/test/Contents-i386: New 402 B Misses in Cache: 0' grep Misses stats-out.txt
|
|
|
|
# generate again
|
|
# ensure Contents file is not newer than Packages file; to avoid a race condition with the
|
|
# test case: If Contents file happened to be newer than the Packages file, we'd skip its
|
|
# generation (failing the test case); but if they are generated at the same time it may
|
|
# be out-of-date strictly speaking and needed regenerating.
|
|
touch -r ./aptarchive/dists/test/main/binary-i386/Packages ./aptarchive/dists/test/Contents-i386*
|
|
testsuccess aptftparchive generate ftparchive.conf -o APT::FTPArchive::ShowCacheMisses=1
|
|
cp rootdir/tmp/testsuccess.output stats-out.txt
|
|
ensure_correct_packages_file
|
|
ensure_correct_contents_file
|
|
testsuccessequal ' Misses in Cache: 0
|
|
dists/test/Contents-i386: Misses in Cache: 0' grep Misses stats-out.txt
|
|
|
|
# and again (with removing the Packages file)
|
|
rm -f ./aptarchive/dists/test/main/binary-i386/*
|
|
rm -f ./aptarchive/dists/test/Contents-i386
|
|
testsuccess aptftparchive generate ftparchive.conf -o APT::FTPArchive::ShowCacheMisses=1
|
|
cp rootdir/tmp/testsuccess.output stats-out.txt
|
|
ensure_correct_packages_file
|
|
ensure_correct_contents_file
|
|
testsuccessequal ' Misses in Cache: 0
|
|
dists/test/Contents-i386: New 402 B Misses in Cache: 0' grep Misses stats-out.txt
|
|
|
|
msgmsg "Test overrides"
|
|
|
|
manyX=$(head -c2000 /dev/zero | tr '\0' 'X')
|
|
|
|
echo "foo priority${manyX} overrideSection" > aptarchive-overrides/bin-override
|
|
echo "foo Extra ${manyX}trailer" > aptarchive-overrides/extra-override
|
|
|
|
testsuccess aptftparchive generate ftparchive.conf -o APT::FTPArchive::ShowCacheMisses=1
|
|
testsuccessequal "Priority: priority${manyX}" grep ^Priority ./aptarchive/dists/test/main/binary-i386/Packages
|
|
testsuccessequal "Section: overrideSection" grep ^Section ./aptarchive/dists/test/main/binary-i386/Packages
|
|
testsuccessequal "Extra: ${manyX}trailer" grep ^Extra ./aptarchive/dists/test/main/binary-i386/Packages
|
|
|
|
|
|
msgmsg "Test long paths"
|
|
x128=$(head -c 128 /dev/zero | tr '\0' 'X')
|
|
longPath=${x128}/${x128}/${x128}/${x128}/${x128}/${x128}/${x128}/${x128}
|
|
mkdir -p aptarchive/pool/main/$longPath
|
|
mv aptarchive/pool/main/foo_1_i386.deb aptarchive/pool/main/$longPath/foo_1_i386.deb
|
|
|
|
# before
|
|
testsuccess $db_dump -f dump -p aptarchive-cache/packages-main-i386.db
|
|
testsuccess grep "^ ./aptarchive/pool/main/foo_1_i386.deb:cl$" dump
|
|
testsuccess grep "^ ./aptarchive/pool/main/foo_1_i386.deb:cn$" dump
|
|
testsuccess grep "^ ./aptarchive/pool/main/foo_1_i386.deb:st$" dump
|
|
testsuccess aptftparchive generate ftparchive.conf -o APT::FTPArchive::ShowCacheMisses=1
|
|
|
|
# file is still found
|
|
testsuccessequal "Filename: pool/main/${longPath}/foo_1_i386.deb" grep ^Filename ./aptarchive/dists/test/main/binary-i386/Packages
|
|
testsuccessequal "Priority: priority${manyX}" grep ^Priority ./aptarchive/dists/test/main/binary-i386/Packages
|
|
testsuccessequal "Section: overrideSection" grep ^Section ./aptarchive/dists/test/main/binary-i386/Packages
|
|
testsuccessequal "Extra: ${manyX}trailer" grep ^Extra ./aptarchive/dists/test/main/binary-i386/Packages
|
|
|
|
# file is in the database
|
|
testsuccess $db_dump -f dump -p aptarchive-cache/packages-main-i386.db
|
|
testsuccess grep "^ ./aptarchive/pool/main/${longPath}/foo_1_i386.deb:cl$" dump
|
|
testsuccess grep "^ ./aptarchive/pool/main/${longPath}/foo_1_i386.deb:cn$" dump
|
|
testsuccess grep "^ ./aptarchive/pool/main/${longPath}/foo_1_i386.deb:st"$ dump
|
|
|
|
msgmsg "Test file lists"
|
|
|
|
# Check that the empty file list produces no packages
|
|
rm aptarchive-cache/packages-main-i386.db
|
|
testsuccess sed -i s#//FileList#FileList# ftparchive.conf
|
|
testsuccess aptftparchive generate ftparchive.conf -o APT::FTPArchive::ShowCacheMisses=1
|
|
testfileequal ./aptarchive/dists/test/main/binary-i386/Packages ""
|
|
|
|
# Add the packages and run our checks again
|
|
echo "pool/main/${longPath}/foo_1_i386.deb" > file-list
|
|
testsuccess aptftparchive generate ftparchive.conf -o APT::FTPArchive::ShowCacheMisses=1
|
|
testsuccessequal "Filename: pool/main/${longPath}/foo_1_i386.deb" grep ^Filename ./aptarchive/dists/test/main/binary-i386/Packages
|
|
testsuccessequal "Priority: priority${manyX}" grep ^Priority ./aptarchive/dists/test/main/binary-i386/Packages
|
|
testsuccessequal "Section: overrideSection" grep ^Section ./aptarchive/dists/test/main/binary-i386/Packages
|
|
testsuccessequal "Extra: ${manyX}trailer" grep ^Extra ./aptarchive/dists/test/main/binary-i386/Packages
|
|
|
|
# file is in the database
|
|
testsuccess $db_dump -f dump -p aptarchive-cache/packages-main-i386.db
|
|
testsuccess grep "^ ./aptarchive/pool/main/${longPath}/foo_1_i386.deb:cl$" dump
|
|
testsuccess grep "^ ./aptarchive/pool/main/${longPath}/foo_1_i386.deb:cn$" dump
|
|
testsuccess grep "^ ./aptarchive/pool/main/${longPath}/foo_1_i386.deb:st"$ dump
|
|
|
|
msgmsg "Test Clean"
|
|
# and clean
|
|
rm -rf aptarchive/pool/main/*
|
|
testsuccessequal "packages-main-i386.db" aptftparchive clean ftparchive.conf
|
|
testsuccess aptftparchive clean ftparchive.conf -o Debug::APT::FTPArchive::Clean=1
|
|
cp rootdir/tmp/testsuccess.output clean-out.txt
|
|
testsuccessequal "0 Number of unique keys in the tree" grep unique clean-out.txt
|
|
testsuccessequal "packages-main-i386.db" grep packages-main-i386.db clean-out.txt
|
|
|