X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/23e64f6d0facf9610c1042326ad9850e071e8349..e75e5879c0e8d232a2e8f045685beeb8c965aba4:/test/integration/framework diff --git a/test/integration/framework b/test/integration/framework index 70f06158d..8760f3db8 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -361,6 +361,7 @@ EOF if ! command dpkg --assert-multi-arch >/dev/null 2>&1; then echo "DPKG::options:: \"--force-architecture\";" # Added to test multiarch before dpkg is ready for it… fi + echo 'quiet "0";' echo 'quiet::NoUpdate "true";' echo 'quiet::NoStatistic "true";' # too distracting for users, but helpful to detect changes @@ -369,6 +370,8 @@ EOF # in testcases, it can appear as if localhost has a rotation setup, # hide this as we can't really deal with it properly echo 'Acquire::Failure::ShowIP "false";' + # fakeroot can't fake everything, so disabled in production but good for tests + echo 'APT::Sandbox::Verify "true";' } >> aptconfig.conf cp "${TESTDIRECTORY}/apt.pem" "${TMPWORKINGDIRECTORY}/rootdir/etc/webserver.pem" @@ -382,11 +385,11 @@ EOF 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" + TEST_DEFAULT_USER="$(id -un)" if [ "$(uname)" = 'GNU/kFreeBSD' ]; then TEST_DEFAULT_GROUP='root' else - TEST_DEFAULT_GROUP="$USER" + TEST_DEFAULT_GROUP="$(id -gn)" fi # cleanup the environment a bit @@ -571,7 +574,7 @@ setupsimplenativepackage() { local DESCRIPTION="${6:-"an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} 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…"}" + und used only by testcases and serve no other purpose…"}" local SECTION="${7:-others}" local DISTSECTION @@ -627,7 +630,7 @@ buildsimplenativepackage() { local DESCRIPTION="${6:-"an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} 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…"}" + und used only by testcases and serve no other purpose…"}" local SECTION="${7:-others}" local PRIORITY="${8:-optional}" @@ -809,7 +812,7 @@ insertpackage() { 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…"}" + und used only by testcases and serve no other purpose…"}" local ARCHS="" for RELEASE in $(printf '%s' "$RELEASES" | tr ',' '\n'); do if [ "$RELEASE" = 'installed' ]; then @@ -888,7 +891,7 @@ insertinstalledpackage() { local DESCRIPTION="${7:-"an autogenerated dummy ${NAME}=${VERSION}/installed 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…"}" + und used only by testcases and serve no other purpose…"}" local FILE='rootdir/var/lib/dpkg/status' local INFO='rootdir/var/lib/dpkg/info' @@ -973,8 +976,8 @@ generatereleasefiles() { # both should be given in notation date/touch can understand local DATE="$1" local VALIDUNTIL="$2" - msgninfo "\tGenerate Release files… " if [ -e aptarchive/dists ]; then + msgninfo "\tGenerate Release files for dists… " for dir in $(find ./aptarchive/dists -mindepth 1 -maxdepth 1 -type d); do local ARCHITECTURES="$(getarchitecturesfromreleasefile "$dir")" local SUITE="$(echo "$dir" | cut -d'/' -f 4)" @@ -982,25 +985,13 @@ generatereleasefiles() { local VERSION="$(getreleaseversionfromsuite $SUITE)" local LABEL="$(getlabelfromsuite $SUITE)" local ORIGIN="$(getoriginfromsuite $SUITE)" - if [ -n "$VERSION" ]; then - VERSION="-o APT::FTPArchive::Release::Version=${VERSION}" - fi - if [ -n "$LABEL" ]; then - LABEL="-o APT::FTPArchive::Release::Label=${LABEL}" - fi - if [ -n "$ORIGIN" ]; then - ORIGIN="-o APT::FTPArchive::Release::Origin=${ORIGIN}" - fi - if [ -n "$ARCHITECTURES" ]; then - ARCHITECTURES="-o APT::FTPArchive::Release::Architectures=${ARCHITECTURES}" - fi aptftparchiverelease "$dir" \ -o APT::FTPArchive::Release::Suite="${SUITE}" \ -o APT::FTPArchive::Release::Codename="${CODENAME}" \ - ${ARCHITECTURES} \ - ${LABEL} \ - ${ORIGIN} \ - ${VERSION} \ + -o APT::FTPArchive::Release::Architectures="${ARCHITECTURES}" \ + -o APT::FTPArchive::Release::Label="${LABEL}" \ + -o APT::FTPArchive::Release::Origin="${ORIGIN}" \ + -o APT::FTPArchive::Release::Version="${VERSION}" \ > "$dir/Release" if [ "$SUITE" = "experimental" -o "$SUITE" = "experimental2" ]; then sed -i '/^Date: / a\ @@ -1008,6 +999,7 @@ NotAutomatic: yes' "$dir/Release" fi done else + msgninfo "\tGenerate Release files for flat… " aptftparchiverelease ./aptarchive > aptarchive/Release fi if [ -n "$DATE" -a "$DATE" != "now" ]; then @@ -1205,7 +1197,7 @@ changetowebserver() { fi cd - > /dev/null else - msgdie 'You have to build aptwerbserver or install a webserver' + msgdie 'You have to build apt from source to have test/interactive-helper/aptwebserver available for tests requiring a webserver' fi if [ "$REWRTE" != 'yes' ]; then rewritesourceslist "http://localhost:${APTHTTPPORT}/" @@ -1213,7 +1205,7 @@ changetowebserver() { } changetohttpswebserver() { - if ! which stunnel4 >/dev/null; then + if ! command -v stunnel4 >/dev/null 2>&1; then msgdie 'You need to install stunnel4 for https testcases' fi if [ ! -e "${TMPWORKINGDIRECTORY}/aptarchive/aptwebserver.pid" ]; then @@ -1411,7 +1403,7 @@ N: No packages found" local ARCH="$(getarchitecture 'native')" echo "$VIRTUAL" | sed -e "s/:$ARCH//" -e 's/:all//' >"$COMPAREFILE" local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testshowvirtual.output" - testoutputequal "$COMPAREFILE" aptcache show -q=0 "$PACKAGE" + testoutputequal "$COMPAREFILE" aptcache show "$PACKAGE" msggroup } @@ -1522,19 +1514,22 @@ msgfailoutput() { msgfail "$MSG" } -testsuccess() { - msggroup 'testsuccess' +testsuccesswithglobalerror() { + local TYPE="$1" + local ERRORS="$2" + shift 2 + msggroup "$TYPE" if [ "$1" = '--nomsg' ]; then shift else msgtest 'Test for successful execution of' "$*" fi - local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output" + local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/${TYPE}.output" 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" "$@" - elif grep -E '^[WE]: ' "$OUTPUT" > "${TMPWORKINGDIRECTORY}/rootdir/tmp/checkforwarnings.output" 2>&1; then + elif grep -E "^[${ERRORS}]: " "$OUTPUT" > "${TMPWORKINGDIRECTORY}/rootdir/tmp/checkforwarnings.output" 2>&1; then if [ "$IGNORE_PTY_NOT_MOUNTED" = '1' ]; then if echo 'E: Can not write log (Is /dev/pts mounted?) - posix_openpt (2: No such file or directory)' \ | cmp - "${TMPWORKINGDIRECTORY}/rootdir/tmp/checkforwarnings.output" >/dev/null 2>&1; then @@ -1545,6 +1540,12 @@ testsuccess() { else msgfailoutput 'successful run, but output contains warnings/errors' "$OUTPUT" "$@" fi + elif [ "$TYPE" = 'testsuccesswithnotice' ]; then + if grep -q -E "^N: " "$OUTPUT"; then + msgpass + else + msgfailoutput 'successful run, but output had no notices' "$OUTPUT" "$@" + fi else msgpass fi @@ -1555,9 +1556,15 @@ testsuccess() { local EXITCODE=$? msgfailoutput "exitcode $EXITCODE" "$OUTPUT" "$@" fi - aptautotest 'testsuccess' "$@" + aptautotest "$TYPE" "$@" msggroup } +testsuccesswithnotice() { + testsuccesswithglobalerror 'testsuccesswithnotice' 'WE' "$@" +} +testsuccess() { + testsuccesswithglobalerror 'testsuccess' 'NWE' "$@" +} testwarning() { msggroup 'testwarning' if [ "$1" = '--nomsg' ]; then @@ -1629,22 +1636,41 @@ testfailure() { testreturnstateequal() { local STATE="$1" - msggroup "${STATE}equal" - if [ "$2" != '--nomsg' ]; then - local CMP="$2" - shift 2 - "$STATE" "$@" - testfileequal "${TMPWORKINGDIRECTORY}/rootdir/tmp/${STATE}.output" "$CMP" - else - local CMP="$3" + if [ "$STATE" = 'testsuccesswithglobalerror' ]; then + local STATE="$2" + local TYPE="$3" shift 3 - "$STATE" --nomsg "$@" - testfileequal "${TMPWORKINGDIRECTORY}/rootdir/tmp/${STATE}.output" "$CMP" + msggroup "${STATE}equal" + if [ "$1" != '--nomsg' ]; then + local CMP="$1" + shift + testsuccesswithglobalerror "$STATE" "$TYPE" "$@" + testfileequal "${TMPWORKINGDIRECTORY}/rootdir/tmp/${STATE}.output" "$CMP" + else + local CMP="$2" + shift 2 + testsuccesswithglobalerror "$STATE" "$TYPE" "$@" + testfileequal "${TMPWORKINGDIRECTORY}/rootdir/tmp/${STATE}.output" "$CMP" + fi + else + msggroup "${STATE}equal" + if [ "$2" != '--nomsg' ]; then + local CMP="$2" + shift 2 + "$STATE" "$@" + testfileequal "${TMPWORKINGDIRECTORY}/rootdir/tmp/${STATE}.output" "$CMP" + else + local CMP="$3" + shift 3 + "$STATE" --nomsg "$@" + testfileequal "${TMPWORKINGDIRECTORY}/rootdir/tmp/${STATE}.output" "$CMP" + fi fi msggroup } testsuccessequal() { - testreturnstateequal 'testsuccess' "$@" + # we compare output, so we know perfectly well about N: + testreturnstateequal 'testsuccesswithglobalerror' 'testsuccess' 'WE' "$@" } testwarningequal() { testreturnstateequal 'testwarning' "$@" @@ -1742,8 +1768,8 @@ listcurrentlistsdirectory() { ### convenience hacks ### mkdir() { # creating some directories by hand is a tedious task, so make it look simple - if [ "$*" = '-p rootdir/var/lib/apt/lists' ] || [ "$*" = "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists" ] || - [ "$*" = '-p rootdir/var/lib/apt/lists/partial' ] || [ "$*" = "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/partial" ]; then + local PARAMS="$*" + if [ "$PARAMS" != "${PARAMS#*rootdir/var/lib/apt/lists}" ]; then # only the last directory created by mkdir is effected by the -m ! command mkdir -m 755 -p "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt" command mkdir -m 755 -p "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists"