Commit e09a78a25 for llama.cpp
commit e09a78a25dec3f42175ad59ecc540a54bed0b9b2
Author: Pascal <admin@serveurperso.com>
Date: Thu Oct 29 01:35:01 2026 +0100
tests: fix CI flakes in server cancel and sleep tests (#31330)
test_cancel_request enables context shift so the generation only ends
when the request is cancelled, then polls /slots with a deadline.
Without context shift the generation fills the context and frees the
slot on its own on fast machines, so the test passes even with
cancellation disabled.
test_server_sleep uses the existing wait_for_sleep helper instead of a
fixed sleep.
diff --git a/tools/server/tests/unit/test_completion.py b/tools/server/tests/unit/test_completion.py
index 572f5368c..6afcb1773 100644
--- a/tools/server/tests/unit/test_completion.py
+++ b/tools/server/tests/unit/test_completion.py
@@ -637,18 +637,23 @@ def test_cancel_request():
server.n_predict = -1
server.n_slots = 1
server.server_slots = True
+ server.enable_ctx_shift = True
server.start()
- # send a request that will take a long time, but cancel it before it finishes
+ # context shift keeps the generation running until the request is cancelled
try:
server.make_request("POST", "/completion", data={
"prompt": "I believe the meaning of life is",
}, timeout=0.1)
except requests.exceptions.ReadTimeout:
pass # expected
- # make sure the slot is free
- time.sleep(2)
- res = server.make_request("GET", "/slots")
- assert res.body[0]["is_processing"] == False
+ # the slot is freed once the server notices the closed connection
+ deadline = time.time() + 10
+ while time.time() < deadline:
+ res = server.make_request("GET", "/slots")
+ if not res.body[0]["is_processing"]:
+ return
+ time.sleep(0.1)
+ raise AssertionError("slot is still processing after the request was cancelled")
# this test exercises the host-memory prompt cache
diff --git a/tools/server/tests/unit/test_sleep.py b/tools/server/tests/unit/test_sleep.py
index 4edb26450..b3ac937f6 100644
--- a/tools/server/tests/unit/test_sleep.py
+++ b/tools/server/tests/unit/test_sleep.py
@@ -45,8 +45,7 @@ def test_server_sleep():
server.sleep_idle_seconds = 1
server.start()
- # wait a bit so that server can go to sleep
- time.sleep(2)
+ wait_for_sleep(server)
# make sure these endpoints are still responsive after sleep
res = server.make_request("GET", "/health")