Files
devplacepy/tests/api/nodes/clients.py
T
retoor 6f80a820da
DevPlace CI / test (push) Failing after 3m13s
Zo doen wijdat in oost
2026-10-16 07:20:44 +02:00

48 lines
1.8 KiB
Python

# retoor <retoor@molodetz.nl>
import hashlib
import pytest
from devplacepy import config
@pytest.fixture
def artifacts(tmp_path, monkeypatch):
monkeypatch.setattr(config, "NODE_CLIENTS_DIR", tmp_path)
(tmp_path / "devplace-node-linux-amd64").write_bytes(b"binary-bytes")
(tmp_path / "manifest.json").write_text('[{"version": "0.3.0"}]')
(tmp_path / "bad name.txt").write_text("x")
return tmp_path
def test_client_version_lists_artifacts_with_checksums(client, artifacts):
body = client.get("/nodes/client-version").json()
assert body["version"] == "0.3.0" and body["protocol"] >= 1
names = [item["name"] for item in body["artifacts"]]
assert names == ["devplace-node-linux-amd64"]
assert body["artifacts"][0]["sha256"] == hashlib.sha256(b"binary-bytes").hexdigest()
def test_download_serves_the_file_with_its_checksum(client, artifacts):
response = client.get("/nodes/download/devplace-node-linux-amd64")
assert response.status_code == 200 and response.content == b"binary-bytes"
assert response.headers["x-content-sha256"] == hashlib.sha256(b"binary-bytes").hexdigest()
@pytest.mark.parametrize("name", ["manifest.json", "missing", "..%2Fsecret", "bad%20name.txt", ".hidden"])
def test_download_refuses_everything_else(client, artifacts, name):
assert client.get(f"/nodes/download/{name}").status_code in (404, 422)
def test_download_refuses_a_symlink(client, artifacts):
outside = artifacts.parent / "outside.bin"
outside.write_bytes(b"secret")
(artifacts / "link").symlink_to(outside)
assert client.get("/nodes/download/link").status_code == 404
def test_empty_directory_is_an_empty_list(client, tmp_path, monkeypatch):
monkeypatch.setattr(config, "NODE_CLIENTS_DIR", tmp_path / "absent")
assert client.get("/nodes/client-version").json()["artifacts"] == []