public async Task Should_succeed_on_release_when_not_owner() { var nowUtc = DateTime.UtcNow; SqlServerSemaphore sema = new SqlServerSemaphore(ConnectionString, _semaphoreName, 20, 1); var owner1Res = await sema.TryAcquire(_ownerId1); owner1Res.ShouldBeTrue(); var owner2ReleaseRes = await sema.TryRelease(_ownerId2); owner2ReleaseRes.ShouldBeTrue(); var semaInfo = await sema.GetSemaphoreInfo(); var owners = sema.Deserialize(semaInfo.OwnersJson); owners.Owners.Count.ShouldBe(1); var owner1 = owners.Owners.Single(x => x.OwnerId == _ownerId1); owner1.ExpiresAtUtc.ShouldBeGreaterThan(DateTime.UtcNow); }
public async Task Should_release() { SqlServerSemaphore sema = new SqlServerSemaphore(ConnectionString, _semaphoreName, 10, 5); var owner1Res = await sema.TryAcquire(_ownerId1); var owner2Res = await sema.TryAcquire(_ownerId2); var owner3Res = await sema.TryAcquire(_ownerId3); var owner4Res = await sema.TryAcquire(_ownerId4); var owner5Res = await sema.TryAcquire(_ownerId5); var owner6Res = await sema.TryAcquire(_ownerId6); owner1Res.ShouldBeTrue(); owner2Res.ShouldBeTrue(); owner3Res.ShouldBeTrue(); owner4Res.ShouldBeTrue(); owner5Res.ShouldBeTrue(); owner6Res.ShouldBeFalse(); var nowUtc = DateTime.UtcNow; var owner1ReleaseRes = await sema.TryRelease(_ownerId1); var owner2ReleaseRes = await sema.TryRelease(_ownerId2); var owner3ReleaseRes = await sema.TryRelease(_ownerId3); var owner4ReleaseRes = await sema.TryRelease(_ownerId4); var owner5ReleaseRes = await sema.TryRelease(_ownerId5); owner1ReleaseRes.ShouldBeTrue(); owner2ReleaseRes.ShouldBeTrue(); owner3ReleaseRes.ShouldBeTrue(); owner4ReleaseRes.ShouldBeTrue(); owner5ReleaseRes.ShouldBeTrue(); var semaInfo = await sema.GetSemaphoreInfo(); var owners = sema.Deserialize(semaInfo.OwnersJson); owners.Owners.Count().ShouldBe(0); owner6Res = await sema.TryAcquire(_ownerId6); var owner7Res = await sema.TryAcquire(_ownerId7); var owner8Res = await sema.TryAcquire(_ownerId8); var owner9Res = await sema.TryAcquire(_ownerId9); var owner10Res = await sema.TryAcquire(_ownerId10); owner6Res.ShouldBeTrue(); owner7Res.ShouldBeTrue(); owner8Res.ShouldBeTrue(); owner9Res.ShouldBeTrue(); owner10Res.ShouldBeTrue(); }