/
afanasevn
/
RedisLab
Обзор
Документация
Войти
/
afanasevn
/
RedisLab
Код
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
tests/RedisLab.IntegrationTests/DistributedLockTests.cs
37 строк
1 KB
IBS\NAfanasev
Solution commit
24 июн 2026, 16:45
24 июн 2026, 16:45
bab80b7
Код
Авторство
О чём код?
using Microsoft.Extensions.DependencyInjection; using RedisLab.Application.Abstractions; using RedisLab.IntegrationTests.Support; using StackExchange.Redis; namespace RedisLab.IntegrationTests; /// <summary> /// Distributed lock — два параллельных TryAcquire, победитель один. /// </summary> [Collection("Integration")] public sealed class DistributedLockTests(RedisLabIntegrationFixture fixture) { [Fact] public async Task Parallel_acquire_only_one_wins() { await using var scope = fixture.Factory.Services.CreateAsyncScope(); var lockService = scope.ServiceProvider.GetRequiredService<IDistributedLockService>(); var redis = scope.ServiceProvider.GetRequiredService<IConnectionMultiplexer>(); const string lockKey = "lock:integration-test"; await redis.GetDatabase().KeyDeleteAsync(lockKey); var tasks = Enumerable.Range(0, 2) .Select(i => lockService.TryAcquireAsync( lockKey, $"owner-{i}", TimeSpan.FromSeconds(30), CancellationToken.None)) .ToArray(); var results = await Task.WhenAll(tasks); Assert.Equal(1, results.Count(x => x)); await redis.GetDatabase().KeyDeleteAsync(lockKey); } }