use std::time::Duration;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = routa_server::ServerConfig {
host: "127.0.0.1".to_string(),
port: 0, db_path: ":memory:".to_string(),
static_dir: None,
};
let addr = routa_server::start_server(config).await?;
println!("Server started on {addr}");
tokio::time::sleep(Duration::from_millis(200)).await;
let client = reqwest::Client::new();
let base = format!("http://{addr}");
println!("\n=== Test 1: GET /api/rpc/methods ===");
let res = client.get(format!("{base}/api/rpc/methods")).send().await?;
let body: serde_json::Value = res.json().await?;
println!("{}", serde_json::to_string_pretty(&body)?);
println!("\n=== Test 2: agents.list ===");
let res = client
.post(format!("{base}/api/rpc"))
.json(&serde_json::json!({
"jsonrpc": "2.0",
"id": 1,
"method": "agents.list",
"params": { "workspaceId": "default" }
}))
.send()
.await?;
let body: serde_json::Value = res.json().await?;
println!("{}", serde_json::to_string_pretty(&body)?);
println!("\n=== Test 3: agents.create ===");
let res = client
.post(format!("{base}/api/rpc"))
.json(&serde_json::json!({
"jsonrpc": "2.0",
"id": 2,
"method": "agents.create",
"params": {
"name": "Test Agent",
"role": "DEVELOPER"
}
}))
.send()
.await?;
let body: serde_json::Value = res.json().await?;
println!("{}", serde_json::to_string_pretty(&body)?);
let agent_id = body["result"]["agentId"].as_str().unwrap_or("");
println!("\n=== Test 4: agents.get ===");
let res = client
.post(format!("{base}/api/rpc"))
.json(&serde_json::json!({
"jsonrpc": "2.0",
"id": 3,
"method": "agents.get",
"params": { "id": agent_id }
}))
.send()
.await?;
let body: serde_json::Value = res.json().await?;
println!("{}", serde_json::to_string_pretty(&body)?);
println!("\n=== Test 5: workspaces.list ===");
let res = client
.post(format!("{base}/api/rpc"))
.json(&serde_json::json!({
"jsonrpc": "2.0",
"id": 4,
"method": "workspaces.list"
}))
.send()
.await?;
let body: serde_json::Value = res.json().await?;
println!("{}", serde_json::to_string_pretty(&body)?);
println!("\n=== Test 6: Method not found ===");
let res = client
.post(format!("{base}/api/rpc"))
.json(&serde_json::json!({
"jsonrpc": "2.0",
"id": 5,
"method": "nonexistent.method"
}))
.send()
.await?;
let body: serde_json::Value = res.json().await?;
println!("{}", serde_json::to_string_pretty(&body)?);
println!("\n=== Test 7: tasks.create ===");
let res = client
.post(format!("{base}/api/rpc"))
.json(&serde_json::json!({
"jsonrpc": "2.0",
"id": 6,
"method": "tasks.create",
"params": {
"title": "Test Task",
"objective": "Verify JSON-RPC works"
}
}))
.send()
.await?;
let body: serde_json::Value = res.json().await?;
println!("{}", serde_json::to_string_pretty(&body)?);
println!("\n=== Test 8: tasks.list ===");
let res = client
.post(format!("{base}/api/rpc"))
.json(&serde_json::json!({
"jsonrpc": "2.0",
"id": 7,
"method": "tasks.list",
"params": { "workspaceId": "default" }
}))
.send()
.await?;
let body: serde_json::Value = res.json().await?;
println!("{}", serde_json::to_string_pretty(&body)?);
println!("\n=== All tests passed! ===");
Ok(())
}