s/letsencrypt/certbot letsencrypt-compatibility-test

This commit is contained in:
Brad Warren
2016-04-13 16:58:21 -07:00
parent 3d248d8a60
commit 4fab8751b2
38 changed files with 161 additions and 161 deletions

View File

@@ -0,0 +1,7 @@
include LICENSE.txt
include README.rst
recursive-include docs *
include certbot_compatibility_test/configurators/apache/a2enmod.sh
include certbot_compatibility_test/configurators/apache/a2dismod.sh
include certbot_compatibility_test/configurators/apache/Dockerfile
recursive-include certbot_compatibility_test/testdata *

View File

@@ -0,0 +1,20 @@
FROM httpd
MAINTAINER Brad Warren <bradmw@umich.edu>
RUN mkdir /var/run/apache2
ENV APACHE_RUN_USER=daemon \
APACHE_RUN_GROUP=daemon \
APACHE_PID_FILE=/usr/local/apache2/logs/httpd.pid \
APACHE_RUN_DIR=/var/run/apache2 \
APACHE_LOCK_DIR=/var/lock \
APACHE_LOG_DIR=/usr/local/apache2/logs
COPY certbot-compatibility-test/certbot_compatibility_test/configurators/apache/a2enmod.sh /usr/local/bin/
COPY certbot-compatibility-test/certbot_compatibility_test/configurators/apache/a2dismod.sh /usr/local/bin/
COPY certbot-compatibility-test/certbot_compatibility_test/testdata/rsa1024_key2.pem /usr/local/apache2/conf/
COPY certbot-compatibility-test/certbot_compatibility_test/testdata/empty_cert.pem /usr/local/apache2/conf/
# Note: this only exposes the port to other docker containers. You
# still have to bind to 443@host at runtime.
EXPOSE 443

View File

@@ -2,9 +2,9 @@
import zope.interface
from letsencrypt_compatibility_test import errors
from letsencrypt_compatibility_test import interfaces
from letsencrypt_compatibility_test.configurators.apache import common as apache_common
from certbot_compatibility_test import errors
from certbot_compatibility_test import interfaces
from certbot_compatibility_test.configurators.apache import common as apache_common
# The docker image doesn't actually have the watchdog module, but unless the

View File

@@ -6,13 +6,13 @@ import subprocess
import mock
import zope.interface
from letsencrypt import configuration
from letsencrypt import errors as le_errors
from letsencrypt_apache import configurator
from letsencrypt_compatibility_test import errors
from letsencrypt_compatibility_test import interfaces
from letsencrypt_compatibility_test import util
from letsencrypt_compatibility_test.configurators import common as configurators_common
from certbot import configuration
from certbot import errors as le_errors
from certbot_apache import configurator
from certbot_compatibility_test import errors
from certbot_compatibility_test import interfaces
from certbot_compatibility_test import util
from certbot_compatibility_test.configurators import common as configurators_common
APACHE_VERSION_REGEX = re.compile(r"Apache/([0-9\.]*)", re.IGNORECASE)
@@ -41,20 +41,20 @@ class Proxy(configurators_common.Proxy):
mock_subprocess.Popen = self.popen
mock.patch(
"letsencrypt_apache.configurator.subprocess",
"certbot_apache.configurator.subprocess",
mock_subprocess).start()
mock.patch(
"letsencrypt_apache.parser.subprocess",
"certbot_apache.parser.subprocess",
mock_subprocess).start()
mock.patch(
"letsencrypt.le_util.subprocess",
"certbot.le_util.subprocess",
mock_subprocess).start()
mock.patch(
"letsencrypt_apache.configurator.le_util.exe_exists",
"certbot_apache.configurator.le_util.exe_exists",
_is_apache_command).start()
patch = mock.patch(
"letsencrypt_apache.configurator.display_ops.select_vhost")
"certbot_apache.configurator.display_ops.select_vhost")
mock_display = patch.start()
mock_display.side_effect = le_errors.PluginError(
"Unable to determine vhost")

View File

@@ -6,9 +6,9 @@ import tempfile
import docker
from letsencrypt import constants
from letsencrypt_compatibility_test import errors
from letsencrypt_compatibility_test import util
from certbot import constants
from certbot_compatibility_test import errors
from certbot_compatibility_test import util
logger = logging.getLogger(__name__)

View File

@@ -1,7 +1,7 @@
"""Let's Encrypt compatibility test interfaces"""
import zope.interface
import letsencrypt.interfaces
import certbot.interfaces
# pylint: disable=no-self-argument,no-method-argument
@@ -37,11 +37,11 @@ class IPluginProxy(zope.interface.Interface):
"""Returns the domain names that can be used in testing"""
class IAuthenticatorProxy(IPluginProxy, letsencrypt.interfaces.IAuthenticator):
class IAuthenticatorProxy(IPluginProxy, certbot.interfaces.IAuthenticator):
"""Wraps a Let's Encrypt authenticator"""
class IInstallerProxy(IPluginProxy, letsencrypt.interfaces.IInstaller):
class IInstallerProxy(IPluginProxy, certbot.interfaces.IInstaller):
"""Wraps a Let's Encrypt installer"""
def get_all_names_answer():

View File

@@ -13,15 +13,15 @@ import OpenSSL
from acme import challenges
from acme import crypto_util
from acme import messages
from letsencrypt import achallenges
from letsencrypt import errors as le_errors
from letsencrypt.tests import acme_util
from certbot import achallenges
from certbot import errors as le_errors
from certbot.tests import acme_util
from letsencrypt_compatibility_test import errors
from letsencrypt_compatibility_test import util
from letsencrypt_compatibility_test import validator
from certbot_compatibility_test import errors
from certbot_compatibility_test import util
from certbot_compatibility_test import validator
from letsencrypt_compatibility_test.configurators.apache import apache24
from certbot_compatibility_test.configurators.apache import apache24
DESCRIPTION = """

View File

@@ -10,9 +10,9 @@ import tarfile
from acme import jose
from acme import test_util
from letsencrypt import constants
from certbot import constants
from letsencrypt_compatibility_test import errors
from certbot_compatibility_test import errors
_KEY_BASE = "rsa1024_key.pem"
@@ -26,7 +26,7 @@ def create_le_config(parent_dir):
"""Sets up LE dirs in parent_dir and returns the config dict"""
config = copy.deepcopy(constants.CLI_DEFAULTS)
le_dir = os.path.join(parent_dir, "letsencrypt")
le_dir = os.path.join(parent_dir, "certbot")
config["config_dir"] = os.path.join(le_dir, "config")
config["work_dir"] = os.path.join(le_dir, "work")
config["logs_dir"] = os.path.join(le_dir, "logs_dir")

View File

@@ -6,7 +6,7 @@ import zope.interface
from acme import crypto_util
from acme import errors as acme_errors
from letsencrypt import interfaces
from certbot import interfaces
logger = logging.getLogger(__name__)

View File

@@ -1,4 +1,4 @@
"""Tests for letsencrypt_compatibility_test.validator."""
"""Tests for certbot_compatibility_test.validator."""
import requests
import unittest
@@ -6,7 +6,7 @@ import mock
import OpenSSL
from acme import errors as acme_errors
from letsencrypt_compatibility_test import validator
from certbot_compatibility_test import validator
class ValidatorTest(unittest.TestCase):
@@ -14,7 +14,7 @@ class ValidatorTest(unittest.TestCase):
self.validator = validator.Validator()
@mock.patch(
"letsencrypt_compatibility_test.validator.crypto_util.probe_sni")
"certbot_compatibility_test.validator.crypto_util.probe_sni")
def test_certificate_success(self, mock_probe_sni):
cert = OpenSSL.crypto.X509()
mock_probe_sni.return_value = cert
@@ -22,7 +22,7 @@ class ValidatorTest(unittest.TestCase):
cert, "test.com", "127.0.0.1"))
@mock.patch(
"letsencrypt_compatibility_test.validator.crypto_util.probe_sni")
"certbot_compatibility_test.validator.crypto_util.probe_sni")
def test_certificate_error(self, mock_probe_sni):
cert = OpenSSL.crypto.X509()
mock_probe_sni.side_effect = [acme_errors.Error]
@@ -30,7 +30,7 @@ class ValidatorTest(unittest.TestCase):
cert, "test.com", "127.0.0.1"))
@mock.patch(
"letsencrypt_compatibility_test.validator.crypto_util.probe_sni")
"certbot_compatibility_test.validator.crypto_util.probe_sni")
def test_certificate_failure(self, mock_probe_sni):
cert = OpenSSL.crypto.X509()
cert.set_serial_number(1337)
@@ -38,67 +38,67 @@ class ValidatorTest(unittest.TestCase):
self.assertFalse(self.validator.certificate(
cert, "test.com", "127.0.0.1"))
@mock.patch("letsencrypt_compatibility_test.validator.requests.get")
@mock.patch("certbot_compatibility_test.validator.requests.get")
def test_succesful_redirect(self, mock_get_request):
mock_get_request.return_value = create_response(
301, {"location": "https://test.com"})
self.assertTrue(self.validator.redirect("test.com"))
@mock.patch("letsencrypt_compatibility_test.validator.requests.get")
@mock.patch("certbot_compatibility_test.validator.requests.get")
def test_redirect_with_headers(self, mock_get_request):
mock_get_request.return_value = create_response(
301, {"location": "https://test.com"})
self.assertTrue(self.validator.redirect(
"test.com", headers={"Host": "test.com"}))
@mock.patch("letsencrypt_compatibility_test.validator.requests.get")
@mock.patch("certbot_compatibility_test.validator.requests.get")
def test_redirect_missing_location(self, mock_get_request):
mock_get_request.return_value = create_response(301)
self.assertFalse(self.validator.redirect("test.com"))
@mock.patch("letsencrypt_compatibility_test.validator.requests.get")
@mock.patch("certbot_compatibility_test.validator.requests.get")
def test_redirect_wrong_status_code(self, mock_get_request):
mock_get_request.return_value = create_response(
201, {"location": "https://test.com"})
self.assertFalse(self.validator.redirect("test.com"))
@mock.patch("letsencrypt_compatibility_test.validator.requests.get")
@mock.patch("certbot_compatibility_test.validator.requests.get")
def test_redirect_wrong_redirect_code(self, mock_get_request):
mock_get_request.return_value = create_response(
303, {"location": "https://test.com"})
self.assertFalse(self.validator.redirect("test.com"))
@mock.patch("letsencrypt_compatibility_test.validator.requests.get")
@mock.patch("certbot_compatibility_test.validator.requests.get")
def test_hsts_empty(self, mock_get_request):
mock_get_request.return_value = create_response(
headers={"strict-transport-security": ""})
self.assertFalse(self.validator.hsts("test.com"))
@mock.patch("letsencrypt_compatibility_test.validator.requests.get")
@mock.patch("certbot_compatibility_test.validator.requests.get")
def test_hsts_malformed(self, mock_get_request):
mock_get_request.return_value = create_response(
headers={"strict-transport-security": "sdfal"})
self.assertFalse(self.validator.hsts("test.com"))
@mock.patch("letsencrypt_compatibility_test.validator.requests.get")
@mock.patch("certbot_compatibility_test.validator.requests.get")
def test_hsts_bad_max_age(self, mock_get_request):
mock_get_request.return_value = create_response(
headers={"strict-transport-security": "max-age=not-an-int"})
self.assertFalse(self.validator.hsts("test.com"))
@mock.patch("letsencrypt_compatibility_test.validator.requests.get")
@mock.patch("certbot_compatibility_test.validator.requests.get")
def test_hsts_expire(self, mock_get_request):
mock_get_request.return_value = create_response(
headers={"strict-transport-security": "max-age=3600"})
self.assertFalse(self.validator.hsts("test.com"))
@mock.patch("letsencrypt_compatibility_test.validator.requests.get")
@mock.patch("certbot_compatibility_test.validator.requests.get")
def test_hsts(self, mock_get_request):
mock_get_request.return_value = create_response(
headers={"strict-transport-security": "max-age=31536000"})
self.assertTrue(self.validator.hsts("test.com"))
@mock.patch("letsencrypt_compatibility_test.validator.requests.get")
@mock.patch("certbot_compatibility_test.validator.requests.get")
def test_hsts_include_subdomains(self, mock_get_request):
mock_get_request.return_value = create_response(
headers={"strict-transport-security":

View File

@@ -87,9 +87,9 @@ qthelp:
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/letsencrypt-compatibility-test.qhcp"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/certbot-compatibility-test.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/letsencrypt-compatibility-test.qhc"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/certbot-compatibility-test.qhc"
applehelp:
$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
@@ -104,8 +104,8 @@ devhelp:
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/letsencrypt-compatibility-test"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/letsencrypt-compatibility-test"
@echo "# mkdir -p $$HOME/.local/share/devhelp/certbot-compatibility-test"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/certbot-compatibility-test"
@echo "# devhelp"
epub:

View File

@@ -0,0 +1,53 @@
:mod:`certbot_compatibility_test`
-------------------------------------
.. automodule:: certbot_compatibility_test
:members:
:mod:`certbot_compatibility_test.errors`
============================================
.. automodule:: certbot_compatibility_test.errors
:members:
:mod:`certbot_compatibility_test.interfaces`
================================================
.. automodule:: certbot_compatibility_test.interfaces
:members:
:mod:`certbot_compatibility_test.test_driver`
=================================================
.. automodule:: certbot_compatibility_test.test_driver
:members:
:mod:`certbot_compatibility_test.util`
==========================================
.. automodule:: certbot_compatibility_test.util
:members:
:mod:`certbot_compatibility_test.configurators`
===================================================
.. automodule:: certbot_compatibility_test.configurators
:members:
:mod:`certbot_compatibility_test.configurators.apache`
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. automodule:: certbot_compatibility_test.configurators.apache
:members:
:mod:`certbot_compatibility_test.configurators.apache.apache24`
-------------------------------------------------------------------
.. automodule:: certbot_compatibility_test.configurators.apache.apache24
:members:
:mod:`certbot_compatibility_test.configurators.apache.common`
-------------------------------------------------------------------
.. automodule:: certbot_compatibility_test.configurators.apache.common
:members:

View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
# letsencrypt-compatibility-test documentation build configuration file, created by
# certbot-compatibility-test documentation build configuration file, created by
# sphinx-quickstart on Sun Oct 18 13:40:53 2015.
#
# This file is execfile()d with the current directory set to its
@@ -59,7 +59,7 @@ source_suffix = '.rst'
master_doc = 'index'
# General information about the project.
project = u'letsencrypt-compatibility-test'
project = u'certbot-compatibility-test'
copyright = u'2014-2015, Let\'s Encrypt Project'
author = u'Let\'s Encrypt Project'
@@ -221,7 +221,7 @@ html_static_path = ['_static']
#html_search_scorer = 'scorer.js'
# Output file base name for HTML help builder.
htmlhelp_basename = 'letsencrypt-compatibility-testdoc'
htmlhelp_basename = 'certbot-compatibility-testdoc'
# -- Options for LaTeX output ---------------------------------------------
@@ -243,8 +243,8 @@ latex_elements = {
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
(master_doc, 'letsencrypt-compatibility-test.tex',
u'letsencrypt-compatibility-test Documentation',
(master_doc, 'certbot-compatibility-test.tex',
u'certbot-compatibility-test Documentation',
u'Let\'s Encrypt Project', 'manual'),
]
@@ -274,8 +274,8 @@ latex_documents = [
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
(master_doc, 'letsencrypt-compatibility-test',
u'letsencrypt-compatibility-test Documentation',
(master_doc, 'certbot-compatibility-test',
u'certbot-compatibility-test Documentation',
[author], 1)
]
@@ -289,9 +289,9 @@ man_pages = [
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
(master_doc, 'letsencrypt-compatibility-test',
u'letsencrypt-compatibility-test Documentation',
author, 'letsencrypt-compatibility-test',
(master_doc, 'certbot-compatibility-test',
u'certbot-compatibility-test Documentation',
author, 'certbot-compatibility-test',
'One line description of project.', 'Miscellaneous'),
]
@@ -311,9 +311,9 @@ texinfo_documents = [
intersphinx_mapping = {
'python': ('https://docs.python.org/', None),
'acme': ('https://acme-python.readthedocs.org/en/latest/', None),
'letsencrypt': ('https://letsencrypt.readthedocs.org/en/latest/', None),
'letsencrypt-apache': (
'certbot': ('https://letsencrypt.readthedocs.org/en/latest/', None),
'certbot-apache': (
'https://letsencrypt-apache.readthedocs.org/en/latest/', None),
'letsencrypt-nginx': (
'certbot-nginx': (
'https://letsencrypt-nginx.readthedocs.org/en/latest/', None),
}

View File

@@ -1,9 +1,9 @@
.. letsencrypt-compatibility-test documentation master file, created by
.. certbot-compatibility-test documentation master file, created by
sphinx-quickstart on Sun Oct 18 13:40:53 2015.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
Welcome to letsencrypt-compatibility-test's documentation!
Welcome to certbot-compatibility-test's documentation!
==========================================================
Contents:

View File

@@ -127,9 +127,9 @@ if "%1" == "qthelp" (
echo.
echo.Build finished; now you can run "qcollectiongenerator" with the ^
.qhcp project file in %BUILDDIR%/qthelp, like this:
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\letsencrypt-compatibility-test.qhcp
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\certbot-compatibility-test.qhcp
echo.To view the help file:
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\letsencrypt-compatibility-test.ghc
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\certbot-compatibility-test.ghc
goto end
)

View File

@@ -9,5 +9,5 @@
-e acme
-e .
-e letsencrypt-apache
-e letsencrypt-compatibility-test[docs]
-e certbot-apache
-e certbot-compatibility-test[docs]

View File

@@ -7,8 +7,8 @@ from setuptools import find_packages
version = '0.6.0.dev0'
install_requires = [
'letsencrypt=={0}'.format(version),
'letsencrypt-apache=={0}'.format(version),
'certbot=={0}'.format(version),
'certbot-apache=={0}'.format(version),
'docker-py',
'requests',
'zope.interface',
@@ -31,7 +31,7 @@ docs_extras = [
]
setup(
name='letsencrypt-compatibility-test',
name='certbot-compatibility-test',
version=version,
description="Compatibility tests for Let's Encrypt client",
url='https://github.com/letsencrypt/letsencrypt',
@@ -58,7 +58,7 @@ setup(
},
entry_points={
'console_scripts': [
'letsencrypt-compatibility-test = letsencrypt_compatibility_test.test_driver:main',
'certbot-compatibility-test = certbot_compatibility_test.test_driver:main',
],
},
)

View File

@@ -1,7 +0,0 @@
include LICENSE.txt
include README.rst
recursive-include docs *
include letsencrypt_compatibility_test/configurators/apache/a2enmod.sh
include letsencrypt_compatibility_test/configurators/apache/a2dismod.sh
include letsencrypt_compatibility_test/configurators/apache/Dockerfile
recursive-include letsencrypt_compatibility_test/testdata *

View File

@@ -1,53 +0,0 @@
:mod:`letsencrypt_compatibility_test`
-------------------------------------
.. automodule:: letsencrypt_compatibility_test
:members:
:mod:`letsencrypt_compatibility_test.errors`
============================================
.. automodule:: letsencrypt_compatibility_test.errors
:members:
:mod:`letsencrypt_compatibility_test.interfaces`
================================================
.. automodule:: letsencrypt_compatibility_test.interfaces
:members:
:mod:`letsencrypt_compatibility_test.test_driver`
=================================================
.. automodule:: letsencrypt_compatibility_test.test_driver
:members:
:mod:`letsencrypt_compatibility_test.util`
==========================================
.. automodule:: letsencrypt_compatibility_test.util
:members:
:mod:`letsencrypt_compatibility_test.configurators`
===================================================
.. automodule:: letsencrypt_compatibility_test.configurators
:members:
:mod:`letsencrypt_compatibility_test.configurators.apache`
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. automodule:: letsencrypt_compatibility_test.configurators.apache
:members:
:mod:`letsencrypt_compatibility_test.configurators.apache.apache24`
-------------------------------------------------------------------
.. automodule:: letsencrypt_compatibility_test.configurators.apache.apache24
:members:
:mod:`letsencrypt_compatibility_test.configurators.apache.common`
-------------------------------------------------------------------
.. automodule:: letsencrypt_compatibility_test.configurators.apache.common
:members:

View File

@@ -1,20 +0,0 @@
FROM httpd
MAINTAINER Brad Warren <bradmw@umich.edu>
RUN mkdir /var/run/apache2
ENV APACHE_RUN_USER=daemon \
APACHE_RUN_GROUP=daemon \
APACHE_PID_FILE=/usr/local/apache2/logs/httpd.pid \
APACHE_RUN_DIR=/var/run/apache2 \
APACHE_LOCK_DIR=/var/lock \
APACHE_LOG_DIR=/usr/local/apache2/logs
COPY letsencrypt-compatibility-test/letsencrypt_compatibility_test/configurators/apache/a2enmod.sh /usr/local/bin/
COPY letsencrypt-compatibility-test/letsencrypt_compatibility_test/configurators/apache/a2dismod.sh /usr/local/bin/
COPY letsencrypt-compatibility-test/letsencrypt_compatibility_test/testdata/rsa1024_key2.pem /usr/local/apache2/conf/
COPY letsencrypt-compatibility-test/letsencrypt_compatibility_test/testdata/empty_cert.pem /usr/local/apache2/conf/
# Note: this only exposes the port to other docker containers. You
# still have to bind to 443@host at runtime.
EXPOSE 443

View File

@@ -9,7 +9,7 @@
# -e makes sure we fail fast and don't submit coveralls submit
if [ "xxx$1" = "xxx" ]; then
pkgs="certbot acme letsencrypt_apache letsencrypt_nginx letshelp_letsencrypt"
pkgs="certbot acme certbot_apache certbot_nginx letshelp_letsencrypt"
else
pkgs="$@"
fi
@@ -19,9 +19,9 @@ cover () {
min=98
elif [ "$1" = "acme" ]; then
min=100
elif [ "$1" = "letsencrypt_apache" ]; then
elif [ "$1" = "certbot_apache" ]; then
min=100
elif [ "$1" = "letsencrypt_nginx" ]; then
elif [ "$1" = "certbot_nginx" ]; then
min=97
elif [ "$1" = "letshelp_letsencrypt" ]; then
min=100

View File

@@ -64,19 +64,19 @@ basepython = python2.7
# duplicate code checking; if one of the commands fails, others will
# continue, but tox return code will reflect previous error
commands =
pip install -e acme[dev] -e .[dev] -e certbot-apache -e certbot-nginx -e letsencrypt-compatibility-test -e letshelp-letsencrypt
pip install -e acme[dev] -e .[dev] -e certbot-apache -e certbot-nginx -e certbot-compatibility-test -e letshelp-letsencrypt
./pep8.travis.sh
pylint --rcfile=.pylintrc certbot
pylint --rcfile=acme/.pylintrc acme/acme
pylint --rcfile=.pylintrc certbot-apache/certbot_apache
pylint --rcfile=.pylintrc certbot-nginx/certbot_nginx
pylint --rcfile=.pylintrc letsencrypt-compatibility-test/letsencrypt_compatibility_test
pylint --rcfile=.pylintrc certbot-compatibility-test/certbot_compatibility_test
pylint --rcfile=.pylintrc letshelp-letsencrypt/letshelp_letsencrypt
[testenv:apacheconftest]
#basepython = python2.7
commands =
pip install -e acme -e .[dev] -e certbot-apache -e certbot-nginx -e letsencrypt-compatibility-test -e letshelp-letsencrypt
pip install -e acme -e .[dev] -e certbot-apache -e certbot-nginx -e certbot-compatibility-test -e letshelp-letsencrypt
{toxinidir}/certbot-apache/certbot_apache/tests/apache-conf-files/apache-conf-test --debian-modules