feat(cloud): skip MCP-busy devices in scheduler
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
"""Tests for the cloud TaskScheduler, focused on skipping MCP-busy devices."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from cloud.config import CloudConfig
|
||||
from cloud.pool import DevicePool
|
||||
from cloud.scheduler import TaskConstraints, TaskScheduler
|
||||
from cloud.store import CloudStore
|
||||
from core.models import Device
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def pool() -> DevicePool:
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
store = CloudStore(Path(tmp) / "cloud.sqlite3")
|
||||
try:
|
||||
yield DevicePool(store=store, config=CloudConfig())
|
||||
finally:
|
||||
store.close()
|
||||
|
||||
|
||||
def _device(device_id: str, *, status: str = "idle") -> Device:
|
||||
return Device(
|
||||
id=device_id,
|
||||
driver_type="wda",
|
||||
status=status, # type: ignore[arg-type]
|
||||
capability_tags=[],
|
||||
)
|
||||
|
||||
|
||||
def test_mcp_busy_device_is_skipped_by_scheduler(pool: DevicePool) -> None:
|
||||
"""A device with mcp_busy=True is not selected for assignment.
|
||||
|
||||
Two devices exist: dev-busy (idle status, mcp_busy=True) and dev-idle
|
||||
(idle status, mcp_busy=False). One task is submitted with no
|
||||
constraints, so both are candidates before the mcp_busy filter.
|
||||
The scheduler must pick dev-idle.
|
||||
"""
|
||||
pool.sync_host_devices(
|
||||
"host-1",
|
||||
[_device("dev-busy"), _device("dev-idle")],
|
||||
mcp_busy_device_ids=["dev-busy"],
|
||||
)
|
||||
scheduler = TaskScheduler(pool=pool, store=pool.store, config=CloudConfig())
|
||||
scheduler.submit(goal="test", constraints=TaskConstraints())
|
||||
assignments = scheduler.assign()
|
||||
assert len(assignments) == 1
|
||||
assert assignments[0].device_id == "dev-idle"
|
||||
Reference in New Issue
Block a user