Non-x86 testing seems reasonably reliable; note some known failures
currently.
Add Travis job with --enable-mods-static=reallyall.
Back off a little when svn export is timing out.
Add Travis job which runs under UBSan ("Undefined Behaviour Sanitizer").
mod_http2 disabled for now until https://github.com/icing/mod_h2/pull/194
is merged.
Add gcc 9 job, enable enhanced malloc debugging for pool-debug job.
Add an i386 build using a multilib packages and "gcc -m32".
(All other Travis builds are 64-bit arches currently)
Switch to using httpd-tests git repo.
Fix travis config validation warnings.
Update docs. The expr_string.t failure has not been seen since
the workaround was added AFAICT. The async filter bug
is still breaking the tests regularly. [skip ci].
Add simple test for apxs to catch regression in r1872042.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@
1875466 13f79535-47bb-0310-9956-
ffa450edef68
language: c
os:
- linux
-dist:
- - bionic
+dist: bionic
cache:
directories:
- /home/travis/perl5
global:
- MFLAGS=-j2
-matrix:
+jobs:
include:
- name: Linux Ubuntu, Default module set
# -------------------------------------------------------------------------
env: CONFIG="--enable-mods-shared=reallyall"
TEST_ARGS="-v"
# -------------------------------------------------------------------------
- - name: Linux Ubuntu, Default, all-modules
+ - name: Linux i386 Ubuntu, Shared MPMs, most modules, maintainer-mode w/-Werror
+ env: CONFIG="--enable-mods-shared=reallyall --disable-xml2enc --disable-proxy-html --enable-mpms-shared=all --enable-maintainer-mode"
+ PKG_CONFIG_PATH="/usr/lib/i386-linux-gnu/pkgconfig"
+ NOTEST_CFLAGS="-Werror"
+ CC="gcc -m32"
+ APR_VERSION=1.7.0
+ APU_VERSION=1.6.1 APU_CONFIG="--with-crypto"
+ addons:
+ apt:
+ sources:
+ - sourceline: 'deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe'
+ packages:
+ - cpanminus
+ - libc6-dev-i386
+ - gcc-multilib
+ - libexpat1-dev:i386
+ - libssl-dev:i386
+ - lib32z1-dev
+ - libbrotli-dev:i386
+ - libpcre2-dev:i386
+ - libtool-bin
+ - perl-doc
+ - libapr1-dev
+ - libbrotli-dev:i386
+ # -------------------------------------------------------------------------
+ - name: Linux Ubuntu, Default, all-modules + install
env: CONFIG="--enable-mods-shared=reallyall"
+ TEST_INSTALL=1
+ # -------------------------------------------------------------------------
+ - name: Linux Ubuntu, Default, all-static modules
+ env: CONFIG="--enable-mods-static=reallyall"
# -------------------------------------------------------------------------
- name: Linux Ubuntu, Default, all-modules, random test order
env: CONFIG="--enable-mods-shared=reallyall"
SKIP_TESTING=1
addons:
apt:
- sources:
- - ubuntu-toolchain-r-test
packages:
- gcc-8
- libtool-bin
- libjansson-dev
- libpcre2-dev
# -------------------------------------------------------------------------
+ - name: Linux Ubuntu, GCC 9 maintainer-mode w/-Werror
+ env: CONFIG="--enable-mods-shared=reallyall --enable-maintainer-mode NOTEST_CFLAGS=-Werror CC=gcc-9"
+ SKIP_TESTING=1
+ addons:
+ apt:
+ sources:
+ - sourceline: 'ppa:ubuntu-toolchain-r/test'
+ packages:
+ - gcc-9
+ - libtool-bin
+ - libapr1-dev
+ - libaprutil1-dev
+ - perl-doc
+ - lua5.3-dev
+ - libbrotli-dev
+ - libcurl4-openssl-dev
+ - libsystemd-dev
+ - libnghttp2-dev
+ - libjansson-dev
+ - libpcre2-dev
+ # -------------------------------------------------------------------------
# MFLAGS= works around https://bz.apache.org/bugzilla/show_bug.cgi?id=63942
- if: branch != 2.4.x
name: Linux Ubuntu, Regenerate ap_expr
# -------------------------------------------------------------------------
- name: Linux Ubuntu, APR 1.7.0 --enable-pool-debug, APR-util 1.6.1
env: APR_VERSION=1.7.0 APR_CONFIG="--enable-pool-debug"
- APU_VERSION=1.6.1
- APU_CONFIG="--with-crypto"
+ APU_VERSION=1.6.1 APU_CONFIG="--with-crypto"
CONFIG="--enable-mods-shared=reallyall"
+ TEST_MALLOC=1
# -------------------------------------------------------------------------
- name: Linux Ubuntu, litmus WebDAV tests
env: CONFIG="--enable-dav --enable-dav-fs"
env: APR_VERSION=1.4.8 APU_VERSION=1.4.2
CONFIG="--enable-mods-shared=reallyall"
# -------------------------------------------------------------------------
+ - if: branch != 2.4.x
+ name: Linux Ubuntu, UBSan
+ env: NOTEST_CFLAGS="-fsanitize=undefined -fno-sanitize-recover=undefined" NOTEST_LIBS=-lubsan
+ CONFIG="--enable-mods-shared=reallyall --disable-http2" TEST_UBSAN=1
+# CPAN modules are to be used with the system Perl and always with
+# CC=gcc, e.g. for the CC="gcc -m32" case the builds are not correct
+# otherwise.
before_install:
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then
cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib);
- cpanm --notest Net::SSL LWP::Protocol::https ExtUtils::Embed Test::More AnyEvent DateTime HTTP::DAV Protocol::HTTP2::Client FCGI;
+ CC=gcc cpanm --notest Net::SSL LWP::Protocol::https ExtUtils::Embed Test::More AnyEvent DateTime HTTP::DAV Protocol::HTTP2::Client FCGI Apache::Test;
fi
before_script:
* SKIP_TESTING - if set, the Perl test framework is not run for the
build.
+* TEST_UBSAN - set for builds using UBSan ("Undefined Behaviour Sanitizer")
+
+* TEST_MALLOC - set for builds using enhanced malloc debugging.
+
Caching
-------
* MacOS build
* Windows build
* clang-on-Linux build
-* Multi-arch testing
- - non-x86_64 images lack installed cpanminus and don't enable caching.
- ppc64le builds seem unreasonably slow to install CPAN deps each time
- (15-20 minutes) - not sure why. s390x is enabled & seems reasonably fast.
- - Testing support for arm64.
* Use containers for non-Ubuntu-based Linux testing
-* E-mail notifications
* VPATH builds
* sanity checks for use of APLOGNO() - empty arguments, accidental duplicates, etc.
- not sure how exactly
+* Known test failures
+ - "apt-get install" timeout/fails - workaround by moving apt install to before_script phase?
+ - t/apache/rwrite.t, t/apache/pass_brigade.t
+ see msg <CAKQ1sVMbDcUouu+_bfp8T5HO5+=ORWhLx361+b4qyLux5xyhwA@mail.gmail.com> etc
Testing from a Feature Branch
-----------------------------
if [ $i -eq $max_tries ]; then
exit 1
else
- sleep 180
+ sleep $((100 * i))
fi
fi
done
if ! test -v SKIP_TESTING; then
- # The test/framework checkout is cached at ~/root/framework, which
- # is copied to test/framework within the httpd build directory.
- # Renew the cache here if the last-changed revision is stale.
- framework=https://svn.apache.org/repos/asf/httpd/test/framework/trunk
- fcache=$HOME/root/framework
- frev=`svn info --no-newline --show-item last-changed-revision ${framework}`
- if [ -d ${fcache} -a ! -f ${fcache}/.revision-is-${frev} ]; then
- : Purging stale cache at ${fcache}
- rm -rf ${fcache}
- fi
-
- if [ ! -d ${fcache} ]; then
- run_svn_export ${framework} ${frev} ${fcache} 5
- touch ${fcache}/.revision-is-${frev}
- fi
-
- cp -a ${fcache} test/perl-framework
+ ### Temporary: purge old svn checkout from the cache
+ rm -rf $HOME/root/framework
+ # Make a shallow clone of httpd-tests git repo.
+ git clone --depth=1 https://github.com/apache/httpd-tests.git test/perl-framework
fi
if test -v APR_VERSION; then
### Installed apr/apr-util don't include the *.m4 files but the
### Debian packages helpfully install them, so use the system APR to buildconf
./buildconf --with-apr=/usr/bin/apr-1-config ${BUILDCONFIG}
+
+PREFIX=${PREFIX:-$HOME/build/httpd-root}
+
# For trunk, "make check" is sufficient to run the test suite.
# For 2.4.x, the test suite must be run manually
if test ! -v SKIP_TESTING; then
if grep -q ^check: Makefile.in; then
CONFIG="--with-test-suite=test/perl-framework $CONFIG"
WITH_TEST_SUITE=1
- else
- CONFIG="--prefix=$HOME/build/httpd-root $CONFIG"
fi
fi
if test -v APR_VERSION; then
else
CONFIG="$CONFIG --with-apr-util=/usr"
fi
-./configure $CONFIG
+
+./configure --prefix=$PREFIX $CONFIG
make $MFLAGS
+
+if test -v TEST_INSTALL; then
+ make install
+ pushd $PREFIX
+ test `./bin/apxs -q PREFIX` = $PREFIX
+ test `$PWD/bin/apxs -q PREFIX` = $PREFIX
+ ./bin/apxs -g -n foobar
+ cd foobar; make
+ popd
+fi
+
if ! test -v SKIP_TESTING; then
+ set +e
+
+ 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 WITH_TEST_SUITE; then
make check TESTS="${TEST_ARGS}"
+ RV=$?
else
- make install
+ test -v TEST_INSTALL || make install
pushd test/perl-framework
- perl Makefile.PL -apxs $HOME/build/httpd-root/bin/apxs
+ perl Makefile.PL -apxs $PREFIX/bin/apxs
make test APACHE_TEST_EXTRA_ARGS="${TEST_ARGS}"
+ RV=$?
popd
fi
if test -v LITMUS; then
mkdir -p t/htdocs/modules/dav
./t/TEST -start
litmus http://localhost:8529/modules/dav/
+ RV=$?
./t/TEST -stop
popd
fi
+
+ if grep -q 'Segmentation fault' test/perl-framework/t/logs/error_log; then
+ grep -C5 'Segmentation fault' test/perl-framework/t/logs/error_log
+ RV=2
+ fi
+
+ if test -v TEST_UBSAN && ls ubsan.log.* &> /dev/null; then
+ cat ubsan.log.*
+ RV=3
+ fi
+
+ # With LIBC_FATAL_STDERR_/MALLOC_CHECK_ glibc will abort when
+ # malloc errors are detected. This should get caught by the
+ # segfault grep above, but in case it is not, catch it here too:
+ if grep 'glibc detected' test/perl-framework/t/logs/error_log; then
+ grep -C20 'glibc detected' test/perl-framework/t/logs/error_log
+ RV=4
+ fi
+
+ exit $RV
fi