Files
cleveragents-core/features/execution_environment.feature
T
HAL9000 d51f3a05ae fix: resolve ambiguous step definition conflict in execution_environment_steps.py
- Renamed 'it should contain' steps to 'the container types should contain' for specificity
- Updated execution_environment.feature to use the new step names
- This fixes the AmbiguousStep error that was preventing unit tests from running
2026-06-06 12:11:44 -04:00

148 lines
7.4 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 the container types should contain "container-instance"
And the container types should contain "devcontainer-instance"
And the container types should not contain "devcontainer-file"
And the container types 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"