Files
cleveragents-core/features/langgraph_platform_remote_graph.feature
T

196 lines
9.9 KiB
Gherkin

@server @langgraph-platform
Feature: LangGraph Platform RemoteGraph Integration
As a server-mode deployment
I want to manage actor graphs via LangGraph Platform RemoteGraph
So that actor execution can be delegated to the platform
# -----------------------------------------------------------------------
# RemoteGraphConfig validation
# -----------------------------------------------------------------------
Scenario: RemoteGraphConfig accepts valid HTTPS platform URL
When I create a basic RemoteGraphConfig with graph_id "strategy-actor" and platform_url "https://langgraph.example.com"
Then the config graph_id should be "strategy-actor"
And the config platform_url should be "https://langgraph.example.com"
And the config api_key_env should be "LANGGRAPH_API_KEY"
And the config timeout should be 60.0
Scenario: RemoteGraphConfig accepts valid HTTP platform URL
When I create a basic RemoteGraphConfig with graph_id "execution-actor" and platform_url "http://localhost:8123"
Then the config graph_id should be "execution-actor"
And the config platform_url should be "http://localhost:8123"
Scenario: RemoteGraphConfig accepts custom api_key_env
When I create a RemoteGraphConfig with custom api_key_env "MY_API_KEY"
Then the config api_key_env should be "MY_API_KEY"
Scenario: RemoteGraphConfig accepts custom timeout
When I create a RemoteGraphConfig with custom timeout 120.0
Then the config timeout should be 120.0
Scenario: RemoteGraphConfig rejects empty graph_id
When I try to create a RemoteGraphConfig with empty graph_id
Then a remote graph config validation error should be raised
Scenario: RemoteGraphConfig rejects empty platform_url
When I try to create a RemoteGraphConfig with empty platform_url
Then a remote graph config validation error should be raised
Scenario: RemoteGraphConfig rejects non-HTTP platform_url
When I try to create a RemoteGraphConfig with platform_url "ftp://langgraph.example.com"
Then a remote graph config validation error should be raised
Scenario: RemoteGraphConfig rejects non-positive timeout
When I try to create a RemoteGraphConfig with timeout 0
Then a remote graph config validation error should be raised
Scenario: RemoteGraphConfig is frozen
When I create a basic RemoteGraphConfig with graph_id "actor" and platform_url "https://langgraph.example.com"
Then the remote graph config should be immutable
# -----------------------------------------------------------------------
# RemoteGraphManager — not configured (no platform URL)
# -----------------------------------------------------------------------
Scenario: RemoteGraphManager is not available when no platform URL given
Given a RemoteGraphManager with no platform URL
Then the manager should not be available
And the manager platform_url should be None
Scenario: RemoteGraphManager register_graph raises when not configured
Given a RemoteGraphManager with no platform URL
When I try to register a graph on the unconfigured manager
Then a RemoteGraphNotAvailableError should be raised
Scenario: RemoteGraphManager list_graphs raises when not configured
Given a RemoteGraphManager with no platform URL
When I try to list graphs on the unconfigured manager
Then a RemoteGraphNotAvailableError should be raised
Scenario: RemoteGraphManager invoke raises when not configured
Given a RemoteGraphManager with no platform URL
When I try to invoke a graph on the unconfigured manager
Then a RemoteGraphNotAvailableError should be raised
Scenario: RemoteGraphManager health_check returns False when not configured
Given a RemoteGraphManager with no platform URL
When I call health_check on the unconfigured manager
Then the health check result should be False
# -----------------------------------------------------------------------
# RemoteGraphManager — configured (with platform URL)
# -----------------------------------------------------------------------
Scenario: RemoteGraphManager is available when platform URL is given
Given a RemoteGraphManager with platform URL "https://langgraph.example.com"
Then the manager should be available
And the manager platform_url should be "https://langgraph.example.com"
Scenario: RemoteGraphManager can register a graph
Given a RemoteGraphManager with platform URL "https://langgraph.example.com"
When I register a graph with id "strategy-actor"
Then the graph "strategy-actor" should be registered
Scenario: RemoteGraphManager list_graphs returns registered graph IDs
Given a RemoteGraphManager with platform URL "https://langgraph.example.com"
When I register graphs with ids "alpha" and "beta"
Then list_graphs should return "alpha" and "beta" in sorted order
Scenario: RemoteGraphManager get_graph_config returns registered config
Given a RemoteGraphManager with platform URL "https://langgraph.example.com"
When I register a graph with id "execution-actor"
Then get_graph_config for "execution-actor" should return the config
Scenario: RemoteGraphManager get_graph_config raises for unknown graph
Given a RemoteGraphManager with platform URL "https://langgraph.example.com"
When I try to get config for unregistered graph "unknown-actor"
Then a KeyError should be raised for the unknown graph
Scenario: RemoteGraphManager unregister_graph removes a graph
Given a RemoteGraphManager with platform URL "https://langgraph.example.com"
When I register then unregister graph "temp-actor"
Then the graph "temp-actor" should not be registered
Scenario: RemoteGraphManager unregister_graph raises for unknown graph
Given a RemoteGraphManager with platform URL "https://langgraph.example.com"
When I try to unregister an unknown graph "ghost-actor"
Then a KeyError should be raised for the unregistered graph
Scenario: RemoteGraphManager invoke raises RemoteGraphNotAvailableError for registered graph
Given a RemoteGraphManager with platform URL "https://langgraph.example.com"
When I register a graph with id "strategy-actor"
And I try to invoke the registered graph "strategy-actor"
Then a RemoteGraphNotAvailableError should be raised for the stub invocation
Scenario: RemoteGraphManager invoke raises KeyError for unregistered graph
Given a RemoteGraphManager with platform URL "https://langgraph.example.com"
When I try to invoke unregistered graph "missing-actor"
Then a KeyError should be raised for the missing graph invocation
Scenario: RemoteGraphManager health_check returns False for stub
Given a RemoteGraphManager with platform URL "https://langgraph.example.com"
When I call health_check on the configured manager
Then the health check result should be False
# -----------------------------------------------------------------------
# PostgreSQL connection utilities
# -----------------------------------------------------------------------
Scenario: PostgreSQLConnectionConfig accepts valid parameters
When I create a PostgreSQLConnectionConfig with host "db.example.com" database "cleveragents" username "app" password "secret"
Then the pg config host should be "db.example.com"
And the pg config database should be "cleveragents"
And the pg config username should be "app"
And the pg config port should be 5432
And the pg config ssl_mode should be "prefer"
Scenario: PostgreSQLConnectionConfig accepts custom port
When I create a PostgreSQLConnectionConfig with host "db.example.com" database "cleveragents" username "app" password "secret" port 5433
Then the pg config port should be 5433
Scenario: PostgreSQLConnectionConfig to_url returns async URL by default
When I create a PostgreSQLConnectionConfig with host "db.example.com" database "cleveragents" username "app" password "secret"
Then the pg config async URL should start with "postgresql+asyncpg://"
Scenario: PostgreSQLConnectionConfig to_url returns sync URL when requested
When I create a PostgreSQLConnectionConfig with host "db.example.com" database "cleveragents" username "app" password "secret"
Then the pg config sync URL should start with "postgresql://"
Scenario: PostgreSQLConnectionConfig rejects empty host
When I try to create a PostgreSQLConnectionConfig with empty host
Then a pg config validation error should be raised
Scenario: PostgreSQLConnectionConfig rejects invalid port
When I try to create a PostgreSQLConnectionConfig with port 0
Then a pg config validation error should be raised
Scenario: PostgreSQLConnectionConfig rejects negative pool_size
When I try to create a PostgreSQLConnectionConfig with pool_size 0
Then a pg config validation error should be raised
Scenario: build_postgresql_url returns async URL
When I call build_postgresql_url with host "db.example.com" database "mydb" username "user" password "pass"
Then the built URL should start with "postgresql+asyncpg://"
And the built URL should contain "db.example.com"
And the built URL should contain "mydb"
Scenario: build_postgresql_url returns sync URL when async_driver is False
When I call build_postgresql_url with async_driver False
Then the built URL should start with "postgresql://"
Scenario: is_postgresql_url returns True for postgresql URL
When I check if "postgresql://user:pass@host/db" is a PostgreSQL URL
Then the pg url check result should be True
Scenario: is_postgresql_url returns True for postgresql+asyncpg URL
When I check if "postgresql+asyncpg://user:pass@host/db" is a PostgreSQL URL
Then the pg url check result should be True
Scenario: is_postgresql_url returns False for sqlite URL
When I check if "sqlite:///path/to/db.sqlite" is a PostgreSQL URL
Then the pg url check result should be False
Scenario: is_postgresql_url returns False for empty string
When I check if "" is a PostgreSQL URL
Then the pg url check result should be False