2025-05-08 23:24:20 -05:00
|
|
|
namespace StevesBot.Worker.Tests.Unit;
|
|
|
|
|
|
|
|
|
|
public class LockReleaserTests
|
|
|
|
|
{
|
|
|
|
|
[Fact]
|
|
|
|
|
public void Constructor_WhenCalled_ItShouldCreateInstance()
|
|
|
|
|
{
|
|
|
|
|
using var semaphore = new SemaphoreSlim(1);
|
|
|
|
|
using var lockReleaser = new LockReleaser(semaphore);
|
|
|
|
|
|
|
|
|
|
lockReleaser.Should().NotBeNull();
|
|
|
|
|
lockReleaser.Should().BeOfType<LockReleaser>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public void Constructor_WhenCalledAndSemaphoreIsNull_ItShouldThrowArgumentNullException()
|
|
|
|
|
{
|
|
|
|
|
var act = static () => new LockReleaser(null!);
|
|
|
|
|
|
|
|
|
|
act.Should().Throw<ArgumentNullException>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public void Dispose_WhenCalled_ItShouldReleaseSemaphore()
|
|
|
|
|
{
|
|
|
|
|
using var semaphore = new SemaphoreSlim(0, 1);
|
|
|
|
|
using var lockReleaser = new LockReleaser(semaphore);
|
|
|
|
|
|
|
|
|
|
lockReleaser.Dispose();
|
|
|
|
|
|
|
|
|
|
semaphore.CurrentCount.Should().Be(1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public void Dispose_WhenCalledMultipleTimes_ItShouldReleaseSemaphoreOnlyOnce()
|
|
|
|
|
{
|
|
|
|
|
using var semaphore = new SemaphoreSlim(0, 1);
|
|
|
|
|
using var lockReleaser = new LockReleaser(semaphore);
|
|
|
|
|
|
|
|
|
|
lockReleaser.Dispose();
|
|
|
|
|
lockReleaser.Dispose();
|
|
|
|
|
|
|
|
|
|
semaphore.CurrentCount.Should().Be(1);
|
|
|
|
|
}
|
2025-05-22 18:02:41 -05:00
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public void Dispose_WhenCalledAndSemaphoreIsAlreadyDisposed_ItShouldNotThrowException()
|
|
|
|
|
{
|
|
|
|
|
var act = () =>
|
|
|
|
|
{
|
|
|
|
|
var semaphore = new SemaphoreSlim(0, 1);
|
|
|
|
|
var lockReleaser = new LockReleaser(semaphore);
|
|
|
|
|
|
|
|
|
|
semaphore.Dispose();
|
|
|
|
|
lockReleaser.Dispose();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
act.Should().NotThrow();
|
|
|
|
|
}
|
2025-05-08 23:24:20 -05:00
|
|
|
}
|