test command line interface

This commit is contained in:
Unrud 2018-09-09 14:58:44 +02:00
parent a146521500
commit 171651e205

View File

@ -23,6 +23,8 @@ import os
import shutil import shutil
import socket import socket
import ssl import ssl
import subprocess
import sys
import tempfile import tempfile
import threading import threading
import time import time
@ -75,15 +77,17 @@ class TestBaseServerRequests:
pass pass
shutil.rmtree(self.colpath) shutil.rmtree(self.colpath)
def request(self, method, path, data=None, **headers): def request(self, method, path, data=None, is_alive_fn=None, **headers):
"""Send a request.""" """Send a request."""
if is_alive_fn is None:
is_alive_fn = self.thread.is_alive
scheme = ("https" if self.configuration.getboolean("server", "ssl") scheme = ("https" if self.configuration.getboolean("server", "ssl")
else "http") else "http")
req = request.Request( req = request.Request(
"%s://[%s]:%d%s" % (scheme, *self.sockname, path), "%s://[%s]:%d%s" % (scheme, *self.sockname, path),
data=data, headers=headers, method=method) data=data, headers=headers, method=method)
while True: while True:
assert self.thread.is_alive() assert is_alive_fn()
try: try:
with self.opener.open(req) as f: with self.opener.open(req) as f:
return f.getcode(), f.info(), f.read().decode() return f.getcode(), f.info(), f.read().decode()
@ -128,3 +132,30 @@ class TestBaseServerRequests:
finally: finally:
server.EAI_ADDRFAMILY = savedEaiAddrfamily server.EAI_ADDRFAMILY = savedEaiAddrfamily
assert status == 302 assert status == 302
def test_command_line_interface(self):
config_args = []
for section, values in config.INITIAL_CONFIG.items():
for option, data in values.items():
long_name = "--{0}-{1}".format(
section, option.replace("_", "-"))
if data["type"] == bool:
if not self.configuration.getboolean(section, option):
long_name = "--no{0}".format(long_name[1:])
config_args.append(long_name)
else:
config_args.append(long_name)
config_args.append(self.configuration.get(section, option))
env = os.environ.copy()
env["PYTHONPATH"] = os.pathsep.join(sys.path)
p = subprocess.Popen(
[sys.executable, "-m", "radicale"] + config_args, env=env)
try:
status, _, _ = self.request(
"GET", "/", is_alive_fn=lambda: p.poll() is None)
assert status == 302
finally:
p.terminate()
p.wait()
if os.name == "posix":
assert p.returncode == 0