public void Unlock(LockReference lockReference)
        {
            if (!(lockReference is RedLockReference redLockReference))
            {
                throw new ArgumentException("Only type of RedisLockReference can be used");
            }

            if (!redLockReference.LockAcquired)
            {
                return;
            }

            redLockReference.Release();
        }
        public void It_Should_Handover_When_MasterRoleExists_And_Closed_Gracefully()
        {
            //Arrange

            var lockReference = new LockReference(true);

            _provider.Setup(provider => provider.LockAsync(_clusterInformation.ClusterName))
            .ReturnsAsync(lockReference);

            _sut.Claim().Wait();

            //Act
            _sut.Close();

            //Assert
            _provider.Verify(provider =>
                             provider.Unlock(lockReference));
        }
 internal async Task Claim()
 {
     _lockReference = await _provider.LockAsync(ClusterInformation.ClusterName);
 }
 public MinilockClusterStatusTracker(IMinilockProvider provider, ClusterInformation clusterInformation)
 {
     _provider          = provider;
     _lockReference     = new LockReference(false);
     ClusterInformation = clusterInformation;
 }