Files
AstrBot/tests_v4/test_protocol.py
whatevertogo 9d04cec8a4 feat: Implement Peer and Transport layers for asynchronous communication
- Added Peer class for managing peer-to-peer communication, including initialization, invocation, and cancellation of requests.
- Introduced Transport abstract base class with StdioTransport and WebSocketTransport implementations for message handling.
- Created Star class for error handling in event-driven architecture.
- Developed MemoryTransport for testing purposes, allowing in-memory communication between peers.
- Implemented unit tests for Peer functionality, protocol message parsing, and runtime integration with plugins.
- Established entry point tests to ensure package import and command-line interface functionality.
2026-03-12 21:42:46 +08:00

54 lines
1.7 KiB
Python

from __future__ import annotations
import unittest
from astrbot_sdk.protocol.descriptors import (
CommandTrigger,
HandlerDescriptor,
ScheduleTrigger,
)
from astrbot_sdk.protocol.messages import (
CancelMessage,
EventMessage,
InitializeMessage,
InvokeMessage,
PeerInfo,
ResultMessage,
parse_message,
)
class ProtocolModelsTest(unittest.TestCase):
def test_parse_message_roundtrip(self) -> None:
message = InitializeMessage(
id="msg_001",
protocol_version="1.0",
peer=PeerInfo(name="plugin", role="plugin", version="1.0.0"),
handlers=[
HandlerDescriptor(
id="handler_1",
trigger=CommandTrigger(command="hello"),
)
],
metadata={"a": 1},
)
parsed = parse_message(message.model_dump_json())
self.assertEqual(parsed.id, "msg_001")
self.assertEqual(parsed.peer.name, "plugin")
for sample in [
InvokeMessage(id="msg_002", capability="llm.chat", input={"prompt": "hi"}),
ResultMessage(id="msg_002", success=True, output={"text": "ok"}),
EventMessage(id="msg_003", phase="started"),
CancelMessage(id="msg_003"),
]:
self.assertEqual(parse_message(sample.model_dump()).type, sample.type)
def test_schedule_trigger_requires_exactly_one_strategy(self) -> None:
with self.assertRaises(ValueError):
ScheduleTrigger()
with self.assertRaises(ValueError):
ScheduleTrigger(cron="* * * * *", interval_seconds=10)
trigger = ScheduleTrigger(interval_seconds=30)
self.assertEqual(trigger.interval_seconds, 30)