mirror of
https://github.com/certbot/certbot.git
synced 2026-06-05 14:54:24 -04:00
Working implementation
This commit is contained in:
parent
f401750b43
commit
23ec9afdb4
4 changed files with 59 additions and 19 deletions
|
|
@ -13,6 +13,8 @@ def construct_apache_config_dir(apache_root, http_port, https_port, key_path=Non
|
|||
|
||||
webroot_path = os.path.join(apache_root, 'www')
|
||||
os.mkdir(webroot_path)
|
||||
with open(os.path.join(webroot_path, 'index.html'), 'w') as file_h:
|
||||
file_h.write('Hello World!')
|
||||
|
||||
main_config_path = os.path.join(config_path, 'apache2.conf')
|
||||
with open(main_config_path, 'w') as file_h:
|
||||
|
|
@ -93,21 +95,24 @@ Listen {http}
|
|||
user = user if user != 'root' else 'www-data'
|
||||
group = user
|
||||
|
||||
pid_file = os.path.join(run_path, 'apache.pid')
|
||||
|
||||
with open(os.path.join(config_path, 'envvars'), 'w') as file_h:
|
||||
file_h.write('''\
|
||||
unset HOME
|
||||
export APACHE_RUN_USER={user}
|
||||
export APACHE_RUN_GROUP={group}
|
||||
export APACHE_PID_FILE={run_path}/apache2.pid
|
||||
export APACHE_PID_FILE={pid_file}
|
||||
export APACHE_RUN_DIR={run_path}
|
||||
export APACHE_LOCK_DIR={lock_path}
|
||||
export APACHE_LOG_DIR={logs_path}
|
||||
export LANG=C
|
||||
'''.format(user=user, group=group, run_path=run_path, lock_path=lock_path, logs_path=logs_path))
|
||||
'''.format(user=user, group=group, pid_file=pid_file,
|
||||
run_path=run_path, lock_path=lock_path, logs_path=logs_path))
|
||||
|
||||
new_environ['APACHE_RUN_USER'] = user
|
||||
new_environ['APACHE_RUN_GROUP'] = group
|
||||
new_environ['APACHE_PID_FILE'] = os.path.join(run_path, 'apache.pid')
|
||||
new_environ['APACHE_PID_FILE'] = pid_file
|
||||
new_environ['APACHE_RUN_DIR'] = run_path
|
||||
new_environ['APACHE_LOCK_DIR'] = lock_path
|
||||
new_environ['APACHE_LOG_DIR'] = logs_path
|
||||
|
|
@ -158,9 +163,9 @@ export LANG=C
|
|||
'''.format(https=https_port, le_host=le_host, webroot=webroot_path,
|
||||
cert_path=cert_path, key_path=key_path))
|
||||
|
||||
return new_environ
|
||||
return new_environ, pid_file
|
||||
|
||||
|
||||
def test():
|
||||
env = construct_apache_config_dir('/tmp/test1', 5001, 5002)
|
||||
subprocess.call(['apache2', '-f', '/tmp/test1/config/apache2.conf'], env=env)
|
||||
subprocess.call(['apache2ctl', '-DFOREGROUND'], env=env)
|
||||
|
|
|
|||
|
|
@ -1,28 +1,43 @@
|
|||
import os
|
||||
import signal
|
||||
import subprocess
|
||||
|
||||
from certbot_integration_tests.certbot_tests import context as certbot_context
|
||||
from certbot_integration_tests.apache_tests import apache_config
|
||||
from certbot_integration_tests.utils import certbot_call
|
||||
|
||||
|
||||
class IntegrationTestsContext(certbot_context.IntegrationTestsContext):
|
||||
def __init__(self, request):
|
||||
super(IntegrationTestsContext, self).__init__(request)
|
||||
|
||||
subprocess.check_output(['chmod', '+x', self.workspace])
|
||||
|
||||
self.apache_root = os.path.join(self.workspace, 'apache')
|
||||
os.mkdir(self.apache_root)
|
||||
|
||||
self.webroot = os.path.join(self.apache_root, 'www')
|
||||
os.mkdir(self.webroot)
|
||||
with open(os.path.join(self.webroot, 'index.html'), 'w') as file_handler:
|
||||
file_handler.write('Hello World!')
|
||||
|
||||
self.process = self._start_apache()
|
||||
self.apache_env, self.apache_pid_file = apache_config.construct_apache_config_dir(
|
||||
self.apache_root, self.http_01_port, self.tls_alpn_01_port,
|
||||
wtf_prefix=self.worker_id)
|
||||
|
||||
def cleanup(self):
|
||||
self._stop_apache()
|
||||
super(IntegrationTestsContext, self).cleanup()
|
||||
#super(IntegrationTestsContext, self).cleanup()
|
||||
|
||||
def _start_apache(self):
|
||||
pass
|
||||
def certbot_test_apache(self, args):
|
||||
command = ['--authenticator', 'apache', '--installer', 'apache']
|
||||
command.extend(args)
|
||||
|
||||
return certbot_call.certbot_test(
|
||||
command, self.directory_url, self.http_01_port, self.tls_alpn_01_port,
|
||||
self.config_dir, self.workspace, env=self.apache_env, force_renew=True)
|
||||
|
||||
def _stop_apache(self):
|
||||
pass
|
||||
try:
|
||||
with open(self.apache_pid_file) as file_h:
|
||||
pid = int(file_h.read().strip())
|
||||
except BaseException:
|
||||
pid = None
|
||||
|
||||
if pid:
|
||||
os.kill(pid, signal.SIGTERM)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
import pytest
|
||||
|
||||
from certbot_integration_tests.apache_tests import context as apache_context
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def context(request):
|
||||
# Fixture request is a built-in pytest fixture describing current test request.
|
||||
integration_test_context = apache_context.IntegrationTestsContext(request)
|
||||
try:
|
||||
yield integration_test_context
|
||||
finally:
|
||||
integration_test_context.cleanup()
|
||||
|
||||
|
||||
def test_it(context):
|
||||
command = ['-d', 'apache.{0}.wtf'.format(context.worker_id)]
|
||||
context.certbot_test_apache(command)
|
||||
|
|
@ -11,7 +11,7 @@ from certbot_integration_tests.utils.constants import *
|
|||
|
||||
|
||||
def certbot_test(certbot_args, directory_url, http_01_port, tls_alpn_01_port,
|
||||
config_dir, workspace, force_renew=True):
|
||||
config_dir, workspace, env=None, force_renew=True):
|
||||
"""
|
||||
Invoke the certbot executable available in PATH in a test context for the given args.
|
||||
The test context consists in running certbot in debug mode, with various flags suitable
|
||||
|
|
@ -23,19 +23,21 @@ def certbot_test(certbot_args, directory_url, http_01_port, tls_alpn_01_port,
|
|||
:param int tls_alpn_01_port: port for the TLS-ALPN-01 challenges
|
||||
:param str config_dir: certbot configuration directory to use
|
||||
:param str workspace: certbot current directory to use
|
||||
:param obj env: the environment variables to use (default: None, then current env will be used)
|
||||
:param bool force_renew: set False to not force renew existing certificates (default: True)
|
||||
:return: stdout as string
|
||||
:rtype: str
|
||||
"""
|
||||
new_environ = env if env else os.environ.copy()
|
||||
command, env = _prepare_args_env(certbot_args, directory_url, http_01_port, tls_alpn_01_port,
|
||||
config_dir, workspace, force_renew)
|
||||
config_dir, workspace, force_renew, new_environ)
|
||||
|
||||
return subprocess.check_output(command, universal_newlines=True, cwd=workspace, env=env)
|
||||
|
||||
|
||||
def _prepare_args_env(certbot_args, directory_url, http_01_port, tls_alpn_01_port,
|
||||
config_dir, workspace, force_renew):
|
||||
new_environ = os.environ.copy()
|
||||
config_dir, workspace, force_renew, env):
|
||||
new_environ = env.copy()
|
||||
new_environ['TMPDIR'] = workspace
|
||||
|
||||
additional_args = []
|
||||
|
|
|
|||
Loading…
Reference in a new issue