fix: try to fix flakiness in test_shell_command_approval_triggers_elicitation

This commit is contained in:
Michael Bolin
2025-08-14 23:10:07 -07:00
parent 917e29803b
commit 6d92c0c0de
2 changed files with 49 additions and 0 deletions

View File

@@ -114,6 +114,13 @@ async fn shell_command_approval_triggers_elicitation() -> anyhow::Result<()> {
)
.await?;
// Verify task_complete notification arrives before the tool call completes.
let _task_complete = timeout(
DEFAULT_READ_TIMEOUT,
mcp_process.read_stream_until_legacy_task_complete_notification(),
)
.await??;
// Verify the original `codex` tool call completes and that `git init` ran
// successfully.
let codex_response = timeout(

View File

@@ -474,4 +474,46 @@ impl McpProcess {
}))
.await
}
/// Reads notifications until a legacy TaskComplete event is observed:
/// Method "codex/event" with params.msg.type == "task_complete".
pub async fn read_stream_until_legacy_task_complete_notification(
&mut self,
) -> anyhow::Result<JSONRPCNotification> {
loop {
let message = self.read_jsonrpc_message().await?;
eprint!("message: {message:?}");
match message {
JSONRPCMessage::Notification(notification) => {
let is_match = if notification.method == "codex/event" {
if let Some(params) = &notification.params {
params
.get("msg")
.and_then(|m| m.get("type"))
.and_then(|t| t.as_str())
== Some("task_complete")
} else {
false
}
} else {
false
};
if is_match {
return Ok(notification);
}
}
JSONRPCMessage::Request(_) => {
anyhow::bail!("unexpected JSONRPCMessage::Request: {message:?}");
}
JSONRPCMessage::Error(_) => {
anyhow::bail!("unexpected JSONRPCMessage::Error: {message:?}");
}
JSONRPCMessage::Response(_) => {
anyhow::bail!("unexpected JSONRPCMessage::Response: {message:?}");
}
}
}
}
}