mirror of
https://gitea.ingwaz.work/Ingwaz/openbrain-mcp.git
synced 2026-03-31 14:49:06 +00:00
Fix Issue #12 tests and add OpenBrain repo guidance
This commit is contained in:
164
tests/e2e_mcp.rs
164
tests/e2e_mcp.rs
@@ -879,60 +879,155 @@ async fn e2e_auth_enabled_accepts_test_key() {
|
||||
|
||||
#[tokio::test]
|
||||
async fn e2e_batch_store_basic() -> anyhow::Result<()> {
|
||||
let agent = format!("batch_{}", uuid::Uuid::new_v4());
|
||||
let _ = db.purge_memories(&agent, None).await;
|
||||
let base = base_url();
|
||||
let client = reqwest::Client::builder()
|
||||
.timeout(Duration::from_secs(20))
|
||||
.build()
|
||||
.expect("reqwest client");
|
||||
|
||||
let resp = client.call_tool("batch_store", serde_json::json!({
|
||||
"agent_id": agent.clone(),
|
||||
ensure_schema().await;
|
||||
wait_until_ready(&client, &base).await;
|
||||
|
||||
let agent = format!("batch_{}", uuid::Uuid::new_v4());
|
||||
let _ = call_tool(&client, &base, "purge", json!({ "agent_id": agent, "confirm": true })).await;
|
||||
|
||||
let result = call_tool(&client, &base, "batch_store", serde_json::json!({
|
||||
"agent_id": agent,
|
||||
"entries": [
|
||||
{"content": "Fact alpha for batch test"},
|
||||
{"content": "Fact beta for batch test"},
|
||||
{"content": "Fact gamma for batch test"}
|
||||
]
|
||||
})).await?;
|
||||
})).await;
|
||||
|
||||
let result: Value = serde_json::from_str(&resp.content[0].text)?;
|
||||
assert!(result["success"].as_bool().unwrap_or(false));
|
||||
assert_eq!(result["count"].as_i64().unwrap_or(0), 3);
|
||||
|
||||
db.purge_memories(&agent, None).await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn e2e_batch_store_empty_rejected() -> anyhow::Result<()> {
|
||||
let resp = client.call_tool("batch_store", serde_json::json!({
|
||||
"entries": []
|
||||
})).await;
|
||||
assert!(resp.is_err() || resp.as_ref().unwrap().is_error());
|
||||
let base = base_url();
|
||||
let client = reqwest::Client::builder()
|
||||
.timeout(Duration::from_secs(20))
|
||||
.build()
|
||||
.expect("reqwest client");
|
||||
|
||||
wait_until_ready(&client, &base).await;
|
||||
|
||||
let response = call_jsonrpc(
|
||||
&client,
|
||||
&base,
|
||||
json!({
|
||||
"jsonrpc": "2.0",
|
||||
"id": "batch-empty-1",
|
||||
"method": "tools/call",
|
||||
"params": {
|
||||
"name": "batch_store",
|
||||
"arguments": {
|
||||
"entries": []
|
||||
}
|
||||
}
|
||||
}),
|
||||
)
|
||||
.await;
|
||||
|
||||
assert!(response.get("error").is_some(), "empty batch_store should return an error");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn e2e_batch_store_exceeds_max() -> anyhow::Result<()> {
|
||||
let base = base_url();
|
||||
let client = reqwest::Client::builder()
|
||||
.timeout(Duration::from_secs(20))
|
||||
.build()
|
||||
.expect("reqwest client");
|
||||
|
||||
wait_until_ready(&client, &base).await;
|
||||
|
||||
let entries: Vec<Value> = (0..51).map(|i| serde_json::json!({"content": format!("Entry {}", i)})).collect();
|
||||
let resp = client.call_tool("batch_store", serde_json::json!({
|
||||
"entries": entries
|
||||
})).await;
|
||||
assert!(resp.is_err() || resp.as_ref().unwrap().is_error());
|
||||
let response = call_jsonrpc(
|
||||
&client,
|
||||
&base,
|
||||
json!({
|
||||
"jsonrpc": "2.0",
|
||||
"id": "batch-too-large-1",
|
||||
"method": "tools/call",
|
||||
"params": {
|
||||
"name": "batch_store",
|
||||
"arguments": {
|
||||
"entries": entries
|
||||
}
|
||||
}
|
||||
}),
|
||||
)
|
||||
.await;
|
||||
|
||||
assert!(response.get("error").is_some(), "oversized batch_store should return an error");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn e2e_batch_store_missing_content() -> anyhow::Result<()> {
|
||||
let resp = client.call_tool("batch_store", serde_json::json!({
|
||||
"entries": [{"content": "Valid entry"}, {"metadata": {}}]
|
||||
})).await;
|
||||
assert!(resp.is_err() || resp.as_ref().unwrap().is_error());
|
||||
let base = base_url();
|
||||
let client = reqwest::Client::builder()
|
||||
.timeout(Duration::from_secs(20))
|
||||
.build()
|
||||
.expect("reqwest client");
|
||||
|
||||
wait_until_ready(&client, &base).await;
|
||||
|
||||
let response = call_jsonrpc(
|
||||
&client,
|
||||
&base,
|
||||
json!({
|
||||
"jsonrpc": "2.0",
|
||||
"id": "batch-missing-content-1",
|
||||
"method": "tools/call",
|
||||
"params": {
|
||||
"name": "batch_store",
|
||||
"arguments": {
|
||||
"entries": [{"content": "Valid entry"}, {"metadata": {}}]
|
||||
}
|
||||
}
|
||||
}),
|
||||
)
|
||||
.await;
|
||||
|
||||
assert!(response.get("error").is_some(), "missing batch entry content should return an error");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn e2e_batch_store_appears_in_tools() -> anyhow::Result<()> {
|
||||
let tools = client.list_tools().await?;
|
||||
let parsed: Value = serde_json::from_str(&tools.content[0].text)?;
|
||||
let names: Vec<&str> = parsed.as_array().unwrap().iter()
|
||||
.filter_map(|t| t.get("name").and_then(|n| n.as_str()))
|
||||
let base = base_url();
|
||||
let client = reqwest::Client::builder()
|
||||
.timeout(Duration::from_secs(20))
|
||||
.build()
|
||||
.expect("reqwest client");
|
||||
|
||||
wait_until_ready(&client, &base).await;
|
||||
|
||||
let response = call_jsonrpc(
|
||||
&client,
|
||||
&base,
|
||||
json!({
|
||||
"jsonrpc": "2.0",
|
||||
"id": "batch-tools-list-1",
|
||||
"method": "tools/list",
|
||||
"params": {}
|
||||
}),
|
||||
)
|
||||
.await;
|
||||
|
||||
let names: Vec<&str> = response
|
||||
.get("result")
|
||||
.and_then(|value| value.get("tools"))
|
||||
.and_then(Value::as_array)
|
||||
.expect("tools/list result.tools")
|
||||
.iter()
|
||||
.filter_map(|t| t.get("name").and_then(Value::as_str))
|
||||
.collect();
|
||||
assert!(names.contains(&"batch_store"));
|
||||
Ok(())
|
||||
@@ -940,14 +1035,23 @@ async fn e2e_batch_store_appears_in_tools() -> anyhow::Result<()> {
|
||||
|
||||
#[tokio::test]
|
||||
async fn e2e_existing_store_unchanged() -> anyhow::Result<()> {
|
||||
let base = base_url();
|
||||
let client = reqwest::Client::builder()
|
||||
.timeout(Duration::from_secs(20))
|
||||
.build()
|
||||
.expect("reqwest client");
|
||||
|
||||
ensure_schema().await;
|
||||
wait_until_ready(&client, &base).await;
|
||||
|
||||
let agent = format!("compat_{}", uuid::Uuid::new_v4());
|
||||
let _ = db.purge_memories(&agent, None).await;
|
||||
let resp = client.call_tool("store", serde_json::json!({
|
||||
"agent_id": agent.clone(),
|
||||
let _ = call_tool(&client, &base, "purge", json!({ "agent_id": agent, "confirm": true })).await;
|
||||
|
||||
let result = call_tool(&client, &base, "store", serde_json::json!({
|
||||
"agent_id": agent,
|
||||
"content": "Original store still works"
|
||||
})).await?;
|
||||
let result: Value = serde_json::from_str(&resp.content[0].text)?;
|
||||
})).await;
|
||||
|
||||
assert!(result["success"].as_bool().unwrap_or(false));
|
||||
db.purge_memories(&agent, None).await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user