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
52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
"""
|
|
Tests for the TaskScheduler.
|
|
"""
|
|
|
|
import pytest
|
|
from dcos.core.scheduler import TaskScheduler, Task
|
|
|
|
|
|
class TestTaskScheduler:
|
|
def test_enqueue_dequeue(self):
|
|
scheduler = TaskScheduler()
|
|
task = Task(name="test", agent_id="agent_1", priority=5)
|
|
scheduler.enqueue(task)
|
|
dequeued = scheduler.dequeue()
|
|
assert dequeued is not None
|
|
assert dequeued.name == "test"
|
|
assert dequeued.status.name == "RUNNING"
|
|
|
|
def test_priority_ordering(self):
|
|
scheduler = TaskScheduler()
|
|
t1 = Task(name="low", agent_id="a1", priority=1)
|
|
t2 = Task(name="high", agent_id="a2", priority=10)
|
|
scheduler.enqueue(t1)
|
|
scheduler.enqueue(t2)
|
|
first = scheduler.dequeue()
|
|
assert first is not None and first.name == "high"
|
|
|
|
def test_complete_task(self):
|
|
scheduler = TaskScheduler()
|
|
task = Task(name="done", agent_id="a1")
|
|
scheduler.enqueue(task)
|
|
dequeued = scheduler.dequeue()
|
|
assert dequeued is not None
|
|
result = scheduler.complete(dequeued.id)
|
|
assert result is True
|
|
|
|
def test_dependency_wait(self):
|
|
scheduler = TaskScheduler()
|
|
dep = Task(name="dependency", agent_id="a1")
|
|
main = Task(name="main", agent_id="a2", depends_on=[dep.id])
|
|
scheduler.enqueue(dep)
|
|
scheduler.enqueue(main)
|
|
# Only dep should dequeue since main depends on dep
|
|
first = scheduler.dequeue()
|
|
assert first is not None and first.name == "dependency"
|
|
second = scheduler.dequeue()
|
|
assert second is None # main still blocked
|
|
|
|
def test_empty_queue(self):
|
|
scheduler = TaskScheduler()
|
|
assert scheduler.dequeue() is None
|