--uds option for binding to Unix domain socket, closes #1388

This commit is contained in:
Simon Willison 2021-07-10 16:37:30 -07:00
commit 180c7a5328
6 changed files with 65 additions and 2 deletions

View file

@ -131,7 +131,6 @@ def ds_localhost_https_server(tmp_path_factory):
for blob in server_cert.cert_chain_pems:
blob.write_to_path(path=certfile, append=True)
ca.cert_pem.write_to_path(path=client_cert)
ds_proc = subprocess.Popen(
[
"datasette",
@ -154,3 +153,22 @@ def ds_localhost_https_server(tmp_path_factory):
yield ds_proc, client_cert
# Shut it down at the end of the pytest session
ds_proc.terminate()
@pytest.fixture(scope="session")
def ds_unix_domain_socket_server(tmp_path_factory):
socket_folder = tmp_path_factory.mktemp("uds")
uds = str(socket_folder / "datasette.sock")
ds_proc = subprocess.Popen(
["datasette", "--memory", "--uds", uds],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
cwd=tempfile.gettempdir(),
)
# Give the server time to start
time.sleep(1.5)
# Check it started successfully
assert not ds_proc.poll(), ds_proc.stdout.read().decode("utf-8")
yield ds_proc, uds
# Shut it down at the end of the pytest session
ds_proc.terminate()

View file

@ -132,6 +132,7 @@ def test_metadata_yaml():
immutable=[],
host="127.0.0.1",
port=8001,
uds=None,
reload=False,
cors=False,
sqlite_extensions=[],

View file

@ -1,5 +1,6 @@
import httpx
import pytest
import socket
@pytest.mark.serial
@ -21,3 +22,17 @@ def test_serve_localhost_https(ds_localhost_https_server):
"path": "/_memory",
"tables": [],
}.items() <= response.json().items()
@pytest.mark.serial
@pytest.mark.skipif(not hasattr(socket, "AF_UNIX"), reason="Requires socket.AF_UNIX support")
def test_serve_unix_domain_socket(ds_unix_domain_socket_server):
_, uds = ds_unix_domain_socket_server
transport = httpx.HTTPTransport(uds=uds)
client = httpx.Client(transport=transport)
response = client.get("http://localhost/_memory.json")
assert {
"database": "_memory",
"path": "/_memory",
"tables": [],
}.items() <= response.json().items()