1
0
Fork 0
apt/test/integration/test-apt-ftparchive-cachedb
Daniel Baumann 6810ba718b
Adding upstream version 3.0.2.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-20 21:10:43 +02:00

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