From 63c7141275c8c5c0f6e60f5242785e50cabaf2a0 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 14 Sep 2015 02:26:13 +0200 Subject: tests: try to support spaces in TMPDIR Not all tests work yet, most notable the cdrom tests, but those require changes in libapt itself to have a proper fix and what we have fixed so far is good enough progress for now. Git-Dch: Ignore --- test/integration/framework | 438 +++++++++++---------- .../test-acquire-same-file-multiple-times | 30 +- .../test-acquire-same-repository-multiple-times | 13 +- test/integration/test-allow | 2 +- test/integration/test-apt-get-download | 4 +- test/integration/test-apt-get-source-authenticated | 4 +- .../integration/test-apt-get-update-unauth-warning | 4 +- test/integration/test-apt-progress-fd-conffile | 32 +- .../test-apt-translation-has-no-packages | 4 +- test/integration/test-apt-update-nofallback | 30 +- test/integration/test-apt-update-rollback | 48 +-- .../test-bug-590041-prefer-non-virtual-packages | 2 +- test/integration/test-bug-728500-tempdir | 12 +- test/integration/test-bug-738785-switch-protocol | 15 +- ...est-bug-769609-triggers-still-pending-after-run | 4 +- test/integration/test-disappearing-packages | 46 +-- test/integration/test-failing-maintainer-scripts | 26 +- test/integration/test-kernel-helper-autoremove | 2 +- test/integration/test-pdiff-usage | 2 +- test/integration/test-releasefile-verification | 58 +-- 20 files changed, 391 insertions(+), 385 deletions(-) (limited to 'test') diff --git a/test/integration/framework b/test/integration/framework index c830d852b..83f93217f 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -187,7 +187,7 @@ dpkg() { "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" "$@" } dpkgcheckbuilddeps() { - command dpkg-checkbuilddeps --admindir=${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg "$@" + command dpkg-checkbuilddeps --admindir="${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg" "$@" } gdb() { local CMD @@ -199,7 +199,7 @@ gdb() { aptmark) CMD="apt-mark";; apthelper) CMD="apt-helper";; aptftparchive) CMD="apt-ftparchive";; - dpkg) shift; runapt ${TMPWORKINGDIRECTORY}/rootdir/usr/bin/gdb-dpkg "$@"; return;; + dpkg) shift; runapt "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/gdb-dpkg" "$@"; return;; *) CMD="$1";; esac shift @@ -242,9 +242,9 @@ setupenvironment() { if [ -n "$TMPDIR" ] && [ "$(id -u)" = '0' ] && [ "$(stat --format '%a' "$TMPDIR")" != '1777' ]; then unset TMPDIR fi - TMPWORKINGDIRECTORY=$(mktemp -d) - addtrap "cd /; rm -rf $TMPWORKINGDIRECTORY;" - msgninfo "Preparing environment for $(basename $0) in ${TMPWORKINGDIRECTORY}…" + TMPWORKINGDIRECTORY="$(mktemp -d)" + addtrap "cd /; rm -rf \"$TMPWORKINGDIRECTORY\";" + msgninfo "Preparing environment for ${0##*/} in ${TMPWORKINGDIRECTORY}…" mkdir -m 700 "${TMPWORKINGDIRECTORY}/downloaded" if [ "$(id -u)" = '0' ]; then @@ -254,20 +254,20 @@ setupenvironment() { chown _apt:root "${TMPWORKINGDIRECTORY}/downloaded" fi - TESTDIRECTORY=$(readlink -f $(dirname $0)) + TESTDIRECTORY="$(readlink -f "$(dirname $0)")" # allow overriding the default BUILDDIR location - SOURCEDIRECTORY=${APT_INTEGRATION_TESTS_SOURCE_DIR:-"${TESTDIRECTORY}/../../"} - BUILDDIRECTORY=${APT_INTEGRATION_TESTS_BUILD_DIR:-"${TESTDIRECTORY}/../../build/bin"} - LIBRARYPATH=${APT_INTEGRATION_TESTS_LIBRARY_PATH:-"${BUILDDIRECTORY}"} - METHODSDIR=${APT_INTEGRATION_TESTS_METHODS_DIR:-"${BUILDDIRECTORY}/methods"} - APTHELPERBINDIR=${APT_INTEGRATION_TESTS_LIBEXEC_DIR:-"${BUILDDIRECTORY}"} - APTWEBSERVERBINDIR=${APT_INTEGRATION_TESTS_WEBSERVER_BIN_DIR:-"${BUILDDIRECTORY}"} - APTINTERNALSOLVER=${APT_INTEGRATION_TESTS_INTERNAL_SOLVER:-"${BUILDDIRECTORY}/apt-internal-solver"} - APTDUMPSOLVER=${APT_INTEGRATION_TESTS_DUMP_SOLVER:-"${BUILDDIRECTORY}/apt-dump-solver"} + SOURCEDIRECTORY="${APT_INTEGRATION_TESTS_SOURCE_DIR:-"${TESTDIRECTORY}/../../"}" + BUILDDIRECTORY="${APT_INTEGRATION_TESTS_BUILD_DIR:-"${TESTDIRECTORY}/../../build/bin"}" + LIBRARYPATH="${APT_INTEGRATION_TESTS_LIBRARY_PATH:-"${BUILDDIRECTORY}"}" + METHODSDIR="${APT_INTEGRATION_TESTS_METHODS_DIR:-"${BUILDDIRECTORY}/methods"}" + APTHELPERBINDIR="${APT_INTEGRATION_TESTS_LIBEXEC_DIR:-"${BUILDDIRECTORY}"}" + APTWEBSERVERBINDIR="${APT_INTEGRATION_TESTS_WEBSERVER_BIN_DIR:-"${BUILDDIRECTORY}"}" + APTINTERNALSOLVER="${APT_INTEGRATION_TESTS_INTERNAL_SOLVER:-"${BUILDDIRECTORY}/apt-internal-solver"}" + APTDUMPSOLVER="${APT_INTEGRATION_TESTS_DUMP_SOLVER:-"${BUILDDIRECTORY}/apt-dump-solver"}" test -x "${BUILDDIRECTORY}/apt-get" || msgdie "You need to build tree first" # ----- - cd $TMPWORKINGDIRECTORY + cd "$TMPWORKINGDIRECTORY" mkdir rootdir aptarchive keys cd rootdir mkdir -p etc/apt/apt.conf.d etc/apt/sources.list.d etc/apt/trusted.gpg.d etc/apt/preferences.d @@ -275,7 +275,7 @@ setupenvironment() { mkdir -p var/lib/dpkg/info var/lib/dpkg/updates var/lib/dpkg/triggers touch var/lib/dpkg/available mkdir -p usr/lib/apt - ln -s ${METHODSDIR} usr/lib/apt/methods + ln -s "${METHODSDIR}" usr/lib/apt/methods if [ "$BUILDDIRECTORY" = "$LIBRARYPATH" ]; then mkdir -p usr/lib/apt/solvers ln -s "${BUILDDIRECTORY}/apt-dump-solver" usr/lib/apt/solvers/dump @@ -284,23 +284,26 @@ setupenvironment() { fi # use the autoremove from the BUILDDIRECTORY if its there, otherwise # system - if [ -e ${BUILDDIRECTORY}/../../debian/apt.conf.autoremove ]; then - ln -s ${BUILDDIRECTORY}/../../debian/apt.conf.autoremove etc/apt/apt.conf.d/01autoremove + if [ -e "${BUILDDIRECTORY}/../../debian/apt.conf.autoremove" ]; then + ln -s "${BUILDDIRECTORY}/../../debian/apt.conf.autoremove" etc/apt/apt.conf.d/01autoremove else ln -s /etc/apt/apt.conf.d/01autoremove etc/apt/apt.conf.d/01autoremove fi cd .. - local PACKAGESFILE=$(echo "$(basename $0)" | sed -e 's/^test-/Packages-/' -e 's/^skip-/Packages-/') + local BASENAME="${0##*/}" + local PACKAGESFILE="Packages-${BASENAME#*-}" if [ -f "${TESTDIRECTORY}/${PACKAGESFILE}" ]; then cp "${TESTDIRECTORY}/${PACKAGESFILE}" aptarchive/Packages fi - local SOURCESSFILE=$(echo "$(basename $0)" | sed -e 's/^test-/Sources-/' -e 's/^skip-/Sources-/') + local SOURCESSFILE="Sources-${BASENAME#*-}" if [ -f "${TESTDIRECTORY}/${SOURCESSFILE}" ]; then cp "${TESTDIRECTORY}/${SOURCESSFILE}" aptarchive/Sources fi - cp $(find $TESTDIRECTORY -name '*.pub' -o -name '*.sec') keys/ - chmod 644 $(find keys -name '*.pub' -o -name '*.sec') - ln -s ${TMPWORKINGDIRECTORY}/keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg + for key in $(find "$TESTDIRECTORY" -name '*.pub' -o -name '*.sec'); do + cp "$key" keys/ + chmod 644 "$key" + done + ln -s "${TMPWORKINGDIRECTORY}/keys/joesixpack.pub" rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg echo "Dir \"${TMPWORKINGDIRECTORY}/rootdir\";" > aptconfig.conf echo "Dir::state::status \"${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/status\";" >> aptconfig.conf @@ -316,32 +319,31 @@ setupenvironment() { echo "Dir::Bin::apt-key \"${BUILDDIRECTORY}/apt-key\";" >> aptconfig.conf fi - cat << EOF > "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" + cat > "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" < "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/gdb-dpkg" -#!/bin/sh -set -e -if [ -r "${TMPWORKINGDIRECTORY}/noopchroot.so" ]; then if [ -n "\$LD_PRELOAD" ]; then - export LD_PRELOAD="${TMPWORKINGDIRECTORY}/noopchroot.so \${LD_PRELOAD}" + export LD_PRELOAD="noopchroot.so \${LD_PRELOAD}" else - export LD_PRELOAD="${TMPWORKINGDIRECTORY}/noopchroot.so" + export LD_PRELOAD="noopchroot.so" fi fi +EOF + cp "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/gdb-dpkg" + cat >> "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" <> "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/gdb-dpkg" < noopchroot.c + cat > noopchroot.c << EOF #define _GNU_SOURCE #include #include @@ -512,7 +515,7 @@ configcompression() { *) printf "$1\t$1\t$1\n";; esac shift - done > ${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf + done > "${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf" } confighashes() { { @@ -573,10 +576,10 @@ setupsimplenativepackage() { local SECTION="${7:-others}" local DISTSECTION - if [ "$SECTION" = "$(echo "$SECTION" | cut -d'/' -f 2)" ]; then + if [ "$SECTION" = "${SECTION#*/}" ]; then DISTSECTION="main" else - DISTSECTION="$(echo "$SECTION" | cut -d'/' -f 1)" + DISTSECTION="${SECTION%/*}" fi local BUILDDIR=incoming/${NAME}-${VERSION} mkdir -p ${BUILDDIR}/debian/source @@ -629,56 +632,58 @@ buildsimplenativepackage() { local SECTION="${7:-others}" local PRIORITY="${8:-optional}" - local FILE_TREE="$9" - local COMPRESS_TYPE="${10:-gzip}" + local FILE_TREE="$9" + local COMPRESS_TYPE="${10:-gzip}" local DISTSECTION - if [ "$SECTION" = "$(echo "$SECTION" | cut -d'/' -f 2)" ]; then + if [ "$SECTION" = "${SECTION#*/}" ]; then DISTSECTION="main" else - DISTSECTION="$(echo "$SECTION" | cut -d'/' -f 1)" + DISTSECTION="${SECTION%/*}" fi - local BUILDDIR=${TMPWORKINGDIRECTORY}/incoming/${NAME}-${VERSION} + local BUILDDIR="${TMPWORKINGDIRECTORY}/incoming/${NAME}-${VERSION}" msgtest "Build source package in version ${VERSION} for ${RELEASE} in ${DISTSECTION}" "$NAME" - mkdir -p $BUILDDIR/debian/source - echo "* most suckless software product ever" > ${BUILDDIR}/FEATURES + mkdir -p "$BUILDDIR/debian/source" + echo "* most suckless software product ever" > "${BUILDDIR}/FEATURES" echo "#!/bin/sh -echo '$NAME says \"Hello!\"'" > ${BUILDDIR}/${NAME} +echo '$NAME says \"Hello!\"'" > "${BUILDDIR}/${NAME}" - echo "Copyleft by Joe Sixpack $(date +%Y)" > ${BUILDDIR}/debian/copyright + echo "Copyleft by Joe Sixpack $(date +%Y)" > "${BUILDDIR}/debian/copyright" echo "$NAME ($VERSION) $RELEASE; urgency=low * Initial release - -- Joe Sixpack $(date -R)" > ${BUILDDIR}/debian/changelog - echo "Source: $NAME + -- Joe Sixpack $(date -R)" > "${BUILDDIR}/debian/changelog" + { + echo "Source: $NAME Priority: $PRIORITY Maintainer: Joe Sixpack -Standards-Version: 3.9.3" > ${BUILDDIR}/debian/control - if [ "$SECTION" != '' ]; then - echo "Section: $SECTION" >> ${BUILDDIR}/debian/control - fi - local BUILDDEPS="$(echo "$DEPENDENCIES" | grep '^Build-')" - test -z "$BUILDDEPS" || echo "$BUILDDEPS" >> ${BUILDDIR}/debian/control - echo " -Package: $NAME" >> ${BUILDDIR}/debian/control +Standards-Version: 3.9.3" + if [ "$SECTION" != '' ]; then + echo "Section: $SECTION" + fi + local BUILDDEPS="$(echo "$DEPENDENCIES" | grep '^Build-')" + test -z "$BUILDDEPS" || echo "$BUILDDEPS" + echo " +Package: $NAME" - if [ "$ARCH" = 'all' ]; then - echo "Architecture: all" >> ${BUILDDIR}/debian/control - else - echo "Architecture: any" >> ${BUILDDIR}/debian/control - fi - local DEPS="$(echo "$DEPENDENCIES" | grep -v '^Build-')" - test -z "$DEPS" || echo "$DEPS" >> ${BUILDDIR}/debian/control - echo "Description: $DESCRIPTION" >> ${BUILDDIR}/debian/control + if [ "$ARCH" = 'all' ]; then + echo "Architecture: all" + else + echo "Architecture: any" + fi + local DEPS="$(echo "$DEPENDENCIES" | grep -v '^Build-')" + test -z "$DEPS" || echo "$DEPS" + echo "Description: $DESCRIPTION" + } > "${BUILDDIR}/debian/control" - echo '3.0 (native)' > ${BUILDDIR}/debian/source/format - cd ${BUILDDIR}/.. + echo '3.0 (native)' > "${BUILDDIR}/debian/source/format" + cd "${BUILDDIR}/.." testsuccess --nomsg dpkg-source -b ${NAME}-${VERSION} cd - >/dev/null - sed -n 's#^dpkg-source: info: building [^ ]\+ in ##p' ${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output \ + sed -n 's#^dpkg-source: info: building [^ ]\+ in ##p' "${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output" \ | while read SRC; do - echo "pool/${SRC}" >> ${BUILDDIR}/../${RELEASE}.${DISTSECTION}.srclist + echo "pool/${SRC}" >> "${BUILDDIR}/../${RELEASE}.${DISTSECTION}.srclist" # if expr match "${SRC}" '.*\.dsc' >/dev/null 2>&1; then # aptkey --keyring ./keys/joesixpack.pub --secret-keyring ./keys/joesixpack.sec --quiet --readonly \ # adv --yes --default-key 'Joe Sixpack' \ @@ -689,26 +694,26 @@ Package: $NAME" >> ${BUILDDIR}/debian/control for arch in $(getarchitecturesfromcommalist "$ARCH"); do msgtest "Build binary package for ${RELEASE} in ${SECTION}" "$NAME" - rm -rf ${BUILDDIR}/debian/tmp - mkdir -p ${BUILDDIR}/debian/tmp/DEBIAN ${BUILDDIR}/debian/tmp/usr/share/doc/${NAME} ${BUILDDIR}/debian/tmp/usr/bin - cp ${BUILDDIR}/debian/copyright ${BUILDDIR}/debian/changelog ${BUILDDIR}/FEATURES ${BUILDDIR}/debian/tmp/usr/share/doc/${NAME} - cp ${BUILDDIR}/${NAME} ${BUILDDIR}/debian/tmp/usr/bin/${NAME}-${arch} + rm -rf "${BUILDDIR}/debian/tmp" + mkdir -p "${BUILDDIR}/debian/tmp/DEBIAN" "${BUILDDIR}/debian/tmp/usr/share/doc/${NAME}" "${BUILDDIR}/debian/tmp/usr/bin" + cp "${BUILDDIR}/debian/copyright" "${BUILDDIR}/debian/changelog" "${BUILDDIR}/FEATURES" "${BUILDDIR}/debian/tmp/usr/share/doc/${NAME}" + cp "${BUILDDIR}/${NAME}" "${BUILDDIR}/debian/tmp/usr/bin/${NAME}-${arch}" if [ -n "$FILE_TREE" ]; then - cp -ar "$FILE_TREE" ${BUILDDIR}/debian/tmp + cp -ar "$FILE_TREE" "${BUILDDIR}/debian/tmp" fi - (cd ${BUILDDIR}; dpkg-gencontrol -DArchitecture=$arch) - (cd ${BUILDDIR}/debian/tmp; md5sum $(find usr/ -type f) > DEBIAN/md5sums) + (cd "${BUILDDIR}"; dpkg-gencontrol -DArchitecture=$arch) + (cd "${BUILDDIR}/debian/tmp"; md5sum $(find usr/ -type f) > DEBIAN/md5sums) local LOG="${BUILDDIR}/../${NAME}_${VERSION}_${arch}.dpkg-deb.log" # ensure the right permissions as dpkg-deb insists - chmod 755 ${BUILDDIR}/debian/tmp/DEBIAN - testsuccess --nomsg dpkg-deb -Z${COMPRESS_TYPE} --build ${BUILDDIR}/debian/tmp ${BUILDDIR}/.. - echo "pool/${NAME}_${VERSION}_${arch}.deb" >> ${BUILDDIR}/../${RELEASE}.${DISTSECTION}.pkglist + chmod 755 "${BUILDDIR}/debian/tmp/DEBIAN" + testsuccess --nomsg dpkg-deb -Z${COMPRESS_TYPE} --build "${BUILDDIR}/debian/tmp" "${BUILDDIR}/.." + echo "pool/${NAME}_${VERSION}_${arch}.deb" >> "${BUILDDIR}/../${RELEASE}.${DISTSECTION}.pkglist" done local CHANGEPATH="${BUILDDIR}/../${DISTSECTION}/${NM}/${NAME}/${NAME}_${VERSION}" - mkdir -p $CHANGEPATH - cp ${BUILDDIR}/debian/changelog $CHANGEPATH + mkdir -p "$CHANGEPATH" + cp "${BUILDDIR}/debian/changelog" "$CHANGEPATH" rm -rf "${BUILDDIR}" msgdone "info" } @@ -721,20 +726,20 @@ buildpackage() { local PKGNAME="$(echo "$BUILDDIR" | grep -o '[^/]*$')" local BUILDLOG="$(readlink -f "${BUILDDIR}/../${PKGNAME}_${RELEASE}_${SECTION}.dpkg-bp.log")" msgtest "Build package for ${RELEASE} in ${SECTION}" "$PKGNAME" - cd $BUILDDIR + cd "$BUILDDIR" if [ "$ARCH" = "all" ]; then ARCH="$(dpkg-architecture -qDEB_HOST_ARCH 2> /dev/null)" fi testsuccess --nomsg dpkg-buildpackage -uc -us -a$ARCH - cp ${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output $BUILDLOG - local PKGS="$(grep '^dpkg-deb: building package' $BUILDLOG | cut -d'/' -f 2 | sed -e "s#'\.##")" - local SRCS="$(grep '^dpkg-source: info: building' $BUILDLOG | grep -o '[a-z0-9._+~-]*$')" + cp "${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output" "$BUILDLOG" + local PKGS="$(grep '^dpkg-deb: building package' "$BUILDLOG" | cut -d'/' -f 2 | sed -e "s#'\.##")" + local SRCS="$(grep '^dpkg-source: info: building' "$BUILDLOG" | grep -o '[a-z0-9._+~-]*$')" cd - > /dev/null for PKG in $PKGS; do - echo "pool/${PKG}" >> ${TMPWORKINGDIRECTORY}/incoming/${RELEASE}.${SECTION}.pkglist + echo "pool/${PKG}" >> "${TMPWORKINGDIRECTORY}/incoming/${RELEASE}.${SECTION}.pkglist" done for SRC in $SRCS; do - echo "pool/${SRC}" >> ${TMPWORKINGDIRECTORY}/incoming/${RELEASE}.${SECTION}.srclist + echo "pool/${SRC}" >> "${TMPWORKINGDIRECTORY}/incoming/${RELEASE}.${SECTION}.srclist" done } @@ -747,7 +752,7 @@ buildaptarchive() { } createaptftparchiveconfig() { - local COMPRESSORS="$(cut -d' ' -f 1 ${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf | tr '\n' ' ')" + local COMPRESSORS="$(cut -d' ' -f 1 "${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf" | tr '\n' ' ')" local COMPRESSORS="${COMPRESSORS%* }" local ARCHS="$(getarchitectures)" cat > ftparchive.conf <> ftparchive.conf - echo -n "$DIST" >> ftparchive.conf - echo -n '" { - Architectures "' >> ftparchive.conf - echo -n "$ARCHS" >> ftparchive.conf - echo -n 'source"; - FileList "' >> ftparchive.conf - echo -n "${DIST}.\$(SECTION).pkglist" >> ftparchive.conf - echo -n '"; - SourceFileList "' >> ftparchive.conf - echo -n "${DIST}.\$(SECTION).srclist" >> ftparchive.conf - echo -n '"; - Sections "' >> ftparchive.conf - echo -n "$(find ./pool/ -maxdepth 1 -name "${DIST}.*.pkglist" -type f | cut -d'/' -f 3 | cut -d'.' -f 2 | sort | uniq | tr '\n' ' ')" >> ftparchive.conf - echo '"; -};' >> ftparchive.conf - done + cat <> ftparchive.conf } buildaptftparchivedirectorystructure() { @@ -795,10 +792,10 @@ buildaptftparchivedirectorystructure() { for SECTION in $SECTIONS; do local ARCHS="$(grep -A 5 "dists/$DIST" ftparchive.conf | grep Architectures | cut -d'"' -f 2 | sed -e 's#source##')" for ARCH in $ARCHS; do - mkdir -p dists/${DIST}/${SECTION}/binary-${ARCH} + mkdir -p "dists/${DIST}/${SECTION}/binary-${ARCH}" done - mkdir -p dists/${DIST}/${SECTION}/source - mkdir -p dists/${DIST}/${SECTION}/i18n + mkdir -p "dists/${DIST}/${SECTION}/source" + mkdir -p "dists/${DIST}/${SECTION}/i18n" done done } @@ -828,28 +825,29 @@ insertpackage() { fi for BUILDARCH in $ARCHS; do local PPATH="aptarchive/dists/${RELEASE}/main/binary-${BUILDARCH}" - mkdir -p $PPATH - local FILE="${PPATH}/Packages" - echo "Package: $NAME + mkdir -p "$PPATH" + { + echo "Package: $NAME Priority: $PRIORITY Section: other Installed-Size: 42 -Maintainer: Joe Sixpack " >> $FILE - test "$arch" = 'none' || echo "Architecture: $arch" >> $FILE - echo "Version: $VERSION -Filename: pool/main/${NAME}/${NAME}_${VERSION}_${arch}.deb" >> $FILE - test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> $FILE - echo "Description: $(printf '%s' "$DESCRIPTION" | head -n 1)" >> $FILE - echo "Description-md5: $(printf '%s' "$DESCRIPTION" | md5sum | cut -d' ' -f 1)" >> $FILE - echo >> $FILE +Maintainer: Joe Sixpack " + test "$arch" = 'none' || echo "Architecture: $arch" + echo "Version: $VERSION +Filename: pool/main/${NAME}/${NAME}_${VERSION}_${arch}.deb" + test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" + echo "Description: $(printf '%s' "$DESCRIPTION" | head -n 1)" + echo "Description-md5: $(printf '%s' "$DESCRIPTION" | md5sum | cut -d' ' -f 1)" + echo + } >> "${PPATH}/Packages" done done - mkdir -p aptarchive/dists/${RELEASE}/main/source aptarchive/dists/${RELEASE}/main/i18n - touch aptarchive/dists/${RELEASE}/main/source/Sources + mkdir -p "aptarchive/dists/${RELEASE}/main/source" "aptarchive/dists/${RELEASE}/main/i18n" + touch "aptarchive/dists/${RELEASE}/main/source/Sources" echo "Package: $NAME Description-md5: $(printf '%s' "$DESCRIPTION" | md5sum | cut -d' ' -f 1) Description-en: $DESCRIPTION -" >> aptarchive/dists/${RELEASE}/main/i18n/Translation-en +" >> "aptarchive/dists/${RELEASE}/main/i18n/Translation-en" done } @@ -871,14 +869,14 @@ Binary: $BINARY Version: $VERSION Maintainer: Joe Sixpack Architecture: $ARCH" >> $FILE - test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> $FILE + test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> "$FILE" echo "Files: - $(echo -n "$DSCFILE" | md5sum | cut -d' ' -f 1) $(echo -n "$DSCFILE" | wc -c) $DSCFILE - $(echo -n "$TARFILE" | md5sum | cut -d' ' -f 1) $(echo -n "$TARFILE" | wc -c) $TARFILE + $(echo -n "$DSCFILE" | md5sum | cut -d' ' -f 1) $(echo -n "$DSCFILE" | wc -c) "$DSCFILE" + $(echo -n "$TARFILE" | md5sum | cut -d' ' -f 1) $(echo -n "$TARFILE" | wc -c) "$TARFILE" Checksums-Sha256: - $(echo -n "$DSCFILE" | sha256sum | cut -d' ' -f 1) $(echo -n "$DSCFILE" | wc -c) $DSCFILE - $(echo -n "$TARFILE" | sha256sum | cut -d' ' -f 1) $(echo -n "$TARFILE" | wc -c) $TARFILE -" >> $FILE + $(echo -n "$DSCFILE" | sha256sum | cut -d' ' -f 1) $(echo -n "$DSCFILE" | wc -c) "$DSCFILE" + $(echo -n "$TARFILE" | sha256sum | cut -d' ' -f 1) $(echo -n "$TARFILE" | wc -c) "$TARFILE" +" >> "$FILE" } insertinstalledpackage() { @@ -902,22 +900,22 @@ Priority: $PRIORITY Section: other Installed-Size: 42 Maintainer: Joe Sixpack -Version: $VERSION" >> $FILE - test "$arch" = 'none' || echo "Architecture: $arch" >> $FILE - test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> $FILE - echo "Description: $DESCRIPTION" >> $FILE - echo >> $FILE +Version: $VERSION" >> "$FILE" + test "$arch" = 'none' || echo "Architecture: $arch" >> "$FILE" + test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> "$FILE" + echo "Description: $DESCRIPTION" >> "$FILE" + echo >> "$FILE" if [ "$(dpkg-query -W --showformat='${Multi-Arch}')" = 'same' ]; then - echo -n > ${INFO}/${NAME}:${arch}.list + echo -n > "${INFO}/${NAME}:${arch}.list" else - echo -n > ${INFO}/${NAME}.list + echo -n > "${INFO}/${NAME}.list" fi done } buildaptarchivefromincoming() { - msginfo "Build APT archive for ${CCMD}$(basename $0)${CINFO} based on incoming packages…" + msginfo "Build APT archive for ${CCMD}${0##*/}${CINFO} based on incoming packages…" cd aptarchive [ -e pool ] || ln -s ../incoming pool [ -e ftparchive.conf ] || createaptftparchiveconfig @@ -930,7 +928,7 @@ buildaptarchivefromincoming() { } buildaptarchivefromfiles() { - msginfo "Build APT archive for ${CCMD}$(basename $0)${CINFO} based on prebuild files…" + msginfo "Build APT archive for ${CCMD}${0##*/}${CINFO} based on prebuild files…" local DIR='aptarchive' if [ -d "${DIR}/dists" ]; then DIR="${DIR}/dists"; fi find "$DIR" -name 'Packages' -o -name 'Sources' -o -name 'Translation-*' | while read line; do @@ -942,7 +940,7 @@ buildaptarchivefromfiles() { } compressfile() { - cat ${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf | while read compressor extension command; do + cat "${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf" | while read compressor extension command; do if [ "$compressor" = '.' ]; then if [ -n "$2" ]; then touch -d "$2" "$1" @@ -990,16 +988,16 @@ generatereleasefiles() { if [ -n "$ORIGIN" ]; then ORIGIN="-o APT::FTPArchive::Release::Origin=${ORIGIN}" fi - aptftparchiverelease $dir \ + aptftparchiverelease "$dir" \ -o APT::FTPArchive::Release::Suite="${SUITE}" \ -o APT::FTPArchive::Release::Codename="${CODENAME}" \ ${LABEL} \ ${ORIGIN} \ ${VERSION} \ - > $dir/Release + > "$dir/Release" if [ "$SUITE" = "experimental" -o "$SUITE" = "experimental2" ]; then sed -i '/^Date: / a\ -NotAutomatic: yes' $dir/Release +NotAutomatic: yes' "$dir/Release" fi done else @@ -1007,8 +1005,8 @@ NotAutomatic: yes' $dir/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 + 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 @@ -1019,33 +1017,34 @@ Valid-Until: $(date -d "$2" '+%a, %d %b %Y %H:%M:%S %Z')" $(find ./aptarchive -n } setupdistsaptarchive() { - local APTARCHIVE=$(readlink -f ./aptarchive) + local APTARCHIVE="$(readlink -f ./aptarchive | sed 's# #%20#g')" rm -f root/etc/apt/sources.list.d/apt-test-*-deb.list rm -f root/etc/apt/sources.list.d/apt-test-*-deb-src.list for DISTS in $(find ./aptarchive/dists/ -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f 4); do - SECTIONS=$(find ./aptarchive/dists/${DISTS}/ -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f 5 | tr '\n' ' ') + SECTIONS=$(find "./aptarchive/dists/${DISTS}/" -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f 5 | tr '\n' ' ') msgninfo "\tadd deb and deb-src sources.list lines for ${CCMD}${DISTS} ${SECTIONS}${CINFO}… " - echo "deb file://$APTARCHIVE $DISTS $SECTIONS" > rootdir/etc/apt/sources.list.d/apt-test-${DISTS}-deb.list - echo "deb-src file://$APTARCHIVE $DISTS $SECTIONS" > rootdir/etc/apt/sources.list.d/apt-test-${DISTS}-deb-src.list + echo "deb file://$APTARCHIVE $DISTS $SECTIONS" > "rootdir/etc/apt/sources.list.d/apt-test-${DISTS}-deb.list" + echo "deb-src file://$APTARCHIVE $DISTS $SECTIONS" > "rootdir/etc/apt/sources.list.d/apt-test-${DISTS}-deb-src.list" msgdone "info" done } setupflataptarchive() { - local APTARCHIVE=$(readlink -f ./aptarchive) - if [ -f ${APTARCHIVE}/Packages ]; then + local APTARCHIVE="$(readlink -f ./aptarchive)" + local APTARCHIVEURI="$(readlink -f ./aptarchive | sed 's# #%20#g')" + if [ -f "${APTARCHIVE}/Packages" ]; then msgninfo "\tadd deb sources.list line… " - echo "deb file://$APTARCHIVE /" > rootdir/etc/apt/sources.list.d/apt-test-archive-deb.list - msgdone "info" + echo "deb file://$APTARCHIVEURI /" > 'rootdir/etc/apt/sources.list.d/apt-test-archive-deb.list' + msgdone 'info' else - rm -f rootdir/etc/apt/sources.list.d/apt-test-archive-deb.list + rm -f 'rootdir/etc/apt/sources.list.d/apt-test-archive-deb.list' fi - if [ -f ${APTARCHIVE}/Sources ]; then + if [ -f "${APTARCHIVE}/Sources" ]; then msgninfo "\tadd deb-src sources.list line… " - echo "deb-src file://$APTARCHIVE /" > rootdir/etc/apt/sources.list.d/apt-test-archive-deb-src.list - msgdone "info" + echo "deb-src file://$APTARCHIVEURI /" > 'rootdir/etc/apt/sources.list.d/apt-test-archive-deb-src.list' + msgdone 'info' else - rm -f rootdir/etc/apt/sources.list.d/apt-test-archive-deb-src.list + rm -f 'rootdir/etc/apt/sources.list.d/apt-test-archive-deb-src.list' fi } @@ -1080,41 +1079,41 @@ signreleasefiles() { # the key is expired, so gpg doesn't allow to sign with and the --faked-system-time # option doesn't exist anymore (and using faketime would add a new obscure dependency) # therefore we 'temporary' make the key not expired and restore a backup after signing - cp ${REXKEY}.sec $SECEXPIREBAK - cp ${REXKEY}.pub $PUBEXPIREBAK + cp "${REXKEY}.sec" "$SECEXPIREBAK" + cp "${REXKEY}.pub" "$PUBEXPIREBAK" local SECUNEXPIRED="${REXKEY}.sec.unexpired" local PUBUNEXPIRED="${REXKEY}.pub.unexpired" if [ -f "$SECUNEXPIRED" ] && [ -f "$PUBUNEXPIRED" ]; then - cp $SECUNEXPIRED ${REXKEY}.sec - cp $PUBUNEXPIRED ${REXKEY}.pub + cp "$SECUNEXPIRED" "${REXKEY}.sec" + cp "$PUBUNEXPIRED" "${REXKEY}.pub" else if ! printf "expire\n1w\nsave\n" | $GPG --default-key "$SIGNER" --command-fd 0 --edit-key "${SIGNER}" >setexpire.gpg 2>&1; then cat setexpire.gpg exit 1 fi - cp ${REXKEY}.sec $SECUNEXPIRED - cp ${REXKEY}.pub $PUBUNEXPIRED + cp "${REXKEY}.sec" "$SECUNEXPIRED" + cp "${REXKEY}.pub" "$PUBUNEXPIRED" fi fi - for RELEASE in $(find ${REPODIR}/ -name Release); do - $GPG --default-key "$SIGNER" --armor --detach-sign --sign --output ${RELEASE}.gpg ${RELEASE} + for RELEASE in $(find "${REPODIR}/" -name Release); do + $GPG --default-key "$SIGNER" --armor --detach-sign --sign --output "${RELEASE}.gpg" "${RELEASE}" local INRELEASE="$(echo "${RELEASE}" | sed 's#/Release$#/InRelease#')" - $GPG --default-key "$SIGNER" --clearsign --output $INRELEASE $RELEASE + $GPG --default-key "$SIGNER" --clearsign --output "$INRELEASE" "$RELEASE" # we might have set a specific date for the Release file, so copy it - touch -d "$(stat --format "%y" ${RELEASE})" ${RELEASE}.gpg ${INRELEASE} + touch -d "$(stat --format "%y" ${RELEASE})" "${RELEASE}.gpg" "${INRELEASE}" done if [ -f "$SECEXPIREBAK" ] && [ -f "$PUBEXPIREBAK" ]; then - mv -f $SECEXPIREBAK ${REXKEY}.sec - mv -f $PUBEXPIREBAK ${REXKEY}.pub + mv -f "$SECEXPIREBAK" "${REXKEY}.sec" + mv -f "$PUBEXPIREBAK" "${REXKEY}.pub" fi - msgdone "info" + msgdone 'info' } redatereleasefiles() { local DATE="$(date -d "$1" '+%a, %d %b %Y %H:%M:%S %Z')" for release in $(find aptarchive/ -name 'Release'); do - sed -i "s/^Date: .*$/Date: ${DATE}/" $release - touch -d "$DATE" $release + sed -i "s/^Date: .*$/Date: ${DATE}/" "$release" + touch -d "$DATE" "$release" done signreleasefiles "${2:-Joe Sixpack}" } @@ -1148,7 +1147,7 @@ webserverconfig() { } rewritesourceslist() { - local APTARCHIVE="file://$(readlink -f "${TMPWORKINGDIRECTORY}/aptarchive")" + local APTARCHIVE="file://$(readlink -f "${TMPWORKINGDIRECTORY}/aptarchive" | sed 's# #%20#g')" for LIST in $(find rootdir/etc/apt/sources.list.d/ -name 'apt-test-*.list'); do sed -i $LIST -e "s#$APTARCHIVE#${1}#" -e "s#http://localhost:8080/#${1}#" -e "s#https://localhost:4433/#${1}#" done @@ -1174,7 +1173,7 @@ changetowebserver() { else shift fi - if test -x ${APTWEBSERVERBINDIR}/aptwebserver; then + if test -x "${APTWEBSERVERBINDIR}/aptwebserver"; then cd aptarchive local LOG="webserver.log" if ! aptwebserver -o aptwebserver::fork=1 "$@" >$LOG 2>&1 ; then @@ -1207,10 +1206,10 @@ output = /dev/null [https] accept = 4433 connect = 8080 -" > ${TMPWORKINGDIRECTORY}/stunnel.conf +" > "${TMPWORKINGDIRECTORY}/stunnel.conf" stunnel4 "${TMPWORKINGDIRECTORY}/stunnel.conf" waitforpidfile "${TMPWORKINGDIRECTORY}/aptarchive/stunnel.pid" - local PID="$(cat ${TMPWORKINGDIRECTORY}/aptarchive/stunnel.pid)" + local PID="$(cat "${TMPWORKINGDIRECTORY}/aptarchive/stunnel.pid")" if [ -z "$PID" ]; then msgdie 'Could not fork stunnel4 successfully' fi @@ -1221,22 +1220,24 @@ connect = 8080 changetocdrom() { mkdir -p rootdir/media/cdrom/.disk local CD="$(readlink -f rootdir/media/cdrom)" - echo "acquire::cdrom::mount \"${CD}\"; -acquire::cdrom::${CD}/::mount \"mv ${CD}-unmounted ${CD}\"; -acquire::cdrom::${CD}/::umount \"mv ${CD} ${CD}-unmounted\"; -acquire::cdrom::autodetect 0;" > rootdir/etc/apt/apt.conf.d/00cdrom - echo -n "$1" > ${CD}/.disk/info + cat > rootdir/etc/apt/apt.conf.d/00cdrom < "${CD}/.disk/info" if [ ! -d aptarchive/dists ]; then msgdie 'Flat file archive cdroms can not be created currently' return 1 fi mv aptarchive/dists "$CD" - ln -s "$(readlink -f ./incoming)" $CD/pool + ln -s "$(readlink -f ./incoming)" "$CD/pool" find rootdir/etc/apt/sources.list.d/ -name 'apt-test-*.list' -delete # start with an unmounted disk mv "${CD}" "${CD}-unmounted" # we don't want the disk to be modifiable - addtrap 'prefix' "chmod -f -R +w $PWD/rootdir/media/cdrom/dists/ $PWD/rootdir/media/cdrom-unmounted/dists/ || true;" + addtrap 'prefix' "chmod -f -R +w \"$PWD/rootdir/media/cdrom/dists/\" \"$PWD/rootdir/media/cdrom-unmounted/dists/\" || true;" chmod -R 555 rootdir/media/cdrom-unmounted/dists } @@ -1269,7 +1270,7 @@ testoutputequal() { local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testoutputequal.output" local COMPAREFILE="$1" shift - if "$@" 2>&1 | checkdiff $COMPAREFILE - >"$OUTPUT" 2>&1; then + if "$@" 2>&1 | checkdiff "$COMPAREFILE" - >"$OUTPUT" 2>&1; then msgpass else echo "=== content of file we compared with (${COMPAREFILE}) ===" >>"${OUTPUT}" @@ -1303,7 +1304,7 @@ testempty() { msggroup 'testempty' msgtest "Test for no output of" "$*" local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testempty.comparefile" - if ("$@" >$COMPAREFILE 2>&1 || true) && test ! -s $COMPAREFILE; then + if ("$@" >"$COMPAREFILE" 2>&1 || true) && test ! -s "$COMPAREFILE"; then msgpass else msgfailoutput '' "$COMPAREFILE" "$@" @@ -1311,6 +1312,18 @@ testempty() { aptautotest 'testempty' "$@" msggroup } +testnotempty() { + msggroup 'testnotempty' + msgtest "Test for some output of" "$*" + local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testnotempty.comparefile" + if ("$@" >"$COMPAREFILE" 2>&1 || true) && test -s "$COMPAREFILE"; then + msgpass + else + msgfailoutput '' "$COMPAREFILE" "$@" + fi + aptautotest 'testnotempty' "$@" + msggroup +} testequal() { msggroup 'testequal' @@ -1321,7 +1334,7 @@ testequal() { fi local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequal.comparefile" - echo "$1" > $COMPAREFILE + echo "$1" > "$COMPAREFILE" shift if [ -n "$MSG" ]; then @@ -1337,13 +1350,13 @@ testequalor2() { local COMPAREFILE1="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequalor2.comparefile1" local COMPAREFILE2="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequalor2.comparefile2" local COMPAREAGAINST="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequalor2.compareagainst" - echo "$1" > $COMPAREFILE1 - echo "$2" > $COMPAREFILE2 + echo "$1" > "$COMPAREFILE1" + echo "$2" > "$COMPAREFILE2" shift 2 msgtest "Test for equality OR of" "$*" - "$@" >$COMPAREAGAINST 2>&1 || true - if checkdiff $COMPAREFILE1 $COMPAREAGAINST >/dev/null 2>&1 || \ - checkdiff $COMPAREFILE2 $COMPAREAGAINST >/dev/null 2>&1 + "$@" >"$COMPAREAGAINST" 2>&1 || true + if checkdiff "$COMPAREFILE1" "$COMPAREAGAINST" >/dev/null 2>&1 || \ + checkdiff "$COMPAREFILE2" "$COMPAREAGAINST" >/dev/null 2>&1 then msgpass else @@ -1429,10 +1442,10 @@ testmarkedauto() { local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testmarkedauto.comparefile" if [ -n "$1" ]; then msgtest 'Test for correctly marked as auto-installed' "$*" - while [ -n "$1" ]; do echo "$1"; shift; done | sort > $COMPAREFILE + while [ -n "$1" ]; do echo "$1"; shift; done | sort > "$COMPAREFILE" else msgtest 'Test for correctly marked as auto-installed' 'no package' - echo -n > $COMPAREFILE + echo -n > "$COMPAREFILE" fi testoutputequal "$COMPAREFILE" aptmark showauto msggroup @@ -1442,10 +1455,10 @@ testmarkedmanual() { local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testmarkedmanual.comparefile" if [ -n "$1" ]; then msgtest 'Test for correctly marked as manually installed' "$*" - while [ -n "$1" ]; do echo "$1"; shift; done | sort > $COMPAREFILE + while [ -n "$1" ]; do echo "$1"; shift; done | sort > "$COMPAREFILE" else msgtest 'Test for correctly marked as manually installed' 'no package' - echo -n > $COMPAREFILE + echo -n > "$COMPAREFILE" fi testoutputequal "$COMPAREFILE" aptmark showmanual msggroup @@ -1483,7 +1496,7 @@ msgfailoutput() { done echo '#### test output ####' fi - cat >&2 $OUTPUT + cat >&2 "$OUTPUT" msgfail "$MSG" } @@ -1495,7 +1508,7 @@ testsuccess() { msgtest 'Test for successful execution of' "$*" fi local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output" - if "$@" >${OUTPUT} 2>&1; then + if "$@" >"${OUTPUT}" 2>&1; then if expr match "$1" '^apt.*' >/dev/null; then if grep -q -E ' runtime error: ' "$OUTPUT"; then msgfailoutput 'compiler detected undefined behavior' "$OUTPUT" "$@" @@ -1531,7 +1544,7 @@ testwarning() { msgtest 'Test for successful execution with warnings of' "$*" fi local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testwarning.output" - if "$@" >${OUTPUT} 2>&1; then + if "$@" >"${OUTPUT}" 2>&1; then if expr match "$1" '^apt.*' >/dev/null; then if grep -q -E ' runtime error: ' "$OUTPUT"; then msgfailoutput 'compiler detected undefined behavior' "$OUTPUT" "$@" @@ -1560,7 +1573,7 @@ testfailure() { msgtest 'Test for failure in execution of' "$*" fi local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testfailure.output" - if "$@" >${OUTPUT} 2>&1; then + if "$@" >"${OUTPUT}" 2>&1; then local EXITCODE=$? msgfailoutput "exitcode $EXITCODE" "$OUTPUT" "$@" else @@ -1718,18 +1731,18 @@ aptautotest() { local TESTCALL="$1" local CMD="$2" local FIRSTOPT="$3" - local AUTOTEST="aptautotest_$(basename "$CMD" | tr -d '-')_$(echo "$FIRSTOPT" | tr -d '-')" + local AUTOTEST="aptautotest_$(echo "${CMD##*/}_${FIRSTOPT}" | tr -d '-')" if command -v $AUTOTEST >/dev/null; then shift 3 # save and restore the *.output files from other tests # as we might otherwise override them in these automatic tests - rm -rf ${TMPWORKINGDIRECTORY}/rootdir/tmp-before - mv ${TMPWORKINGDIRECTORY}/rootdir/tmp ${TMPWORKINGDIRECTORY}/rootdir/tmp-before - mkdir ${TMPWORKINGDIRECTORY}/rootdir/tmp + rm -rf "${TMPWORKINGDIRECTORY}/rootdir/tmp-before" + mv "${TMPWORKINGDIRECTORY}/rootdir/tmp" "${TMPWORKINGDIRECTORY}/rootdir/tmp-before" + mkdir "${TMPWORKINGDIRECTORY}/rootdir/tmp" $AUTOTEST "$TESTCALL" "$@" - rm -rf ${TMPWORKINGDIRECTORY}/rootdir/tmp-aptautotest - mv ${TMPWORKINGDIRECTORY}/rootdir/tmp ${TMPWORKINGDIRECTORY}/rootdir/tmp-aptautotest - mv ${TMPWORKINGDIRECTORY}/rootdir/tmp-before ${TMPWORKINGDIRECTORY}/rootdir/tmp + rm -rf "${TMPWORKINGDIRECTORY}/rootdir/tmp-aptautotest" + mv "${TMPWORKINGDIRECTORY}/rootdir/tmp" "${TMPWORKINGDIRECTORY}/rootdir/tmp-aptautotest" + mv "${TMPWORKINGDIRECTORY}/rootdir/tmp-before" "${TMPWORKINGDIRECTORY}/rootdir/tmp" fi } @@ -1743,9 +1756,12 @@ aptautotest_aptget_update() { testfilestats "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:755" testfilestats "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:755" # all copied files are properly chmodded + local backupIFS="$IFS" + IFS="$(printf "\n\b")" for file in $(find "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists" -type f ! -name 'lock'); do testfilestats "$file" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:644" done + IFS="$backupIFS" if [ "$TESTCALL" = 'testsuccess' ]; then # failure cases can retain partial files and such testempty find "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/partial" -mindepth 1 ! \( -name 'lock' -o -name '*.FAILED' \) diff --git a/test/integration/test-acquire-same-file-multiple-times b/test/integration/test-acquire-same-file-multiple-times index a850f897c..255a71a33 100755 --- a/test/integration/test-acquire-same-file-multiple-times +++ b/test/integration/test-acquire-same-file-multiple-times @@ -2,19 +2,19 @@ set -e TESTDIR=$(readlink -f $(dirname $0)) -. $TESTDIR/framework +. "$TESTDIR/framework" setupenvironment configarchitecture 'amd64' TESTFILE="$TESTDIR/framework" -cp $TESTFILE aptarchive/foo +cp "$TESTFILE" aptarchive/foo APTARCHIVE="$(readlink -f ./aptarchive)" filedown() { msgtest 'Downloading the same URI twice over file' "$1" - testsuccess --nomsg apthelper download-file file:///$APTARCHIVE/foo ./downloaded/foo1 '' file:///$APTARCHIVE/foo ./downloaded/foo2 '' -o Debug::pkgAcquire::Worker=1 + testsuccess --nomsg apthelper download-file "file:///$APTARCHIVE/foo" ./downloaded/foo1 '' "file:///$APTARCHIVE/foo" ./downloaded/foo2 '' -o Debug::pkgAcquire::Worker=1 cp rootdir/tmp/testsuccess.output download.log - testsuccess cmp $TESTFILE ./downloaded/foo1 + testsuccess cmp "$TESTFILE" ./downloaded/foo1 testsuccess cmp ./downloaded/foo1 ./downloaded/foo2 testequal '1' grep -c '200%20URI%20Start' ./download.log testequal '1' grep -c '201%20URI%20Done' ./download.log @@ -23,19 +23,19 @@ filedown() { testrun() { $1 'no partial' - cp $TESTFILE ./downloaded/foo1 + cp "$TESTFILE" ./downloaded/foo1 $1 'complete partial 1' - cp $TESTFILE ./downloaded/foo2 + cp "$TESTFILE" ./downloaded/foo2 $1 'complete partial 2' - cp $TESTFILE ./downloaded/foo1 - cp $TESTFILE ./downloaded/foo2 + cp "$TESTFILE" ./downloaded/foo1 + cp "$TESTFILE" ./downloaded/foo2 $1 'complete partial 1+2' - dd if=$TESTFILE of=./downloaded/foo1 bs=500 count=1 2>/dev/null + dd if="$TESTFILE" of=./downloaded/foo1 bs=500 count=1 2>/dev/null $1 'partial partial 1' - dd if=$TESTFILE of=./downloaded/foo2 bs=500 count=1 2>/dev/null + dd if="$TESTFILE" of=./downloaded/foo2 bs=500 count=1 2>/dev/null $1 'partial partial 2' - dd if=$TESTFILE of=./downloaded/foo1 bs=500 count=1 2>/dev/null - dd if=$TESTFILE of=./downloaded/foo2 bs=500 count=1 2>/dev/null + dd if="$TESTFILE" of=./downloaded/foo1 bs=500 count=1 2>/dev/null + dd if="$TESTFILE" of=./downloaded/foo2 bs=500 count=1 2>/dev/null $1 'partial partial 1+2' } testrun 'filedown' @@ -46,7 +46,7 @@ httpdown() { msgtest 'Downloading the same URI to different files' 'twice over http' testsuccess --nomsg apthelper download-file http://localhost:8080/foo ./downloaded/foo1 '' http://localhost:8080/foo ./downloaded/foo2 '' -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::http=1 cp rootdir/tmp/testsuccess.output download.log - testsuccess cmp $TESTDIR/framework ./downloaded/foo1 + testsuccess cmp "$TESTDIR/framework" ./downloaded/foo1 testsuccess cmp ./downloaded/foo1 ./downloaded/foo2 testequal '1' grep -c '200%20URI%20Start' ./download.log testequal '1' grep -c '201%20URI%20Done' ./download.log @@ -58,7 +58,7 @@ httpredirectdown() { msgtest 'Redirect leads' 'first URI to the second URI' testsuccess --nomsg apthelper download-file http://localhost:8080/foo2 ./downloaded/foo1 '' http://localhost:8080/foo ./downloaded/foo2 '' -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::http=1 cp rootdir/tmp/testsuccess.output download.log - testsuccess cmp $TESTDIR/framework ./downloaded/foo1 + testsuccess cmp "$TESTDIR/framework" ./downloaded/foo1 testsuccess cmp ./downloaded/foo1 ./downloaded/foo2 testequal '1' grep -c '200%20URI%20Start' ./download.log testequal '1' grep -c '103%20Redirect' ./download.log @@ -71,7 +71,7 @@ httpsamedown() { msgtest 'Downloading two files via the same URI to' 'the same file' testsuccess --nomsg apthelper download-file http://localhost:8080/foo ./downloaded/foo1 '' http://localhost:8080/foo ./downloaded/foo1 '' -o Debug::pkgAcquire::Worker=1 cp rootdir/tmp/testsuccess.output download.log - testsuccess cmp $TESTDIR/framework ./downloaded/foo1 + testsuccess cmp "$TESTDIR/framework" ./downloaded/foo1 testequal '1' grep -c '200%20URI%20Start' ./download.log testequal '1' grep -c '201%20URI%20Done' ./download.log rm -f ./downloaded/foo1 diff --git a/test/integration/test-acquire-same-repository-multiple-times b/test/integration/test-acquire-same-repository-multiple-times index abdfef8f0..19a18cb63 100755 --- a/test/integration/test-acquire-same-repository-multiple-times +++ b/test/integration/test-acquire-same-repository-multiple-times @@ -21,11 +21,14 @@ done # install a slowed down file: otherwise its to fast to reproduce combining NEWMETHODS="$(readlink -f rootdir)/usr/lib/apt/methods" OLDMETHODS="$(readlink -f rootdir/usr/lib/apt/methods)" -rm $NEWMETHODS -mkdir $NEWMETHODS -for METH in $(find $OLDMETHODS ! -type d); do - ln -s $OLDMETHODS/$(basename $METH) $NEWMETHODS +rm "$NEWMETHODS" +mkdir "$NEWMETHODS" +backupIFS="$IFS" +IFS="$(printf "\n\b")" +for METH in $(find "$OLDMETHODS" ! -type d); do + ln -s "$OLDMETHODS/$(basename "$METH")" "$NEWMETHODS" done +IFS="$backupIFS" rm "${NEWMETHODS}/file" "${NEWMETHODS}/http" cat >"${NEWMETHODS}/file" < file.lst - testequal "$(find $(readlink -f ./rootdir/var/lib/apt/lists) -name '*_dists_*' \( ! -name '*InRelease' \) -type f | sort)" cat file.lst + testequal "$(find "$(readlink -f ./rootdir/var/lib/apt/lists)" -name '*_dists_*' \( ! -name '*InRelease' \) -type f | sort)" cat file.lst testsuccess aptcache policy testequal "foo: Installed: (none) diff --git a/test/integration/test-allow b/test/integration/test-allow index 3d773ee95..0275fbec8 100755 --- a/test/integration/test-allow +++ b/test/integration/test-allow @@ -4,7 +4,7 @@ # set -e -TESTDIR=$(readlink -f $(dirname $0)) +TESTDIR="$(readlink -f "$(dirname $0)")" . $TESTDIR/framework setupenvironment configarchitecture 'amd64' diff --git a/test/integration/test-apt-get-download b/test/integration/test-apt-get-download index c4ebd03bb..25c8b7761 100755 --- a/test/integration/test-apt-get-download +++ b/test/integration/test-apt-get-download @@ -64,7 +64,7 @@ testdownload apt_1.0_all.deb apt stable testdownload apt_2.0_all.deb apt DEBFILE="$(readlink -f ../aptarchive)/pool/apt_2.0_all.deb" -testequal "'file://${DEBFILE}' apt_2.0_all.deb $(stat -c%s $DEBFILE) SHA512:$(sha512sum $DEBFILE | cut -d' ' -f 1)" aptget download apt --print-uris +testequal "'file://${DEBFILE}' apt_2.0_all.deb $(stat -c%s "$DEBFILE") SHA512:$(sha512sum "$DEBFILE" | cut -d' ' -f 1)" aptget download apt --print-uris # deb:677887 testequal "E: Can't find a source to download version '1.0' of 'vrms:i386'" aptget download vrms --print-uris @@ -83,7 +83,7 @@ testsuccess test -s apt_2.0_all.deb # restore "root" rights cd "$OLDPWD" -chmod -f -R +w $PWD/rootdir/var/cache/apt/archives +chmod -f -R +w "$PWD/rootdir/var/cache/apt/archives" rm -rf rootdir/var/cache/apt/archives/ # file: debs aren't copied to archives, so change to http which obviously are diff --git a/test/integration/test-apt-get-source-authenticated b/test/integration/test-apt-get-source-authenticated index da63f7cb3..720d2a454 100755 --- a/test/integration/test-apt-get-source-authenticated +++ b/test/integration/test-apt-get-source-authenticated @@ -17,8 +17,8 @@ buildsimplenativepackage 'foo' 'all' '2.0' setupaptarchive --no-update -APTARCHIVE=$(readlink -f ./aptarchive) -rm -f $APTARCHIVE/dists/unstable/*Release* +APTARCHIVE="$(readlink -f ./aptarchive)" +find "$APTARCHIVE/dists/unstable" -name '*Release*' -delete # update without authenticated InRelease file testwarning aptget update --allow-insecure-repositories diff --git a/test/integration/test-apt-get-update-unauth-warning b/test/integration/test-apt-get-update-unauth-warning index 35825ee24..b2d79eb2b 100755 --- a/test/integration/test-apt-get-update-unauth-warning +++ b/test/integration/test-apt-get-update-unauth-warning @@ -16,8 +16,8 @@ buildsimplenativepackage 'foo' 'all' '2.0' setupaptarchive --no-update -APTARCHIVE=$(readlink -f ./aptarchive) -rm -f $APTARCHIVE/dists/unstable/*Release* +APTARCHIVE="$(readlink -f ./aptarchive)" +find "$APTARCHIVE/dists/unstable" -name '*Release*' -delete # update without authenticated files leads to warning testfailureequal "Get:1 file:$APTARCHIVE unstable InRelease diff --git a/test/integration/test-apt-progress-fd-conffile b/test/integration/test-apt-progress-fd-conffile index 085d5e871..ec3ded85d 100755 --- a/test/integration/test-apt-progress-fd-conffile +++ b/test/integration/test-apt-progress-fd-conffile @@ -1,8 +1,8 @@ #!/bin/sh set -e -TESTDIR=$(readlink -f $(dirname $0)) -. $TESTDIR/framework +TESTDIR="$(readlink -f "$(dirname "$0")")" +. "$TESTDIR/framework" setupenvironment configarchitecture 'native' @@ -10,18 +10,18 @@ configarchitecture 'native' # old conffile setupsimplenativepackage 'compiz-core' 'native' '1.0' 'unstable' BUILDDIR='incoming/compiz-core-1.0' -mkdir -p ${BUILDDIR}/debian/compiz-core/etc -echo 'foo=bar;' > ${BUILDDIR}/compiz.conf -echo 'compiz.conf /etc/compiz.conf' >> ${BUILDDIR}/debian/install +mkdir -p "${BUILDDIR}/debian/compiz-core/etc" +echo 'foo=bar;' > "${BUILDDIR}/compiz.conf" +echo 'compiz.conf /etc/compiz.conf' >> "${BUILDDIR}/debian/install" buildpackage "$BUILDDIR" 'unstable' 'main' 'native' rm -rf "$BUILDDIR" # new conffile setupsimplenativepackage 'compiz-core' 'native' '2.0' 'unstable' BUILDDIR='incoming/compiz-core-2.0' -mkdir -p ${BUILDDIR}/debian/compiz-core/etc -echo 'foo2=bar2;' > ${BUILDDIR}/compiz.conf -echo 'compiz.conf /etc/compiz.conf' >> ${BUILDDIR}/debian/install +mkdir -p "${BUILDDIR}/debian/compiz-core/etc" +echo 'foo2=bar2;' > "${BUILDDIR}/compiz.conf" +echo 'compiz.conf /etc/compiz.conf' >> "${BUILDDIR}/debian/install" buildpackage "$BUILDDIR" 'unstable' 'main' 'native' rm -rf "$BUILDDIR" @@ -30,21 +30,15 @@ setupaptarchive testsuccess aptget install compiz-core=1.0 # fake conffile change -echo "meep" >> rootdir/etc/compiz.conf/compiz.conf +echo 'meep' >> rootdir/etc/compiz.conf/compiz.conf # FIXME: Is there really no way to see if dpkg actually prompts? msgtest 'Test for successful execution of' 'apt-get install compiz-core=2.0' -OUTPUT=$(mktemp) -addtrap "rm $OUTPUT;" +OUTPUT="$(mktemp)" +addtrap "rm \"$OUTPUT\";" exec 3> apt-progress.log -if aptget install compiz-core=2.0 -o APT::Status-Fd=3 -o Dpkg::Use-Pty=false -o dpkg::options::='--force-confold' >${OUTPUT} 2>&1; then - msgpass -else - echo - cat $OUTPUT - msgfail -fi +testsuccess --nomsg aptget install compiz-core=2.0 -o APT::Status-Fd=3 -o Dpkg::Use-Pty=false -o dpkg::options::='--force-confold' # and ensure there is a conffile message in the file msgtest 'Test status fd for an included' 'pmconffile msg' -grep -q "pmconffile:/etc/compiz.conf/compiz.conf" apt-progress.log && msgpass || (cat apt-progress.log && msgfail) +testsuccess --nomsg grep "pmconffile:/etc/compiz.conf/compiz.conf" apt-progress.log diff --git a/test/integration/test-apt-translation-has-no-packages b/test/integration/test-apt-translation-has-no-packages index fec525568..4c57623b1 100755 --- a/test/integration/test-apt-translation-has-no-packages +++ b/test/integration/test-apt-translation-has-no-packages @@ -24,11 +24,11 @@ fi buildsimplenativepackage 'foo' 'all' '1.0' setupaptarchive -APTARCHIVE=$(readlink -f ./aptarchive) +APTARCHIVE="$(readlink -f ./aptarchive)" # corrupt the Translation-en file to look like a regular Packages file rm rootdir/var/cache/apt/*.bin -cp $APTARCHIVE/dists/unstable/main/binary-amd64/Packages \ +cp "$APTARCHIVE/dists/unstable/main/binary-amd64/Packages" \ rootdir/var/lib/apt/lists/*Translation-en # ensure that there is no Version for the package foo generated out of diff --git a/test/integration/test-apt-update-nofallback b/test/integration/test-apt-update-nofallback index dae537c32..e82483da3 100755 --- a/test/integration/test-apt-update-nofallback +++ b/test/integration/test-apt-update-nofallback @@ -9,14 +9,14 @@ set -e simulate_mitm_and_inject_evil_package() { redatereleasefiles '+1 hour' - rm -f $APTARCHIVE/dists/unstable/InRelease - rm -f $APTARCHIVE/dists/unstable/Release.gpg + rm -f "$APTARCHIVE/dists/unstable/InRelease" + rm -f "$APTARCHIVE/dists/unstable/Release.gpg" inject_evil_package } inject_evil_package() { - cat > $APTARCHIVE/dists/unstable/main/binary-i386/Packages < "$APTARCHIVE/dists/unstable/main/binary-i386/Packages" < @@ -46,11 +46,7 @@ assert_repo_is_intact() testsuccess aptget source foo --print-uris LISTDIR=rootdir/var/lib/apt/lists - if ! ( ls $LISTDIR/*InRelease >/dev/null 2>&1 || - ls $LISTDIR/*Release.gpg >/dev/null 2>&1 ); then - echo "Can not find InRelease/Release.gpg in $(ls $LISTDIR)" - msgfail - fi + testempty find "$LISTDIR" -name 'InRelease' -o -name 'Release.gpg' } setupaptarchive_with_lists_clean() @@ -75,7 +71,7 @@ test_from_release_gpg_to_unsigned() { # setup archive with Release/Release.gpg (but no InRelease) setupaptarchive_with_lists_clean - rm $APTARCHIVE/dists/unstable/InRelease + rm "$APTARCHIVE/dists/unstable/InRelease" testsuccess aptget update listcurrentlistsdirectory > lists.before @@ -93,7 +89,7 @@ test_from_inrelease_to_unsigned_with_override() # simulate moving to a unsigned but otherwise valid repo simulate_mitm_and_inject_evil_package generatereleasefiles '+2 hours' - find $APTARCHIVE -name '*Packages*' -exec touch -d '+2 hours' {} \; + find "$APTARCHIVE" -name '*Packages*' -exec touch -d '+2 hours' {} \; # and ensure we can update to it (with enough force) testwarning aptget update --allow-insecure-repositories \ @@ -128,8 +124,8 @@ test_cve_2012_0214() listcurrentlistsdirectory > lists.before # do what CVE-2012-0214 did - rm $APTARCHIVE/dists/unstable/InRelease - rm $APTARCHIVE/dists/unstable/Release.gpg + rm "$APTARCHIVE/dists/unstable/InRelease" + rm "$APTARCHIVE/dists/unstable/Release.gpg" inject_evil_package # build valid Release file aptftparchive -qq release ./aptarchive > aptarchive/dists/unstable/Release @@ -149,7 +145,7 @@ test_subvert_inrelease() listcurrentlistsdirectory > lists.before # replace InRelease with something else - mv $APTARCHIVE/dists/unstable/Release $APTARCHIVE/dists/unstable/InRelease + mv "$APTARCHIVE/dists/unstable/Release" "$APTARCHIVE/dists/unstable/InRelease" testfailuremsg "W: Failed to fetch file:${APTARCHIVE}/dists/unstable/InRelease Clearsigned file isn't valid, got 'NOSPLIT' (does the network require authentication?) E: Some index files failed to download. They have been ignored, or old ones used instead." aptget update @@ -167,7 +163,7 @@ test_inrelease_to_invalid_inrelease() listcurrentlistsdirectory > lists.before # now remove InRelease and subvert Release do no longer verify - sed -i 's/^Codename:.*/Codename: evil!/' $APTARCHIVE/dists/unstable/InRelease + sed -i 's/^Codename:.*/Codename: evil!/' "$APTARCHIVE/dists/unstable/InRelease" inject_evil_package testwarningequal "W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: file:${APTARCHIVE} unstable InRelease: The following signatures were invalid: BADSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) @@ -184,12 +180,12 @@ test_release_gpg_to_invalid_release_release_gpg() { # setup archive with InRelease setupaptarchive_with_lists_clean - rm $APTARCHIVE/dists/unstable/InRelease + rm "$APTARCHIVE/dists/unstable/InRelease" testsuccess aptget update listcurrentlistsdirectory > lists.before # now subvert Release do no longer verify - echo "Some evil data" >> $APTARCHIVE/dists/unstable/Release + echo "Some evil data" >> "$APTARCHIVE/dists/unstable/Release" inject_evil_package testwarningequal "W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: file:${APTARCHIVE} unstable Release: The following signatures were invalid: BADSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) @@ -213,7 +209,7 @@ buildsimplenativepackage 'foo' 'all' '2.0' # setup the archive and ensure we have a single package that installs fine setupaptarchive -APTARCHIVE=$(readlink -f ./aptarchive) +APTARCHIVE="$(readlink -f ./aptarchive)" assert_repo_is_intact # test the various cases where a repo may go from signed->unsigned diff --git a/test/integration/test-apt-update-rollback b/test/integration/test-apt-update-rollback index 503b81985..12d541055 100755 --- a/test/integration/test-apt-update-rollback +++ b/test/integration/test-apt-update-rollback @@ -23,14 +23,14 @@ create_fresh_archive() } add_new_package() { - insertpackage "unstable" "new" "all" "1.0" - insertsource "unstable" "new" "all" "1.0" + insertpackage 'unstable' 'new' 'all' '1.0' + insertsource 'unstable' 'new' 'all' '1.0' setupaptarchive --no-update "$@" } break_repository_sources_index() { - printf 'xxx' > $APTARCHIVE/dists/unstable/main/source/Sources + printf 'xxx' > "$APTARCHIVE/dists/unstable/main/source/Sources" compressfile "$APTARCHIVE/dists/unstable/main/source/Sources" "$@" } @@ -38,7 +38,7 @@ start_with_good_inrelease() { create_fresh_archive testsuccess aptget update listcurrentlistsdirectory > lists.before - testsuccessequal "old/unstable 1.0 all" apt list -q + testsuccessequal 'old/unstable 1.0 all' apt list -q } test_inrelease_to_new_inrelease() { @@ -47,8 +47,8 @@ test_inrelease_to_new_inrelease() { add_new_package '+1hour' testsuccess aptget update -o Debug::Acquire::Transaction=1 - testsuccessequal "new/unstable 1.0 all -old/unstable 1.0 all" apt list -q + testsuccessequal 'new/unstable 1.0 all +old/unstable 1.0 all' apt list -q } test_inrelease_to_broken_hash_reverts_all() { @@ -73,8 +73,8 @@ test_inrelease_to_valid_release() { add_new_package '+1hour' # switch to a unsigned repo now - rm $APTARCHIVE/dists/unstable/InRelease - rm $APTARCHIVE/dists/unstable/Release.gpg + rm "$APTARCHIVE/dists/unstable/InRelease" + rm "$APTARCHIVE/dists/unstable/Release.gpg" # update fails testfailureequal "E: The repository 'file:${APTARCHIVE} unstable Release' is no longer signed." aptget update -qq @@ -83,8 +83,8 @@ test_inrelease_to_valid_release() { testfileequal lists.before "$(listcurrentlistsdirectory)" testsuccess aptget install old -s testfailure aptget install new -s - testsuccess ls $ROOTDIR/var/lib/apt/lists/*_InRelease - testfailure ls $ROOTDIR/var/lib/apt/lists/*_Release + testnotempty find "${ROOTDIR}/var/lib/apt/lists" -name '*_InRelease' + testempty find "${ROOTDIR}/var/lib/apt/lists" -name '*_Release' } test_inrelease_to_release_reverts_all() { @@ -93,8 +93,8 @@ test_inrelease_to_release_reverts_all() { # switch to a unsigned repo now add_new_package '+1hour' - rm $APTARCHIVE/dists/unstable/InRelease - rm $APTARCHIVE/dists/unstable/Release.gpg + rm "$APTARCHIVE/dists/unstable/InRelease" + rm "$APTARCHIVE/dists/unstable/Release.gpg" # break it break_repository_sources_index '+1hour' @@ -106,15 +106,15 @@ test_inrelease_to_release_reverts_all() { testfileequal lists.before "$(listcurrentlistsdirectory)" testsuccess aptget install old -s testfailure aptget install new -s - testsuccess ls $ROOTDIR/var/lib/apt/lists/*_InRelease - testfailure ls $ROOTDIR/var/lib/apt/lists/*_Release + testnotempty find "${ROOTDIR}/var/lib/apt/lists" -name '*_InRelease' + testempty find "${ROOTDIR}/var/lib/apt/lists" -name '*_Release' } test_unauthenticated_to_invalid_inrelease() { msgmsg 'Test UnAuthenticated to invalid InRelease reverts everything' create_fresh_archive - rm $APTARCHIVE/dists/unstable/InRelease - rm $APTARCHIVE/dists/unstable/Release.gpg + rm "$APTARCHIVE/dists/unstable/InRelease" + rm "$APTARCHIVE/dists/unstable/Release.gpg" testwarning aptget update --allow-insecure-repositories listcurrentlistsdirectory > lists.before @@ -130,7 +130,7 @@ E: There were unauthenticated packages and -y was used without --allow-unauthent E: Some index files failed to download. They have been ignored, or old ones used instead." aptget update -qq testfileequal lists.before "$(listcurrentlistsdirectory)" - testfailure ls rootdir/var/lib/apt/lists/*_InRelease + testempty find "${ROOTDIR}/var/lib/apt/lists" -maxdepth 1 -name '*_InRelease' testfailureequal "WARNING: The following packages cannot be authenticated! old E: There were unauthenticated packages and -y was used without --allow-unauthenticated" aptget install -qq -y old @@ -147,7 +147,7 @@ W: Failed to fetch file:$APTARCHIVE/dists/unstable/InRelease The following sign W: Some index files failed to download. They have been ignored, or old ones used instead." aptget update -qq testfileequal lists.before "$(listcurrentlistsdirectory)" - testsuccess ls rootdir/var/lib/apt/lists/*_InRelease + testnotempty find "${ROOTDIR}/var/lib/apt/lists" -name '*_InRelease' } test_inrelease_to_broken_gzip() { @@ -159,10 +159,10 @@ test_inrelease_to_broken_gzip() { signreleasefiles # append junk at the end of the compressed file - echo "lala" >> $APTARCHIVE/dists/unstable/main/source/Sources.gz - touch -d '+2min' $APTARCHIVE/dists/unstable/main/source/Sources.gz + echo "lala" >> "$APTARCHIVE/dists/unstable/main/source/Sources.gz" + touch -d '+2min' "$APTARCHIVE/dists/unstable/main/source/Sources.gz" # remove uncompressed file to avoid fallback - rm $APTARCHIVE/dists/unstable/main/source/Sources + rm "$APTARCHIVE/dists/unstable/main/source/Sources" testfailure aptget update testsuccess grep 'Hash Sum mismatch' rootdir/tmp/testfailure.output @@ -177,9 +177,9 @@ configarchitecture "i386" # setup the archive and ensure we have a single package that installs fine setupaptarchive -APTARCHIVE=$(readlink -f ./aptarchive) -ROOTDIR=${TMPWORKINGDIRECTORY}/rootdir -APTARCHIVE_LISTS="$(echo $APTARCHIVE | tr "/" "_" )" +APTARCHIVE="$(readlink -f ./aptarchive)" +ROOTDIR="${TMPWORKINGDIRECTORY}/rootdir" +APTARCHIVE_LISTS="$(echo "$APTARCHIVE" | tr "/" "_" )" # test the following cases: # - InRelease -> broken InRelease revert to previous state diff --git a/test/integration/test-bug-590041-prefer-non-virtual-packages b/test/integration/test-bug-590041-prefer-non-virtual-packages index 4e2a5142c..b05ef5539 100755 --- a/test/integration/test-bug-590041-prefer-non-virtual-packages +++ b/test/integration/test-bug-590041-prefer-non-virtual-packages @@ -38,7 +38,7 @@ Section: oldlibs Size: 44168 " -cat <<-EOF >aptarchive/Packages +cat >aptarchive/Packages <${OUTPUT} 2>&1; then - msgpass -else - echo - cat $OUTPUT - msgfail -fi +testsuccess aptget update -o Debug::Acquire::gpg=1 unset TMPDIR testsuccessequal 'coolstuff' aptcache pkgnames diff --git a/test/integration/test-bug-738785-switch-protocol b/test/integration/test-bug-738785-switch-protocol index e86f28824..d925a70bb 100755 --- a/test/integration/test-bug-738785-switch-protocol +++ b/test/integration/test-bug-738785-switch-protocol @@ -42,12 +42,15 @@ testdpkginstalled 'apt' # install a slowed down file: otherwise its to fast to reproduce combining NEWMETHODS="$(readlink -f rootdir)/usr/lib/apt/methods" OLDMETHODS="$(readlink -f rootdir/usr/lib/apt/methods)" -rm $NEWMETHODS -mkdir $NEWMETHODS -for METH in $(find $OLDMETHODS ! -type d); do - ln -s $OLDMETHODS/$(basename $METH) $NEWMETHODS +rm "$NEWMETHODS" +mkdir "$NEWMETHODS" +backupIFS="$IFS" +IFS="$(printf "\n\b")" +for METH in $(find "$OLDMETHODS" ! -type d); do + ln -s "$OLDMETHODS/$(basename "$METH")" "$NEWMETHODS" done -rm $NEWMETHODS/https +IFS="$backupIFS" +rm "$NEWMETHODS/https" cd downloaded testfailureequal "E: The method driver $(readlink -f './../')/rootdir/usr/lib/apt/methods/https could not be found. @@ -56,7 +59,7 @@ testfailure test -e apt_1.0_all.deb cd - >/dev/null # revert to all methods -ln -s $OLDMETHODS/https $NEWMETHODS +ln -s "$OLDMETHODS/https" "$NEWMETHODS" # check that downgrades from https to http are not allowed webserverconfig 'aptwebserver::support::http' 'true' diff --git a/test/integration/test-bug-769609-triggers-still-pending-after-run b/test/integration/test-bug-769609-triggers-still-pending-after-run index 146fa766b..665c4e2db 100755 --- a/test/integration/test-bug-769609-triggers-still-pending-after-run +++ b/test/integration/test-bug-769609-triggers-still-pending-after-run @@ -20,13 +20,13 @@ buildtriggerpackages() { local TYPE="$1" setupsimplenativepackage "triggerable-$TYPE" 'all' '1.0' 'unstable' "Depends: trigdepends-$TYPE" BUILDDIR="incoming/triggerable-${TYPE}-1.0" - cat >${BUILDDIR}/debian/postinst <"${BUILDDIR}/debian/postinst" < ${BUILDDIR}/debian/triggers + echo "$TYPE /usr/share/doc" > "${BUILDDIR}/debian/triggers" buildpackage "$BUILDDIR" 'unstable' 'main' 'native' rm -rf "$BUILDDIR" buildsimplenativepackage "trigdepends-$TYPE" 'all' '1.0' 'unstable' diff --git a/test/integration/test-disappearing-packages b/test/integration/test-disappearing-packages index 3b1e1bd7c..ffe692c10 100755 --- a/test/integration/test-disappearing-packages +++ b/test/integration/test-disappearing-packages @@ -1,30 +1,30 @@ #!/bin/sh set -e -TESTDIR=$(readlink -f $(dirname $0)) -. $TESTDIR/framework +TESTDIR="$(readlink -f "$(dirname "$0")")" +. "$TESTDIR/framework" setupenvironment configarchitecture 'native' -buildsimplenativepackage "old-pkg" "native" "1.0" "stable" -buildsimplenativepackage "unrelated" "all" "0.5" "unstable" +buildsimplenativepackage 'old-pkg' 'native' '1.0' 'stable' +buildsimplenativepackage 'unrelated' 'all' '0.5' 'unstable' -setupsimplenativepackage "new-pkg" "native" "2.0" "unstable" "Provides: old-pkg +setupsimplenativepackage 'new-pkg' 'native' '2.0' 'unstable' 'Provides: old-pkg Replaces: old-pkg -Conflicts: old-pkg (<< 2.0)" -BUILDDIR="incoming/new-pkg-2.0" -echo "/usr/share/doc/new-pkg /usr/share/doc/old-pkg" > ${BUILDDIR}/debian/new-pkg.links -buildpackage "$BUILDDIR" "unstable" "main" +Conflicts: old-pkg (<< 2.0)' +BUILDDIR='incoming/new-pkg-2.0' +echo '/usr/share/doc/new-pkg /usr/share/doc/old-pkg' > "${BUILDDIR}/debian/new-pkg.links" +buildpackage "$BUILDDIR" 'unstable' 'main' rm -rf "$BUILDDIR" -setupsimplenativepackage "old-pkg" "all" "2.0" "unstable" "Depends: new-pkg" -BUILDDIR="incoming/old-pkg-2.0" -echo "/usr/share/doc/new-pkg /usr/share/doc/old-pkg" > ${BUILDDIR}/debian/old-pkg.links +setupsimplenativepackage 'old-pkg' 'all' '2.0' 'unstable' 'Depends: new-pkg' +BUILDDIR='incoming/old-pkg-2.0' +echo '/usr/share/doc/new-pkg /usr/share/doc/old-pkg' > "${BUILDDIR}/debian/old-pkg.links" echo " override_dh_link: rm -rf debian/old-pkg/usr/share/doc/old-pkg/ - dh_link" >> ${BUILDDIR}/debian/rules -buildpackage "$BUILDDIR" "unstable" "main" + dh_link" >> "${BUILDDIR}/debian/rules" +buildpackage "$BUILDDIR" 'unstable' 'main' rm -rf "$BUILDDIR" setupaptarchive @@ -33,22 +33,22 @@ testsuccess aptget install old-pkg=1.0 --trivial-only testmarkedauto # old-pkg is manual installed -CMD="aptget dist-upgrade -y -q=0" -msgtest "Test for equality of" "$CMD" -COMPAREFILE=$(mktemp) -echo "The following package disappeared from your system as +CMD='aptget dist-upgrade -y -q=0' +msgtest 'Test for equality of' "$CMD" +COMPAREFILE="$(mktemp)" +echo 'The following package disappeared from your system as all files have been overwritten by other packages: old-pkg -Note: This is done automatically and on purpose by dpkg." > $COMPAREFILE -$CMD 2>&1 | tail -n 4 | diff -u $COMPAREFILE - && msgpass || msgfail -rm $COMPAREFILE +Note: This is done automatically and on purpose by dpkg.' > "$COMPAREFILE" +$CMD 2>&1 | tail -n 4 | diff -u "$COMPAREFILE" - && msgpass || msgfail +rm "$COMPAREFILE" sed -i rootdir/var/log/apt/history.log -e '/^Commandline: / d' -e '/^Start-Date: / d' -e '/^End-Date: / d' -e "s#:$(getarchitecture 'native') #:native #" -testfileequal "rootdir/var/log/apt/history.log" " +testfileequal 'rootdir/var/log/apt/history.log' ' Install: old-pkg:native (1.0) Install: new-pkg:native (2.0, automatic) Upgrade: old-pkg:native (1.0, 2.0) -Disappeared: old-pkg (1.0)" +Disappeared: old-pkg (1.0)' testmarkedauto # new-pkg should have get the manual flag from old-pkg diff --git a/test/integration/test-failing-maintainer-scripts b/test/integration/test-failing-maintainer-scripts index 953506aa5..0ea22b04d 100755 --- a/test/integration/test-failing-maintainer-scripts +++ b/test/integration/test-failing-maintainer-scripts @@ -13,7 +13,7 @@ createfailure() { setupsimplenativepackage "failure-$1" 'native' '1.0' 'unstable' 'Depends: dependee' BUILDDIR="incoming/failure-$1-1.0" echo '#!/bin/sh -exit 29' > ${BUILDDIR}/debian/$1 +exit 29' > "${BUILDDIR}/debian/$1" buildpackage "$BUILDDIR" 'unstable' 'main' 'native' rm -rf "$BUILDDIR" } @@ -31,40 +31,40 @@ APTHOOK="${TMPWORKINGDIRECTORY}/rootdir/usr/bin/apthook" echo '#!/bin/sh echo "$1: START" echo "$1: MaiN" -echo "$1: ENd"' > $APTHOOK -chmod +x $APTHOOK +echo "$1: ENd"' > "$APTHOOK" +chmod +x "$APTHOOK" echo "DPKG::Pre-Invoke:: \"${APTHOOK} PRE\"; DPKG::Post-Invoke:: \"${APTHOOK} POST\";" > rootdir/etc/apt/apt.conf.d/99apthooks testmyfailure() { local PROGRESS='rootdir/tmp/progress.log' - exec 3> $PROGRESS + exec 3> "$PROGRESS" testfailure "$@" -o APT::Status-Fd=3 msgtest 'Test for failure message of maintainerscript in' 'console log' local TEST='rootdir/tmp/testfailure.output' if grep -q 'exit status 29' "$TEST"; then msgpass else - cat $TEST + cat "$TEST" msgfail fi msgtest 'Test for proper execution of invoke scripts in' 'console log' - if grep -q '^PRE: START$' $TEST && - grep -q '^PRE: MaiN$' $TEST && - grep -q '^PRE: ENd$' $TEST && - grep -q '^POST: START$' $TEST && - grep -q '^POST: MaiN$' $TEST && - grep -q '^POST: ENd$' $TEST; then + if grep -q '^PRE: START$' "$TEST" && + grep -q '^PRE: MaiN$' "$TEST" && + grep -q '^PRE: ENd$' "$TEST" && + grep -q '^POST: START$' "$TEST" && + grep -q '^POST: MaiN$' "$TEST" && + grep -q '^POST: ENd$' "$TEST"; then msgpass else - cat $TEST + cat "$TEST" msgfail fi msgtest 'Test for failure message of maintainerscript in' 'progress log' if grep -q '^pmerror:.\+exit status 29$' "$PROGRESS"; then msgpass else - cat $PROGRESS + cat "$PROGRESS" msgfail fi testmarkedauto 'dependee' diff --git a/test/integration/test-kernel-helper-autoremove b/test/integration/test-kernel-helper-autoremove index a110d5d52..5e9b9f59a 100755 --- a/test/integration/test-kernel-helper-autoremove +++ b/test/integration/test-kernel-helper-autoremove @@ -29,7 +29,7 @@ testsuccess aptmark hold "${CURRENTKERNEL}-rt" testprotected() { rm -f rootdir/etc/apt/apt.conf.d/01autoremove-kernels protected.list - testsuccess runapt sh ${TESTDIR}/../../debian/apt.auto-removal.sh "$@" + testsuccess runapt sh "${TESTDIR}/../../debian/apt.auto-removal.sh" "$@" testfailure test -s rootdir/tmp/testsuccess.output msgtest 'Check kernel autoremoval protection list' 'is created' diff --git a/test/integration/test-pdiff-usage b/test/integration/test-pdiff-usage index 62c87fe08..d60a81b21 100755 --- a/test/integration/test-pdiff-usage +++ b/test/integration/test-pdiff-usage @@ -10,7 +10,7 @@ confighashes 'SHA1' 'SHA256' buildaptarchive setupflataptarchive -changetowebserver +changetowebserver -o aptwebserver::support::modified-since=false PKGFILE="${TESTDIR}/$(echo "$(basename $0)" | sed 's#^test-#Packages-#')" diff --git a/test/integration/test-releasefile-verification b/test/integration/test-releasefile-verification index 60aa4421a..c5b9f147f 100755 --- a/test/integration/test-releasefile-verification +++ b/test/integration/test-releasefile-verification @@ -23,10 +23,10 @@ prepare() { fi fi for release in $(find rootdir/var/lib/apt/lists 2> /dev/null); do - touch -d 'now - 1 year' $release + touch -d 'now - 1 year' "$release" done aptget clean - cp $1 aptarchive/Packages + cp "$1" aptarchive/Packages find aptarchive -name 'Release' -delete compressfile 'aptarchive/Packages' "$DATE" generatereleasefiles "$DATE" @@ -89,7 +89,7 @@ E: There were unauthenticated packages and -y was used without --allow-unauthent # fake our downloadable file touch aptarchive/apt.deb -PKGFILE="${TESTDIR}/$(echo "$(basename $0)" | sed 's#^test-#Packages-#')" +PKGFILE="${TESTDIR}/$(echo "$(basename "$0")" | sed 's#^test-#Packages-#')" updatewithwarnings() { testwarning aptget update -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1 @@ -97,97 +97,97 @@ updatewithwarnings() { } runtest() { - prepare ${PKGFILE} + prepare "${PKGFILE}" rm -rf rootdir/var/lib/apt/lists signreleasefiles 'Joe Sixpack' find aptarchive/ -name "$DELETEFILE" -delete msgmsg 'Cold archive signed by' 'Joe Sixpack' testsuccess aptget update - testsuccessequal "$(cat ${PKGFILE}) + testsuccessequal "$(cat "${PKGFILE}") " aptcache show apt installaptold - prepare ${PKGFILE}-new + prepare "${PKGFILE}-new" signreleasefiles 'Joe Sixpack' find aptarchive/ -name "$DELETEFILE" -delete msgmsg 'Good warm archive signed by' 'Joe Sixpack' testsuccess aptget update - testsuccessequal "$(cat ${PKGFILE}-new) + testsuccessequal "$(cat "${PKGFILE}-new") " aptcache show apt installaptnew - prepare ${PKGFILE} + prepare "${PKGFILE}" rm -rf rootdir/var/lib/apt/lists cp keys/rexexpired.pub rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg signreleasefiles 'Rex Expired' find aptarchive/ -name "$DELETEFILE" -delete msgmsg 'Cold archive signed by' 'Rex Expired' updatewithwarnings '^W: .* KEYEXPIRED' - testsuccessequal "$(cat ${PKGFILE}) + testsuccessequal "$(cat "${PKGFILE}") " aptcache show apt failaptold rm rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg - prepare ${PKGFILE} + prepare "${PKGFILE}" rm -rf rootdir/var/lib/apt/lists signreleasefiles 'Marvin Paranoid' find aptarchive/ -name "$DELETEFILE" -delete msgmsg 'Cold archive signed by' 'Marvin Paranoid' updatewithwarnings '^W: .* NO_PUBKEY' - testsuccessequal "$(cat ${PKGFILE}) + testsuccessequal "$(cat "${PKGFILE}") " aptcache show apt failaptold - prepare ${PKGFILE}-new + prepare "${PKGFILE}-new" signreleasefiles 'Joe Sixpack' find aptarchive/ -name "$DELETEFILE" -delete msgmsg 'Bad warm archive signed by' 'Joe Sixpack' testsuccess aptget update - testsuccessequal "$(cat ${PKGFILE}-new) + testsuccessequal "$(cat "${PKGFILE}-new") " aptcache show apt installaptnew - prepare ${PKGFILE} + prepare "${PKGFILE}" rm -rf rootdir/var/lib/apt/lists signreleasefiles 'Joe Sixpack' find aptarchive/ -name "$DELETEFILE" -delete msgmsg 'Cold archive signed by' 'Joe Sixpack' testsuccess aptget update - testsuccessequal "$(cat ${PKGFILE}) + testsuccessequal "$(cat "${PKGFILE}") " aptcache show apt installaptold - prepare ${PKGFILE}-new + prepare "${PKGFILE}-new" signreleasefiles 'Marvin Paranoid' find aptarchive/ -name "$DELETEFILE" -delete msgmsg 'Good warm archive signed by' 'Marvin Paranoid' updatewithwarnings '^W: .* NO_PUBKEY' - testsuccessequal "$(cat ${PKGFILE}) + testsuccessequal "$(cat "${PKGFILE}") " aptcache show apt installaptold - prepare ${PKGFILE}-new + prepare "${PKGFILE}-new" cp keys/rexexpired.pub rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg signreleasefiles 'Rex Expired' find aptarchive/ -name "$DELETEFILE" -delete msgmsg 'Good warm archive signed by' 'Rex Expired' updatewithwarnings '^W: .* KEYEXPIRED' - testsuccessequal "$(cat ${PKGFILE}) + testsuccessequal "$(cat "${PKGFILE}") " aptcache show apt installaptold rm rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg - prepare ${PKGFILE}-new + prepare "${PKGFILE}-new" signreleasefiles find aptarchive/ -name "$DELETEFILE" -delete msgmsg 'Good warm archive signed by' 'Joe Sixpack' testsuccess aptget update - testsuccessequal "$(cat ${PKGFILE}-new) + testsuccessequal "$(cat "${PKGFILE}-new") " aptcache show apt installaptnew - prepare ${PKGFILE} + prepare "${PKGFILE}" rm -rf rootdir/var/lib/apt/lists signreleasefiles 'Marvin Paranoid' find aptarchive/ -name "$DELETEFILE" -delete @@ -195,7 +195,7 @@ runtest() { local MARVIN="$(readlink -f keys/marvinparanoid.pub)" sed -i "s#^\(deb\(-src\)\?\) #\1 [signed-by=$MARVIN] #" rootdir/etc/apt/sources.list.d/* testsuccess aptget update -o Debug::pkgAcquire::Worker=1 - testsuccessequal "$(cat ${PKGFILE}) + testsuccessequal "$(cat "${PKGFILE}") " aptcache show apt installaptold @@ -208,7 +208,7 @@ runtest() { sed -i "s#^\(deb\(-src\)\?\) \[signed-by=$MARVIN\] #\1 #" rootdir/etc/apt/sources.list.d/* local MARVIN="$(aptkey --keyring $MARVIN finger | grep 'Key fingerprint' | cut -d'=' -f 2 | tr -d ' ')" - prepare ${PKGFILE} + prepare "${PKGFILE}" rm -rf rootdir/var/lib/apt/lists signreleasefiles 'Marvin Paranoid' find aptarchive/ -name "$DELETEFILE" -delete @@ -216,7 +216,7 @@ runtest() { sed -i "s#^\(deb\(-src\)\?\) #\1 [signed-by=$MARVIN] #" rootdir/etc/apt/sources.list.d/* cp keys/marvinparanoid.pub rootdir/etc/apt/trusted.gpg.d/marvinparanoid.gpg testsuccess aptget update -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1 - testsuccessequal "$(cat ${PKGFILE}) + testsuccessequal "$(cat "${PKGFILE}") " aptcache show apt installaptold rm -f rootdir/etc/apt/trusted.gpg.d/marvinparanoid.gpg @@ -231,7 +231,7 @@ runtest() { } runtest2() { - prepare ${PKGFILE} + prepare "${PKGFILE}" rm -rf rootdir/var/lib/apt/lists signreleasefiles 'Joe Sixpack' msgmsg 'Cold archive signed by' 'Joe Sixpack' @@ -239,12 +239,12 @@ runtest2() { # New .deb but now an unsigned archive. For example MITM to circumvent # package verification. - prepare ${PKGFILE}-new + prepare "${PKGFILE}-new" find aptarchive/ -name InRelease -delete find aptarchive/ -name Release.gpg -delete msgmsg 'Warm archive signed by' 'nobody' updatewithwarnings 'W: .* no longer signed.' - testsuccessequal "$(cat ${PKGFILE}-new) + testsuccessequal "$(cat "${PKGFILE}-new") " aptcache show apt failaptnew @@ -252,7 +252,7 @@ runtest2() { rm -rf rootdir/var/lib/apt/lists msgmsg 'Cold archive signed by' 'nobody' updatewithwarnings 'W: .* is not signed.' - testsuccessequal "$(cat ${PKGFILE}-new) + testsuccessequal "$(cat "${PKGFILE}-new") " aptcache show apt failaptnew } -- cgit v1.2.3