diff --git a/libs/prebuilt/Makefile b/libs/prebuilt/Makefile index ad80e54c8..d62e65e3a 100644 --- a/libs/prebuilt/Makefile +++ b/libs/prebuilt/Makefile @@ -1,4 +1,4 @@ -.PHONY: all format lint test test_watch integration_tests spell_check spell_fix benchmark profile +.PHONY: all format lint test test-fast test_watch integration_tests spell_check spell_fix benchmark profile # Default target executed when no arguments are given to make. all: help @@ -15,14 +15,17 @@ stop-postgres: TEST ?= . +test-fast: + LANGGRAPH_TEST_FAST=1 uv run pytest $(TEST) + test: - make start-postgres && uv run pytest $(TEST); \ + make start-postgres && LANGGRAPH_TEST_FAST=0 uv run pytest $(TEST); \ EXIT_CODE=$$?; \ make stop-postgres; \ exit $$EXIT_CODE test_watch: - make start-postgres && uv run ptw $(TEST); \ + make start-postgres && LANGGRAPH_TEST_FAST=0 uv run ptw $(TEST); \ EXIT_CODE=$$?; \ make stop-postgres; \ exit $$EXIT_CODE @@ -74,5 +77,6 @@ help: @echo '-- TESTS --' @echo 'coverage - run unit tests and generate coverage report' @echo 'test - run unit tests' + @echo 'test-fast - run unit tests with in-memory checkpointer only' @echo 'test TEST_FILE= - run all tests in file' @echo 'test_watch - run unit tests in watch mode' diff --git a/libs/prebuilt/tests/conftest.py b/libs/prebuilt/tests/conftest.py index 343856bd5..bb44383a9 100644 --- a/libs/prebuilt/tests/conftest.py +++ b/libs/prebuilt/tests/conftest.py @@ -1,3 +1,4 @@ +import os from collections.abc import AsyncIterator, Iterator from uuid import UUID @@ -29,6 +30,55 @@ from tests.conftest_store import ( pytest.register_assert_rewrite("tests.memory_assert") +# Global variables for checkpointer and store configurations +FAST_MODE = os.getenv("LANGGRAPH_TEST_FAST", "true").lower() in ("true", "1", "yes") + +SYNC_CHECKPOINTER_PARAMS = ( + ["memory"] + if FAST_MODE + else [ + "memory", + "sqlite", + "postgres", + "postgres_pipe", + "postgres_pool", + ] +) + +ASYNC_CHECKPOINTER_PARAMS = ( + ["memory"] + if FAST_MODE + else [ + "memory", + "sqlite_aio", + "postgres_aio", + "postgres_aio_pipe", + "postgres_aio_pool", + ] +) + +SYNC_STORE_PARAMS = ( + ["in_memory"] + if FAST_MODE + else [ + "in_memory", + "postgres", + "postgres_pipe", + "postgres_pool", + ] +) + +ASYNC_STORE_PARAMS = ( + ["in_memory"] + if FAST_MODE + else [ + "in_memory", + "postgres_aio", + "postgres_aio_pipe", + "postgres_aio_pool", + ] +) + @pytest.fixture def anyio_backend(): @@ -48,7 +98,7 @@ def deterministic_uuids(mocker: MockerFixture) -> MockerFixture: @pytest.fixture( scope="function", - params=["in_memory", "postgres", "postgres_pipe", "postgres_pool"], + params=SYNC_STORE_PARAMS, ) def sync_store(request: pytest.FixtureRequest) -> Iterator[BaseStore]: store_name = request.param @@ -72,7 +122,7 @@ def sync_store(request: pytest.FixtureRequest) -> Iterator[BaseStore]: @pytest.fixture( scope="function", - params=["in_memory", "postgres_aio", "postgres_aio_pipe", "postgres_aio_pool"], + params=ASYNC_STORE_PARAMS, ) async def async_store(request: pytest.FixtureRequest) -> AsyncIterator[BaseStore]: store_name = request.param @@ -96,13 +146,7 @@ async def async_store(request: pytest.FixtureRequest) -> AsyncIterator[BaseStore @pytest.fixture( scope="function", - params=[ - "memory", - "sqlite", - "postgres", - "postgres_pipe", - "postgres_pool", - ], + params=SYNC_CHECKPOINTER_PARAMS, ) def sync_checkpointer( request: pytest.FixtureRequest, @@ -129,13 +173,7 @@ def sync_checkpointer( @pytest.fixture( scope="function", - params=[ - "memory", - "sqlite_aio", - "postgres_aio", - "postgres_aio_pipe", - "postgres_aio_pool", - ], + params=ASYNC_CHECKPOINTER_PARAMS, ) async def async_checkpointer( request: pytest.FixtureRequest,