echo "Acquire::https::CaInfo \"${TMPWORKINGDIRECTORY}/rootdir/etc/webserver.pem\";" > rootdir/etc/apt/apt.conf.d/99https
echo "Apt::Cmd::Disable-Script-Warning \"1\";" > rootdir/etc/apt/apt.conf.d/apt-binary
configcompression '.' 'gz' #'bz2' 'lzma' 'xz'
+ confighashes 'SHA1' # these are tests, not security best-practices
# create some files in /tmp and look at user/group to get what this means
TEST_DEFAULT_USER="$USER"
shift
done > ${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf
}
-
+confighashes() {
+ {
+ echo 'APT::FTPArchive {'
+ {
+ while [ -n "$1" ]; do
+ printf "$1" | tr 'a-z' 'A-Z'
+ printf "\t\"true\";\n"
+ shift
+ done
+ for h in 'MD5' 'SHA1' 'SHA256' 'SHA512'; do
+ printf "$h\t\"false\";\n"
+ done
+ } | awk '!x[$1]++'
+ echo '};'
+ } >> "${TMPWORKINGDIRECTORY}/rootdir/etc/apt/apt.conf.d/ftparchive-hashes.conf"
+}
forcecompressor() {
COMPRESSOR="$1"
COMPRESSOR_CMD="$1"
local COMPRESSORS="$(cut -d' ' -f 1 ${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf | tr '\n' ' ')"
local COMPRESSORS="${COMPRESSORS%* }"
local ARCHS="$(getarchitectures)"
- echo -n 'Dir {
- ArchiveDir "' >> ftparchive.conf
- echo -n $(readlink -f .) >> ftparchive.conf
- echo -n '";
- CacheDir "' >> ftparchive.conf
- echo -n $(readlink -f ..) >> ftparchive.conf
- echo -n '";
- FileListDir "' >> ftparchive.conf
- echo -n $(readlink -f pool/) >> ftparchive.conf
- echo -n '";
+ cat > ftparchive.conf <<EOF
+Dir {
+ ArchiveDir "$(readlink -f .)";
+ CacheDir "$(readlink -f ..)";
+ FileListDir "$(readlink -f pool/)";
};
Default {
- Packages::Compress "'"$COMPRESSORS"'";
- Sources::Compress "'"$COMPRESSORS"'";
- Contents::Compress "'"$COMPRESSORS"'";
- Translation::Compress "'"$COMPRESSORS"'";
+ Packages::Compress "$COMPRESSORS";
+ Sources::Compress "$COMPRESSORS";
+ Contents::Compress "$COMPRESSORS";
+ Translation::Compress "$COMPRESSORS";
LongDescription "false";
};
TreeDefault {
Directory "pool/";
SrcDirectory "pool/";
};
-APT {
- FTPArchive {
- Release {
- Origin "joesixpack";
- Label "apttestcases";
- Suite "unstable";
- Description "repository with dummy packages";
- Architectures "' >> ftparchive.conf
- echo -n "$ARCHS" >> ftparchive.conf
- echo 'source";
- };
- };
-};' >> ftparchive.conf
+EOF
for DIST in $(find ./pool/ -maxdepth 1 -name '*.pkglist' -type f | cut -d'/' -f 3 | cut -d'.' -f 1 | sort | uniq); do
echo -n 'tree "dists/' >> ftparchive.conf
echo -n "$DIST" >> ftparchive.conf
getlabelfromsuite() { true; }
getoriginfromsuite() { true; }
+aptftparchiverelease() {
+ aptftparchive -qq release "$@" | sed -e '/0 Release$/ d' # remove the self reference
+}
generatereleasefiles() {
# $1 is the Date header and $2 is the ValidUntil header to be set
# both should be given in notation date/touch can understand
if [ -n "$ORIGIN" ]; then
ORIGIN="-o APT::FTPArchive::Release::Origin=${ORIGIN}"
fi
- aptftparchive -qq release $dir \
+ aptftparchiverelease $dir \
-o APT::FTPArchive::Release::Suite="${SUITE}" \
-o APT::FTPArchive::Release::Codename="${CODENAME}" \
${LABEL} \
${ORIGIN} \
${VERSION} \
- | sed -e '/0 Release$/ d' > $dir/Release # remove the self reference
+ > $dir/Release
if [ "$SUITE" = "experimental" -o "$SUITE" = "experimental2" ]; then
sed -i '/^Date: / a\
NotAutomatic: yes' $dir/Release
fi
- if [ -n "$1" -a "$1" != "now" ]; then
- sed -i "s/^Date: .*$/Date: $(date -d "$1" '+%a, %d %b %Y %H:%M:%S %Z')/" $dir/Release
- fi
- if [ -n "$2" ]; then
- sed -i "/^Date: / a\
-Valid-Until: $(date -d "$2" '+%a, %d %b %Y %H:%M:%S %Z')" $dir/Release
- fi
done
else
- aptftparchive -qq release ./aptarchive | sed -e '/0 Release$/ d' > aptarchive/Release # remove the self reference
+ aptftparchiverelease ./aptarchive > aptarchive/Release
fi
if [ -n "$1" -a "$1" != "now" ]; then
for release in $(find ./aptarchive -name 'Release'); do
+ sed -i "s/^Date: .*$/Date: $(date -d "$1" '+%a, %d %b %Y %H:%M:%S %Z')/" $release
touch -d "$1" $release
done
fi
+ if [ -n "$2" ]; then
+ sed -i "/^Date: / a\
+Valid-Until: $(date -d "$2" '+%a, %d %b %Y %H:%M:%S %Z')" $(find ./aptarchive -name 'Release')
+ fi
msgdone "info"
}
. $TESTDIR/framework
setupenvironment
configarchitecture "i386"
+confighashes 'MD5' 'SHA1' 'SHA256' 'SHA512'
msgtest 'Test apt-ftparchive source with missing hashes in .dsc'
EOF
# check for the SHA hashes
-aptftparchive sources aptarchive/ > aptarchive/Sources 2>/dev/null || msgfail
-test -n "$(grep Checksums-Sha512 aptarchive/Sources)" && msgpass || msgfail
+testsuccess aptftparchive sources aptarchive/
+cp rootdir/tmp/testsuccess.output aptarchive/Sources
+testsuccess grep Checksums-Sha512 aptarchive/Sources
for hash in sha512sum sha256sum sha1sum; do
for f in foo_1.0.tar.gz foo_1.0.dsc; do
SUM=$($hash aptarchive/$f | cut -d' ' -f1)
- msgtest "Test $hash hash matches for $f"
NEEDLE="$SUM $(stat -c%s aptarchive/$f) $f"
- test -n "$SUM" && test -n "$(grep "$NEEDLE" aptarchive/Sources)" && msgpass || msgfail
+ testsuccess test -n "$SUM"
+ msgtest "Test $hash hash matches for $f"
+ testsuccess --nomsg grep "$NEEDLE" aptarchive/Sources
done
done