@@ -8,13 +8,27 @@ public sealed class GoalSchedulerTests : IDisposable
88{
99 private readonly string _root = Path . Combine ( Path . GetTempPath ( ) , $ "scheduler-{ Guid . NewGuid ( ) : N} ") ;
1010
11+ private sealed class FakeNodeRegistry : INodeRegistry
12+ {
13+ public Task RegisterAsync ( string nodeId , CancellationToken cancellationToken = default ) => Task . CompletedTask ;
14+ public Task HeartbeatAsync ( string nodeId , CancellationToken cancellationToken = default ) => Task . CompletedTask ;
15+ public Task < IReadOnlyList < string > > GetActiveNodesAsync ( CancellationToken cancellationToken = default ) => Task . FromResult < IReadOnlyList < string > > ( [ "worker-1" ] ) ;
16+ }
17+
18+ private GoalScheduler CreateScheduler ( IGoalStore store )
19+ {
20+ var nodeRegistry = new FakeNodeRegistry ( ) ;
21+ var options = Microsoft . Extensions . Options . Options . Create ( new NodeSettings { NodeId = "worker-1" } ) ;
22+ return new GoalScheduler ( store , nodeRegistry , options , NullLogger < GoalScheduler > . Instance ) ;
23+ }
24+
1125 [ Fact ]
1226 public async Task TryAcquireLease_IncompleteDependency_IsDenied ( )
1327 {
1428 var store = await CreateStore ( ) ;
1529 var aggregate = AggregateWithTwoItems ( WorkItemStatus . Pending ) ;
1630 await store . SaveAsync ( aggregate ) ;
17- var scheduler = new GoalScheduler ( store , NullLogger < GoalScheduler > . Instance ) ;
31+ var scheduler = CreateScheduler ( store ) ;
1832
1933 var lease = await scheduler . TryAcquireLeaseAsync ( Request ( "work-2" ) ) ;
2034
@@ -26,7 +40,7 @@ public async Task TryAcquireLease_CompetingCalls_RespectsGlobalLimitAtomically()
2640 {
2741 var store = await CreateStore ( ) ;
2842 await store . SaveAsync ( IndependentAggregate ( ) ) ;
29- var scheduler = new GoalScheduler ( store , NullLogger < GoalScheduler > . Instance ) ;
43+ var scheduler = CreateScheduler ( store ) ;
3044
3145 var results = await Task . WhenAll (
3246 scheduler . TryAcquireLeaseAsync ( Request ( "work-1" , global : 1 ) ) ,
@@ -42,7 +56,7 @@ public async Task TryAcquireLease_ProviderOrRepositoryLimit_DeniesSecond(int glo
4256 {
4357 var store = await CreateStore ( ) ;
4458 await store . SaveAsync ( IndependentAggregate ( ) ) ;
45- var scheduler = new GoalScheduler ( store , NullLogger < GoalScheduler > . Instance ) ;
59+ var scheduler = CreateScheduler ( store ) ;
4660 Assert . NotNull ( await scheduler . TryAcquireLeaseAsync ( Request ( "work-1" , global , provider , repository ) ) ) ;
4761 Assert . Null ( await scheduler . TryAcquireLeaseAsync ( Request ( "work-2" , global , provider , repository ) ) ) ;
4862 }
@@ -52,7 +66,7 @@ public async Task RecoverExpiredLeases_AllowsReacquire()
5266 {
5367 var store = await CreateStore ( ) ;
5468 await store . SaveAsync ( IndependentAggregate ( ) ) ;
55- var scheduler = new GoalScheduler ( store , NullLogger < GoalScheduler > . Instance ) ;
69+ var scheduler = CreateScheduler ( store ) ;
5670 var now = DateTimeOffset . UtcNow ;
5771 Assert . NotNull ( await scheduler . TryAcquireLeaseAsync (
5872 new LeaseRequest ( "goal-1" , "work-1" , "worker-1" , now . AddMinutes ( - 2 ) , now . AddMinutes ( - 1 ) , 3 , 3 , 3 ) ) ) ;
0 commit comments