diff options
Diffstat (limited to 'certbot-ci/certbot_integration_tests/nginx_tests/context.py')
-rw-r--r-- | certbot-ci/certbot_integration_tests/nginx_tests/context.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/certbot-ci/certbot_integration_tests/nginx_tests/context.py b/certbot-ci/certbot_integration_tests/nginx_tests/context.py new file mode 100644 index 000000000..3a769840c --- /dev/null +++ b/certbot-ci/certbot_integration_tests/nginx_tests/context.py @@ -0,0 +1,62 @@ +import os +import subprocess + +from certbot_integration_tests.certbot_tests import context as certbot_context +from certbot_integration_tests.nginx_tests import nginx_config as config +from certbot_integration_tests.utils import certbot_call +from certbot_integration_tests.utils import misc + + +class IntegrationTestsContext(certbot_context.IntegrationTestsContext): + """General fixture describing a certbot-nginx integration tests context""" + def __init__(self, request): + super(IntegrationTestsContext, self).__init__(request) + + self.nginx_root = os.path.join(self.workspace, 'nginx') + os.mkdir(self.nginx_root) + + self.webroot = os.path.join(self.nginx_root, 'webroot') + os.mkdir(self.webroot) + with open(os.path.join(self.webroot, 'index.html'), 'w') as file_handler: + file_handler.write('Hello World!') + + self.nginx_config_path = os.path.join(self.nginx_root, 'nginx.conf') + self.nginx_config = None + + default_server = request.param['default_server'] + self.process = self._start_nginx(default_server) + + def cleanup(self): + self._stop_nginx() + super(IntegrationTestsContext, self).cleanup() + + def certbot_test_nginx(self, args): + """ + Main command to execute certbot using the nginx plugin. + :param list args: list of arguments to pass to nginx + :param bool force_renew: set to False to not renew by default + """ + command = ['--authenticator', 'nginx', '--installer', 'nginx', + '--nginx-server-root', self.nginx_root] + 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, force_renew=True) + + def _start_nginx(self, default_server): + self.nginx_config = config.construct_nginx_config( + self.nginx_root, self.webroot, self.http_01_port, self.tls_alpn_01_port, + self.other_port, default_server, wtf_prefix=self.worker_id) + with open(self.nginx_config_path, 'w') as file: + file.write(self.nginx_config) + + process = subprocess.Popen(['nginx', '-c', self.nginx_config_path, '-g', 'daemon off;']) + + assert process.poll() is None + misc.check_until_timeout('http://localhost:{0}'.format(self.http_01_port)) + return process + + def _stop_nginx(self): + assert self.process.poll() is None + self.process.terminate() + self.process.wait() |