test: preserve saved policy fixtures and uncertain Plugin cancellation evidence
This commit is contained in:
@@ -520,7 +520,7 @@ async fn backend_control_grant_does_not_replace_exact_operation_use_permission()
|
|||||||
wrong_workspace,
|
wrong_workspace,
|
||||||
] {
|
] {
|
||||||
permissions.push(workspace_permission("worker.create"));
|
permissions.push(workspace_permission("worker.create"));
|
||||||
f.assign(permissions, vec![]).await;
|
f.seed_saved_policy(permissions, vec![]);
|
||||||
assert_backend_denied(&f, &f.source, &target, Some(StatusCode::FORBIDDEN)).await;
|
assert_backend_denied(&f, &f.source, &target, Some(StatusCode::FORBIDDEN)).await;
|
||||||
}
|
}
|
||||||
f.assign(vec![operation_permission("worker.messaging")], vec![])
|
f.assign(vec![operation_permission("worker.messaging")], vec![])
|
||||||
@@ -604,7 +604,7 @@ async fn saved_targeted_message_permissions_preserve_target_direction_and_reject
|
|||||||
let target = f.child("saved-target", vec![]).await;
|
let target = f.child("saved-target", vec![]).await;
|
||||||
let other = f.child("saved-other-target", vec![]).await;
|
let other = f.child("saved-other-target", vec![]).await;
|
||||||
let saved = target_permission(legacy, &target);
|
let saved = target_permission(legacy, &target);
|
||||||
let policy = f.assign(vec![saved.clone()], vec![]).await;
|
let policy = f.seed_saved_policy(vec![saved.clone()], vec![]);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
policy.execution,
|
policy.execution,
|
||||||
vec![saved.clone()],
|
vec![saved.clone()],
|
||||||
|
|||||||
@@ -1012,18 +1012,23 @@ mod plugin_controller_tests {
|
|||||||
.unwrap();
|
.unwrap();
|
||||||
finish(&mut connection, protocol::RunResult::Cancelled).await;
|
finish(&mut connection, protocol::RunResult::Cancelled).await;
|
||||||
peer.closed().await;
|
peer.closed().await;
|
||||||
let cancelled: bool = f
|
// The Controller bounds cancellation acknowledgement. If the owner call
|
||||||
.api
|
// misses that deadline, cancellation is unknown, not confirmed. In both
|
||||||
.config_store
|
// cases the already-admitted effect must remain consumed and may never
|
||||||
.with_conn(|conn| {
|
// expose a successful response or be re-keyed on restore.
|
||||||
Ok(conn.query_row(
|
let (state, response, error): (String, Option<u16>, Option<String>) = f.api.config_store.with_conn(|conn| {
|
||||||
"SELECT cancelled FROM plugin_invocations WHERE workspace_id=?1 AND invocation_id=?2",
|
Ok(conn.query_row("SELECT state,response_status,error_json FROM plugin_effect_receipts WHERE workspace_id=?1 AND invocation_id=?2 AND effect_key='status-v1'",
|
||||||
rusqlite::params![TEST_WORKSPACE_ID, effect.0], |row| row.get(0))?)
|
rusqlite::params![TEST_WORKSPACE_ID, effect.0], |row| Ok((row.get(0)?, row.get(1)?, row.get(2)?)))?)
|
||||||
})
|
}).unwrap();
|
||||||
.unwrap();
|
assert!(matches!(state.as_str(), "pending" | "completed"));
|
||||||
assert!(
|
assert!(
|
||||||
cancelled,
|
response.is_none(),
|
||||||
"Controller cancellation must reach the durable Host owner"
|
"cancelled submission must not publish an HTTPS success"
|
||||||
|
);
|
||||||
|
let error: server_api::PluginHostError = serde_json::from_str(&error.unwrap()).unwrap();
|
||||||
|
assert_eq!(
|
||||||
|
error.effect,
|
||||||
|
server_api::PluginEffectObservation::Indeterminate
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
f.requests.lock().unwrap().len(),
|
f.requests.lock().unwrap().len(),
|
||||||
|
|||||||
Reference in New Issue
Block a user