summaryrefslogtreecommitdiff
path: root/tests/Agent.Core.Tests/PersistentMcpTaskStoreTests.cs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/Agent.Core.Tests/PersistentMcpTaskStoreTests.cs')
-rw-r--r--tests/Agent.Core.Tests/PersistentMcpTaskStoreTests.cs36
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/Agent.Core.Tests/PersistentMcpTaskStoreTests.cs b/tests/Agent.Core.Tests/PersistentMcpTaskStoreTests.cs
new file mode 100644
index 0000000..2b43459
--- /dev/null
+++ b/tests/Agent.Core.Tests/PersistentMcpTaskStoreTests.cs
@@ -0,0 +1,36 @@
+using System.Text.Json;
+using Agent.Mcp;
+using ModelContextProtocol.Extensions.Tasks;
+
+namespace Agent.Core.Tests;
+
+public sealed class PersistentMcpTaskStoreTests
+{
+ [Fact]
+ public async Task Persists_terminal_task_and_marks_incomplete_task_failed_after_restart()
+ {
+ using var directory = new TestDirectory();
+ var settings = new McpTaskStoreSettings(directory.Path, TimeSpan.FromHours(24), 1000);
+ var first = new PersistentMcpTaskStore(settings);
+ McpTaskInfo completed = await first.CreateTaskAsync(TestContext.Current.CancellationToken);
+ await first.SetCompletedAsync(completed.TaskId, JsonSerializer.SerializeToElement(new { ok = true }), TestContext.Current.CancellationToken);
+ McpTaskInfo working = await first.CreateTaskAsync(TestContext.Current.CancellationToken);
+
+ var recovered = new PersistentMcpTaskStore(settings);
+ Assert.Equal(McpTaskStatus.Completed, (await recovered.GetTaskAsync(completed.TaskId, TestContext.Current.CancellationToken))!.Status);
+ McpTaskInfo failed = (await recovered.GetTaskAsync(working.TaskId, TestContext.Current.CancellationToken))!;
+ Assert.Equal(McpTaskStatus.Failed, failed.Status);
+ Assert.Equal("server_restarted", failed.StatusMessage);
+ }
+
+ [Fact]
+ public async Task Expired_task_is_removed()
+ {
+ using var directory = new TestDirectory();
+ var store = new PersistentMcpTaskStore(new McpTaskStoreSettings(directory.Path, TimeSpan.FromMilliseconds(1), 1000));
+ McpTaskInfo task = await store.CreateTaskAsync(TestContext.Current.CancellationToken);
+ await Task.Delay(20, TestContext.Current.CancellationToken);
+ Assert.Null(await store.GetTaskAsync(task.TaskId, TestContext.Current.CancellationToken));
+ Assert.Empty(Directory.EnumerateFiles(directory.Path, "*.json"));
+ }
+}