* test(proxy): keep the spend sidecar socket path under the macOS AF_UNIX limit * test(unit): share the short socket fixtures across unit tests Move socket_dir and socket_path to tests/unit/conftest.py so the datadog redis test's absent socket fails for the right reason on a Mac, rename the pgbouncer helper's directory argument, and record the rule in tests/unit/AGENTS.md * test(unit): fall back to /tmp when TMPDIR leaves no room for a socket path socket_dir now uses /tmp when TMPDIR plus the longest socket suffix would pass macOS's sun_path limit, and its teardown ignores errors so a failed test reports only its own failure * test(unit): keep socket fixtures inside tmp_path behind a short link socket_dir now links a short temp directory to tmp_path, so artifacts keep pytest's retention and a killed run leaks only an empty link. The fallback to /tmp counts the temp directory in bytes, and socket_tempdir points tempfile at it for the pooler tests whose socket directory production picks --------- Co-authored-by: mateo-berri <277851410+mateo-berri@users.noreply.github.com>
2.1 KiB
tests/unit
In-process. No network or subprocess. interactions/test_openapi_compliance.py reads the spec snapshot beside it,
and only the interactions-spec-canary workflow passes --interactions-spec-url (registered in
interactions/conftest.py, so name that file or directory on the command line) with ai.google.dev allowed, to run
the same tests against Google's live spec
Unit tests must not depend on the current time or execution speed. Use fixed timestamps for fixtures and controlled clocks for time-dependent behavior. Incidental clock reads inside production code are allowed
A unix socket goes under the socket_dir or socket_path fixture, never tmp_path, whose paths run past macOS's
104-byte AF_UNIX limit and fail only on a Mac. Code that opens a socket in its own tempfile directory runs under
socket_tempdir
What good looks like
def test_send_result_same_version_is_identity_passthrough():
rpc = _rpc(V03_MESSAGE)
out = normalize_jsonrpc_response(rpc, "0.3", method="message/send")
assert out is rpc
is, because == passes on a copy. Many inputs: parametrize
(test_an_incomplete_reservation_accrues_nothing, fifteen cases, fifteen results)
No doubles on our own code
with patch.object(streamer, "_group_by_date") as mock_group, patch.object(streamer, "_send_daily_batch") as mock_send:
mock_group.return_value = {"2025-01-19": pl.DataFrame({"test": ["data1"]}), "2025-01-20": pl.DataFrame({"test": ["data2"]})}
streamer.send_batched(pl.DataFrame({"test": ["data"]}), "replace_hourly")
assert mock_send.call_count == 2
Green if send_batched drops every row. pydantic doubles in 12 of 203 files, fastapi 11 of 594.
tests/test_litellm 59 percent. Exception: the count is the behaviour
(test_dual_cache_async_batch_get_cache_coalesces_concurrent_redis_reads, fifty readers, call_count == 1)
Where it goes
tests/unit/<path> mirrors litellm/<path>, so a changed file selects its tests by path, not a mapping
file. New unit tests go here
Writing it so a human can read it
A class only when tests share an arrange