Start dev server externally (#4604)

Signed-off-by: William Fu-Hinthorn <13333726+hinthornw@users.noreply.github.com>
This commit is contained in:
William FH
2025-05-08 15:20:51 -07:00
committed by GitHub
parent 10b1676d0b
commit 88fd6b1e80
3 changed files with 24 additions and 56 deletions
+1
View File
@@ -1 +1,2 @@
.langgraph_api/
.devserver.pid
+23 -4
View File
@@ -41,20 +41,36 @@ stop-postgres:
docker compose -f tests/compose-postgres.yml down -v
start-dev-server:
poetry run langgraph dev --config integration_tests/example_app/langgraph.json --no-browser
poetry run langgraph dev --config tests/example_app/langgraph.json --no-browser &
@echo "Dev server started."
@echo "Dev server PID: $$!" > .devserver.pid
stop-dev-server:
@if [ -f .devserver.pid ]; then \
kill `cat .devserver.pid` && rm .devserver.pid; \
echo "Dev server stopped."; \
else \
echo "No dev server PID file found."; \
fi
TEST ?= .
test:
make start-postgres && poetry run pytest $(TEST); \
make start-postgres &&\
make start-dev-server &&\
poetry run pytest $(TEST); \
EXIT_CODE=$$?; \
make stop-postgres; \
make stop-dev-server; \
exit $$EXIT_CODE
test_parallel:
make start-postgres && poetry run pytest -n auto --dist worksteal $(TEST); \
make start-postgres &&\
make start-dev-server &&\
poetry run pytest -n auto --dist worksteal $(TEST); \
EXIT_CODE=$$?; \
make stop-postgres; \
make stop-dev-server; \
exit $$EXIT_CODE
integration_tests:
@@ -68,9 +84,12 @@ MAXFAIL_ARGS := $(if $(MAXFAIL),--maxfail $(MAXFAIL),)
XDIST_ARGS := $(if $(WORKERS),-x $(XDIST_ARGS),)
test_watch:
make start-postgres && poetry run ptw . -- --ff -vv $(XDIST_ARGS) $(MAXFAIL_ARGS) $(TEST); \
make start-postgres &&\
make start-dev-server &&\
poetry run ptw . -- --ff -vv $(XDIST_ARGS) $(MAXFAIL_ARGS) $(TEST); \
EXIT_CODE=$$?; \
make stop-postgres; \
make stop-dev-server; \
exit $$EXIT_CODE
test_watch_all:
-52
View File
@@ -1,13 +1,10 @@
import subprocess
import sys
import time
from collections.abc import AsyncIterator
from contextlib import asynccontextmanager
from typing import Optional
from uuid import UUID, uuid4
import pytest
import requests
from langchain_core import __version__ as core_version
from packaging import version
from psycopg import AsyncConnection, Connection
@@ -444,55 +441,6 @@ async def awith_store(store_name: Optional[str]) -> AsyncIterator[BaseStore]:
raise NotImplementedError(f"Unknown store {store_name}")
@pytest.fixture(scope="session", autouse=True)
def dev_server():
# Command to start the dev server
if sys.version_info < (3, 11):
# We'll skip these tests
yield
return
cmd = [
"poetry",
"run",
"langgraph",
"dev",
"--config",
"tests/example_app/langgraph.json",
"--no-browser",
"--port",
"2024",
]
server = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
url = "http://localhost:2024/ok"
timeout = 30
start = time.time()
while True:
if server.poll() is not None:
out, err = server.communicate()
raise RuntimeError(
f"Dev server exited early.\nstdout: {out.decode()}\nstderr: {err.decode()}"
)
try:
resp = requests.get(url)
if resp.status_code == 200:
break
except Exception:
pass
if time.time() - start > timeout:
server.terminate()
out, err = server.communicate()
raise TimeoutError(
f"Timed out waiting for dev server to start.\nstdout: {out.decode()}\nstderr: {err.decode()}"
)
time.sleep(0.25)
yield
server.terminate()
try:
server.wait(timeout=10)
except subprocess.TimeoutExpired:
server.kill()
SHALLOW_CHECKPOINTERS_SYNC = ["postgres_shallow"]
REGULAR_CHECKPOINTERS_SYNC = [
"memory",