Files
cleveragents-core/features/execution_environment.feature
T
HAL9000 9b9bb80e05
CI / lint (push) Waiting to run
CI / typecheck (push) Waiting to run
CI / security (push) Waiting to run
CI / quality (push) Waiting to run
CI / unit_tests (push) Waiting to run
CI / integration_tests (push) Waiting to run
CI / e2e_tests (push) Waiting to run
CI / coverage (push) Blocked by required conditions
CI / build (push) Waiting to run
CI / docker (push) Blocked by required conditions
CI / helm (push) Waiting to run
CI / push-validation (push) Waiting to run
CI / status-check (push) Blocked by required conditions
CI / benchmark-publish (push) Waiting to run
fix(container): remove devcontainer-file from CONTAINER_RESOURCE_TYPES
devcontainer-file is a read-only config file resource, not a running
container. Including it in CONTAINER_RESOURCE_TYPES causes
validate_container_available() to return True when only a config file
is linked, even though no actual container is available.

Closes #10598
2026-05-02 01:36:45 +00:00

149 lines
7.3 KiB
Gherkin

Feature: Execution environment routing
As the tool execution engine
I need to route tool execution to host or container environments
With a priority chain: tool > plan > project > default (host)
# ExecutionEnvironment enum
Scenario: ExecutionEnvironment enum has HOST value
Given I import ExecutionEnvironment
Then the HOST value should be "host"
Scenario: ExecutionEnvironment enum has CONTAINER value
Given I import ExecutionEnvironment
Then the CONTAINER value should be "container"
Scenario: ExecutionEnvironment is a StrEnum
Given I import ExecutionEnvironment
Then ExecutionEnvironment should be a StrEnum subclass
# ── Plan model field ────────────────────────────────────────────────
Scenario: Plan model has execution_environment field defaulting to None
Given I create a plan with default fields
Then the plan execution_environment should be None
Scenario: Plan model accepts execution_environment host
Given I create a plan with execution_environment "host"
Then the plan execution_environment should be "host"
Scenario: Plan model accepts execution_environment container
Given I create a plan with execution_environment "container"
Then the plan execution_environment should be "container"
# ── ContextConfig model field ───────────────────────────────────────
Scenario: ContextConfig has execution_environment field defaulting to None
Given I create a ContextConfig with default fields
Then the context config execution_environment should be None
Scenario: ContextConfig accepts execution_environment host
Given I create a ContextConfig with execution_environment "host"
Then the context config execution_environment should be "host"
Scenario: ContextConfig accepts execution_environment container
Given I create a ContextConfig with execution_environment "container"
Then the context config execution_environment should be "container"
# ── Resolver: default resolution ────────────────────────────────────
Scenario: Resolver defaults to host when nothing is set
Given I create an ExecutionEnvironmentResolver
When I resolve with no overrides
Then the resolved environment should be "host"
Scenario: Resolver uses explicit default
Given I create an ExecutionEnvironmentResolver
When I resolve with default "container"
Then the resolved environment should be "container"
# ── Resolver: priority chain ────────────────────────────────────────
Scenario: Project-level overrides default
Given I create an ExecutionEnvironmentResolver
When I resolve with project_env "container"
Then the resolved environment should be "container"
Scenario: Plan-level overrides project-level
Given I create an ExecutionEnvironmentResolver
When I resolve with plan_env "host" and project_env "container"
Then the resolved environment should be "host"
Scenario: Tool-level overrides plan-level
Given I create an ExecutionEnvironmentResolver
When I resolve with tool_env "container" and plan_env "host"
Then the resolved environment should be "container"
Scenario: Full priority chain tool wins
Given I create an ExecutionEnvironmentResolver
When I resolve the full chain with tool_env "container" and plan_env "host" and project_env "host"
Then the resolved environment should be "container"
# ── Resolver: validation ────────────────────────────────────────────
Scenario: Resolver raises ValueError on invalid environment
Given I create an ExecutionEnvironmentResolver
When I resolve with tool_env "invalid_env"
Then exec-env a ValueError should be raised
# ── Container availability ──────────────────────────────────────────
Scenario: validate_container_available succeeds with container resource
Given I create an ExecutionEnvironmentResolver
When I validate container available with types "devcontainer-instance,git-checkout"
Then validation should succeed
Scenario: validate_container_available raises when no container resource
Given I create an ExecutionEnvironmentResolver
When I validate container available with types "git-checkout,fs-directory"
Then a ContainerUnavailableError should be raised
Scenario: resolve_and_validate passes for host
Given I create an ExecutionEnvironmentResolver
When I resolve_and_validate with project_env "host" and types "git-checkout"
Then the resolved environment should be "host"
Scenario: resolve_and_validate raises for container without resource
Given I create an ExecutionEnvironmentResolver
When I resolve_and_validate with plan_env "container" and types "git-checkout"
Then a ContainerUnavailableError should be raised
Scenario: resolve_and_validate passes for container with resource
Given I create an ExecutionEnvironmentResolver
When I resolve_and_validate with plan_env "container" and types "devcontainer-instance"
Then the resolved environment should be "container"
# ── ToolRunner integration ──────────────────────────────────────────
Scenario: ToolRunner routes to host by default
Given I create a ToolRunner with a mock registry
When I execute a tool with no environment overrides
Then the tool should execute successfully on host
Scenario: ToolRunner returns error for container without resource
Given I create a ToolRunner with a mock registry
When I execute a tool with plan_env "container" and no container resources
Then the tool result should have an error about container unavailable
# ── Container resource types ────────────────────────────────────────
Scenario: CONTAINER_RESOURCE_TYPES includes expected types
Given I import CONTAINER_RESOURCE_TYPES
Then it should contain "container-instance"
And it should contain "devcontainer-instance"
And it should not contain "devcontainer-file"
And it should not contain "git-checkout"
# ── ContainerUnavailableError ───────────────────────────────────────
Scenario: ContainerUnavailableError includes project name
When I create a ContainerUnavailableError for project "my-project"
Then exec-env the error message should contain "my-project"
And exec-env the error message should contain "Container resource unavailable"
Scenario: ContainerUnavailableError without project name
When I create a ContainerUnavailableError without project name
Then exec-env the error message should contain "Container resource unavailable"
And exec-env the error message should not contain "for project"