Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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();
        }