Files
cleveragents-core/features/steps/reactive_routing_steps.py
T

92 lines
2.7 KiB
Python

"""Behave steps for reactive routing and route bridge (actor-first)."""
from __future__ import annotations
from behave import given, then, when
from cleveragents.reactive.route import BridgeConfig, RouteConfig, RouteType
from cleveragents.reactive.route_bridge import RouteBridge
from cleveragents.reactive.stream_router import (
ReactiveStreamRouter,
StreamConfig,
StreamType,
)
@given("a reactive stream router")
def step_stream_router(context):
context.stream_router = ReactiveStreamRouter()
@given("a dummy actor registry")
def step_dummy_registry(context):
class DummyActor:
def __init__(self, name: str):
self.name = name
def process_message_sync(self, message, metadata=None):
return f"processed:{message}"
def get_capabilities(self):
return []
class DummyRegistry:
def list_actors(self):
return [DummyActor("dummy")]
context.actor_registry = DummyRegistry()
@when('I create a cold stream named "{name}"')
def step_create_cold_stream(context, name):
config = StreamConfig(name=name, type=StreamType.COLD)
context.stream_router.create_stream(config)
@when('I send message "{message}" to stream "{name}"')
def step_send_message(context, message, name):
context.stream_router.send_message(name, message)
@then('the stream "{name}" should exist')
def step_stream_exists(context, name):
assert name in context.stream_router.streams
@when("I create a route bridge")
def step_create_route_bridge(context):
context.route_bridge = RouteBridge(context.stream_router, context.actor_registry)
@then('the route bridge should include agent "{name}"')
def step_bridge_has_agent(context, name):
assert name in context.route_bridge.agents
@given('a stream route config named "{name}" with a map agent operator')
def step_stream_route_config(context, name):
context.route_config = RouteConfig(
name=name,
type=RouteType.STREAM,
operators=[{"type": "map", "params": {"agent": "dummy"}}],
subscriptions=[],
publications=[],
agents=["dummy"],
bridge=BridgeConfig(),
)
@when("I convert the stream route to a graph config")
def step_convert_route(context):
from cleveragents.reactive.route_bridge import RouteBridge
bridge = RouteBridge(context.stream_router, context.actor_registry)
graph_cfg = bridge._create_graph_from_stream(context.route_config) # pylint: disable=protected-access
context.graph_config = graph_cfg
@then("the graph config should contain nodes")
def step_graph_has_nodes(context):
assert getattr(context, "graph_config", None) is not None
assert context.graph_config.nodes