X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/f18f2338a17d3037ac0d6f81a7f1a37df6eaca01..12f7536a66cab673833aeda47be5f2ba44aee8d2:/test/integration/framework diff --git a/test/integration/framework b/test/integration/framework index b4220c8b5..ee67dd52c 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -317,14 +317,14 @@ setupenvironment() { echo "Dir::state::status \"${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/status\";" >> aptconfig.conf echo "APT::Get::Show-User-Simulation-Note \"false\";" >> aptconfig.conf echo "Dir::Bin::Methods \"${TMPWORKINGDIRECTORY}/rootdir/usr/lib/apt/methods\";" >> aptconfig.conf - # store apt-key were we can access it, even if we run it as a different user - # destroys coverage reporting though, so just do it for root for now + # either store apt-key were we can access it, even if we run it as a different user + #cp "${BUILDDIRECTORY}/apt-key" "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/" + #chmod o+rx "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/apt-key" + #echo "Dir::Bin::apt-key \"${TMPWORKINGDIRECTORY}/rootdir/usr/bin/apt-key\";" >> aptconfig.conf + # destroys coverage reporting though, so we disable changing user for the calling gpgv + echo "Dir::Bin::apt-key \"${BUILDDIRECTORY}/apt-key\";" >> aptconfig.conf if [ "$(id -u)" = '0' ]; then - cp "${BUILDDIRECTORY}/apt-key" "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/" - chmod o+rx "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/apt-key" - echo "Dir::Bin::apt-key \"${TMPWORKINGDIRECTORY}/rootdir/usr/bin/apt-key\";" >> aptconfig.conf - else - echo "Dir::Bin::apt-key \"${BUILDDIRECTORY}/apt-key\";" >> aptconfig.conf + echo 'Binary::gpgv::Debug::NoDropPrivs "true";' >>aptconfig.conf fi cat > "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" < rootdir/etc/apt/apt.conf.d/99https echo "Apt::Cmd::Disable-Script-Warning \"1\";" > rootdir/etc/apt/apt.conf.d/apt-binary + echo 'Acquire::Connect::AddrConfig "false";' > rootdir/etc/apt/apt.conf.d/connect-addrconfig configcompression '.' 'gz' #'bz2' 'lzma' 'xz' confighashes 'SHA1' # these are tests, not security best-practices @@ -388,12 +389,8 @@ EOF TEST_DEFAULT_GROUP="$USER" fi - # Acquire::AllowInsecureRepositories=false is not yet the default - # but we want it to be the default soon - configallowinsecurerepositories "false"; - # cleanup the environment a bit - # prefer our apt binaries over the system apt binaries + # prefer our apt binaries over the system apt binaries export PATH="${BUILDDIRECTORY}:${PATH}:/usr/local/sbin:/usr/sbin:/sbin" export LC_ALL=C.UTF-8 unset LANGUAGE APT_CONFIG @@ -506,12 +503,6 @@ int execvp(const char *file, char *const argv[]) { EOF testsuccess --nomsg gcc -fPIC -shared -o noopchroot.so noopchroot.c -ldl } - -configallowinsecurerepositories() { - echo "Acquire::AllowInsecureRepositories \"$1\";" > rootdir/etc/apt/apt.conf.d/allow-insecure-repositories.conf - -} - configcompression() { while [ -n "$1" ]; do case "$1" in @@ -784,7 +775,7 @@ EOF for DIST in $(find ./pool/ -maxdepth 1 -name '*.pkglist' -type f | cut -d'/' -f 3 | cut -d'.' -f 1 | sort | uniq); do cat < aptarchive/Release fi - if [ -n "$1" -a "$1" != "now" ]; then + if [ -n "$DATE" -a "$DATE" != "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 "$DATE" '+%a, %d %b %Y %H:%M:%S %Z')/" "$release" + touch -d "$DATE" "$release" done fi - if [ -n "$2" ]; then + if [ -n "$VALIDUNTIL" ]; then sed -i "/^Date: / a\ -Valid-Until: $(date -d "$2" '+%a, %d %b %Y %H:%M:%S %Z')" $(find ./aptarchive -name 'Release') +Valid-Until: $(date -d "$VALIDUNTIL" '+%a, %d %b %Y %H:%M:%S %Z')" $(find ./aptarchive -name 'Release') fi msgdone "info" } @@ -1523,19 +1522,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 @@ -1546,6 +1548,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 @@ -1556,9 +1564,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 @@ -1630,22 +1644,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' "$@" @@ -1661,7 +1694,7 @@ testfailuremsg() { testfailure "$@" msgtest 'Check that the output of the previous failed command has expected' 'failures and warnings' local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testfailuremsg.comparefile" - grep '^\(W\|E\):' "${TMPWORKINGDIRECTORY}/rootdir/tmp/testfailure.output" > "$COMPAREFILE" 2>&1 || true + grep '^\(W\|E\|N\):' "${TMPWORKINGDIRECTORY}/rootdir/tmp/testfailure.output" > "$COMPAREFILE" 2>&1 || true testoutputequal "$COMPAREFILE" echo "$CMP" msggroup } @@ -1672,7 +1705,7 @@ testwarningmsg() { testwarning "$@" msgtest 'Check that the output of the previous warned command has expected' 'warnings' local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testwarningmsg.comparefile" - grep '^\(W\|E\):' "${TMPWORKINGDIRECTORY}/rootdir/tmp/testwarning.output" > "$COMPAREFILE" 2>&1 || true + grep '^\(W\|E\|N\):' "${TMPWORKINGDIRECTORY}/rootdir/tmp/testwarning.output" > "$COMPAREFILE" 2>&1 || true testoutputequal "$COMPAREFILE" echo "$CMP" msggroup }