msgnmsg() { true; }
msgtest() { true; }
msgpass() { printf " ${CPASS}P${CNORMAL}"; }
- msgskip() { printf " ${CWARNING}S${CNORMAL}" >&2; }
- if [ -n "$CFAIL" ]; then
- msgfail() { printf " ${CFAIL}FAIL${CNORMAL}" >&2; EXIT_CODE=$((EXIT_CODE+1)); }
- else
- msgfail() { printf " ###FAILED###" >&2; EXIT_CODE=$((EXIT_CODE+1)); }
- fi
fi
if [ $MSGLEVEL -le 3 ]; then
msginfo() { true; }
aptitude() { runapt aptitude "$@"; }
aptextracttemplates() { runapt apt-extracttemplates "$@"; }
aptinternalsolver() { runapt "${APTINTERNALSOLVER}" "$@"; }
+aptdumpsolver() { runapt "${APTDUMPSOLVER}" "$@"; }
dpkg() {
command dpkg --root=${TMPWORKINGDIRECTORY}/rootdir --force-not-root --force-bad-path --log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log "$@"
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"
# -----
}
insertpackage() {
- local RELEASE="$1"
+ local RELEASES="$1"
local NAME="$2"
local ARCH="$3"
local VERSION="$4"
local DEPENDENCIES="$5"
local PRIORITY="${6:-optional}"
- local DESCRIPTION="${7:-"an autogenerated dummy ${NAME}=${VERSION}/${RELEASE}
+ local DESCRIPTION="${7:-"an autogenerated dummy ${NAME}=${VERSION}/${RELEASES}
If you find such a package installed on your system,
something went horribly wrong! They are autogenerated
und used only by testcases and surf no other proposeā¦"}"
local ARCHS=""
- for arch in $(getarchitecturesfromcommalist "$ARCH"); do
- if [ "$arch" = 'all' -o "$arch" = 'none' ]; then
- ARCHS="$(getarchitectures)"
- else
- ARCHS="$arch"
+ for RELEASE in $(printf '%s' "$RELEASES" | tr ',' '\n'); do
+ if [ "$RELEASE" = 'installed' ]; then
+ insertinstalledpackage "$2" "$3" "$4" "$5" "$6" "$7"
+ continue
fi
- for BUILDARCH in $ARCHS; do
- local PPATH="aptarchive/dists/${RELEASE}/main/binary-${BUILDARCH}"
- mkdir -p $PPATH
- local FILE="${PPATH}/Packages"
- echo "Package: $NAME
+ for arch in $(getarchitecturesfromcommalist "$ARCH"); do
+ if [ "$arch" = 'all' -o "$arch" = 'none' ]; then
+ ARCHS="$(getarchitectures)"
+ else
+ ARCHS="$arch"
+ fi
+ for BUILDARCH in $ARCHS; do
+ local PPATH="aptarchive/dists/${RELEASE}/main/binary-${BUILDARCH}"
+ mkdir -p $PPATH
+ local FILE="${PPATH}/Packages"
+ echo "Package: $NAME
Priority: $PRIORITY
Section: other
Installed-Size: 42
Maintainer: Joe Sixpack <joe@example.org>" >> $FILE
- test "$arch" = 'none' || echo "Architecture: $arch" >> $FILE
- echo "Version: $VERSION
+ 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
+ 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
+ done
done
- done
- mkdir -p aptarchive/dists/${RELEASE}/main/source aptarchive/dists/${RELEASE}/main/i18n
- touch aptarchive/dists/${RELEASE}/main/source/Sources
- echo "Package: $NAME
+ 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
+ done
}
insertsource() {
aptmark showauto 2>&1 | checkdiff $COMPAREFILE - && msgpass || msgfail
}
+msgfailoutput() {
+ local MSG="$1"
+ local OUTPUT="$2"
+ shift 2
+ echo >&2
+ if [ "$1" = 'grep' ]; then
+ while [ -n "$2" ]; do shift; done
+ echo "#### Complete file: $1 ####"
+ cat >&2 "$1" || true
+ echo '#### grep output ####'
+ elif [ "$1" = 'test' ]; then
+ # doesn't support ! or non-file flags
+ msgfailoutputstatfile() {
+ local FILEFLAGS='^-[bcdefgGhkLOprsStuwx]$'
+ if expr match "$1" "$FILEFLAGS" >/dev/null; then
+ echo "#### stat(2) of file: $2 ####"
+ stat "$2" || true
+ fi
+ }
+ msgfailoutputstatfile "$2" "$3"
+ while [ -n "$5" ] && [ "$4" = '-o' -o "$4" = '-a' ]; do
+ shift 3
+ msgfailoutputstatfile "$2" "$3"
+ done
+ echo '#### test output ####'
+ fi
+ cat >&2 $OUTPUT
+ msgfail "$MSG"
+}
+
testsuccess() {
if [ "$1" = '--nomsg' ]; then
shift
local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output"
if "$@" >${OUTPUT} 2>&1; then
if expr match "$1" '^apt.*' >/dev/null; then
- if grep -q -E '^[WE]: ' "$OUTPUT"; then
- echo >&2
- cat >&2 $OUTPUT
- msgfail 'successful run, but output contains warnings/errors'
+ if grep -q -E ' runtime error: ' "$OUTPUT"; then
+ msgfailoutput 'compiler detected undefined behavior' "$OUTPUT" "$@"
+ elif grep -q -E '^[WE]: ' "$OUTPUT"; then
+ msgfailoutput 'successful run, but output contains warnings/errors' "$OUTPUT" "$@"
else
msgpass
fi
fi
else
local EXITCODE=$?
- echo >&2
- cat >&2 $OUTPUT
- msgfail "exitcode $EXITCODE"
+ msgfailoutput "exitcode $EXITCODE" "$OUTPUT" "$@"
fi
aptautotest 'testsuccess' "$@"
}
local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output"
if "$@" >${OUTPUT} 2>&1; then
if expr match "$1" '^apt.*' >/dev/null; then
- if grep -q -E '^E: ' "$OUTPUT"; then
- echo >&2
- cat >&2 $OUTPUT
- msgfail 'successful run, but output contains errors'
+ if grep -q -E ' runtime error: ' "$OUTPUT"; then
+ msgfailoutput 'compiler detected undefined behavior' "$OUTPUT" "$@"
+ elif grep -q -E '^E: ' "$OUTPUT"; then
+ msgfailoutput 'successful run, but output contains errors' "$OUTPUT" "$@"
elif ! grep -q -E '^W: ' "$OUTPUT"; then
- echo >&2
- cat >&2 $OUTPUT
- msgfail 'successful run, but output contains no warnings'
+ msgfailoutput 'successful run, but output contains no warnings' "$OUTPUT" "$@"
else
msgpass
fi
local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testfailure.output"
if "$@" >${OUTPUT} 2>&1; then
local EXITCODE=$?
- echo >&2
- cat >&2 $OUTPUT
- msgfail "exitcode $EXITCODE"
+ msgfailoutput "exitcode $EXITCODE" "$OUTPUT" "$@"
else
local EXITCODE=$?
if expr match "$1" '^apt.*' >/dev/null; then
- if ! grep -q -E '^E: ' "$OUTPUT"; then
- echo >&2
- cat >&2 $OUTPUT
- msgfail "run failed with exitcode ${EXITCODE}, but with no errors"
+ if grep -q -E ' runtime error: ' "$OUTPUT"; then
+ msgfailoutput 'compiler detected undefined behavior' "$OUTPUT" "$@"
+ elif ! grep -q -E '^E: ' "$OUTPUT"; then
+ msgfailoutput "run failed with exitcode ${EXITCODE}, but with no errors" "$OUTPUT" "$@"
else
msgpass
fi