Files
trex-core/tests/adapters/messaging/test_topology.py
T
genichinandClaude Opus 4.8 d4c5fcbba1 feat(alarm): trex-core 알람 emitter + trex.alerts exchange (dcy-033 BAT-049, Implemented)
AlarmEmitter(application, best-effort 비차단)+trex.alerts topic exchange 가산·격리+8 CRITICAL code 배선. 608 passed, opus QC PASS, 팀장 e2e(텔레그램 HTTP200) 통과. REQ-098~101 Implemented.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VHtM5Ws1HKCKQ4JGi6GRb5
2026-06-21 19:25:55 +09:00

46 lines
1.8 KiB
Python

"""Topology constants + routing key builders (REQ-021, REQ-099)."""
from __future__ import annotations
from trex_core.adapters.messaging import topology
def test_topology_constants():
assert topology.SLOTS_REQ_QUEUE == "trex.slots.req"
assert topology.INTENT_REQ_QUEUE == "trex.intent.req"
assert topology.EVENTS_EXCHANGE == "trex.events"
assert topology.EVENTS_DLQ_EXCHANGE == "trex.events.dlq"
assert not hasattr(topology, "SNAPSHOT_REQ_QUEUE")
# dcy-033 / REQ-099: trex.alerts exchange constant + routing key builder
def test_alerts_exchange_constant():
assert topology.ALERTS_EXCHANGE == "trex.alerts"
def test_alarm_routing_key_format():
assert topology.alarm_routing_key("critical", "trex-core") == "alarm.critical.trex-core"
assert topology.alarm_routing_key("warn", "trex-orb-v1") == "alarm.warn.trex-orb-v1"
assert topology.alarm_routing_key("info", "kis-data-hub") == "alarm.info.kis-data-hub"
def test_event_routing_key_format():
assert topology.event_routing_key("slot_filled_buy", "A", "005930") == \
"slot_filled_buy.A.005930"
# dots/wildcards in inputs are sanitized to underscores
assert topology.event_routing_key("e.x", "y*z", "a#b") == "e_x.y_z.a_b"
# None / empty strategy → "_"
assert topology.event_routing_key("e", None, "S") == "e._.S"
def test_strategy_queue_name_and_binding_pattern():
assert topology.strategy_event_queue_name("A") == "trex.events.strategy.A"
assert topology.strategy_event_binding_pattern("A") == "*.A.#"
def test_strategy_queue_args_have_ttl_and_max_length():
args = topology.STRATEGY_QUEUE_ARGS
assert args["x-message-ttl"] > 0
assert args["x-max-length"] > 0
assert args["x-overflow"] == "drop-head"
assert args["x-dead-letter-exchange"] == topology.EVENTS_DLQ_EXCHANGE