Fix Issue #12 tests and add OpenBrain repo guidance

This commit is contained in:
Agent Zero
2026-03-19 13:19:50 -04:00
parent 03e8f246d1
commit 1b42989dbb
4 changed files with 241 additions and 47 deletions

View File

@@ -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(())
}