|
|
|
@@ -1,674 +0,0 @@
|
|
|
|
|
Test Framework: generic
|
|
|
|
|
Total Tests: 155
|
|
|
|
|
Passed: 107
|
|
|
|
|
Failed: 48
|
|
|
|
|
|
|
|
|
|
--- Test Results ---
|
|
|
|
|
✓ Output Block 1
|
|
|
|
|
✓ Output Block 2
|
|
|
|
|
✓ Output Block 3
|
|
|
|
|
✓ Output Block 4
|
|
|
|
|
✓ Output Block 5
|
|
|
|
|
✓ Output Block 6
|
|
|
|
|
✓ Output Block 7
|
|
|
|
|
✓ Output Block 8
|
|
|
|
|
✓ Output Block 9
|
|
|
|
|
✓ Output Block 10
|
|
|
|
|
✗ Output Block 11
|
|
|
|
|
✓ Output Block 12
|
|
|
|
|
✓ Output Block 13
|
|
|
|
|
✗ Output Block 14
|
|
|
|
|
✗ Output Block 15
|
|
|
|
|
✗ Output Block 16
|
|
|
|
|
✓ Output Block 17
|
|
|
|
|
✓ Output Block 18
|
|
|
|
|
✓ Output Block 19
|
|
|
|
|
✓ Output Block 20
|
|
|
|
|
✓ Output Block 21
|
|
|
|
|
✓ Output Block 22
|
|
|
|
|
✗ Output Block 23
|
|
|
|
|
✗ Output Block 24
|
|
|
|
|
✗ Output Block 25
|
|
|
|
|
✗ Output Block 26
|
|
|
|
|
✓ Output Block 27
|
|
|
|
|
✗ Output Block 28
|
|
|
|
|
✗ Output Block 29
|
|
|
|
|
✗ Output Block 30
|
|
|
|
|
✗ Output Block 31
|
|
|
|
|
✗ Output Block 32
|
|
|
|
|
✗ Output Block 33
|
|
|
|
|
✗ Output Block 34
|
|
|
|
|
✗ Output Block 35
|
|
|
|
|
✓ Output Block 36
|
|
|
|
|
✓ Output Block 37
|
|
|
|
|
✓ Output Block 38
|
|
|
|
|
✓ Output Block 39
|
|
|
|
|
✓ Output Block 40
|
|
|
|
|
✓ Output Block 41
|
|
|
|
|
✓ Output Block 42
|
|
|
|
|
✓ Output Block 43
|
|
|
|
|
✓ Output Block 44
|
|
|
|
|
✗ Output Block 45
|
|
|
|
|
✓ Output Block 46
|
|
|
|
|
✓ Output Block 47
|
|
|
|
|
✗ Output Block 48
|
|
|
|
|
✓ Output Block 49
|
|
|
|
|
✓ Output Block 50
|
|
|
|
|
✗ FAIL: Output Block 51
|
|
|
|
|
✓ Output Block 52
|
|
|
|
|
✗ Output Block 53
|
|
|
|
|
✗ FAIL: Output Block 54
|
|
|
|
|
✓ Output Block 55
|
|
|
|
|
✓ Output Block 56
|
|
|
|
|
✗ Output Block 57
|
|
|
|
|
✗ Output Block 58
|
|
|
|
|
✓ Output Block 59
|
|
|
|
|
✓ Output Block 60
|
|
|
|
|
✗ Output Block 61
|
|
|
|
|
✗ Output Block 62
|
|
|
|
|
✓ Output Block 63
|
|
|
|
|
✓ Output Block 64
|
|
|
|
|
✓ Output Block 65
|
|
|
|
|
✓ Output Block 66
|
|
|
|
|
✓ Output Block 67
|
|
|
|
|
✓ Output Block 68
|
|
|
|
|
✓ Output Block 69
|
|
|
|
|
✓ Output Block 70
|
|
|
|
|
✓ Output Block 71
|
|
|
|
|
✓ Output Block 72
|
|
|
|
|
✓ Output Block 73
|
|
|
|
|
✓ Output Block 74
|
|
|
|
|
✓ Output Block 75
|
|
|
|
|
✓ Output Block 76
|
|
|
|
|
✓ Output Block 77
|
|
|
|
|
✓ Output Block 78
|
|
|
|
|
✓ Output Block 79
|
|
|
|
|
✓ Output Block 80
|
|
|
|
|
✓ Output Block 81
|
|
|
|
|
✓ Output Block 82
|
|
|
|
|
✗ Output Block 83
|
|
|
|
|
✓ Output Block 84
|
|
|
|
|
✓ Output Block 85
|
|
|
|
|
✗ Output Block 86
|
|
|
|
|
✓ Output Block 87
|
|
|
|
|
✗ Output Block 88
|
|
|
|
|
✓ Output Block 89
|
|
|
|
|
✓ Output Block 90
|
|
|
|
|
✓ Output Block 91
|
|
|
|
|
✓ Output Block 92
|
|
|
|
|
✗ Output Block 93
|
|
|
|
|
✗ Output Block 94
|
|
|
|
|
✓ Output Block 95
|
|
|
|
|
✓ Output Block 96
|
|
|
|
|
✓ Output Block 97
|
|
|
|
|
✓ Output Block 98
|
|
|
|
|
✗ Output Block 99
|
|
|
|
|
✓ Output Block 100
|
|
|
|
|
✓ Output Block 101
|
|
|
|
|
✓ Output Block 102
|
|
|
|
|
✓ Output Block 103
|
|
|
|
|
✗ Output Block 104
|
|
|
|
|
✓ Output Block 105
|
|
|
|
|
✓ Output Block 106
|
|
|
|
|
✗ Output Block 107
|
|
|
|
|
✓ Output Block 108
|
|
|
|
|
✓ Output Block 109
|
|
|
|
|
✗ Output Block 110
|
|
|
|
|
✓ Output Block 111
|
|
|
|
|
✗ Output Block 112
|
|
|
|
|
✓ Output Block 113
|
|
|
|
|
✗ Output Block 114
|
|
|
|
|
✓ Output Block 115
|
|
|
|
|
✗ Output Block 116
|
|
|
|
|
✓ Output Block 117
|
|
|
|
|
✓ Output Block 118
|
|
|
|
|
✓ Output Block 119
|
|
|
|
|
✓ Output Block 120
|
|
|
|
|
✓ Output Block 121
|
|
|
|
|
✓ Output Block 122
|
|
|
|
|
✗ Output Block 123
|
|
|
|
|
✓ Output Block 124
|
|
|
|
|
✓ Output Block 125
|
|
|
|
|
✓ Output Block 126
|
|
|
|
|
✓ Output Block 127
|
|
|
|
|
✓ Output Block 128
|
|
|
|
|
✓ Output Block 129
|
|
|
|
|
✓ Output Block 130
|
|
|
|
|
✗ Output Block 131
|
|
|
|
|
✗ Output Block 132
|
|
|
|
|
✓ Output Block 133
|
|
|
|
|
✓ Output Block 134
|
|
|
|
|
✓ Output Block 135
|
|
|
|
|
✓ Output Block 136
|
|
|
|
|
✓ Output Block 137
|
|
|
|
|
✓ Output Block 138
|
|
|
|
|
✓ Output Block 139
|
|
|
|
|
✓ Output Block 140
|
|
|
|
|
✗ Output Block 141
|
|
|
|
|
✗ Output Block 142
|
|
|
|
|
✗ Output Block 143
|
|
|
|
|
✗ Output Block 144
|
|
|
|
|
✓ Output Block 145
|
|
|
|
|
✓ Output Block 146
|
|
|
|
|
✓ Output Block 147
|
|
|
|
|
✓ Output Block 148
|
|
|
|
|
✓ Output Block 149
|
|
|
|
|
✓ Output Block 150
|
|
|
|
|
✓ Output Block 151
|
|
|
|
|
✗ Output Block 152
|
|
|
|
|
✗ Output Block 153
|
|
|
|
|
✗ nox > Running session unit_tests-3.13
|
|
|
|
|
✗ Error Output
|
|
|
|
|
|
|
|
|
|
--- Failed Tests ---
|
|
|
|
|
✗ Output Block 11
|
|
|
|
|
1 feature passed, 0 failed, 0 skipped
|
|
|
|
|
10 scenarios passed, 0 failed, 0 skipped
|
|
|
|
|
23 steps passed, 0 failed, 0 skipped
|
|
|
|
|
Took 0min 0.006s
|
|
|
|
|
Feature: Devcontainer Lifecycle State Model
|
|
|
|
|
As a CleverAgents developer
|
|
|
|
|
I want the container lifecycle state model to enforce valid transitions
|
|
|
|
|
So that containers follow a predictable state machine
|
|
|
|
|
Scenario: ContainerLifecycleState has all required values
|
|
|
|
|
When I inspect ContainerLifecycleState enum values
|
|
|
|
|
Then the lifecycle enum should contain "discovered"
|
|
|
|
|
And the lifecycle enum should contain "building"
|
|
|
|
|
And the lifecycle enum should contain "running"
|
|
|
|
|
And the lifecycle enum should contain "stopping"
|
|
|
|
|
And the lifecycle enum should contain "stopped"
|
|
|
|
|
And the lifecycle enum should contain "failed"
|
|
|
|
|
|
|
|
|
|
✗ Output Block 14
|
|
|
|
|
Scenario: Invalid transition is rejected
|
|
|
|
|
Given a lifecycle tracker for resource "01TESTLIFECYCLE0000000003"
|
|
|
|
|
When I attempt to transition from "discovered" to "running"
|
|
|
|
|
Then the transition should raise ValueError
|
|
|
|
|
|
|
|
|
|
✗ Output Block 15
|
|
|
|
|
Scenario: Stopping to error transition is valid
|
|
|
|
|
Given a lifecycle tracker in "stopping" state for resource "01TESTLIFECYCLE0000000004"
|
|
|
|
|
When I transition from "stopping" to "failed"
|
|
|
|
|
Then the transition should succeed
|
|
|
|
|
And the tracker state should be "failed"
|
|
|
|
|
|
|
|
|
|
✗ Output Block 16
|
|
|
|
|
Scenario: Error to starting transition is valid for retry
|
|
|
|
|
Given a lifecycle tracker in "failed" state for resource "01TESTLIFECYCLE0000000005"
|
|
|
|
|
When I transition from "failed" to "building"
|
|
|
|
|
Then the transition should succeed
|
|
|
|
|
And the tracker state should be "building"
|
|
|
|
|
|
|
|
|
|
✗ Output Block 23
|
|
|
|
|
Scenario: validate_transition rejects wrong types
|
|
|
|
|
When I call validate_transition with non-enum arguments
|
|
|
|
|
Then it should raise TypeError
|
|
|
|
|
|
|
|
|
|
✗ Output Block 24
|
|
|
|
|
Scenario: validate_transition rejects wrong to_state type
|
|
|
|
|
When I call validate_transition with non-enum to_state
|
|
|
|
|
Then it should raise TypeError
|
|
|
|
|
|
|
|
|
|
✗ Output Block 25
|
|
|
|
|
Scenario: transition_state rejects wrong tracker type
|
|
|
|
|
When I call transition_state with non-tracker argument
|
|
|
|
|
Then it should raise TypeError
|
|
|
|
|
|
|
|
|
|
✗ Output Block 26
|
|
|
|
|
Scenario: transition_state rejects wrong to_state type
|
|
|
|
|
When I call transition_state with non-enum to_state argument
|
|
|
|
|
Then it should raise TypeError
|
|
|
|
|
Feature: agents resource list shows devcontainer lifecycle state column
|
|
|
|
|
As a CleverAgents user
|
|
|
|
|
I want the resource list to show the lifecycle state for devcontainer-instance resources
|
|
|
|
|
So that I can see whether a devcontainer is discovered, running, stopped, or failed
|
|
|
|
|
Feature: agents resource list shows devcontainer lifecycle state column
|
|
|
|
|
|
|
|
|
|
✗ Output Block 28
|
|
|
|
|
Scenario: get_lifecycle_tracker rejects empty resource_id
|
|
|
|
|
When I attempt to get tracker with empty resource_id
|
|
|
|
|
Then the get tracker should raise ValueError
|
|
|
|
|
|
|
|
|
|
✗ Output Block 29
|
|
|
|
|
Scenario: set_lifecycle_tracker rejects wrong type
|
|
|
|
|
When I attempt to set tracker with wrong type
|
|
|
|
|
Then the set tracker should raise TypeError
|
|
|
|
|
|
|
|
|
|
✗ Output Block 30
|
|
|
|
|
Scenario: Invalid transition running to building is rejected
|
|
|
|
|
Given a lifecycle tracker in "running" state for resource "01TESTLIFECYCLE0000000240"
|
|
|
|
|
When I attempt to transition from "running" to "building"
|
|
|
|
|
Then the transition should raise ValueError
|
|
|
|
|
|
|
|
|
|
✗ Output Block 31
|
|
|
|
|
Scenario: Invalid transition stopped to running is rejected
|
|
|
|
|
Given a lifecycle tracker in "stopped" state for resource "01TESTLIFECYCLE0000000241"
|
|
|
|
|
When I attempt to transition from "stopped" to "running"
|
|
|
|
|
Then the transition should raise ValueError
|
|
|
|
|
|
|
|
|
|
✗ Output Block 32
|
|
|
|
|
Scenario: Invalid transition building to stopped is rejected
|
|
|
|
|
Given a lifecycle tracker in "building" state for resource "01TESTLIFECYCLE0000000242"
|
|
|
|
|
When I attempt to transition from "building" to "stopped"
|
|
|
|
|
Then the transition should raise ValueError
|
|
|
|
|
|
|
|
|
|
✗ Output Block 33
|
|
|
|
|
Scenario: Invalid transition failed to running is rejected
|
|
|
|
|
Given a lifecycle tracker in "failed" state for resource "01TESTLIFECYCLE0000000243"
|
|
|
|
|
When I attempt to transition from "failed" to "running"
|
|
|
|
|
Then the transition should raise ValueError
|
|
|
|
|
|
|
|
|
|
✗ Output Block 34
|
|
|
|
|
Scenario: Invalid transition discovered to stopping is rejected
|
|
|
|
|
Given a lifecycle tracker for resource "01TESTLIFECYCLE0000000244"
|
|
|
|
|
When I attempt to transition from "discovered" to "stopping"
|
|
|
|
|
Then the transition should raise ValueError
|
|
|
|
|
|
|
|
|
|
✗ Output Block 35
|
|
|
|
|
Scenario: Invalid transition building to discovered is rejected
|
|
|
|
|
Given a lifecycle tracker in "building" state for resource "01TESTLIFECYCLE0000000245"
|
|
|
|
|
When I attempt to transition from "building" to "discovered"
|
|
|
|
|
Then the transition should raise ValueError
|
|
|
|
|
|
|
|
|
|
✗ Output Block 45
|
|
|
|
|
1 feature passed, 0 failed, 0 skipped
|
|
|
|
|
32 scenarios passed, 0 failed, 0 skipped
|
|
|
|
|
106 steps passed, 0 failed, 0 skipped
|
|
|
|
|
Took 0min 0.037s
|
|
|
|
|
And built-in types are bootstrapped
|
|
|
|
|
Given a devcontainer-instance resource is registered
|
|
|
|
|
When I run resource list with all flag
|
|
|
|
|
Then the resource output should contain "discovered (not built)"
|
|
|
|
|
|
|
|
|
|
✗ Output Block 48
|
|
|
|
|
Scenario: resource list shows "failed" state for a failed devcontainer
|
|
|
|
|
Given a fresh in-memory resource registry
|
|
|
|
|
And built-in types are bootstrapped
|
|
|
|
|
Given a devcontainer-instance resource is registered
|
|
|
|
|
And the devcontainer lifecycle state is "failed"
|
|
|
|
|
When I run resource list with all flag
|
|
|
|
|
Then the resource output should contain "failed"
|
|
|
|
|
|
|
|
|
|
✗ FAIL: Output Block 51
|
|
|
|
|
ASSERT FAILED: Expected 'Devcontainer detected' in output, got:
|
|
|
|
|
Resources (1 total)
|
|
|
|
|
┏━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓
|
|
|
|
|
┃ ID ┃ Name ┃ Type ┃ Status ┃ Kind ┃ Location ┃ Description ┃
|
|
|
|
|
┡━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩
|
|
|
|
|
│ 01KP2TDV4GAR... │ (unnamed) │ devcontainer-instance │ discovered (not built) │ physical │ /tmp/test-project │ Test devcontainer │
|
|
|
|
|
└─────────────────┴───────────┴───────────────────────┴────────────────────────┴──────────┴───────────────────┴───────────────────┘
|
|
|
|
|
|
|
|
|
|
✗ Output Block 53
|
|
|
|
|
@tdd_issue @tdd_issue_4263 @tdd_expected_fail
|
|
|
|
|
Scenario: resource list JSON output includes lifecycle_state for devcontainer-instance
|
|
|
|
|
Given a fresh in-memory resource registry
|
|
|
|
|
And built-in types are bootstrapped
|
|
|
|
|
Given a devcontainer-instance resource is registered
|
|
|
|
|
When I run resource list with all flag and format "json"
|
|
|
|
|
Then the resource output should be valid JSON
|
|
|
|
|
And the resource JSON output should contain key "lifecycle_state"
|
|
|
|
|
|
|
|
|
|
✗ FAIL: Output Block 54
|
|
|
|
|
ASSERT FAILED: Key 'lifecycle_state' not found in JSON output
|
|
|
|
|
|
|
|
|
|
✗ Output Block 57
|
|
|
|
|
Scenario: resource list succeeds gracefully when lifecycle tracker raises an error
|
|
|
|
|
Given a fresh in-memory resource registry
|
|
|
|
|
And built-in types are bootstrapped
|
|
|
|
|
Feature: Devcontainer Resource Handler
|
|
|
|
|
As a CleverAgents developer
|
|
|
|
|
I want devcontainer resources to be auto-discovered and manually registered
|
|
|
|
|
So that devcontainer environments integrate into the resource model Given a devcontainer-instance resource is registered
|
|
|
|
|
|
|
|
|
|
✗ Output Block 58
|
|
|
|
|
Scenario: Register devcontainer-instance manually
|
|
|
|
|
Given a temporary directory with a valid devcontainer.json
|
|
|
|
|
When I create a devcontainer-instance resource at that path
|
|
|
|
|
Then And the resource should have type "the lifecycle tracker raises an error for the resourcedevcontainer-instance"
|
|
|
|
|
|
|
|
|
|
✗ Output Block 61
|
|
|
|
|
|
|
|
|
|
Failing scenarios:
|
|
|
|
|
features/resource_list_lifecycle_state.feature:44 resource list shows warning banner when devcontainer is in detected state
|
|
|
|
|
|
|
|
|
|
✗ Output Block 62
|
|
|
|
|
0 features passed, 1 failed, 0 skipped
|
|
|
|
|
11 scenarios passed, 1 failed, 0 skipped
|
|
|
|
|
69 steps passed, 1 failed, 0 skipped
|
|
|
|
|
Took 0min 1.827s
|
|
|
|
|
|
|
|
|
|
✗ Output Block 83
|
|
|
|
|
Scenario Outline: validate_clone_into_url rejects invalid URLs -- @1.1
|
|
|
|
|
When I validate clone-into URL "not-a-url"
|
|
|
|
|
Then it should raise a ValueError
|
|
|
|
|
Then the clone-into URL should be invalid
|
|
|
|
|
|
|
|
|
|
✗ Output Block 86
|
|
|
|
|
Scenario: clone_repo_into_container rejects empty container_id
|
|
|
|
|
When I call clone_repo_into_container with empty container_id
|
|
|
|
|
Then it should raise ValueError mentioning "container_id"
|
|
|
|
|
|
|
|
|
|
✗ Output Block 88
|
|
|
|
|
Scenario: clone_repo_into_container rejects empty repo_url
|
|
|
|
|
When I call clone_repo_into_container with empty repo_url
|
|
|
|
|
And the directory has a named devcontainer configuration "frontend"
|
|
|
|
|
Then it should raise ValueError mentioning "repo_url"
|
|
|
|
|
When I run devcontainer discovery on the directory as "git-checkout"
|
|
|
|
|
Then discovery should return 2 results
|
|
|
|
|
And the result config names should include "api"
|
|
|
|
|
|
|
|
|
|
✗ Output Block 93
|
|
|
|
|
Scenario: clone_repo_into_container raises CloneIntoError when docker exec fails
|
|
|
|
|
Given a mock docker exec that fails for clone with stderr "fatal: repository not found"
|
|
|
|
|
When I clone "https://github.com/org/missing.git" into container "abc123def456"
|
|
|
|
|
When I run devcontainer discovery on the directory as "git-checkout"
|
|
|
|
|
Then the clone should raise CloneIntoError
|
|
|
|
|
And the CloneIntoError should mention "repository not found"
|
|
|
|
|
Then discovery should return 1 result
|
|
|
|
|
And the first result should have no config name
|
|
|
|
|
|
|
|
|
|
✗ Output Block 94
|
|
|
|
|
Scenario: CloneIntoError stores repo_url, container_id, and stderr
|
|
|
|
|
Given a CloneIntoError with repo "https://example.com/repo.git" container "ctr-001" stderr "auth failed"
|
|
|
|
|
Then the CloneIntoError repo_url should be "https://example.com/repo.git"
|
|
|
|
|
And the CloneIntoError container_id should be "ctr-001"
|
|
|
|
|
And the CloneIntoError stderr should be "auth failed"
|
|
|
|
|
|
|
|
|
|
✗ Output Block 99
|
|
|
|
|
1 feature passed, 0 failed, 0 skipped
|
|
|
|
|
17 scenarios passed, 0 failed, 0 skipped
|
|
|
|
|
44 steps passed, 0 failed, 0 skipped
|
|
|
|
|
Took 0min 0.008s
|
|
|
|
|
Then discovery should return 0 results
|
|
|
|
|
|
|
|
|
|
✗ Output Block 104
|
|
|
|
|
1 feature passed, 0 failed, 0 skipped
|
|
|
|
|
26 scenarios passed, 0 failed, 0 skipped
|
|
|
|
|
90 steps passed, 0 failed, 0 skipped
|
|
|
|
|
Took 0min 0.026s
|
|
|
|
|
Feature: Devcontainer Session Cleanup and CLI Commands
|
|
|
|
|
As a CleverAgents developer
|
|
|
|
|
I want session-scoped container cleanup and CLI stop/rebuild commands
|
|
|
|
|
So that containers are cleaned up when sessions end and can be managed via CLI
|
|
|
|
|
Scenario: Active containers stopped on session cleanup
|
|
|
|
|
Given a mock devcontainer CLI runner
|
|
|
|
|
And an active container "01TESTLIFECYCLE0000000040" with container ID "ctr-a"
|
|
|
|
|
And an active container "01TESTLIFECYCLE0000000041" with container ID "ctr-b"
|
|
|
|
|
When I run session cleanup for session "session-001"
|
|
|
|
|
Then the container state for "01TESTLIFECYCLE0000000040" should be "stopped"
|
|
|
|
|
And the container state for "01TESTLIFECYCLE0000000041" should be "stopped"
|
|
|
|
|
|
|
|
|
|
✗ Output Block 107
|
|
|
|
|
Scenario: Session cleanup handles stop failure gracefully
|
|
|
|
|
Given a mock devcontainer CLI runner
|
|
|
|
|
And the runner configured to raise exception on stop
|
|
|
|
|
And an active container "01TESTLIFECYCLE0000000130" with container ID "ctr-fail"
|
|
|
|
|
When I run session cleanup for session "session-err"
|
|
|
|
|
Then the cleanup should return 0 stopped containers
|
|
|
|
|
|
|
|
|
|
✗ Output Block 110
|
|
|
|
|
Scenario: dcproto delete fails when container is stopped
|
|
|
|
|
Given dcproto a devcontainer handler
|
|
|
|
|
And dcproto a devcontainer-instance resource with location "/ws/project"
|
|
|
|
|
And dcproto subprocess returns failed rm output with stderr "container not running"
|
|
|
|
|
When dcproto I delete path "file.txt" from the resource
|
|
|
|
|
Then the CLI exit code should be 0
|
|
|
|
|
And the CLI output should contain "Stopped"
|
|
|
|
|
Then dcproto the delete should fail
|
|
|
|
|
And dcproto the delete failure message should contain "container not running"
|
|
|
|
|
|
|
|
|
|
✗ Output Block 112
|
|
|
|
|
Scenario: dcproto delete from resource with no location raises ValueError
|
|
|
|
|
Given dcproto a devcontainer handler
|
|
|
|
|
And dcproto a devcontainer-instance resource with no location
|
|
|
|
|
When dcproto I delete path "any/file.txt" from the resource
|
|
|
|
|
Then dcproto the delete should raise ValueError containing "no location"
|
|
|
|
|
|
|
|
|
|
✗ Output Block 114
|
|
|
|
|
Scenario: dcproto list_children returns empty list when container is stopped
|
|
|
|
|
Given dcproto a devcontainer handler
|
|
|
|
|
And dcproto a devcontainer-instance resource with location "/ws/project"
|
|
|
|
|
And dcproto subprocess returns failed ls output
|
|
|
|
|
When dcproto I list children of the resource
|
|
|
|
|
Then dcproto the children list should have 0 entries
|
|
|
|
|
|
|
|
|
|
✗ Output Block 116
|
|
|
|
|
Scenario: dcproto list_children from resource with no location raises ValueError
|
|
|
|
|
Given dcproto a devcontainer handler
|
|
|
|
|
And dcproto a devcontainer-instance resource with no location
|
|
|
|
|
When dcproto I list children of the resource
|
|
|
|
|
Then dcproto the list children should raise ValueError containing "no location"
|
|
|
|
|
|
|
|
|
|
✗ Output Block 123
|
|
|
|
|
Scenario: dcproto diff from resource with no location raises ValueError
|
|
|
|
|
Given dcproto a devcontainer handler
|
|
|
|
|
And dcproto a devcontainer-instance resource with no location
|
|
|
|
|
When dcproto I diff the resource against "/some/path"
|
|
|
|
|
Then the devcontainer CLI exit code should be non-zero
|
|
|
|
|
Then dcproto the diff should raise ValueError containing "no location"
|
|
|
|
|
And the CLI output should contain "no location"
|
|
|
|
|
|
|
|
|
|
✗ Output Block 131
|
|
|
|
|
Scenario: dcproto create_sandbox raises ValueError for resource with no location
|
|
|
|
|
Given dcproto a devcontainer handler
|
|
|
|
|
And dcproto a devcontainer-instance resource with no location
|
|
|
|
|
And dcproto a mock sandbox manager that returns a valid sandbox
|
|
|
|
|
When dcproto I create a sandbox for the resource with plan "plan-004"
|
|
|
|
|
Then dcproto the create_sandbox should raise ValueError containing "no location"
|
|
|
|
|
|
|
|
|
|
✗ Output Block 132
|
|
|
|
|
1 feature passed, 0 failed, 0 skipped
|
|
|
|
|
18 scenarios passed, 0 failed, 0 skipped
|
|
|
|
|
102 steps passed, 0 failed, 0 skipped
|
|
|
|
|
Took 0min 0.028s
|
|
|
|
|
Then the CLI exit code should be 0
|
|
|
|
|
And the CLI rebuild mock should have been called with "01TESTLIFECYCLE0000000221" and "/workspace/project"
|
|
|
|
|
|
|
|
|
|
✗ Output Block 141
|
|
|
|
|
Scenario: CLI stop handles NotFoundError from show_resource
|
|
|
|
|
Given a mock resource service that raises NotFoundError for "local/missing"
|
|
|
|
|
When I invoke CLI resource stop "local/missing"
|
|
|
|
|
Then the devcontainer CLI exit code should be non-zero
|
|
|
|
|
And the CLI output should contain "Resource not found"
|
|
|
|
|
|
|
|
|
|
✗ Output Block 142
|
|
|
|
|
Scenario: CLI rebuild handles NotFoundError from show_resource
|
|
|
|
|
Given a mock resource service that raises NotFoundError for "local/missing-rb"
|
|
|
|
|
When I invoke CLI resource rebuild "local/missing-rb"
|
|
|
|
|
Then the devcontainer CLI exit code should be non-zero
|
|
|
|
|
And the CLI output should contain "Resource not found"
|
|
|
|
|
|
|
|
|
|
✗ Output Block 143
|
|
|
|
|
Scenario: CLI stop handles RuntimeError from stop_container
|
|
|
|
|
Given a mock resource service with devcontainer "local/dc-rterr" id "01TESTLIFECYCLE0000000500" at "/workspace/project"
|
|
|
|
|
And an active container "01TESTLIFECYCLE0000000500" with container ID "ctr-rterr"
|
|
|
|
|
And CLI stop_container mock that raises RuntimeError
|
|
|
|
|
When I invoke CLI resource stop with error mock "local/dc-rterr"
|
|
|
|
|
Then the devcontainer CLI exit code should be non-zero
|
|
|
|
|
And the CLI output should contain "Stop failed"
|
|
|
|
|
|
|
|
|
|
✗ Output Block 144
|
|
|
|
|
Scenario: CLI rebuild handles RuntimeError from rebuild_container
|
|
|
|
|
Given a mock resource service with devcontainer "local/dc-rberr" id "01TESTLIFECYCLE0000000501" at "/workspace/project"
|
|
|
|
|
And a stopped container "01TESTLIFECYCLE0000000501"
|
|
|
|
|
And CLI rebuild_container mock that raises RuntimeError
|
|
|
|
|
When I invoke CLI resource rebuild with error mock "local/dc-rberr"
|
|
|
|
|
Then the devcontainer CLI exit code should be non-zero
|
|
|
|
|
And the CLI output should contain "Rebuild failed"
|
|
|
|
|
|
|
|
|
|
✗ Output Block 152
|
|
|
|
|
1 feature passed, 0 failed, 0 skipped
|
|
|
|
|
30 scenarios passed, 0 failed, 0 skipped
|
|
|
|
|
143 steps passed, 0 failed, 0 skipped
|
|
|
|
|
Took 0min 0.436s
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.created child_domain=uko-oo: parent_domain=uko-code:
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.insert_after after_level=MEMBER_LISTING domain=uko-oo: new_level=CLASS_HIERARCHY
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.insert_after after_level=SIGNATURES_WITH_DOCS domain=uko-oo: new_level=VISIBILITY_ANNOTATED
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.built domain=uko-oo: max_depth=11 num_levels=12
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.created child_domain=uko-oo: parent_domain=uko-code:
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.insert_after after_level=MEMBER_LISTING domain=uko-oo: new_level=CLASS_HIERARCHY
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.insert_after after_level=SIGNATURES_WITH_DOCS domain=uko-oo: new_level=VISIBILITY_ANNOTATED
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.built domain=uko-oo: max_depth=11 num_levels=12
|
|
|
|
|
2026-04-13 07:00:42 [debug ] detail_level_map_builder.created child_domain=uko-oo: parent_domain=uko-code:
|
|
|
|
|
2026-04-13 07:00:42 [debug ] detail_level_map_builder.insert_after after_level=MEMBER_LISTING domain=uko-oo: new_level=CLASS_HIERARCHY
|
|
|
|
|
2026-04-13 07:00:42 [debug ] detail_level_map_builder.insert_after after_level=SIGNATURES_WITH_DOCS domain=uko-oo: new_level=VISIBILITY_ANNOTATED
|
|
|
|
|
2026-04-13 07:00:42 [debug ] detail_level_map_builder.built domain=uko-oo: max_depth=11 num_levels=12
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.created child_domain=uko-oo: parent_domain=uko-code:
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.insert_after after_level=MEMBER_LISTING domain=uko-oo: new_level=CLASS_HIERARCHY
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.insert_after after_level=SIGNATURES_WITH_DOCS domain=uko-oo: new_level=VISIBILITY_ANNOTATED
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.built domain=uko-oo: max_depth=11 num_levels=12
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.created child_domain=uko-oo: parent_domain=uko-code:
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.insert_after after_level=MEMBER_LISTING domain=uko-oo: new_level=CLASS_HIERARCHY
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.insert_after after_level=SIGNATURES_WITH_DOCS domain=uko-oo: new_level=VISIBILITY_ANNOTATED
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.built domain=uko-oo: max_depth=11 num_levels=12
|
|
|
|
|
[1mIncluding unscoped container 01TESTLIFECYCLE0000000040 in session 'session-001' cleanup (container has no session_id set)[0m
|
|
|
|
|
[1mIncluding unscoped container 01TESTLIFECYCLE0000000041 in session 'session-001' cleanup (container has no session_id set)[0m
|
|
|
|
|
[1mContainer 01TESTLIFECYCLE0000000040: running -> stopping (manual stop)[0m
|
|
|
|
|
[1mContainer 01TESTLIFECYCLE0000000040: stopping -> stopped (container stopped)[0m
|
|
|
|
|
[1mStopped container 01TESTLIFECYCLE0000000040 (session=session-001)[0m
|
|
|
|
|
[1mContainer 01TESTLIFECYCLE0000000041: running -> stopping (manual stop)[0m
|
|
|
|
|
[1mContainer 01TESTLIFECYCLE0000000041: stopping -> stopped (container stopped)[0m
|
|
|
|
|
[1mStopped container 01TESTLIFECYCLE0000000041 (session=session-001)[0m
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.created child_domain=uko-oo: parent_domain=uko-code:
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.insert_after after_level=MEMBER_LISTING domain=uko-oo: new_level=CLASS_HIERARCHY
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.insert_after after_level=SIGNATURES_WITH_DOCS domain=uko-oo: new_level=VISIBILITY_ANNOTATED
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.built domain=uko-oo: max_depth=11 num_levels=12
|
|
|
|
|
[1mRegistered built-in resource type: fs-mount[0m
|
|
|
|
|
[1mRegistered built-in resource type: git-checkout[0m
|
|
|
|
|
[1mRegistered built-in resource type: fs-directory[0m
|
|
|
|
|
[1mRegistered built-in resource type: container-instance[0m
|
|
|
|
|
[1mRegistered built-in resource type: devcontainer-instance[0m
|
|
|
|
|
[1mRegistered built-in resource type: devcontainer-file[0m
|
|
|
|
|
[1mRegistered built-in resource type: git[0m
|
|
|
|
|
[1mRegistered built-in resource type: git-remote[0m
|
|
|
|
|
[1mRegistered built-in resource type: git-branch[0m
|
|
|
|
|
[1mRegistered built-in resource type: git-tag[0m
|
|
|
|
|
[1mRegistered built-in resource type: git-commit[0m
|
|
|
|
|
[1mRegistered built-in resource type: git-tree[0m
|
|
|
|
|
[1mRegistered built-in resource type: git-tree-entry[0m
|
|
|
|
|
[1mRegistered built-in resource type: git-stash[0m
|
|
|
|
|
[1mRegistered built-in resource type: git-submodule[0m
|
|
|
|
|
[1mRegistered built-in resource type: fs-symlink[0m
|
|
|
|
|
[1mRegistered built-in resource type: fs-hardlink[0m
|
|
|
|
|
[1mRegistered built-in resource type: cloud-account[0m
|
|
|
|
|
[1mRegistered built-in resource type: cloud-region[0m
|
|
|
|
|
[1mRegistered built-in resource type: cloud-network[0m
|
|
|
|
|
[1mRegistered built-in resource type: cloud-subnet[0m
|
|
|
|
|
[1mRegistered built-in resource type: cloud-security-group[0m
|
|
|
|
|
[1mRegistered built-in resource type: cloud-load-balancer[0m
|
|
|
|
|
[1mRegistered built-in resource type: cloud-compute-instance[0m
|
|
|
|
|
[1mRegistered built-in resource type: cloud-object-store[0m
|
|
|
|
|
[1mRegistered built-in resource type: cloud-block-storage[0m
|
|
|
|
|
[1mRegistered built-in resource type: cloud-identity-principal[0m
|
|
|
|
|
[1mRegistered built-in resource type: cloud-role[0m
|
|
|
|
|
[1mRegistered built-in resource type: cloud-policy[0m
|
|
|
|
|
[1mRegistered built-in resource type: cloud-log-group[0m
|
|
|
|
|
[1mRegistered built-in resource type: cloud-alarm[0m
|
|
|
|
|
[1mRegistered built-in resource type: cloud-queue[0m
|
|
|
|
|
[1mRegistered built-in resource type: cloud-topic[0m
|
|
|
|
|
[1mRegistered built-in resource type: cloud-container-repo[0m
|
|
|
|
|
[1mRegistered built-in resource type: cloud-container-cluster[0m
|
|
|
|
|
[1mRegistered built-in resource type: cloud-container-service[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-account[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-region[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-vpc[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-subnet[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-igw[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-nat-gw[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-route-table[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-nacl[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-security-group[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-alb[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-nlb[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-target-group[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-listener[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-ec2-instance[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-ami[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-launch-template[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-asg[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-s3-bucket[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-ebs-volume[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-efs-filesystem[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-iam-user[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-iam-role[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-iam-policy[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-iam-instance-profile[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-cloudwatch-log-group[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-cloudwatch-alarm[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-cloudwatch-metric[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-eventbridge-bus[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-eventbridge-rule[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-eventbridge-target[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-sqs-queue[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-sns-topic[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-sns-subscription[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-ecr-repo[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-ecs-cluster[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-ecs-service[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-ecs-task-def[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-eks-cluster[0m
|
|
|
|
|
[1mRegistered built-in resource type: aws-eks-nodegroup[0m
|
|
|
|
|
[1mRegistered built-in resource type: gcp[0m
|
|
|
|
|
[1mRegistered built-in resource type: azure[0m
|
|
|
|
|
[1mRegistered built-in resource type: container-runtime[0m
|
|
|
|
|
[1mRegistered built-in resource type: container-image[0m
|
|
|
|
|
[1mRegistered built-in resource type: container-mount[0m
|
|
|
|
|
[1mRegistered built-in resource type: container-exec-env[0m
|
|
|
|
|
[1mRegistered built-in resource type: container-port[0m
|
|
|
|
|
[1mRegistered built-in resource type: container-volume[0m
|
|
|
|
|
[1mRegistered built-in resource type: container-network[0m
|
|
|
|
|
[1mRegistered built-in resource type: postgres[0m
|
|
|
|
|
[1mRegistered built-in resource type: mysql[0m
|
|
|
|
|
[1mRegistered built-in resource type: sqlite[0m
|
|
|
|
|
[1mRegistered built-in resource type: duckdb[0m
|
|
|
|
|
[1mRegistered built-in resource type: file[0m
|
|
|
|
|
[1mRegistered built-in resource type: directory[0m
|
|
|
|
|
[1mRegistered built-in resource type: commit[0m
|
|
|
|
|
[1mRegistered built-in resource type: branch[0m
|
|
|
|
|
[1mRegistered built-in resource type: tag[0m
|
|
|
|
|
[1mRegistered built-in resource type: tree[0m
|
|
|
|
|
[1mRegistered built-in resource type: remote[0m
|
|
|
|
|
[1mRegistered built-in resource type: submodule[0m
|
|
|
|
|
[1mRegistered built-in resource type: symlink[0m
|
|
|
|
|
[1mRegistered built-in resource type: executable[0m
|
|
|
|
|
[1mRegistered built-in resource type: lsp-server[0m
|
|
|
|
|
[1mRegistered built-in resource type: lsp-workspace[0m
|
|
|
|
|
[1mRegistered built-in resource type: lsp-document[0m
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.created child_domain=uko-oo: parent_domain=uko-code:
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.insert_after after_level=MEMBER_LISTING domain=uko-oo: new_level=CLASS_HIERARCHY
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.insert_after after_level=SIGNATURES_WITH_DOCS domain=uko-oo: new_level=VISIBILITY_ANNOTATED
|
|
|
|
|
2026-04-13 07:00:43 [debug ] detail_level_map_builder.built domain=uko-oo: max_depth=11 num_levels=12
|
|
|
|
|
|
|
|
|
|
✗ Output Block 153
|
|
|
|
|
Overall summary:
|
|
|
|
|
6 features passed, 1 failed, 0 errored, 0 skipped
|
|
|
|
|
144 scenarios passed, 1 failed, 0 errored, 0 skipped
|
|
|
|
|
553 steps passed, 1 failed, 0 errored, 0 skipped
|
|
|
|
|
Took 2.366s
|
|
|
|
|
Wall time: 2m 47.786s
|
|
|
|
|
|
|
|
|
|
✗ nox > Running session unit_tests-3.13
|
|
|
|
|
nox > Running session unit_tests-3.13
|
|
|
|
|
nox > Reusing existing virtual environment at .nox/unit_tests-3-13.
|
|
|
|
|
nox > uv pip install -e '.[tests]'
|
|
|
|
|
nox > uv pip install setuptools wheel
|
|
|
|
|
nox > uv pip install .nox/unit_tests-3-13/tmp/behave-parallel-inprocess
|
|
|
|
|
nox > python scripts/create_template_db.py /tmp/impl-worker-7555-20260413/build/.template-migrated.db
|
|
|
|
|
nox > python -m compileall -q features/
|
|
|
|
|
nox > /tmp/impl-worker-7555-20260413/.nox/unit_tests-3-13/bin/behave-parallel -q --processes 32 features/container_clone_into.feature features/devcontainer_sandbox_strategy.feature features/devcontainer_state.feature features/devcontainer_handler.feature features/devcontainer_cleanup.feature features/resource_list_lifecycle_state.feature features/devcontainer_handler_protocol_methods.feature
|
|
|
|
|
nox > Command /tmp/impl-worker-7555-20260413/.nox/unit_tests-3-13/bin/behave-parallel -q --processes 32 features/container_clone_into.feature features/devcontainer_sandbox_strategy.feature features/devcontainer_state.feature features/devcontainer_handler.feature features/devcontainer_cleanup.feature features/resource_list_lifecycle_state.feature features/devcontainer_handler_protocol_methods.feature failed with exit code 1
|
|
|
|
|
nox > Session unit_tests-3.13 failed.
|
|
|
|
|
|
|
|
|
|
✗ Error Output
|
|
|
|
|
nox > Running session unit_tests-3.13
|
|
|
|
|
nox > Reusing existing virtual environment at .nox/unit_tests-3-13.
|
|
|
|
|
nox > uv pip install -e '.[tests]'
|
|
|
|
|
nox > uv pip install setuptools wheel
|
|
|
|
|
nox > uv pip install .nox/unit_tests-3-13/tmp/behave-parallel-inprocess
|
|
|
|
|
nox > python scripts/create_template_db.py /tmp/impl-worker-7555-20260413/build/.template-migrated.db
|
|
|
|
|
nox > python -m compileall -q features/
|
|
|
|
|
nox > /tmp/impl-worker-7555-20260413/.nox/unit_tests-3-13/bin/behave-parallel -q --processes 32 features/container_clone_into.feature features/devcontainer_sandbox_strategy.feature features/devcontainer_state.feature features/devcontainer_handler.feature features/devcontainer_cleanup.feature features/resource_list_lifecycle_state.feature features/devcontainer_handler_protocol_methods.feature
|
|
|
|
|
nox > Command /tmp/impl-worker-7555-20260413/.nox/unit_tests-3-13/bin/behave-parallel -q --processes 32 features/container_clone_into.feature features/devcontainer_sandbox_strategy.feature features/devcontainer_state.feature features/devcontainer_handler.feature features/devcontainer_cleanup.feature features/resource_list_lifecycle_state.feature features/devcontainer_handler_protocol_methods.feature failed with exit code 1
|
|
|
|
|
nox > Session unit_tests-3.13 failed.
|
|
|
|
|
|
|
|
|
|
|