worker: verify internal sub-worker scope reclaim
This commit is contained in:
@@ -349,9 +349,8 @@ impl Tool for SubWorkerSpawnTool {
|
|||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
.map_err(|error| ToolError::ExecutionFailed(format!("build Internal Worker: {error}")))?;
|
.map_err(|error| ToolError::ExecutionFailed(format!("build Internal Worker: {error}")))?;
|
||||||
let child_scope = child.scope_handle();
|
let child_scope = child.scope().clone();
|
||||||
let child_registry =
|
let child_registry = SpawnedWorkerRegistry::new_internal(input.name.clone(), child_scope);
|
||||||
SpawnedWorkerRegistry::new_internal(input.name.clone(), child_scope);
|
|
||||||
register_worker_tools(
|
register_worker_tools(
|
||||||
&mut child,
|
&mut child,
|
||||||
self.runtime_base
|
self.runtime_base
|
||||||
@@ -837,7 +836,7 @@ mod tests {
|
|||||||
let runtime = TempDir::new().unwrap();
|
let runtime = TempDir::new().unwrap();
|
||||||
let mut manifest = parent_manifest(&workspace_root, None);
|
let mut manifest = parent_manifest(&workspace_root, None);
|
||||||
manifest.delegation_scope = ScopeConfig {
|
manifest.delegation_scope = ScopeConfig {
|
||||||
allow: vec![abs_rule(&workspace_root, Permission::Read)],
|
allow: vec![abs_rule(&workspace_root, Permission::Write)],
|
||||||
deny: Vec::new(),
|
deny: Vec::new(),
|
||||||
};
|
};
|
||||||
let spawner_scope = SharedScope::new(Scope::from_config(&manifest.scope).unwrap());
|
let spawner_scope = SharedScope::new(Scope::from_config(&manifest.scope).unwrap());
|
||||||
@@ -858,7 +857,7 @@ mod tests {
|
|||||||
registry.clone(),
|
registry.clone(),
|
||||||
manifest.clone(),
|
manifest.clone(),
|
||||||
AvailableProfiles::discover(&workspace_root),
|
AvailableProfiles::discover(&workspace_root),
|
||||||
spawner_scope,
|
spawner_scope.clone(),
|
||||||
DelegationScope::from_config(&manifest.delegation_scope).unwrap(),
|
DelegationScope::from_config(&manifest.delegation_scope).unwrap(),
|
||||||
)
|
)
|
||||||
.with_internal_client(Box::new(ScriptedInternalClient {
|
.with_internal_client(Box::new(ScriptedInternalClient {
|
||||||
@@ -869,12 +868,14 @@ mod tests {
|
|||||||
"profile": "builtin:reviewer",
|
"profile": "builtin:reviewer",
|
||||||
"task": "review immutable commit",
|
"task": "review immutable commit",
|
||||||
"scope": [{
|
"scope": [{
|
||||||
"target": workspace_root,
|
"target": workspace_root.clone(),
|
||||||
"permission": "read",
|
"permission": "write",
|
||||||
"recursive": true
|
"recursive": true
|
||||||
}]
|
}]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
assert!(spawner_scope.snapshot().is_writable(&workspace_root));
|
||||||
|
|
||||||
let output = tool
|
let output = tool
|
||||||
.execute(
|
.execute(
|
||||||
&serde_json::to_string(&input).unwrap(),
|
&serde_json::to_string(&input).unwrap(),
|
||||||
@@ -883,6 +884,7 @@ mod tests {
|
|||||||
.await
|
.await
|
||||||
.expect("spawn project reviewer as Internal Worker");
|
.expect("spawn project reviewer as Internal Worker");
|
||||||
assert!(output.summary.contains("internal worker `reviewer-child`"));
|
assert!(output.summary.contains("internal worker `reviewer-child`"));
|
||||||
|
assert!(!spawner_scope.snapshot().is_writable(&workspace_root));
|
||||||
let record = registry
|
let record = registry
|
||||||
.get_internal("reviewer-child")
|
.get_internal("reviewer-child")
|
||||||
.expect("Internal reviewer registry record");
|
.expect("Internal reviewer registry record");
|
||||||
@@ -939,6 +941,7 @@ mod tests {
|
|||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert!(registry.get_internal("reviewer-child").is_none());
|
assert!(registry.get_internal("reviewer-child").is_none());
|
||||||
|
assert!(spawner_scope.snapshot().is_writable(&workspace_root));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
Reference in New Issue
Block a user