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
37
38
39
40
41
42
43
44
45
46
47
48
|
using Agent.Core.Tasks;
namespace Agent.Core.Tests;
public sealed class TaskRegistryTests
{
[Fact]
public async Task Explicit_task_id_can_be_cancelled_and_observed_as_terminal()
{
var registry = new TaskRegistry();
Guid taskId = Guid.NewGuid();
TaskSnapshot queued = registry.Enqueue("work", null, null, requestedTaskId: taskId);
Assert.Equal(taskId, queued.TaskId);
Assert.True(registry.Cancel(taskId));
TaskSnapshot terminal = await registry.WaitForTerminalAsync(taskId, TestContext.Current.CancellationToken);
Assert.Equal(AgentTaskState.Cancelled, terminal.State);
Assert.True(registry.GetCancellationToken(taskId).IsCancellationRequested);
}
[Fact]
public void NewTaskGetsUniqueTaskAndSessionIds()
{
var registry = new TaskRegistry();
TaskSnapshot first = registry.Enqueue("one", null, null);
TaskSnapshot second = registry.Enqueue("two", null, 0.2);
Assert.NotEqual(first.TaskId, second.TaskId);
Assert.NotEqual(first.SessionId, second.SessionId);
Assert.Equal(AgentTaskState.Queued, first.State);
}
[Fact]
public void UnknownSessionIsRejected()
{
var registry = new TaskRegistry();
Assert.Throws<KeyNotFoundException>(() => registry.Enqueue("request", Guid.NewGuid(), null));
}
[Fact]
public void TerminalTaskCannotTransition()
{
var registry = new TaskRegistry();
TaskSnapshot task = registry.Enqueue("request", null, null);
Assert.True(registry.Transition(task.TaskId, AgentTaskState.Planning));
Assert.True(registry.Transition(task.TaskId, AgentTaskState.Running));
Assert.True(registry.Transition(task.TaskId, AgentTaskState.Completed));
Assert.False(registry.Transition(task.TaskId, AgentTaskState.Running));
}
}
|