use matrixcode_core::mcp::{McpServerConfig, McpToolRegistry};
use std::sync::Arc;
use tokio::sync::RwLock;
#[tokio::test]
async fn test_registry_basic() {
let mut registry = McpToolRegistry::new();
println!("✅ McpToolRegistry 创建成功");
let config = McpServerConfig::stdio("npx", vec!["-y".into(), "@playwright/mcp@latest".into()]);
registry.add_server("playwright".into(), config);
println!("✅ 添加 server 成功");
let status = registry.server_status().await;
assert_eq!(status.len(), 1);
assert!(status.contains_key("playwright"));
println!("✅ server_status() 工作正常");
}
#[tokio::test]
async fn test_registry_multiple_servers() {
let mut registry = McpToolRegistry::new();
registry.add_server(
"playwright".into(),
McpServerConfig::stdio("npx", vec!["-y".into(), "@playwright/mcp@latest".into()]),
);
registry.add_server(
"filesystem".into(),
McpServerConfig::stdio(
"npx",
vec![
"-y".into(),
"@modelcontextprotocol/server-filesystem".into(),
],
),
);
let status = registry.server_status().await;
assert_eq!(status.len(), 2);
println!("✅ 多 server 管理");
}
#[tokio::test]
async fn test_registry_remove_server() {
let mut registry = McpToolRegistry::new();
registry.add_server(
"playwright".into(),
McpServerConfig::stdio("npx", vec!["-y".into(), "@playwright/mcp@latest".into()]),
);
assert_eq!(registry.server_status().await.len(), 1);
registry.remove_server("playwright").await;
assert_eq!(registry.server_status().await.len(), 0);
println!("✅ remove_server() 工作正常");
}
#[tokio::test]
async fn test_registry_wrapped() {
let registry = Arc::new(RwLock::new(McpToolRegistry::new()));
{
let mut reg = registry.write().await;
reg.add_server(
"playwright".into(),
McpServerConfig::stdio("npx", vec!["-y".into(), "@playwright/mcp@latest".into()]),
);
}
{
let reg = registry.read().await;
assert_eq!(reg.server_status().await.len(), 1);
println!("✅ Arc<RwLock<McpToolRegistry>> 包装工作正常");
}
}
#[tokio::test]
async fn test_cli_arg_parsing() {
let mut registry = McpToolRegistry::new();
registry
.add_from_cli_arg("playwright:npx -y @playwright/mcp@latest")
.unwrap();
registry
.add_from_cli_arg("npx -y @modelcontextprotocol/server-filesystem")
.unwrap();
let status = registry.server_status().await;
assert_eq!(status.len(), 2);
println!("✅ CLI 参数解析工作正常");
}
#[tokio::test]
async fn test_event_system() {
use matrixcode_core::event::{AgentEvent, EventType, McpServerInfo};
let event = AgentEvent::mcp_server_added("test", 5);
assert_eq!(event.event_type, EventType::McpServerAdded);
let event = AgentEvent::mcp_server_removed("test");
assert_eq!(event.event_type, EventType::McpServerRemoved);
let infos = vec![
McpServerInfo::new("playwright", true, 10),
McpServerInfo::new("filesystem", false, 0),
];
let event = AgentEvent::mcp_server_status(infos);
assert_eq!(event.event_type, EventType::McpServerStatus);
println!("✅ MCP 事件系统工作正常");
}