mirror of
https://github.com/langchain-ai/langgraph.git
synced 2026-09-02 14:28:46 +02:00
Start dev server externally (#4604)
Signed-off-by: William Fu-Hinthorn <13333726+hinthornw@users.noreply.github.com>
This commit is contained in:
@@ -1 +1,2 @@
|
||||
.langgraph_api/
|
||||
.devserver.pid
|
||||
|
||||
+23
-4
@@ -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:
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user