Skip to content

Commit b998d2b

Browse files
authored
Fix: Fixes devpi test flakiness with healthcheck and longer log check (#2200)
* Fix: Fixes devpi test flakiness with healthcheck and longer log check * Increase sleep * Adding debugging * Add a wait that checks if the server is ready
1 parent cb4b2dc commit b998d2b

File tree

3 files changed

+40
-7
lines changed

3 files changed

+40
-7
lines changed

tests/conftest.py

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -295,17 +295,33 @@ def devpi(tmp_path_factory, worker_id):
295295
with FileLock(lock_file):
296296
if not any(devpi_started_sessions.iterdir()):
297297
with EnvVars(env_vars):
298-
subprocess.check_call(["docker", "compose", "-f", compose_file, "up", "--build", "-d"])
299-
300-
for _ in range(60):
298+
result = subprocess.run(
299+
["docker", "compose", "-f", compose_file, "up", "--build", "-d", "--wait"],
300+
check=False,
301+
capture_output=True,
302+
)
303+
if result.returncode != 0:
304+
# Debugging info for if devpi fails to start
305+
logs = subprocess.run(["docker", "logs", "hatch-devpi"], check=False, capture_output=True)
306+
pytest.fail(
307+
f"Failed to start devpi container, see logs:\n{logs.stdout.decode()}\n{logs.stderr.decode()}"
308+
)
309+
310+
for _ in range(120):
301311
output = subprocess.check_output(["docker", "logs", "hatch-devpi"]).decode("utf-8")
302312
if f"Serving index {dp.user}/{dp.index_name}" in output:
303-
time.sleep(5)
313+
time.sleep(15)
304314
break
305315

306316
time.sleep(1)
307317
else: # no cov
308-
pass
318+
# Add logging here too for timeout case
319+
import warnings
320+
321+
logs = subprocess.run(["docker", "logs", "hatch-devpi"], check=False, capture_output=True)
322+
warnings.warn(
323+
f"devpi container logs (timeout):\n{logs.stdout.decode()}\n{logs.stderr.decode()}", stacklevel=1
324+
)
309325

310326
(devpi_started_sessions / worker_id).touch()
311327

tests/index/server/devpi/entrypoint.sh

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,17 @@ echo "==:> Starting server"
1010
devpi-server --host 0.0.0.0 --port 3141 &
1111

1212
echo "==:> Waiting on server"
13-
sleep 5
13+
for i in $(seq 1 30); do
14+
if devpi use http://localhost:3141 2>/dev/null; then
15+
break
16+
fi
17+
if [ "$i" -eq 30 ]; then
18+
echo "Timed out waiting for devpi-server"
19+
exit 1
20+
fi
21+
sleep 1
22+
done
23+
1424

1525
echo "==:> Setting up index"
1626
devpi use http://localhost:3141

tests/index/server/docker-compose.yaml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ services:
99
- DEVPI_INDEX_NAME
1010
- DEVPI_USERNAME
1111
- DEVPI_PASSWORD
12+
healthcheck:
13+
test: [ "CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:3141')" ]
14+
interval: 2s
15+
timeout: 5s
16+
retries: 30
17+
start_period: 10s
1218

1319
nginx:
1420
container_name: hatch-nginx
@@ -19,4 +25,5 @@ services:
1925
volumes:
2026
- ./nginx:/etc/nginx
2127
depends_on:
22-
- devpi
28+
devpi:
29+
condition: service_healthy

0 commit comments

Comments
 (0)