public void TryObtainLock_InactiveLeaseExistsBySameOwner_LockObtained(
            ILeaseService service,
            ISystemContext ctx,
            ElasticLease inactiveLease,
            TestIndexUtils contactIndex)
        {
            using (contactIndex)
            {
                // write inactive lease
                service.TryObtainLock(inactiveLease, ctx, out inactiveLease).Should().BeTrue();

                var activeLease = new ElasticLease(
                    inactiveLease.ResourceId,
                    DateTime.UtcNow + TimeSpan.FromHours(1),
                    inactiveLease.Owner,
                    inactiveLease.Version);

                ElasticLease winner;
                service.TryObtainLock(activeLease, ctx, out winner).Should().BeTrue();
                activeLease.ShouldBeEquivalentTo(winner);
            }
        }
 public void TryObtainLock_NoLeaseExists_LockObtained(
     ILeaseService service,
     ISystemContext ctx,
     ElasticLease lease,
     TestIndexUtils contactIndex)
 {
     using (contactIndex)
     {
         ElasticLease winner;
         service.TryObtainLock(lease, ctx, out winner).Should().BeTrue();
         lease.ShouldBeEquivalentTo(winner);
     }
 }
        public void TryObtainLock_InactiveLeaseExistsByDifferentOwner_LockObtained(
            ILeaseService service,
            ISystemContext ctx,
            ElasticLease owner1InactiveLease,
            TestIndexUtils contactIndex,
            IFixture fixture)
        {
            using (contactIndex)
            {
                service.TryObtainLock(owner1InactiveLease, ctx, out owner1InactiveLease).Should().BeTrue();

                var owner2ActiveLease = new ElasticLease(
                    owner1InactiveLease.ResourceId,
                    DateTime.UtcNow + TimeSpan.FromHours(2),
                    fixture.Create<ElasticLeaseOwner>(),
                    owner1InactiveLease.Version);

                ElasticLease winner;
                service.TryObtainLock(owner2ActiveLease, ctx, out winner).Should().BeTrue();
                owner2ActiveLease.ShouldBeEquivalentTo(winner);
            }
        }
        public void TryObtainLock_ActiveLeaseExistsBySameOwner_LockObtained(
            ILeaseService service,
            ISystemContext ctx,
            ElasticLease activeLease,
            TestIndexUtils contactIndex,
            IFixture fixture
            )
        {
            using (contactIndex)
            {
                service.TryObtainLock(activeLease, ctx, out activeLease);

                var activeLease2 = new ElasticLease(
                    activeLease.ResourceId,
                    DateTime.UtcNow + TimeSpan.FromHours(2),
                    activeLease.Owner,
                    activeLease.Version);

                ElasticLease winner;
                service.TryObtainLock(activeLease2, ctx, out winner);
                activeLease2.ShouldBeEquivalentTo(winner);
            }
        }
        public void TryObtainLock_ActiveLeaseExistsByDifferentOwner_LockRefused(
            ILeaseService service,
            ISystemContext ctx,
            ElasticLease owner1ActiveLease,
            TestIndexUtils contactIndex,
            IFixture fixture)
        {
            using (contactIndex)
            {
                ElasticLease winner;
                service.TryObtainLock(owner1ActiveLease, ctx, out winner).Should().BeTrue();

                var owner2ActiveLease = new ElasticLease(
                    winner.ResourceId,
                    DateTime.UtcNow + TimeSpan.FromHours(1),
                    fixture.Create<ElasticLeaseOwner>(),
                    winner.Version);

                service.TryObtainLock(owner2ActiveLease, ctx, out winner).Should().BeFalse();
            }
        }