92 lines
2.7 KiB
Python
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
|