summaryrefslogtreecommitdiff
path: root/tests/mcp_protocol_test.py
diff options
context:
space:
mode:
authortanaka takashi <isazaka@gmail.com>2026-06-30 23:55:29 +0900
committertanaka takashi <isazaka@gmail.com>2026-06-30 23:55:29 +0900
commite3db01cd487c5b666366885367c8bfff4a6a09da (patch)
treec5b24d79daeb017d87d3520b82d1de31358e5974 /tests/mcp_protocol_test.py
parentac4dd6ad07d2d9048c3177dc4f3df42146268233 (diff)
検索インデックスのhash table化
Diffstat (limited to 'tests/mcp_protocol_test.py')
-rw-r--r--tests/mcp_protocol_test.py37
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/mcp_protocol_test.py b/tests/mcp_protocol_test.py
index 118043f..f739168 100644
--- a/tests/mcp_protocol_test.py
+++ b/tests/mcp_protocol_test.py
@@ -81,6 +81,15 @@ def tool_payload(response: Mapping[str, Any], expect_error: bool = False) -> dic
return json.loads(result["content"][0]["text"])
+def assert_stable_recency_order(messages: list[dict[str, Any]]) -> None:
+ for left, right in zip(messages, messages[1:]):
+ left_time = int(left["timestamp"])
+ right_time = int(right["timestamp"])
+ assert left_time > right_time or (
+ left_time == right_time and left["message_id"] <= right["message_id"]
+ ), (left, right)
+
+
def main() -> None:
parser = argparse.ArgumentParser()
parser.add_argument("--server", type=Path, required=True)
@@ -156,6 +165,22 @@ def main() -> None:
next_id += 1
assert len(history) == 20
+ ranked = tool_payload(
+ tool_call(
+ server,
+ next_id,
+ "search_messages",
+ {"query": "needle target", "limit": 100},
+ )
+ )["results"]
+ next_id += 1
+ assert len(ranked) == 30
+ assert all(item["session_id"] == "target" for item in ranked[:20])
+ assert all(item["session_id"] == "other" for item in ranked[20:])
+ assert_stable_recency_order(ranked[:20])
+ assert_stable_recency_order(ranked[20:])
+ ranked_ids_before = [item["message_id"] for item in ranked]
+
for index in range(args.iterations):
arguments: dict[str, Any] = {"query": "needle"}
if index % 2:
@@ -192,6 +217,18 @@ def main() -> None:
next_id += 1
tool_payload(tool_call(server, next_id, "rebuild_index", {}))
next_id += 1
+ ranked_after_rebuild = tool_payload(
+ tool_call(
+ server,
+ next_id,
+ "search_messages",
+ {"query": "needle target", "limit": 100},
+ )
+ )["results"]
+ next_id += 1
+ assert [item["message_id"] for item in ranked_after_rebuild] == [
+ message_id for message_id in ranked_ids_before if message_id != message_ids[0]
+ ]
assert tool_payload(tool_call(server, next_id, "get_system_health", {}))["status"] == "OK"
next_id += 1