Skip to content

Commit ca26a52

Browse files
committed
Fix AsyncTimerFactory constructor calls to use FakeTimeProvider for deterministic testing
1 parent 3ab0e79 commit ca26a52

File tree

4 files changed

+24
-12
lines changed

4 files changed

+24
-12
lines changed

test/NonSilo.Tests/Membership/ClusterHealthMonitorTests.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Collections.Concurrent;
22
using Microsoft.Extensions.Logging;
33
using Microsoft.Extensions.Options;
4+
using Microsoft.Extensions.Time.Testing;
45
using NonSilo.Tests.Utilities;
56
using NSubstitute;
67
using Orleans.Configuration;
@@ -32,6 +33,7 @@ public class ClusterHealthMonitorTests
3233
private readonly ILocalSiloHealthMonitor localSiloHealthMonitor;
3334
private readonly InMemoryMembershipTable membershipTable;
3435
private readonly IRemoteSiloProber prober;
36+
private readonly FakeTimeProvider timeProvider;
3537

3638
public ClusterHealthMonitorTests(ITestOutputHelper output)
3739
{
@@ -68,6 +70,7 @@ public ClusterHealthMonitorTests(ITestOutputHelper output)
6870

6971
this.prober = Substitute.For<IRemoteSiloProber>();
7072
this.membershipTable = new InMemoryMembershipTable(new TableVersion(1, "1"));
73+
this.timeProvider = new FakeTimeProvider();
7174
}
7275

7376
/// <summary>
@@ -558,7 +561,7 @@ private ClusterHealthMonitorTestRig CreateClusterHealthMonitorTestRig(ClusterMem
558561
fatalErrorHandler: this.fatalErrorHandler,
559562
gossiper: this.membershipGossiper,
560563
log: this.loggerFactory.CreateLogger<MembershipTableManager>(),
561-
timerFactory: new AsyncTimerFactory(this.loggerFactory),
564+
timerFactory: new AsyncTimerFactory(this.loggerFactory, this.timeProvider),
562565
this.lifecycle);
563566

564567
((ILifecycleParticipant<ISiloLifecycle>)manager).Participate(this.lifecycle);

test/NonSilo.Tests/Membership/MembershipAgentTests.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Collections.Concurrent;
22
using Microsoft.Extensions.Logging;
33
using Microsoft.Extensions.Options;
4+
using Microsoft.Extensions.Time.Testing;
45
using NonSilo.Tests.Utilities;
56
using NSubstitute;
67
using Orleans;
@@ -38,6 +39,7 @@ public class MembershipAgentTests
3839
private readonly MembershipAgent agent;
3940
private readonly ILocalSiloHealthMonitor localSiloHealthMonitor;
4041
private readonly IOptionsMonitor<ClusterMembershipOptions> optionsMonitor;
42+
private readonly FakeTimeProvider timeProvider;
4143

4244
public MembershipAgentTests(ITestOutputHelper output)
4345
{
@@ -73,14 +75,15 @@ public MembershipAgentTests(ITestOutputHelper output)
7375

7476
this.membershipTable = new InMemoryMembershipTable(new TableVersion(1, "1"));
7577
this.clusterMembershipOptions = Options.Create(new ClusterMembershipOptions() { MaxJoinAttemptTime = TimeSpan.FromSeconds(45) });
78+
this.timeProvider = new FakeTimeProvider();
7679
this.manager = new MembershipTableManager(
7780
localSiloDetails: this.localSiloDetails,
7881
clusterMembershipOptions: Options.Create(new ClusterMembershipOptions()),
7982
membershipTable: membershipTable,
8083
fatalErrorHandler: this.fatalErrorHandler,
8184
gossiper: this.membershipGossiper,
8285
log: this.loggerFactory.CreateLogger<MembershipTableManager>(),
83-
timerFactory: new AsyncTimerFactory(this.loggerFactory),
86+
timerFactory: new AsyncTimerFactory(this.loggerFactory, this.timeProvider),
8487
this.lifecycle);
8588
((ILifecycleParticipant<ISiloLifecycle>)this.manager).Participate(this.lifecycle);
8689

test/NonSilo.Tests/Membership/MembershipTableManagerTests.cs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Microsoft.Extensions.Logging;
22
using Microsoft.Extensions.Options;
3+
using Microsoft.Extensions.Time.Testing;
34
using Orleans.Configuration;
45
using Orleans.Runtime.MembershipService;
56
using Xunit;
@@ -26,6 +27,7 @@ public class MembershipTableManagerTests
2627
private readonly IFatalErrorHandler fatalErrorHandler;
2728
private readonly IMembershipGossiper membershipGossiper;
2829
private readonly SiloLifecycleSubject lifecycle;
30+
private readonly FakeTimeProvider timeProvider;
2931

3032
public MembershipTableManagerTests(ITestOutputHelper output)
3133
{
@@ -42,6 +44,7 @@ public MembershipTableManagerTests(ITestOutputHelper output)
4244
this.fatalErrorHandler.IsUnexpected(default).ReturnsForAnyArgs(true);
4345
this.membershipGossiper = Substitute.For<IMembershipGossiper>();
4446
this.lifecycle = new SiloLifecycleSubject(this.loggerFactory.CreateLogger<SiloLifecycleSubject>());
47+
this.timeProvider = new FakeTimeProvider();
4548
}
4649

4750
/// <summary>
@@ -223,7 +226,7 @@ public async Task MembershipTableManager_Restarted()
223226
fatalErrorHandler: this.fatalErrorHandler,
224227
gossiper: this.membershipGossiper,
225228
log: this.loggerFactory.CreateLogger<MembershipTableManager>(),
226-
timerFactory: new AsyncTimerFactory(this.loggerFactory),
229+
timerFactory: new AsyncTimerFactory(this.loggerFactory, this.timeProvider),
227230
this.lifecycle);
228231

229232
// Validate that the initial snapshot is valid and contains the local silo.
@@ -319,7 +322,7 @@ public async Task MembershipTableManager_Superseded()
319322
fatalErrorHandler: this.fatalErrorHandler,
320323
gossiper: this.membershipGossiper,
321324
log: this.loggerFactory.CreateLogger<MembershipTableManager>(),
322-
timerFactory: new AsyncTimerFactory(this.loggerFactory),
325+
timerFactory: new AsyncTimerFactory(this.loggerFactory, this.timeProvider),
323326
this.lifecycle);
324327

325328
((ILifecycleParticipant<ISiloLifecycle>)manager).Participate(this.lifecycle);
@@ -361,7 +364,7 @@ public async Task MembershipTableManager_AlreadyDeclaredDead()
361364
fatalErrorHandler: this.fatalErrorHandler,
362365
gossiper: this.membershipGossiper,
363366
log: this.loggerFactory.CreateLogger<MembershipTableManager>(),
364-
timerFactory: new AsyncTimerFactory(this.loggerFactory),
367+
timerFactory: new AsyncTimerFactory(this.loggerFactory, this.timeProvider),
365368
this.lifecycle);
366369

367370
((ILifecycleParticipant<ISiloLifecycle>)manager).Participate(this.lifecycle);
@@ -399,7 +402,7 @@ public async Task MembershipTableManager_DeclaredDead_AfterJoining()
399402
fatalErrorHandler: this.fatalErrorHandler,
400403
gossiper: this.membershipGossiper,
401404
log: this.loggerFactory.CreateLogger<MembershipTableManager>(),
402-
timerFactory: new AsyncTimerFactory(this.loggerFactory),
405+
timerFactory: new AsyncTimerFactory(this.loggerFactory, this.timeProvider),
403406
siloLifecycle: this.lifecycle);
404407
((ILifecycleParticipant<ISiloLifecycle>)manager).Participate(this.lifecycle);
405408
await this.lifecycle.OnStart();
@@ -445,7 +448,7 @@ public async Task MembershipTableManager_TrySuspectOrKill_ButIAmKill()
445448
fatalErrorHandler: this.fatalErrorHandler,
446449
gossiper: this.membershipGossiper,
447450
log: this.loggerFactory.CreateLogger<MembershipTableManager>(),
448-
timerFactory: new AsyncTimerFactory(this.loggerFactory),
451+
timerFactory: new AsyncTimerFactory(this.loggerFactory, this.timeProvider),
449452
siloLifecycle: this.lifecycle);
450453
((ILifecycleParticipant<ISiloLifecycle>)manager).Participate(this.lifecycle);
451454
await this.lifecycle.OnStart();
@@ -487,7 +490,7 @@ public async Task MembershipTableManager_TrySuspectOrKill_AlreadyDead()
487490
fatalErrorHandler: this.fatalErrorHandler,
488491
gossiper: this.membershipGossiper,
489492
log: this.loggerFactory.CreateLogger<MembershipTableManager>(),
490-
timerFactory: new AsyncTimerFactory(this.loggerFactory),
493+
timerFactory: new AsyncTimerFactory(this.loggerFactory, this.timeProvider),
491494
siloLifecycle: this.lifecycle);
492495
((ILifecycleParticipant<ISiloLifecycle>)manager).Participate(this.lifecycle);
493496
await this.lifecycle.OnStart();
@@ -519,7 +522,7 @@ public async Task MembershipTableManager_TrySuspectOrKill_DeclareDead_SmallClust
519522
fatalErrorHandler: this.fatalErrorHandler,
520523
gossiper: this.membershipGossiper,
521524
log: this.loggerFactory.CreateLogger<MembershipTableManager>(),
522-
timerFactory: new AsyncTimerFactory(this.loggerFactory),
525+
timerFactory: new AsyncTimerFactory(this.loggerFactory, this.timeProvider),
523526
siloLifecycle: this.lifecycle);
524527
((ILifecycleParticipant<ISiloLifecycle>)manager).Participate(this.lifecycle);
525528
await this.lifecycle.OnStart();
@@ -561,7 +564,7 @@ public async Task MembershipTableManager_TrySuspectOrKill_ClocksNotSynchronized(
561564
fatalErrorHandler: this.fatalErrorHandler,
562565
gossiper: this.membershipGossiper,
563566
log: this.loggerFactory.CreateLogger<MembershipTableManager>(),
564-
timerFactory: new AsyncTimerFactory(this.loggerFactory),
567+
timerFactory: new AsyncTimerFactory(this.loggerFactory, this.timeProvider),
565568
siloLifecycle: this.lifecycle);
566569

567570
// Rig the local clock.
@@ -634,7 +637,7 @@ public async Task MembershipTableManager_TrySuspectOrKill_DeclareDead_LargerClus
634637
fatalErrorHandler: this.fatalErrorHandler,
635638
gossiper: this.membershipGossiper,
636639
log: this.loggerFactory.CreateLogger<MembershipTableManager>(),
637-
timerFactory: new AsyncTimerFactory(this.loggerFactory),
640+
timerFactory: new AsyncTimerFactory(this.loggerFactory, this.timeProvider),
638641
siloLifecycle: this.lifecycle);
639642
((ILifecycleParticipant<ISiloLifecycle>)manager).Participate(this.lifecycle);
640643
await this.lifecycle.OnStart();

test/NonSilo.Tests/Membership/SiloHealthMonitorTests.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Threading.Channels;
22
using Microsoft.Extensions.Logging;
33
using Microsoft.Extensions.Options;
4+
using Microsoft.Extensions.Time.Testing;
45
using NonSilo.Tests.Utilities;
56
using NSubstitute;
67
using NSubstitute.ExceptionExtensions;
@@ -35,6 +36,7 @@ public class SiloHealthMonitorTests
3536
private readonly SiloHealthMonitor _monitor;
3637
private readonly SiloAddress _targetSilo;
3738
private readonly InMemoryMembershipTable _membershipTable;
39+
private readonly FakeTimeProvider _timeProvider;
3840

3941
public SiloHealthMonitorTests(ITestOutputHelper output)
4042
{
@@ -78,14 +80,15 @@ public SiloHealthMonitorTests(ITestOutputHelper output)
7880

7981
_targetSilo = Silo("127.0.0.200:100@100");
8082
_membershipTable = new(new TableVersion(0, "0"), Entry(_localSilo, SiloStatus.Active), Entry(_targetSilo, SiloStatus.Active));
83+
_timeProvider = new FakeTimeProvider();
8184
_membershipService = new MembershipTableManager(
8285
localSiloDetails: _localSiloDetails,
8386
clusterMembershipOptions: Options.Create(_clusterMembershipOptions),
8487
membershipTable: _membershipTable,
8588
fatalErrorHandler: fatalErrorHandler,
8689
gossiper: membershipGossiper,
8790
log: _loggerFactory.CreateLogger<MembershipTableManager>(),
88-
timerFactory: new AsyncTimerFactory(_loggerFactory),
91+
timerFactory: new AsyncTimerFactory(_loggerFactory, _timeProvider),
8992
lifecycle);
9093

9194
_probeResults = Channel.CreateBounded<ProbeResult>(new BoundedChannelOptions(1) { FullMode = BoundedChannelFullMode.Wait });

0 commit comments

Comments
 (0)