diff --git a/pyproject.toml b/pyproject.toml index cc486e26..7f244af4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -76,6 +76,10 @@ addopts = "--cov=basic_memory --cov-report term-missing" testpaths = ["tests", "test-int"] asyncio_mode = "strict" asyncio_default_fixture_loop_scope = "function" +# Any test hanging >120s fails with a stack dump instead of stalling the CI job +# until the runner times out (the FastMCP/asyncpg cleanup-hang family). +timeout = 120 +timeout_method = "thread" filterwarnings = [ "ignore:The @wait_container_is_ready decorator is deprecated.*:DeprecationWarning:testcontainers\\.core\\.waiting_utils", "ignore:The default datetime adapter is deprecated as of Python 3\\.12.*:DeprecationWarning:aiosqlite\\.core", @@ -115,6 +119,7 @@ dev = [ "ty>=0.0.18", "cst-lsp>=0.1.3", "libcst>=1.8.6", + "pytest-timeout>=2.4.0", ] [tool.hatch.version] diff --git a/uv.lock b/uv.lock index 51bb382b..0a434b07 100644 --- a/uv.lock +++ b/uv.lock @@ -323,6 +323,7 @@ dev = [ { name = "pytest-cov" }, { name = "pytest-mock" }, { name = "pytest-testmon" }, + { name = "pytest-timeout" }, { name = "pytest-xdist" }, { name = "ruff" }, { name = "testcontainers" }, @@ -390,6 +391,7 @@ dev = [ { name = "pytest-cov", specifier = ">=4.1.0" }, { name = "pytest-mock", specifier = ">=3.12.0" }, { name = "pytest-testmon", specifier = ">=2.2.0" }, + { name = "pytest-timeout", specifier = ">=2.4.0" }, { name = "pytest-xdist", specifier = ">=3.0.0" }, { name = "ruff", specifier = ">=0.1.6" }, { name = "testcontainers", extras = ["postgres"], specifier = ">=4.0.0" }, @@ -3071,6 +3073,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/61/55/ebb3c2f59fb089f08d00f764830d35780fc4e4c41dffcadafa3264682b65/pytest_testmon-2.2.0-py3-none-any.whl", hash = "sha256:2604ca44a54d61a2e830d9ce828b41a837075e4ebc1f81b148add8e90d34815b", size = 25199, upload-time = "2025-12-01T07:30:23.623Z" }, ] +[[package]] +name = "pytest-timeout" +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/82/4c9ecabab13363e72d880f2fb504c5f750433b2b6f16e99f4ec21ada284c/pytest_timeout-2.4.0.tar.gz", hash = "sha256:7e68e90b01f9eff71332b25001f85c75495fc4e3a836701876183c4bcfd0540a", size = 17973, upload-time = "2025-05-05T19:44:34.99Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl", hash = "sha256:c42667e5cdadb151aeb5b26d114aff6bdf5a907f176a007a30b940d3d865b5c2", size = 14382, upload-time = "2025-05-05T19:44:33.502Z" }, +] + [[package]] name = "pytest-xdist" version = "3.8.0"