1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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"));
}
}
|