diff --git a/.travis.yml b/.travis.yml
index 8dde06ceb..a5d6d8a85 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,6 +3,8 @@ language: python
services:
- rabbitmq
- mariadb
+ # apacheconftest
+ #- apache2
# http://docs.travis-ci.com/user/ci-environment/#CI-environment-OS
# gimme has to be kept in sync with Boulder's Go version setting in .travis.yml
@@ -22,6 +24,9 @@ env:
- TOXENV=py27 BOULDER_INTEGRATION=1
- TOXENV=lint
- TOXENV=cover
+# Disabled for now due to requiring sudo -> causing more boulder integration
+# DNS timeouts :(
+# - TOXENV=apacheconftest
# Only build pushes to the master branch, PRs, and branches beginning with
@@ -58,6 +63,12 @@ addons:
- openssl
# For Boulder integration testing
- rsyslog
+ # for apacheconftest
+ #- realpath
+ #- apache2
+ #- libapache2-mod-wsgi
+ #- libapache2-mod-macro
+ #- sudo
install: "travis_retry pip install tox coveralls"
script: 'travis_retry tox && ([ "xxx$BOULDER_INTEGRATION" = "xxx" ] || ./tests/travis-integration.sh)'
diff --git a/docs/contributing.rst b/docs/contributing.rst
index c71aefeec..6c70830b8 100644
--- a/docs/contributing.rst
+++ b/docs/contributing.rst
@@ -65,8 +65,14 @@ Testing
The following tools are there to help you:
-- ``tox`` starts a full set of tests. Please make sure you run it
- before submitting a new pull request.
+- ``tox`` starts a full set of tests. Please note that it includes
+ apacheconftest, which uses the system's Apache install to test config file
+ parsing, so it should only be run on systems that have an
+ experimental, non-production Apache2 install on them. ``tox -e
+ apacheconftest`` can be used to run those specific Apache conf tests.
+
+- ``tox -e py27``, ``tox -e py26`` etc, run unit tests for specific Python
+ versions.
- ``tox -e cover`` checks the test coverage only. Calling the
``./tox.cover.sh`` script directly (or even ``./tox.cover.sh $pkg1
diff --git a/tests/apache-conf-files/NEEDED.txt b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/NEEDED.txt
similarity index 100%
rename from tests/apache-conf-files/NEEDED.txt
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/NEEDED.txt
diff --git a/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/apache-conf-test b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/apache-conf-test
new file mode 100755
index 000000000..4e0443bb7
--- /dev/null
+++ b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/apache-conf-test
@@ -0,0 +1,78 @@
+#!/bin/bash
+
+# A hackish script to see if the client is behaving as expected
+# with each of the "passing" conf files.
+
+export EA=/etc/apache2/
+TESTDIR="`dirname $0`"
+LEROOT="`realpath \"$TESTDIR/../../../../\"`"
+cd $TESTDIR/passing
+LETSENCRYPT="${LETSENCRYPT:-$LEROOT/venv/bin/letsencrypt}"
+
+function CleanupExit() {
+ echo control c, exiting tests...
+ if [ "$f" != "" ] ; then
+ Cleanup
+ fi
+ exit 1
+}
+
+function Setup() {
+ if [ "$APPEND_APACHECONF" = "" ] ; then
+ sudo cp "$f" "$EA"/sites-available/
+ sudo ln -sf "$EA/sites-available/$f" "$EA/sites-enabled/$f"
+ sudo echo """
+
+ ServerName example.com
+ DocumentRoot /tmp/
+ ErrorLog /tmp/error.log
+ CustomLog /tmp/requests.log combined
+""" >> $EA/sites-available/throwaway-example.conf
+ else
+ TMP="/tmp/`basename \"$APPEND_APACHECONF\"`.$$"
+ sudo cp -a "$APPEND_APACHECONF" "$TMP"
+ sudo bash -c "cat \"$f\" >> \"$APPEND_APACHECONF\""
+ fi
+}
+
+function Cleanup() {
+ if [ "$APPEND_APACHECONF" = "" ] ; then
+ sudo rm /etc/apache2/sites-{enabled,available}/"$f"
+ sudo rm $EA/sites-available/throwaway-example.conf
+ else
+ sudo mv "$TMP" "$APPEND_APACHECONF"
+ fi
+}
+
+# if our environment asks us to enable modules, do our best!
+if [ "$1" = --debian-modules ] ; then
+ sudo apt-get install -y libapache2-mod-wsgi
+ sudo apt-get install -y libapache2-mod-macro
+
+ for mod in ssl rewrite macro wsgi deflate userdir version mime ; do
+ sudo a2enmod $mod
+ done
+fi
+
+
+FAILS=0
+trap CleanupExit INT
+for f in *.conf ; do
+ echo -n testing "$f"...
+ Setup
+ RESULT=`echo c | sudo "$LETSENCRYPT" -vvvv --debug --staging --apache --register-unsafely-without-email --agree-tos certonly -t 2>&1`
+ if echo $RESULT | grep -Eq \("Which names would you like"\|"mod_macro is not yet"\) ; then
+ echo passed
+ else
+ echo failed
+ echo $RESULT
+ echo
+ echo
+ FAILS=`expr $FAILS + 1`
+ fi
+ Cleanup
+done
+if [ "$FAILS" -ne 0 ] ; then
+ exit 1
+fi
+exit 0
diff --git a/tests/apache-conf-files/failing/ipv6-1143.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/failing/ipv6-1143.conf
similarity index 100%
rename from tests/apache-conf-files/failing/ipv6-1143.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/failing/ipv6-1143.conf
diff --git a/tests/apache-conf-files/failing/ipv6-1143b.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/failing/ipv6-1143b.conf
similarity index 100%
rename from tests/apache-conf-files/failing/ipv6-1143b.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/failing/ipv6-1143b.conf
diff --git a/tests/apache-conf-files/failing/missing-double-quote-1724.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/failing/missing-double-quote-1724.conf
similarity index 100%
rename from tests/apache-conf-files/failing/missing-double-quote-1724.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/failing/missing-double-quote-1724.conf
diff --git a/tests/apache-conf-files/failing/multivhost-1093.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/failing/multivhost-1093.conf
similarity index 100%
rename from tests/apache-conf-files/failing/multivhost-1093.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/failing/multivhost-1093.conf
diff --git a/tests/apache-conf-files/failing/multivhost-1093b.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/failing/multivhost-1093b.conf
similarity index 100%
rename from tests/apache-conf-files/failing/multivhost-1093b.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/failing/multivhost-1093b.conf
diff --git a/tests/apache-conf-files/passing/1626-1531.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/1626-1531.conf
similarity index 100%
rename from tests/apache-conf-files/passing/1626-1531.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/1626-1531.conf
diff --git a/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/README.modules b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/README.modules
new file mode 100644
index 000000000..32c3ef019
--- /dev/null
+++ b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/README.modules
@@ -0,0 +1,6 @@
+# Modules required to parse these conf files:
+ssl
+rewrite
+macro
+wsgi
+deflate
diff --git a/tests/apache-conf-files/passing/anarcat-1531.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/anarcat-1531.conf
similarity index 100%
rename from tests/apache-conf-files/passing/anarcat-1531.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/anarcat-1531.conf
diff --git a/tests/apache-conf-files/passing/drupal-errordocument-arg-1724.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/drupal-errordocument-arg-1724.conf
similarity index 100%
rename from tests/apache-conf-files/passing/drupal-errordocument-arg-1724.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/drupal-errordocument-arg-1724.conf
diff --git a/tests/apache-conf-files/passing/drupal-htaccess-1531.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/drupal-htaccess-1531.conf
similarity index 100%
rename from tests/apache-conf-files/passing/drupal-htaccess-1531.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/drupal-htaccess-1531.conf
diff --git a/tests/apache-conf-files/passing/example-1755.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/example-1755.conf
similarity index 100%
rename from tests/apache-conf-files/passing/example-1755.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/example-1755.conf
diff --git a/tests/apache-conf-files/passing/example-ssl.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/example-ssl.conf
similarity index 100%
rename from tests/apache-conf-files/passing/example-ssl.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/example-ssl.conf
diff --git a/tests/apache-conf-files/passing/example.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/example.conf
similarity index 100%
rename from tests/apache-conf-files/passing/example.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/example.conf
diff --git a/tests/apache-conf-files/passing/finalize-1243.apache2.conf.txt b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/finalize-1243.apache2.conf.txt
similarity index 100%
rename from tests/apache-conf-files/passing/finalize-1243.apache2.conf.txt
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/finalize-1243.apache2.conf.txt
diff --git a/tests/apache-conf-files/passing/finalize-1243.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/finalize-1243.conf
similarity index 100%
rename from tests/apache-conf-files/passing/finalize-1243.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/finalize-1243.conf
diff --git a/tests/apache-conf-files/passing/graphite-quote-1934.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/graphite-quote-1934.conf
similarity index 90%
rename from tests/apache-conf-files/passing/graphite-quote-1934.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/graphite-quote-1934.conf
index 2a8734b43..f257dd9a8 100644
--- a/tests/apache-conf-files/passing/graphite-quote-1934.conf
+++ b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/graphite-quote-1934.conf
@@ -1,6 +1,6 @@
- WSGIDaemonProcess _graphite processes=5 threads=5 display-name='%{GROUP}' inactivity-timeout=120 user=_graphite group=_graphite
+ WSGIDaemonProcess _graphite processes=5 threads=5 display-name='%{GROUP}' inactivity-timeout=120 user=www-data group=www-data
WSGIProcessGroup _graphite
WSGIImportScript /usr/share/graphite-web/graphite.wsgi process-group=_graphite application-group=%{GLOBAL}
WSGIScriptAlias / /usr/share/graphite-web/graphite.wsgi
diff --git a/tests/apache-conf-files/passing/missing-quote-1724.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/missing-quote-1724.conf
similarity index 100%
rename from tests/apache-conf-files/passing/missing-quote-1724.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/missing-quote-1724.conf
diff --git a/tests/apache-conf-files/passing/modmacro-1385.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/modmacro-1385.conf
similarity index 100%
rename from tests/apache-conf-files/passing/modmacro-1385.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/modmacro-1385.conf
diff --git a/tests/apache-conf-files/passing/owncloud-1264.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/owncloud-1264.conf
similarity index 100%
rename from tests/apache-conf-files/passing/owncloud-1264.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/owncloud-1264.conf
diff --git a/tests/apache-conf-files/passing/rewrite-quote-1960.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/rewrite-quote-1960.conf
similarity index 100%
rename from tests/apache-conf-files/passing/rewrite-quote-1960.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/rewrite-quote-1960.conf
diff --git a/tests/apache-conf-files/passing/roundcube-1222.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/roundcube-1222.conf
similarity index 100%
rename from tests/apache-conf-files/passing/roundcube-1222.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/roundcube-1222.conf
diff --git a/tests/apache-conf-files/passing/semacode-1598.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/semacode-1598.conf
similarity index 100%
rename from tests/apache-conf-files/passing/semacode-1598.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/semacode-1598.conf
diff --git a/tests/apache-conf-files/passing/sslrequire-wordlist-1827.htaccess b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/sslrequire-wordlist-1827.htaccess
similarity index 100%
rename from tests/apache-conf-files/passing/sslrequire-wordlist-1827.htaccess
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/sslrequire-wordlist-1827.htaccess
diff --git a/tests/apache-conf-files/passing/two-blocks-one-line-1693.conf b/letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/two-blocks-one-line-1693.conf
similarity index 100%
rename from tests/apache-conf-files/passing/two-blocks-one-line-1693.conf
rename to letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/passing/two-blocks-one-line-1693.conf
diff --git a/tests/apache-conf-files/hackish-apache-test b/tests/apache-conf-files/hackish-apache-test
deleted file mode 100755
index c6663551e..000000000
--- a/tests/apache-conf-files/hackish-apache-test
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/bash
-
-# A hackish script to see if the client is behaving as expected
-# with each of the "passing" conf files.
-
-# TODO presently this requires interaction and human judgement to
-# assess, but it should be automated
-export EA=/etc/apache2/
-TESTDIR="`dirname $0`"
-LEROOT="`realpath \"$TESTDIR/../../\"`"
-cd $TESTDIR/passing
-
-function CleanupExit() {
- echo control c, exiting tests...
- if [ "$f" != "" ] ; then
- sudo rm /etc/apache2/sites-{enabled,available}/"$f"
- fi
- exit 1
-}
-
-trap CleanupExit INT
-for f in *.conf ; do
- echo testing "$f"
- sudo cp "$f" "$EA"/sites-available/
- sudo ln -s "$EA/sites-available/$f" "$EA/sites-enabled/$f"
- sudo "$LEROOT"/venv/bin/letsencrypt --apache certonly -t
- sudo rm /etc/apache2/sites-{enabled,available}/"$f"
-done
diff --git a/tests/apache-conf-files/passing/README.modules b/tests/apache-conf-files/passing/README.modules
deleted file mode 100644
index 7edbd3e84..000000000
--- a/tests/apache-conf-files/passing/README.modules
+++ /dev/null
@@ -1,7 +0,0 @@
-Modules required to parse these conf files:
-
-ssl
-rewrite
-macro
-wsgi
-deflate
diff --git a/tox.ini b/tox.ini
index 1abe1cf39..dbd6d51fa 100644
--- a/tox.ini
+++ b/tox.ini
@@ -67,3 +67,11 @@ commands =
pylint --rcfile=.pylintrc letsencrypt-nginx/letsencrypt_nginx
pylint --rcfile=.pylintrc letsencrypt-compatibility-test/letsencrypt_compatibility_test
pylint --rcfile=.pylintrc letshelp-letsencrypt/letshelp_letsencrypt
+
+[testenv:apacheconftest]
+#basepython = python2.7
+setenv =
+ LETSENCRYPT=/home/travis/build/letsencrypt/letsencrypt/.tox/apacheconftest/bin/letsencrypt
+commands =
+ pip install -e acme -e .[dev] -e letsencrypt-apache -e letsencrypt-nginx -e letsencrypt-compatibility-test -e letshelp-letsencrypt
+ sudo ./letsencrypt-apache/letsencrypt_apache/tests/apache-conf-files/apache-conf-test --debian-modules