diff options
author | Joe Orton <jorton@apache.org> | 2024-02-01 16:34:22 +0100 |
---|---|---|
committer | Joe Orton <jorton@apache.org> | 2024-02-01 16:34:22 +0100 |
commit | c76ebdba4352f0ae38da53dfc236895507e905d5 (patch) | |
tree | eb8984be66c6ebf4da6a21b361511878043e4206 | |
parent | * support/htcacheclean.c (list_urls): Continue rather than stopping (diff) | |
download | apache2-c76ebdba4352f0ae38da53dfc236895507e905d5.tar.xz apache2-c76ebdba4352f0ae38da53dfc236895507e905d5.zip |
Minor CI changes:
- Add --enable-reduced-exports test.
- test running apachectl -V in the TEST_INSTALL case
- test running httpd -V in the SKIP_TESTING case
- rejig to exit if SKIP_TESTING, un-nest the if block around testing
(no functional change from this part)
Github: closes #405
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1915513 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | .github/workflows/linux.yml | 5 | ||||
-rwxr-xr-x | test/travis_run_linux.sh | 348 |
2 files changed, 185 insertions, 168 deletions
diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 8f6ec71e5a..d9b3c9b205 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -248,6 +248,11 @@ jobs: TEST_INSTALL=1 TEST_MOD_TLS=1 CLEAR_CACHE=1 + - name: Configured w/reduced exports + config: --enable-reduced-exports --enable-maintainer-mode + env: | + SKIP_TESTING=1 + TEST_INSTALL=1 # ------------------------------------------------------------------------- ### TODO if: *condition_not_24x ### TODO: Fails because :i386 packages are not being found. diff --git a/test/travis_run_linux.sh b/test/travis_run_linux.sh index 1465a304bd..fc082abde5 100755 --- a/test/travis_run_linux.sh +++ b/test/travis_run_linux.sh @@ -86,6 +86,8 @@ make $MFLAGS if test -v TEST_INSTALL; then make install pushd $PREFIX + # Basic sanity tests of the installed server. + ./bin/apachectl -V test `./bin/apxs -q PREFIX` = $PREFIX test `$PWD/bin/apxs -q PREFIX` = $PREFIX ./bin/apxs -g -n foobar @@ -93,38 +95,70 @@ if test -v TEST_INSTALL; then popd fi -if ! test -v SKIP_TESTING; then - set +e - RV=0 +if test -v SKIP_TESTING; then + # Check that httpd was built successfully, nothing more. + ./httpd -V + exit 0 +fi - if test -v TEST_MALLOC; then - # Enable enhanced glibc malloc debugging, see mallopt(3) - export MALLOC_PERTURB_=65 MALLOC_CHECK_=3 - export LIBC_FATAL_STDERR_=1 - fi +############################################################### +### Everything below is only run if SKIP_TESTING was not set ## +############################################################### - if test -v TEST_UBSAN; then - export UBSAN_OPTIONS="log_path=$PWD/ubsan.log" - fi +: Running tests... - if test -v TEST_ASAN; then - export ASAN_OPTIONS="log_path=$PWD/asan.log:detect_leaks=0" - fi +set +e +RV=0 - # Try to keep all potential coredumps from all processes - sudo sysctl -w kernel.core_uses_pid=1 2>/dev/null || true - # Systemd based systems might process core dumps via systemd-coredump. - # But we want to have local unprocessed files. - sudo sysctl -w kernel.core_pattern=core || true - ulimit -c unlimited 2>/dev/null || true +if test -v TEST_MALLOC; then + # Enable enhanced glibc malloc debugging, see mallopt(3) + export MALLOC_PERTURB_=65 MALLOC_CHECK_=3 + export LIBC_FATAL_STDERR_=1 +fi + +if test -v TEST_UBSAN; then + export UBSAN_OPTIONS="log_path=$PWD/ubsan.log" +fi - if ! test -v NO_TEST_FRAMEWORK; then - if test -v WITH_TEST_SUITE; then - make check TESTS="${TESTS}" TEST_CONFIG="${TEST_ARGS}" | tee test.log +if test -v TEST_ASAN; then + export ASAN_OPTIONS="log_path=$PWD/asan.log:detect_leaks=0" +fi + +# Try to keep all potential coredumps from all processes +sudo sysctl -w kernel.core_uses_pid=1 2>/dev/null || true +# Systemd based systems might process core dumps via systemd-coredump. +# But we want to have local unprocessed files. +sudo sysctl -w kernel.core_pattern=core || true +ulimit -c unlimited 2>/dev/null || true + +if ! test -v NO_TEST_FRAMEWORK; then + if test -v WITH_TEST_SUITE; then + make check TESTS="${TESTS}" TEST_CONFIG="${TEST_ARGS}" | tee test.log + RV=${PIPESTATUS[0]} + # re-run failing tests with -v, avoiding set -e + if [ $RV -ne 0 ]; then + # mv test/perl-framework/t/logs/error_log test/perl-framework/t/logs/error_log_save + FAILERS="" + while read FAILER; do + FAILERS="$FAILERS $FAILER" + done < <(awk '/Failed:/{print $1}' test.log) + if [ -n "$FAILERS" ]; then + t/TEST -v $FAILERS || true + fi + # set -e would have killed us after the original t/TEST + rm -f test.log + # mv test/perl-framework/t/logs/error_log_save test/perl-framework/t/logs/error_log + false + fi + else + test -v TEST_INSTALL || make install + pushd test/perl-framework + perl Makefile.PL -apxs $PREFIX/bin/apxs + make test APACHE_TEST_EXTRA_ARGS="${TEST_ARGS} ${TESTS}" | tee test.log RV=${PIPESTATUS[0]} # re-run failing tests with -v, avoiding set -e if [ $RV -ne 0 ]; then - # mv test/perl-framework/t/logs/error_log test/perl-framework/t/logs/error_log_save + # mv t/logs/error_log t/logs/error_log_save FAILERS="" while read FAILER; do FAILERS="$FAILERS $FAILER" @@ -134,172 +168,150 @@ if ! test -v SKIP_TESTING; then fi # set -e would have killed us after the original t/TEST rm -f test.log - # mv test/perl-framework/t/logs/error_log_save test/perl-framework/t/logs/error_log + # mv t/logs/error_log_save t/logs/error_log false fi - else - test -v TEST_INSTALL || make install - pushd test/perl-framework - perl Makefile.PL -apxs $PREFIX/bin/apxs - make test APACHE_TEST_EXTRA_ARGS="${TEST_ARGS} ${TESTS}" | tee test.log - RV=${PIPESTATUS[0]} - # re-run failing tests with -v, avoiding set -e - if [ $RV -ne 0 ]; then - # mv t/logs/error_log t/logs/error_log_save - FAILERS="" - while read FAILER; do - FAILERS="$FAILERS $FAILER" - done < <(awk '/Failed:/{print $1}' test.log) - if [ -n "$FAILERS" ]; then - t/TEST -v $FAILERS || true - fi - # set -e would have killed us after the original t/TEST - rm -f test.log - # mv t/logs/error_log_save t/logs/error_log - false - fi - popd - fi + popd + fi - # Skip further testing if a core dump was created during the test - # suite run above. - if test $RV -eq 0 && test -n "`ls test/perl-framework/t/core{,.*} 2>/dev/null`"; then - RV=4 - fi + # Skip further testing if a core dump was created during the test + # suite run above. + if test $RV -eq 0 && test -n "`ls test/perl-framework/t/core{,.*} 2>/dev/null`"; then + RV=4 fi +fi - if test -v TEST_SSL -a $RV -eq 0; then - pushd test/perl-framework - # Test loading encrypted private keys - ./t/TEST -defines "TEST_SSL_DES3_KEY TEST_SSL_PASSPHRASE_EXEC" t/ssl - RV=$? +if test -v TEST_SSL -a $RV -eq 0; then + pushd test/perl-framework + # Test loading encrypted private keys + ./t/TEST -defines "TEST_SSL_DES3_KEY TEST_SSL_PASSPHRASE_EXEC" t/ssl + RV=$? - # Log the OpenSSL version. - grep 'mod_ssl.*compiled against' t/logs/error_log | tail -n 1 - - # Test various session cache backends - for cache in shmcb redis:localhost:6379 memcache:localhost:11211; do - test $RV -eq 0 || break + # Log the OpenSSL version. + grep 'mod_ssl.*compiled against' t/logs/error_log | tail -n 1 - SSL_SESSCACHE=$cache ./t/TEST -sslproto TLSv1.2 -defines TEST_SSL_SESSCACHE -start - ./t/TEST t/ssl - RV=$? - if test $RV -eq 0; then - # TODO: only really useful in e.g. triggering - # server segfaults which are caught later, doesn't - # directly catch non-200 responses etc. - $builddir/support/ab -qd -n 4000 -c 20 -f TLS1.2 https://localhost:8532/ - RV=$? - fi - ./t/TEST -stop - SRV=$? - if test $RV -eq 0 -a $SRV -ne 0; then - RV=$SRV - fi - done - popd - fi + # Test various session cache backends + for cache in shmcb redis:localhost:6379 memcache:localhost:11211; do + test $RV -eq 0 || break - if test -v LITMUS -a $RV -eq 0; then - pushd test/perl-framework - mkdir -p t/htdocs/modules/dav - ./t/TEST -start - # litmus uses $TESTS, so unset it. - unset TESTS - litmus http://localhost:8529/modules/dav/ - RV=$? - ./t/TEST -stop - popd - fi + SSL_SESSCACHE=$cache ./t/TEST -sslproto TLSv1.2 -defines TEST_SSL_SESSCACHE -start + ./t/TEST t/ssl + RV=$? + if test $RV -eq 0; then + # TODO: only really useful in e.g. triggering + # server segfaults which are caught later, doesn't + # directly catch non-200 responses etc. + $builddir/support/ab -qd -n 4000 -c 20 -f TLS1.2 https://localhost:8532/ + RV=$? + fi + ./t/TEST -stop + SRV=$? + if test $RV -eq 0 -a $SRV -ne 0; then + RV=$SRV + fi + done + popd +fi - if test -v TEST_CORE -a $RV -eq 0; then - # Run HTTP/2 tests. - MPM=event py.test-3 test/modules/core - RV=$? - fi +if test -v LITMUS -a $RV -eq 0; then + pushd test/perl-framework + mkdir -p t/htdocs/modules/dav + ./t/TEST -start + # litmus uses $TESTS, so unset it. + unset TESTS + litmus http://localhost:8529/modules/dav/ + RV=$? + ./t/TEST -stop + popd +fi - if test -v TEST_PROXY -a $RV -eq 0; then - # Run proxy tests. - py.test-3 test/modules/proxy - RV=$? - fi +if test -v TEST_CORE -a $RV -eq 0; then + # Run HTTP/2 tests. + MPM=event py.test-3 test/modules/core + RV=$? +fi - if test -v TEST_H2 -a $RV -eq 0; then - # Build the test clients - (cd test/clients && make) - # Run HTTP/2 tests. - MPM=event py.test-3 test/modules/http2 - RV=$? - if test $RV -eq 0; then - MPM=worker py.test-3 test/modules/http2 - RV=$? - fi - fi +if test -v TEST_PROXY -a $RV -eq 0; then + # Run proxy tests. + py.test-3 test/modules/proxy + RV=$? +fi - if test -v TEST_MD -a $RV -eq 0; then - # Run ACME tests. - # need the go based pebble as ACME test server - # which is a package on debian sid, but not on focal - # FAILS on TRAVIS with - # package github.com/letsencrypt/pebble/cmd/pebble - # imports crypto/ed25519: unrecognized import path "crypto/ed25519" (import path does not begin with hostname) - # - # but works on a docker ubuntu-focal image. ??? - export GOPATH=${PREFIX}/gocode - mkdir -p "${GOPATH}" - export PATH="${GOROOT}/bin:${GOPATH}/bin:${PATH}" - go get -u github.com/letsencrypt/pebble/... - (cd $GOPATH/src/github.com/letsencrypt/pebble && go install ./...) - - py.test-3 test/modules/md - RV=$? +if test -v TEST_H2 -a $RV -eq 0; then + # Build the test clients + (cd test/clients && make) + # Run HTTP/2 tests. + MPM=event py.test-3 test/modules/http2 + RV=$? + if test $RV -eq 0; then + MPM=worker py.test-3 test/modules/http2 + RV=$? fi +fi - if test -v TEST_MOD_TLS -a $RV -eq 0; then - # Run mod_tls tests. The underlying librustls was build - # and installed before we configured the server (see top of file). - # This will be replaved once librustls is available as a package. - py.test-3 test/modules/tls - RV=$? - fi +if test -v TEST_MD -a $RV -eq 0; then + # Run ACME tests. + # need the go based pebble as ACME test server + # which is a package on debian sid, but not on focal + # FAILS on TRAVIS with + # package github.com/letsencrypt/pebble/cmd/pebble + # imports crypto/ed25519: unrecognized import path "crypto/ed25519" (import path does not begin with hostname) + # + # but works on a docker ubuntu-focal image. ??? + export GOPATH=${PREFIX}/gocode + mkdir -p "${GOPATH}" + export PATH="${GOROOT}/bin:${GOPATH}/bin:${PATH}" + go get -u github.com/letsencrypt/pebble/... + (cd $GOPATH/src/github.com/letsencrypt/pebble && go install ./...) + + py.test-3 test/modules/md + RV=$? +fi - # Catch cases where abort()s get logged to stderr by libraries but - # only cause child processes to terminate e.g. during shutdown, - # which may not otherwise trigger test failures. +if test -v TEST_MOD_TLS -a $RV -eq 0; then + # Run mod_tls tests. The underlying librustls was build + # and installed before we configured the server (see top of file). + # This will be replaved once librustls is available as a package. + py.test-3 test/modules/tls + RV=$? +fi - # "glibc detected": printed with LIBC_FATAL_STDERR_/MALLOC_CHECK_ - # glibc will abort when malloc errors are detected. This will get - # caught by the segfault grep as well. +# Catch cases where abort()s get logged to stderr by libraries but +# only cause child processes to terminate e.g. during shutdown, +# which may not otherwise trigger test failures. - # "pool concurrency check": printed by APR built with - # --enable-thread-debug when an APR pool concurrency check aborts +# "glibc detected": printed with LIBC_FATAL_STDERR_/MALLOC_CHECK_ +# glibc will abort when malloc errors are detected. This will get +# caught by the segfault grep as well. - for phrase in 'Segmentation fault' 'glibc detected' 'pool concurrency check:' 'Assertion.*failed'; do - # Ignore IO/debug logs - if grep -v ':\(debug\|trace[12345678]\)\]' test/perl-framework/t/logs/error_log | grep -q "$phrase"; then - grep --color=always -C5 "$phrase" test/perl-framework/t/logs/error_log - RV=2 - fi - done +# "pool concurrency check": printed by APR built with +# --enable-thread-debug when an APR pool concurrency check aborts - if test -v TEST_UBSAN && test -n "`ls ubsan.log.* 2>/dev/null`"; then - cat ubsan.log.* - RV=3 +for phrase in 'Segmentation fault' 'glibc detected' 'pool concurrency check:' 'Assertion.*failed'; do + # Ignore IO/debug logs + if grep -v ':\(debug\|trace[12345678]\)\]' test/perl-framework/t/logs/error_log | grep -q "$phrase"; then + grep --color=always -C5 "$phrase" test/perl-framework/t/logs/error_log + RV=2 fi +done - if test -v TEST_ASAN && test -n "`ls asan.log.* 2>/dev/null`"; then - cat asan.log.* +if test -v TEST_UBSAN && test -n "`ls ubsan.log.* 2>/dev/null`"; then + cat ubsan.log.* + RV=3 +fi - # ASan can report memory leaks, fail on errors only - if grep -q "ERROR: AddressSanitizer:" `ls asan.log.*`; then - RV=4 - fi +if test -v TEST_ASAN && test -n "`ls asan.log.* 2>/dev/null`"; then + cat asan.log.* + + # ASan can report memory leaks, fail on errors only + if grep -q "ERROR: AddressSanitizer:" `ls asan.log.*`; then + RV=4 fi +fi - for core in `ls test/perl-framework/t/core{,.*} test/gen/apache/core{,.*} 2>/dev/null`; do - gdb -ex 'thread apply all backtrace full' -batch ./httpd "$core" - RV=5 - done +for core in `ls test/perl-framework/t/core{,.*} test/gen/apache/core{,.*} 2>/dev/null`; do + gdb -ex 'thread apply all backtrace full' -batch ./httpd "$core" + RV=5 +done - exit $RV -fi +exit $RV |