feat: ToolError migration to ErrorData (#4051)

This commit is contained in:
Alex Hancock
2025-08-12 16:18:41 -04:00
committed by GitHub
parent 88b013194c
commit bd1eff52a4
35 changed files with 2459 additions and 1336 deletions
+43 -33
View File
@@ -1,6 +1,6 @@
#![cfg(test)]
use mcp_core::ToolError;
use rmcp::model::ErrorCode;
use serde_json::json;
use goose::agents::platform_tools::PLATFORM_MANAGE_SCHEDULE_TOOL_NAME;
@@ -94,9 +94,10 @@ async fn test_schedule_tool_list_action_error() {
.await;
assert!(result.is_err());
if let Err(ToolError::ExecutionError(msg)) = result {
assert!(msg.contains("Failed to list jobs"));
assert!(msg.contains("Database error"));
if let Err(err) = result {
assert_eq!(err.code, ErrorCode::INTERNAL_ERROR);
assert!(err.message.contains("Failed to list jobs"));
assert!(err.message.contains("Database error"));
} else {
panic!("Expected ExecutionError");
}
@@ -153,8 +154,9 @@ async fn test_schedule_tool_create_action_missing_params() {
.await;
assert!(result.is_err());
if let Err(ToolError::ExecutionError(msg)) = result {
assert!(msg.contains("Missing 'recipe_path' parameter"));
if let Err(err) = result {
assert_eq!(err.code, ErrorCode::INVALID_PARAMS);
assert!(err.message.contains("Missing 'recipe_path' parameter"));
} else {
panic!("Expected ExecutionError");
}
@@ -171,8 +173,9 @@ async fn test_schedule_tool_create_action_missing_params() {
.await;
assert!(result.is_err());
if let Err(ToolError::ExecutionError(msg)) = result {
assert!(msg.contains("Missing 'cron_expression' parameter"));
if let Err(err) = result {
assert_eq!(err.code, ErrorCode::INVALID_PARAMS);
assert!(err.message.contains("Missing 'cron_expression' parameter"));
} else {
panic!("Expected ExecutionError");
}
@@ -194,8 +197,9 @@ async fn test_schedule_tool_create_action_nonexistent_recipe() {
.await;
assert!(result.is_err());
if let Err(ToolError::ExecutionError(msg)) = result {
assert!(msg.contains("Recipe file not found"));
if let Err(err) = result {
assert_eq!(err.code, ErrorCode::INTERNAL_ERROR);
assert!(err.message.contains("Recipe file not found"));
} else {
panic!("Expected ExecutionError");
}
@@ -220,8 +224,9 @@ async fn test_schedule_tool_create_action_invalid_recipe() {
.await;
assert!(result.is_err());
if let Err(ToolError::ExecutionError(msg)) = result {
assert!(msg.contains("Invalid JSON recipe"));
if let Err(err) = result {
assert_eq!(err.code, ErrorCode::INTERNAL_ERROR);
assert!(err.message.contains("Invalid JSON recipe"));
} else {
panic!("Expected ExecutionError");
}
@@ -253,9 +258,10 @@ async fn test_schedule_tool_create_action_scheduler_error() {
.await;
assert!(result.is_err());
if let Err(ToolError::ExecutionError(msg)) = result {
assert!(msg.contains("Failed to create job"));
assert!(msg.contains("job1"));
if let Err(err) = result {
assert_eq!(err.code, ErrorCode::INTERNAL_ERROR);
assert!(err.message.contains("Failed to create job"));
assert!(err.message.contains("job1"));
} else {
panic!("Expected ExecutionError");
}
@@ -311,8 +317,9 @@ async fn test_schedule_tool_run_now_action_missing_job_id() {
.await;
assert!(result.is_err());
if let Err(ToolError::ExecutionError(msg)) = result {
assert!(msg.contains("Missing 'job_id' parameter"));
if let Err(err) = result {
assert_eq!(err.code, ErrorCode::INVALID_PARAMS);
assert!(err.message.contains("Missing 'job_id' parameter"));
} else {
panic!("Expected ExecutionError");
}
@@ -337,9 +344,9 @@ async fn test_schedule_tool_run_now_action_nonexistent_job() {
.await;
assert!(result.is_err());
if let Err(ToolError::ExecutionError(msg)) = result {
assert!(msg.contains("Failed to run job"));
assert!(msg.contains("nonexistent"));
if let Err(err) = result {
assert!(err.message.contains("Failed to run job"));
assert!(err.message.contains("nonexistent"));
} else {
panic!("Expected ExecutionError");
}
@@ -391,10 +398,11 @@ async fn test_schedule_tool_pause_action_missing_job_id() {
let result = agent
.handle_schedule_management(arguments, "test_req".to_string())
.await;
assert!(result.is_err());
if let Err(ToolError::ExecutionError(msg)) = result {
assert!(msg.contains("Missing 'job_id' parameter"));
if let Err(err) = result {
assert!(err.message.contains("Missing 'job_id' parameter"));
} else {
panic!("Expected ExecutionError");
}
@@ -422,9 +430,9 @@ async fn test_schedule_tool_pause_action_running_job() {
.await;
assert!(result.is_err());
if let Err(ToolError::ExecutionError(msg)) = result {
assert!(msg.contains("Failed to pause job"));
assert!(msg.contains("job1"));
if let Err(err) = result {
assert!(err.message.contains("Failed to pause job"));
assert!(err.message.contains("job1"));
} else {
panic!("Expected ExecutionError");
}
@@ -551,8 +559,8 @@ async fn test_schedule_tool_kill_action_not_running() {
.await;
assert!(result.is_err());
if let Err(ToolError::ExecutionError(msg)) = result {
assert!(msg.contains("Failed to kill job"));
if let Err(err) = result {
assert!(err.message.contains("Failed to kill job"));
} else {
panic!("Expected ExecutionError");
}
@@ -764,8 +772,10 @@ async fn test_schedule_tool_session_content_action() {
.await;
assert!(result.is_err());
if let Err(ToolError::ExecutionError(msg)) = result {
assert!(msg.contains("Session 'non_existent_session' not found"));
if let Err(err) = result {
assert!(err
.message
.contains("Session 'non_existent_session' not found"));
} else {
panic!("Expected ExecutionError");
}
@@ -840,8 +850,8 @@ async fn test_schedule_tool_session_content_action_missing_session_id() {
.await;
assert!(result.is_err());
if let Err(ToolError::ExecutionError(msg)) = result {
assert!(msg.contains("Missing 'session_id' parameter"));
if let Err(err) = result {
assert!(err.message.contains("Missing 'session_id' parameter"));
} else {
panic!("Expected ExecutionError");
}
@@ -861,8 +871,8 @@ async fn test_schedule_tool_unknown_action() {
.await;
assert!(result.is_err());
if let Err(ToolError::ExecutionError(msg)) = result {
assert!(msg.contains("Unknown action"));
if let Err(err) = result {
assert!(err.message.contains("Unknown action"));
} else {
panic!("Expected ExecutionError");
}