test WSGI server

This commit is contained in:
Unrud 2018-09-09 14:58:44 +02:00
parent 171651e205
commit f1de843188
2 changed files with 33 additions and 0 deletions

View File

@ -28,6 +28,7 @@ import sys
import tempfile
import threading
import time
from configparser import ConfigParser
from urllib import request
from urllib.error import HTTPError, URLError
@ -37,6 +38,11 @@ from .helpers import get_file_path
import pytest # isort:skip
try:
import gunicorn
except ImportError:
gunicorn = None
class DisabledRedirectHandler(request.HTTPRedirectHandler):
def http_error_302(self, req, fp, code, msg, headers):
@ -159,3 +165,27 @@ class TestBaseServerRequests:
p.wait()
if os.name == "posix":
assert p.returncode == 0
@pytest.mark.skipif(not gunicorn, reason="gunicorn module not found")
def test_wsgi_server(self):
config = ConfigParser()
config.read_dict(self.configuration)
assert config.remove_section("internal")
config_path = os.path.join(self.colpath, "config")
with open(config_path, "w") as f:
config.write(f)
env = os.environ.copy()
env["PYTHONPATH"] = os.pathsep.join(sys.path)
p = subprocess.Popen([
sys.executable,
"-c", "from gunicorn.app.wsgiapp import run; run()",
"--bind", self.configuration["server"]["hosts"],
"--env", "RADICALE_CONFIG=%s" % config_path, "radicale"], env=env)
try:
status, _, _ = self.request(
"GET", "/", is_alive_fn=lambda: p.poll() is None)
assert status == 302
finally:
p.terminate()
p.wait()
assert p.returncode == 0

View File

@ -36,6 +36,7 @@ For further information, please visit the `Radicale Website
"""
import os
import sys
from setuptools import find_packages, setup
@ -53,6 +54,8 @@ needs_pytest = {"pytest", "test", "ptr"}.intersection(sys.argv)
pytest_runner = ["pytest-runner"] if needs_pytest else []
tests_require = ["pytest-runner", "pytest", "pytest-cov", "pytest-flake8",
"pytest-isort"]
if os.name == "posix":
tests_require.append("gunicorn")
setup(
name="Radicale",