Files
cleveragents-core/robot/binding_resolution.robot

86 lines
6.0 KiB
Plaintext

*** Settings ***
Documentation Binding Resolution Service Smoke Tests
Library Process
Library OperatingSystem
*** Variables ***
${PYTHON} python
*** Test Cases ***
Contextual Binding Resolves Single Resource
[Documentation] Resolve a contextual slot with one matching linked resource
${script}= Catenate SEPARATOR=\n
... from unittest.mock import MagicMock
... from cleveragents.core.exceptions import NotFoundError
... from cleveragents.domain.models.core.resource import Resource, PhysVirt
... from cleveragents.domain.models.core.resource_type import ResourceTypeSpec, ResourceKind, SandboxStrategy
... from cleveragents.domain.models.core.project import NamespacedProject, LinkedResource
... from cleveragents.domain.models.core.tool import Tool, ToolSource, ToolType, ResourceSlot, ResourceAccessMode, BindingMode
... from cleveragents.application.services.binding_resolution_service import BindingResolutionService
... registry = MagicMock()
... res = Resource(resource_id="01HGZ6FE0AQDYTR4BX00000001", name=None, resource_type_name="git-checkout", classification=PhysVirt.PHYSICAL)
... registry.show_resource = lambda x: res
... registry.show_type = lambda x: ResourceTypeSpec(name="git-checkout", resource_kind=ResourceKind.PHYSICAL, sandbox_strategy=SandboxStrategy.NONE, built_in=True)
... project = NamespacedProject(name="proj", namespace="local", linked_resources=[LinkedResource(resource_id="01HGZ6FE0AQDYTR4BX00000001", alias="repo")])
... tool = Tool(name="local/reader", description="Read", source=ToolSource.BUILTIN, tool_type=ToolType.TOOL, resource_slots=[ResourceSlot(name="repo", resource_type="git-checkout", access=ResourceAccessMode.READ_WRITE, binding=BindingMode.CONTEXTUAL)])
... svc = BindingResolutionService(registry)
... results = svc.resolve(tool, project)
... assert len(results) == 1, f"Expected 1 result, got {len(results)}"
... assert results[0].binding_mode == "contextual"
... assert results[0].resource_id == "01HGZ6FE0AQDYTR4BX00000001"
... assert not results[0].deferred
... print("Contextual binding resolution passed")
${result}= Run Process ${PYTHON} -c ${script}
Should Be Equal As Integers ${result.rc} 0 Contextual binding test failed: ${result.stderr}
Should Contain ${result.stdout} Contextual binding resolution passed
Static Binding Resolves Named Resource
[Documentation] Resolve a static slot bound to a named resource
${script}= Catenate SEPARATOR=\n
... from unittest.mock import MagicMock
... from cleveragents.core.exceptions import NotFoundError
... from cleveragents.domain.models.core.resource import Resource, PhysVirt
... from cleveragents.domain.models.core.resource_type import ResourceTypeSpec, ResourceKind, SandboxStrategy
... from cleveragents.domain.models.core.project import NamespacedProject
... from cleveragents.domain.models.core.tool import Tool, ToolSource, ToolType, ResourceSlot, ResourceAccessMode, BindingMode
... from cleveragents.application.services.binding_resolution_service import BindingResolutionService
... registry = MagicMock()
... res = Resource(resource_id="01HGZ6FE0AQDYTR4BX00000020", name="local/shared-config", resource_type_name="fs-directory", classification=PhysVirt.PHYSICAL)
... registry.show_resource = lambda x: res
... registry.show_type = lambda x: ResourceTypeSpec(name="fs-directory", resource_kind=ResourceKind.PHYSICAL, sandbox_strategy=SandboxStrategy.NONE, built_in=True)
... project = NamespacedProject(name="proj", namespace="local")
... tool = Tool(name="local/deployer", description="Deploy", source=ToolSource.BUILTIN, tool_type=ToolType.TOOL, resource_slots=[ResourceSlot(name="config_dir", resource_type="fs-directory", access=ResourceAccessMode.READ_ONLY, binding=BindingMode.STATIC, static_resource="local/shared-config")])
... svc = BindingResolutionService(registry)
... results = svc.resolve(tool, project)
... assert len(results) == 1
... assert results[0].binding_mode == "static"
... assert results[0].resource_id == "01HGZ6FE0AQDYTR4BX00000020"
... assert not results[0].deferred
... print("Static binding resolution passed")
${result}= Run Process ${PYTHON} -c ${script}
Should Be Equal As Integers ${result.rc} 0 Static binding test failed: ${result.stderr}
Should Contain ${result.stdout} Static binding resolution passed
Parameter Binding Is Deferred
[Documentation] Parameter binding returns a deferred result
${script}= Catenate SEPARATOR=\n
... from cleveragents.domain.models.core.project import NamespacedProject
... from cleveragents.domain.models.core.tool import Tool, ToolSource, ToolType, ResourceSlot, ResourceAccessMode, BindingMode
... from cleveragents.application.services.binding_resolution_service import BindingResolutionService
... from unittest.mock import MagicMock
... registry = MagicMock()
... project = NamespacedProject(name="proj", namespace="local")
... tool = Tool(name="local/builder", description="Build", source=ToolSource.BUILTIN, tool_type=ToolType.TOOL, resource_slots=[ResourceSlot(name="target", resource_type="fs-directory", access=ResourceAccessMode.READ_WRITE, binding=BindingMode.PARAMETER)])
... svc = BindingResolutionService(registry)
... results = svc.resolve(tool, project)
... assert len(results) == 1
... assert results[0].binding_mode == "parameter"
... assert results[0].deferred is True
... assert results[0].resource_id is None
... print("Parameter binding deferred passed")
${result}= Run Process ${PYTHON} -c ${script}
Should Be Equal As Integers ${result.rc} 0 Parameter binding test failed: ${result.stderr}
Should Contain ${result.stdout} Parameter binding deferred passed
*** Keywords ***