示例#1
0
        public async Task TryLockAsync_EmptyInstances()
        {
            var now = new DateTime(2020, 7, 21, 13, 00, 00, DateTimeKind.Utc);
            var l   = await Redlock.TryLockAsync("r", "n", Ttl, _emptyInstances, _log, () => now);

            Assert.Null(l);
        }
示例#2
0
        public async Task TryLockAsync()
        {
            var instances = MemInstances(3);

            var @lock = await Redlock.TryLockAsync("r", "n", Ttl, instances.ToInstances(), _log);

            Assert.NotNull(@lock);
            Assert.All(instances, i => Assert.True(i.Contains("r", "n")));
        }
示例#3
0
        public async Task TryLockWithRepeaterAsync_UnableToObtainLock()
        {
            var mem = MemInstances(3);

            Lock("r", "n2", mem);
            var repeater = new Mock <IRedlockRepeater>(MockBehavior.Strict);

            repeater.Setup(x => x.Next()).Returns(false);
            var l = await Redlock.TryLockAsync("r", "n", Ttl, mem.ToInstances(), _log, repeater.Object, 600);

            Assert.Null(l);
        }
示例#4
0
 /// <inheritdoc />
 public Task <Redlock?> TryCreateAsync(string resource, TimeSpan lockTimeToLive, IReadOnlyDictionary <string, string>?meta = null)
 {
     return(Redlock.TryLockAsync(
                resource,
                Nonce(resource, lockTimeToLive),
                lockTimeToLive,
                _impl.Instances,
                _logger,
                _opt.Value.UtcNow,
                meta
                ));
 }
示例#5
0
        public async Task TryLockAsync_NoQuorum()
        {
            var instances = MemInstances(3);

            Lock("r", "n2", instances[0], instances[1]);

            var l = await Redlock.TryLockAsync("r", "n", Ttl, instances.ToInstances(), _log);

            Assert.Null(l);
            Assert.All(instances, i => Assert.False(i.Contains("r", "n")));
            Assert.True(instances[0].Contains("r", "n2"));
            Assert.True(instances[1].Contains("r", "n2"));
            Assert.False(instances[2].Contains("r", "n2"));
        }
示例#6
0
        public async Task TryLockAsync_ExceptionsOnLock_Quorum()
        {
            var mem = MemInstances(3);
            var err = ErrInstances(2);

            var l = await Redlock.TryLockAsync("r", "n", Ttl, TestRedlock.Instances(mem, err), _log);

            Assert.NotNull(l);
            Assert.All(mem, i => i.Contains("r", "n"));
            var errorLogs = _log.Logs.Where(x => x.LogLevel == LogLevel.Error).ToArray();

            Assert.Equal(2, errorLogs.Length);
            Assert.Contains(errorLogs, e => e.Exception == err[0].TryLockAsyncException);
            Assert.Contains(errorLogs, e => e.Exception == err[1].TryLockAsyncException);
        }
示例#7
0
 /// <inheritdoc />
 public Task <Redlock?> TryCreateAsync <T>(string resource, TimeSpan lockTimeToLive, T repeater, int maxWaitMs, IReadOnlyDictionary <string, string>?meta = null)
     where T : IRedlockRepeater
 {
     return(Redlock.TryLockAsync(
                resource,
                Nonce(resource, lockTimeToLive),
                lockTimeToLive,
                _impl.Instances,
                _logger,
                repeater,
                maxWaitMs,
                _opt.Value.UtcNow,
                meta
                ));
 }