feat: implement DCOS source tree, tests, and build configuration
Complete implementation of the DCOS package including: - 40+ Python source files across agents, communication, core, learning, memory, protocols, utils - pyproject.toml build configuration - 102 unit tests across all subsystems - Fixed flake.nix (Python 3.12, proper dependencies, pyproject build) - Fixed .woodpecker.yml (correct paths, removed silent-fail flags) - Added .gitignore - Cleared stale pytest cache
This commit is contained in:
@@ -0,0 +1 @@
|
||||
"""Communication subsystem tests."""
|
||||
@@ -0,0 +1,36 @@
|
||||
"""
|
||||
Tests for CommunicationNetwork.
|
||||
"""
|
||||
|
||||
import pytest
|
||||
from dcos.communication.network import CommunicationNetwork
|
||||
from dcos.communication.protocol import Message
|
||||
|
||||
|
||||
class TestCommunicationNetwork:
|
||||
def test_connect_and_deliver(self):
|
||||
net = CommunicationNetwork()
|
||||
net.connect("a", "b")
|
||||
msg = Message(sender="a", recipient="b", payload="test")
|
||||
assert net.deliver(msg) is True
|
||||
|
||||
def test_disconnect(self):
|
||||
net = CommunicationNetwork()
|
||||
net.connect("a", "b")
|
||||
net.disconnect("a", "b")
|
||||
msg = Message(sender="a", recipient="b", payload="test")
|
||||
assert net.deliver(msg) is False
|
||||
|
||||
def test_broadcast(self):
|
||||
net = CommunicationNetwork()
|
||||
net.connect("a", "b")
|
||||
net.connect("a", "c")
|
||||
count = net.broadcast("a", "broadcast message")
|
||||
assert count == 2
|
||||
|
||||
def test_get_peers(self):
|
||||
net = CommunicationNetwork()
|
||||
net.connect("x", "y")
|
||||
net.connect("x", "z")
|
||||
peers = net.get_peers("x")
|
||||
assert len(peers) == 2
|
||||
@@ -0,0 +1,26 @@
|
||||
"""
|
||||
Tests for CommunicationProtocol.
|
||||
"""
|
||||
|
||||
import pytest
|
||||
from dcos.communication.protocol import CommunicationProtocol, Message
|
||||
|
||||
|
||||
class TestCommunicationProtocol:
|
||||
def test_encode_decode(self):
|
||||
proto = CommunicationProtocol()
|
||||
msg = Message(sender="alice", recipient="bob", payload="hello")
|
||||
encoded = proto.encode(msg)
|
||||
assert encoded["sender"] == "alice"
|
||||
assert encoded["recipient"] == "bob"
|
||||
|
||||
decoded = proto.decode(encoded)
|
||||
assert decoded.payload == "hello"
|
||||
|
||||
def test_send_and_ack(self):
|
||||
proto = CommunicationProtocol()
|
||||
msg = Message(sender="a", recipient="b", payload="data")
|
||||
assert proto.send(msg) is True
|
||||
ack = proto.ack(msg.msg_id)
|
||||
assert ack is not None
|
||||
assert ack.msg_id == msg.msg_id
|
||||
@@ -0,0 +1,27 @@
|
||||
"""
|
||||
Tests for AddressResolver.
|
||||
"""
|
||||
|
||||
import pytest
|
||||
from dcos.communication.resolver import AddressResolver
|
||||
|
||||
|
||||
class TestAddressResolver:
|
||||
def test_resolve_by_name(self):
|
||||
resolver = AddressResolver()
|
||||
resolver.register("planner", "agent_001", role="planner")
|
||||
assert resolver.resolve_by_name("planner") == "agent_001"
|
||||
|
||||
def test_resolve_by_role(self):
|
||||
resolver = AddressResolver()
|
||||
resolver.register("planner1", "agent_001", role="planner")
|
||||
resolver.register("planner2", "agent_002", role="planner")
|
||||
planners = resolver.resolve_by_role("planner")
|
||||
assert len(planners) == 2
|
||||
|
||||
def test_unregister(self):
|
||||
resolver = AddressResolver()
|
||||
resolver.register("temp", "agent_temp")
|
||||
removed = resolver.unregister("temp")
|
||||
assert removed == "agent_temp"
|
||||
assert resolver.resolve_by_name("temp") is None
|
||||
@@ -0,0 +1,32 @@
|
||||
"""
|
||||
Tests for MessageRouter.
|
||||
"""
|
||||
|
||||
import pytest
|
||||
from dcos.communication.router import MessageRouter
|
||||
from dcos.communication.protocol import Message
|
||||
|
||||
|
||||
class TestMessageRouter:
|
||||
def test_register_and_route(self):
|
||||
router = MessageRouter()
|
||||
router.register("weather", "agent_weather")
|
||||
msg = Message(sender="user", recipient="", payload="weather forecast")
|
||||
target = router.route(msg)
|
||||
assert target == "agent_weather"
|
||||
|
||||
def test_fallback(self):
|
||||
router = MessageRouter()
|
||||
router.set_fallback("default_agent")
|
||||
msg = Message(sender="user", recipient="", payload="unknown topic")
|
||||
target = router.route(msg)
|
||||
assert target == "default_agent"
|
||||
|
||||
def test_unregister(self):
|
||||
router = MessageRouter()
|
||||
router.register("key", "agent")
|
||||
removed = router.unregister("key")
|
||||
assert removed == "agent"
|
||||
msg = Message(sender="user", recipient="", payload="key data")
|
||||
target = router.route(msg)
|
||||
assert target is None
|
||||
Reference in New Issue
Block a user