mirror of
https://github.com/SoPat712/allstarr.git
synced 2026-10-08 06:05:02 -04:00
35 lines
1.1 KiB
C#
35 lines
1.1 KiB
C#
using allstarr.Services.Common;
|
|
|
|
namespace allstarr.Tests;
|
|
|
|
public sealed class ApplicationCacheRequestCoalescerTests
|
|
{
|
|
[Fact]
|
|
public async Task ConcurrentRequests_RunOneFetch()
|
|
{
|
|
var metrics = new ApplicationCacheActivityMetrics();
|
|
var coalescer = new ApplicationCacheRequestCoalescer(metrics);
|
|
var release = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously);
|
|
var started = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously);
|
|
var calls = 0;
|
|
|
|
async Task<string> Fetch()
|
|
{
|
|
Interlocked.Increment(ref calls);
|
|
started.TrySetResult();
|
|
await release.Task;
|
|
return "page";
|
|
}
|
|
|
|
var requests = Enumerable.Range(0, 8)
|
|
.Select(_ => coalescer.RunAsync("playlist:discovery:fixture", Fetch, CancellationToken.None))
|
|
.ToArray();
|
|
await started.Task;
|
|
release.SetResult();
|
|
|
|
Assert.All(await Task.WhenAll(requests), value => Assert.Equal("page", value));
|
|
Assert.Equal(1, calls);
|
|
Assert.Equal(7, metrics.Snapshot().CoalescedRequests);
|
|
}
|
|
}
|