Skip to content

Commit 9e1eb7b

Browse files
tobias-tenglermichaelstaib
authored andcommitted
Fixed flaky executor tests (#8113)
1 parent e491db2 commit 9e1eb7b

File tree

5 files changed

+41
-28
lines changed

5 files changed

+41
-28
lines changed

src/HotChocolate/AspNetCore/test/AspNetCore.Tests/EvictSchemaTests.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ public class EvictSchemaTests(TestServerFactory serverFactory) : ServerTestBase(
1010
public async Task Evict_Default_Schema()
1111
{
1212
// arrange
13-
var newExecutorCreatedResetEvent = new AutoResetEvent(false);
13+
var newExecutorCreatedResetEvent = new ManualResetEventSlim(false);
14+
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
1415
var server = CreateStarWarsServer();
1516

1617
var time1 = await server.GetAsync(
@@ -28,7 +29,7 @@ public async Task Evict_Default_Schema()
2829
// act
2930
await server.GetAsync(
3031
new ClientQueryRequest { Query = "{ evict }", });
31-
newExecutorCreatedResetEvent.WaitOne(5000);
32+
newExecutorCreatedResetEvent.Wait(cts.Token);
3233

3334
// assert
3435
var time2 = await server.GetAsync(
@@ -40,7 +41,8 @@ await server.GetAsync(
4041
public async Task Evict_Named_Schema()
4142
{
4243
// arrange
43-
var newExecutorCreatedResetEvent = new AutoResetEvent(false);
44+
var newExecutorCreatedResetEvent = new ManualResetEventSlim(false);
45+
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
4446
var server = CreateStarWarsServer();
4547

4648
var time1 = await server.GetAsync(
@@ -60,7 +62,7 @@ public async Task Evict_Named_Schema()
6062
await server.GetAsync(
6163
new ClientQueryRequest { Query = "{ evict }", },
6264
"/evict");
63-
newExecutorCreatedResetEvent.WaitOne(5000);
65+
newExecutorCreatedResetEvent.Wait(cts.Token);
6466

6567
// assert
6668
var time2 = await server.GetAsync(

src/HotChocolate/Core/test/Execution.Tests/AutoUpdateRequestExecutorProxyTests.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ public async Task Ensure_Executor_Is_Cached()
3333
public async Task Ensure_Executor_Is_Correctly_Swapped_When_Evicted()
3434
{
3535
// arrange
36-
var executorUpdatedResetEvent = new AutoResetEvent(false);
36+
var executorUpdatedResetEvent = new ManualResetEventSlim(false);
37+
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
3738
var resolver =
3839
new ServiceCollection()
3940
.AddGraphQL()
@@ -58,7 +59,7 @@ public async Task Ensure_Executor_Is_Correctly_Swapped_When_Evicted()
5859
// act
5960
var a = proxy.InnerExecutor;
6061
resolver.EvictRequestExecutor();
61-
executorUpdatedResetEvent.WaitOne(1000);
62+
executorUpdatedResetEvent.Wait(cts.Token);
6263

6364
var b = proxy.InnerExecutor;
6465

src/HotChocolate/Core/test/Execution.Tests/Configuration/TypeModuleTests.cs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ public async Task Ensure_Warmups_Are_Triggered_An_Appropriate_Number_Of_Times()
7171
// arrange
7272
var typeModule = new TriggerableTypeModule();
7373
var warmups = 0;
74-
var warmupResetEvent = new AutoResetEvent(false);
74+
var warmupResetEvent = new ManualResetEventSlim(false);
75+
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
7576

7677
var services = new ServiceCollection();
7778
services
@@ -87,31 +88,31 @@ public async Task Ensure_Warmups_Are_Triggered_An_Appropriate_Number_Of_Times()
8788
var provider = services.BuildServiceProvider();
8889
var warmupService = provider.GetRequiredService<IHostedService>();
8990

90-
using var cts = new CancellationTokenSource();
9191
_ = Task.Run(async () =>
9292
{
9393
await warmupService.StartAsync(CancellationToken.None);
9494
}, cts.Token);
9595

9696
var resolver = provider.GetRequiredService<IRequestExecutorResolver>();
9797

98-
await resolver.GetRequestExecutorAsync(null, cts.Token);
98+
await resolver.GetRequestExecutorAsync();
9999

100100
// act
101101
// assert
102-
warmupResetEvent.WaitOne();
102+
warmupResetEvent.Wait(cts.Token);
103+
warmupResetEvent.Reset();
103104

104105
Assert.Equal(1, warmups);
105-
warmupResetEvent.Reset();
106106

107107
typeModule.TriggerChange();
108-
warmupResetEvent.WaitOne();
108+
warmupResetEvent.Wait(cts.Token);
109+
warmupResetEvent.Reset();
109110

110111
Assert.Equal(2, warmups);
111-
warmupResetEvent.Reset();
112112

113113
typeModule.TriggerChange();
114-
warmupResetEvent.WaitOne();
114+
warmupResetEvent.Wait(cts.Token);
115+
warmupResetEvent.Reset();
115116

116117
Assert.Equal(3, warmups);
117118
}

src/HotChocolate/Core/test/Execution.Tests/RequestExecutorProxyTests.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ public async Task Ensure_Executor_Is_Cached()
3131
public async Task Ensure_Executor_Is_Correctly_Swapped_When_Evicted()
3232
{
3333
// arrange
34-
var executorUpdatedResetEvent = new AutoResetEvent(false);
34+
var executorUpdatedResetEvent = new ManualResetEventSlim(false);
35+
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
3536
var resolver =
3637
new ServiceCollection()
3738
.AddGraphQL()
@@ -54,7 +55,7 @@ public async Task Ensure_Executor_Is_Correctly_Swapped_When_Evicted()
5455
// act
5556
var a = await proxy.GetRequestExecutorAsync(CancellationToken.None);
5657
resolver.EvictRequestExecutor();
57-
executorUpdatedResetEvent.WaitOne(1000);
58+
executorUpdatedResetEvent.Wait(cts.Token);
5859
var b = await proxy.GetRequestExecutorAsync(CancellationToken.None);
5960

6061
// assert

src/HotChocolate/Core/test/Execution.Tests/RequestExecutorResolverTests.cs

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ public class RequestExecutorResolverTests
1010
public async Task Operation_Cache_Should_Be_Scoped_To_Executor()
1111
{
1212
// arrange
13-
var executorEvictedResetEvent = new AutoResetEvent(false);
13+
var executorEvictedResetEvent = new ManualResetEventSlim(false);
14+
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
1415

1516
var resolver = new ServiceCollection()
1617
.AddGraphQL()
@@ -32,7 +33,7 @@ public async Task Operation_Cache_Should_Be_Scoped_To_Executor()
3233
.GetRequiredService<IPreparedOperationCache>();
3334

3435
resolver.EvictRequestExecutor();
35-
executorEvictedResetEvent.WaitOne(1000);
36+
executorEvictedResetEvent.Wait(cts.Token);
3637

3738
var secondExecutor = await resolver.GetRequestExecutorAsync();
3839
var secondOperationCache = secondExecutor.Services.GetCombinedServices()
@@ -46,16 +47,17 @@ public async Task Operation_Cache_Should_Be_Scoped_To_Executor()
4647
public async Task Executor_Should_Only_Be_Switched_Once_It_Is_Warmed_Up()
4748
{
4849
// arrange
49-
var warmupResetEvent = new AutoResetEvent(true);
50-
var executorEvictedResetEvent = new AutoResetEvent(false);
50+
var warmupResetEvent = new ManualResetEventSlim(true);
51+
var executorEvictedResetEvent = new ManualResetEventSlim(false);
52+
var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
5153

5254
var resolver = new ServiceCollection()
5355
.AddGraphQL()
5456
.InitializeOnStartup(
5557
keepWarm: true,
5658
warmup: (_, _) =>
5759
{
58-
warmupResetEvent.WaitOne(1000);
60+
warmupResetEvent.Wait(cts.Token);
5961

6062
return Task.CompletedTask;
6163
})
@@ -83,10 +85,12 @@ public async Task Executor_Should_Only_Be_Switched_Once_It_Is_Warmed_Up()
8385
Assert.Same(initialExecutor, executorAfterEviction);
8486

8587
warmupResetEvent.Set();
86-
executorEvictedResetEvent.WaitOne(1000);
88+
executorEvictedResetEvent.Wait(cts.Token);
8789
var executorAfterWarmup = await resolver.GetRequestExecutorAsync();
8890

8991
Assert.NotSame(initialExecutor, executorAfterWarmup);
92+
93+
cts.Dispose();
9094
}
9195

9296
[Theory]
@@ -97,7 +101,8 @@ public async Task WarmupSchemaTasks_Are_Applied_Correct_Number_Of_Times(
97101
{
98102
// arrange
99103
var warmups = 0;
100-
var executorEvictedResetEvent = new AutoResetEvent(false);
104+
var executorEvictedResetEvent = new ManualResetEventSlim(false);
105+
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
101106

102107
var resolver = new ServiceCollection()
103108
.AddGraphQL()
@@ -125,7 +130,7 @@ public async Task WarmupSchemaTasks_Are_Applied_Correct_Number_Of_Times(
125130
var initialExecutor = await resolver.GetRequestExecutorAsync();
126131

127132
resolver.EvictRequestExecutor();
128-
executorEvictedResetEvent.WaitOne(1000);
133+
executorEvictedResetEvent.Wait(cts.Token);
129134

130135
var executorAfterEviction = await resolver.GetRequestExecutorAsync();
131136

@@ -161,14 +166,15 @@ public async Task Calling_GetExecutorAsync_Multiple_Times_Only_Creates_One_Execu
161166
public async Task Executor_Resolution_Should_Be_Parallel()
162167
{
163168
// arrange
164-
var schema1CreationResetEvent = new AutoResetEvent(false);
169+
var schema1CreationResetEvent = new ManualResetEventSlim(false);
170+
var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
165171

166172
var services = new ServiceCollection();
167173
services
168174
.AddGraphQL("schema1")
169175
.AddQueryType(d =>
170176
{
171-
schema1CreationResetEvent.WaitOne(1000);
177+
schema1CreationResetEvent.Wait(cts.Token);
172178
d.Field("foo").Resolve("");
173179
});
174180
services
@@ -181,14 +187,16 @@ public async Task Executor_Resolution_Should_Be_Parallel()
181187
var resolver = provider.GetRequiredService<IRequestExecutorResolver>();
182188

183189
// act
184-
var executor1Task = Task.Run(async () => await resolver.GetRequestExecutorAsync("schema1"));
185-
var executor2Task = Task.Run(async () => await resolver.GetRequestExecutorAsync("schema2"));
190+
var executor1Task = Task.Run(async () => await resolver.GetRequestExecutorAsync("schema1"), cts.Token);
191+
var executor2Task = Task.Run(async () => await resolver.GetRequestExecutorAsync("schema2"), cts.Token);
186192

187193
// assert
188194
await executor2Task;
189195

190196
schema1CreationResetEvent.Set();
191197

192198
await executor1Task;
199+
200+
cts.Dispose();
193201
}
194202
}

0 commit comments

Comments
 (0)