python/pyproject.toml (around lines 106-110) documents that no global pytest timeout is configured and that long-running tests set their own. python/pytest.ini however carries:
timeout = 60
timeout_method = thread
and pytest.ini wins over pyproject.toml, so every test is capped at 60s with the thread method — which kills the test without running fixture teardown. For the live Twilio e2e tests that means the adapter's own guards (120s stream-connect timeout, 180s max call duration) never fire and the hangup in teardown is skipped; the call is left to Twilio's TimeLimit.
9b4577ce on PR #982 works around it for test_twilio_a_leg_external_e2e.py with @pytest.mark.timeout(600). Proper fix: pick one source of truth (probably move the timeout config into pyproject.toml, use timeout_method = signal or a per-marker override for live tests), and fix the comment.
🤖 Generated with Claude Code
https://claude.ai/code/session_01Tc6K2QfkvcWiasy8ane6EG
python/pyproject.toml(around lines 106-110) documents that no global pytest timeout is configured and that long-running tests set their own.python/pytest.inihowever carries:and
pytest.iniwins overpyproject.toml, so every test is capped at 60s with the thread method — which kills the test without running fixture teardown. For the live Twilio e2e tests that means the adapter's own guards (120s stream-connect timeout, 180s max call duration) never fire and the hangup in teardown is skipped; the call is left to Twilio'sTimeLimit.9b4577ceon PR #982 works around it fortest_twilio_a_leg_external_e2e.pywith@pytest.mark.timeout(600). Proper fix: pick one source of truth (probably move the timeout config intopyproject.toml, usetimeout_method = signalor a per-marker override for live tests), and fix the comment.🤖 Generated with Claude Code
https://claude.ai/code/session_01Tc6K2QfkvcWiasy8ane6EG