Skip to content

Commit 1d9bcc5

Browse files
authored
Add tests for TimerExtensions scheduler (#2251)
1 parent 7ec830b commit 1d9bcc5

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
using System;
2+
using System.Threading.Tasks;
3+
using Proto.Timers;
4+
using Xunit;
5+
#if NET8_0_OR_GREATER
6+
using Microsoft.Extensions.Time.Testing;
7+
#endif
8+
9+
namespace Proto.Tests;
10+
11+
public class TimerExtensionsTests
12+
{
13+
[Fact]
14+
public async Task SchedulerSchedulesMessageAfterDelay()
15+
{
16+
await using var system = new ActorSystem();
17+
var context = system.Root;
18+
var tcs = new TaskCompletionSource();
19+
20+
var pid = context.Spawn(Props.FromFunc(ctx =>
21+
{
22+
if (ctx.Message is "Wakeup")
23+
{
24+
tcs.SetResult();
25+
}
26+
27+
return Task.CompletedTask;
28+
}));
29+
30+
var scheduler = context.Scheduler();
31+
32+
scheduler.SendOnce(TimeSpan.FromMilliseconds(200), pid, "Wakeup");
33+
34+
// ensure message isn't delivered immediately
35+
await Task.Delay(100);
36+
Assert.False(tcs.Task.IsCompleted);
37+
38+
await tcs.Task.WaitAsync(TimeSpan.FromSeconds(5));
39+
}
40+
41+
#if NET8_0_OR_GREATER
42+
[Fact]
43+
public async Task SchedulerWithTimeProviderSchedulesMessageAfterDelay()
44+
{
45+
await using var system = new ActorSystem();
46+
var context = system.Root;
47+
var tcs = new TaskCompletionSource();
48+
49+
var pid = context.Spawn(Props.FromFunc(ctx =>
50+
{
51+
if (ctx.Message is "Wakeup")
52+
{
53+
tcs.SetResult();
54+
}
55+
56+
return Task.CompletedTask;
57+
}));
58+
59+
var timeProvider = new FakeTimeProvider();
60+
var scheduler = context.Scheduler(timeProvider);
61+
62+
scheduler.SendOnce(TimeSpan.FromSeconds(10), pid, "Wakeup");
63+
64+
// Give the inner Task.Delay a head start
65+
await Task.Delay(50);
66+
timeProvider.Advance(TimeSpan.FromMinutes(1));
67+
68+
await tcs.Task.WaitAsync(TimeSpan.FromMilliseconds(10));
69+
}
70+
#endif
71+
}

0 commit comments

Comments
 (0)