Files
roboco/tests/unit/runtime/test_agent_image_registry.py
T

73 lines
2.7 KiB
Python
Raw Normal View History

"""Agent image resolution — local build vs. pre-built registry images.
``_qualify_agent_image`` decides what image name the orchestrator spawns (and
ensures). Empty registry/tag MUST return the bare name unchanged so the local
build flow and existing NAS deployment are untouched; a configured registry
switches every agent to the pre-built ``{registry}/roboco-agent-*[:tag]``.
"""
from __future__ import annotations
import pytest
from roboco.runtime import orchestrator as orch
@pytest.mark.parametrize(
("registry", "tag", "bare", "expected"),
[
# Default: no registry, no tag -> bare name unchanged (local build).
("", "", "roboco-agent-pm", "roboco-agent-pm"),
# Registry only -> qualified, implicit :latest.
("ghcr.io/rennf93", "", "roboco-agent-pm", "ghcr.io/rennf93/roboco-agent-pm"),
# Trailing slash on the registry is tolerated.
(
"ghcr.io/rennf93/",
"latest",
"roboco-agent-pm",
"ghcr.io/rennf93/roboco-agent-pm:latest",
),
# Docker Hub namespace + pinned version.
(
"docker.io/renzof93",
"0.5.0",
"roboco-agent-base",
"docker.io/renzof93/roboco-agent-base:0.5.0",
),
# Tag without registry is still applied (edge case, valid).
("", "latest", "roboco-agent-pm", "roboco-agent-pm:latest"),
],
)
def test_qualify_agent_image(
monkeypatch: pytest.MonkeyPatch,
registry: str,
tag: str,
bare: str,
expected: str,
) -> None:
monkeypatch.setattr(orch.settings, "agent_image_registry", registry)
monkeypatch.setattr(orch.settings, "agent_image_tag", tag)
assert orch._qualify_agent_image(bare) == expected
def test_get_agent_image_local_default(monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.setattr(orch.settings, "agent_image_registry", "")
monkeypatch.setattr(orch.settings, "agent_image_tag", "")
assert orch.get_agent_image("be-dev-1") == "roboco-agent-dev-be"
# The PR reviewer has its own image (parity with the other agents).
assert orch.get_agent_image("pr-reviewer-1") == "roboco-agent-pr-reviewer"
# A genuinely unknown agent id falls back to the base image.
assert orch.get_agent_image("nope-not-real") == "roboco-agent-base"
def test_get_agent_image_registry_mode(monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.setattr(orch.settings, "agent_image_registry", "ghcr.io/rennf93")
monkeypatch.setattr(orch.settings, "agent_image_tag", "0.5.0")
assert (
orch.get_agent_image("be-dev-1")
== "ghcr.io/rennf93/roboco-agent-dev-be:0.5.0"
)
assert (
orch.get_agent_image("pr-reviewer-1")
== "ghcr.io/rennf93/roboco-agent-pr-reviewer:0.5.0"
)