litellm/tests
shrey-berri 9c4096d0e3 fix(spend): read only the newest rows for the session view page (LIT-8513)
The session view grouped every row in the date window to show 50
sessions and count them, so each page read the whole window. Read the
newest rows that match the filters instead, group those, and keep only
sessions that are complete in what was read: a session whose last
activity is newer than the oldest row read has every row in the read.

The first read is cap + offset + page size + 2 rows, and at most
2 x cap + 2 for a page past the cap, so a huge page number cannot
overflow the read's LIMIT. It grows 8x, then 64x, then reads
everything, only while the page or the count is not settled; a read that does not settle is discarded, so results are the
same as before and the count still stops at 10,000. Ascending order
still reads every row in one query.

On a busy key, where few long sessions fill the newest rows, a read
that the last read's rows per session say cannot hold enough sessions
is skipped. An offset page's read that holds no session of the page
hands its sessions to the next read, which reads only the rows at or
below that read's oldest row, up to the rest of its budget. So a deep
page reads each row about once instead of re-reading the newest rows
at every step: the last page of a key with 2,000 sessions of 50 rows
read about 307-313k rows before and about 195-205k now, against 205k
for grouping every row.

A descending cursor page reads from the cursor's startTime down and
drops sessions that also have a newer row. When the sessions after the
cursor do not pass the cap, the window's count is read separately from
the newest rows, starting at the first read size that the last read's
rows per session say can pass the cap, so an unindexed filter such as
key_alias or status does not pay a full scan per step.

The status filter keeps or drops whole sessions, so the newer-row probe
skips it for sessions already on the page. The representative fetch
checks it again on just those sessions, since a row written after the
page read can change a session's outcome; as before, such a session is
dropped from the page.
Its subquery gets the date window as literals: Prisma reuses prepared
statements, and from the 6th run Postgres plans a $N window as tiny,
which turned the subquery into a ~2 min nested loop. The literal is
built only from a UTC datetime; anything else raises.
2026-10-28 10:25:19 -07:00
..
_support fix(proxy)!: end a chat completions stream with an error event when a guardrail blocks mid-stream (#46953) 2026-10-17 18:00:12 -07:00
audio_tests feat(vertex-ai)!: support gemini 3.1 flash tts (#31915) 2026-10-21 04:18:42 +00:00
base_sdk_tests fix(sdk): decide MCP gateway routing without importing the proxy handler (#45961) 2026-10-20 01:44:54 +00:00
benchmarks fix(responses)!: round-trip Anthropic compaction blocks as compaction items (#46754) 2026-10-21 08:50:19 +00:00
code_coverage_tests fix(security): stop trusting the compromised eMudhra root CA (#47670) 2026-10-22 02:09:52 +00:00
documentation_tests fix(proxy): let configured pass-through endpoints outrank built-in provider prefix routes (#44133) 2026-10-10 12:26:17 -07:00
e2e test(perf): ramp the load cases until the pod stops keeping up and floor sustained_rps (#47758) 2026-10-20 22:31:08 -07:00
e2e_harness test(perf): ramp the load cases until the pod stops keeping up and floor sustained_rps (#47758) 2026-10-20 22:31:08 -07:00
fixtures test: migrate tests/llm_translation into unit, integration and e2e tiers (#45759) 2026-10-11 07:58:53 +00:00
harness_e2e fix(harness): set PWD to the working directory of local sandbox commands (#47530) 2026-10-20 20:06:11 +00:00
integration fix(sso): enforce free user admission without locking out existing users (#48097) 2026-10-23 14:48:29 -07:00
rust-python-harness feat(rust): encode LiteLLM response ids on native responses (#46572) 2026-10-18 20:52:34 -07:00
test_litellm_rust fix(logging)!: fire one CustomLogger failure hook per async call outside the async flag list (#47124) 2026-10-20 15:19:14 -07:00
typing fix: support OpenAI SDK 3 while retaining SDK 2 compatibility (#44927) 2026-10-09 19:45:50 -07:00
unit fix(spend): read only the newest rows for the session view page (LIT-8513) 2026-10-28 10:25:19 -07:00
windows_tests test: move packaging and install checks off CircleCI build_and_test (#45757) 2026-10-10 09:33:51 -07:00
__init__.py refactor: expose core private helpers under public names (#44871) 2026-10-07 00:05:27 +00:00
_fake_openai_endpoint_server.py
_flush_vcr_cache.py
_live_test_helpers.py
_master_key.py fix(security): remove the publicly known master key from the repo (#44718) 2026-10-06 10:55:24 -07:00
_openai_record_replay_proxy.py
_process_helpers.py test: count a zombie grandchild as gone in the migrate deploy timeout test (#42570) 2026-09-22 14:59:26 -07:00
_vcr_conftest_common.py test: migrate tests/llm_translation into unit, integration and e2e tiers (#45759) 2026-10-11 07:58:53 +00:00
_vcr_redis_persister.py
_wait_helpers.py
_ws_vcr.py
AGENTS.md docs(agents): ban semicolons and colons in human-facing text (#45684) 2026-10-09 16:36:32 -07:00
capturing_transport.py test(vcr): guard leaked cassette patches and make injected-transport embedding tests immune (#42542) 2026-09-22 14:20:18 -07:00
eval_swe_bench.py
fake_openai_endpoint.py
gettysburg.wav
large_text.py
openai_batch_completions.jsonl
pyrightconfig.json
README.MD test: finish the non-proxy half of tests/test_litellm (#43281) 2026-09-25 22:43:41 -07:00
test_logging.conf
test_rust_python_harness.py test: move 76 live top-level tests to offline unit and integration coverage (#45352) 2026-10-08 10:33:35 -07:00
VCR_TESTING.md test: migrate tests/llm_translation into unit, integration and e2e tiers (#45759) 2026-10-11 07:58:53 +00:00
white_100x100.png test: stop CI tests from downloading tokenizer files and images (#43257) 2026-09-25 19:27:48 -07:00

In total litellm runs 1000+ tests

[02/20/2025] Update:

To make it easier to contribute and map what behavior is tested,

we've started mapping the litellm directory in tests/unit

This folder can only run mock tests.