mirror of
https://github.com/unshackle-dl/unshackle.git
synced 2026-11-12 20:15:10 +00:00
Every structured error carries a short ref, appended to its message and logged with the request; /api/dashboard/status gains per-service error counts. Gzip now compresses in place.
65 lines
1.9 KiB
Python
65 lines
1.9 KiB
Python
"""Unit tests for unshackle.core.api.compression.compression_middleware."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import asyncio
|
|
import gzip
|
|
import json
|
|
|
|
import pytest
|
|
from aiohttp import web
|
|
|
|
from unshackle.core.api.compression import compression_middleware
|
|
|
|
pytestmark = pytest.mark.unit
|
|
|
|
|
|
class _FakeReq:
|
|
def __init__(self, accept_encoding: str = "gzip") -> None:
|
|
self.headers = {"Accept-Encoding": accept_encoding}
|
|
|
|
|
|
def run(coro):
|
|
return asyncio.run(coro)
|
|
|
|
|
|
def test_skips_when_client_does_not_accept_gzip() -> None:
|
|
body_json = json.dumps({"data": "x" * 4096}).encode()
|
|
|
|
async def handler(req): # noqa: ARG001
|
|
return web.json_response({"data": "x" * 4096})
|
|
|
|
req = _FakeReq(accept_encoding="identity")
|
|
resp = run(compression_middleware(req, handler))
|
|
assert resp.headers.get("Content-Encoding") != "gzip"
|
|
assert resp.body == body_json or len(resp.body) >= len(body_json) - 8
|
|
|
|
|
|
def test_skips_when_body_below_threshold() -> None:
|
|
async def handler(req): # noqa: ARG001
|
|
return web.json_response({"hi": "x"})
|
|
|
|
resp = run(compression_middleware(_FakeReq(), handler))
|
|
assert resp.headers.get("Content-Encoding") != "gzip"
|
|
|
|
|
|
def test_skips_non_json_response() -> None:
|
|
async def handler(req): # noqa: ARG001
|
|
return web.Response(body=b"x" * 4096, content_type="text/plain")
|
|
|
|
resp = run(compression_middleware(_FakeReq(), handler))
|
|
assert resp.headers.get("Content-Encoding") != "gzip"
|
|
|
|
|
|
def test_compresses_large_json_when_accepted() -> None:
|
|
big = {"data": "x" * 4096}
|
|
|
|
async def handler(req): # noqa: ARG001
|
|
return web.json_response(big)
|
|
|
|
resp = run(compression_middleware(_FakeReq(), handler))
|
|
assert resp.headers.get("Content-Encoding") == "gzip"
|
|
decompressed = gzip.decompress(resp.body)
|
|
assert json.loads(decompressed) == big
|
|
assert resp.content_length == len(resp.body)
|