コード例 #1
0
        public async Task TryExtendWithRepeaterAsync_UnableToObtainLock()
        {
            var mem = MemInstances(3, (ttl, duration) => ttl);

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

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

            Assert.Null(actualValidUntil);
        }
コード例 #2
0
        public async Task TryExtendAsync()
        {
            var instances = MemInstances(3, (ttl, duration) => ttl);
            var impl      = instances.ToInstances();

            Lock("r", "n", TimeSpan.FromSeconds(10), instances);
            var l = new Redlock("r", "n", Ttl, _now.AddDays(10), impl, _log);

            var actualValidUntil = await l.TryExtendAsync(() => _now);

            Assert.Equal(_now.Add(Ttl), actualValidUntil);
            Assert.All(instances, i => Assert.True(i.Contains("r", "n")));
        }
コード例 #3
0
        public async Task TryExtendAsync_NoQuorum_Errors()
        {
            var err = ErrInstances(3);
            var l   = new Redlock("r", "n", Ttl, _now, err.ToInstances(), _log);
            var actualValidUntil = await l.TryExtendAsync(() => _now);

            Assert.Null(actualValidUntil);
            var errorLogs = _log.Logs.Where(x => x.LogLevel == LogLevel.Error).ToArray();

            Assert.Equal(3, errorLogs.Length);
            Assert.Contains(errorLogs, e => e.Exception == err[0].TryExtendAsyncException);
            Assert.Contains(errorLogs, e => e.Exception == err[1].TryExtendAsyncException);
            Assert.Contains(errorLogs, e => e.Exception == err[2].TryExtendAsyncException);
        }
コード例 #4
0
        public async Task TryExtendAsync_Quorum_Errors()
        {
            var err = ErrInstances(2, (ttl, duration) => ttl);
            var mem = MemInstances(3, (ttl, duration) => ttl);

            Lock("r", "n", mem);
            var l = new Redlock("r", "n", Ttl, _now, TestRedlock.Instances(mem, err), _log);
            var actualValidUntil = await l.TryExtendAsync(() => _now);

            Assert.NotNull(actualValidUntil);
            Assert.Equal(_now.Add(Ttl), actualValidUntil);
            var errorLogs = _log.Logs.Where(x => x.LogLevel == LogLevel.Error).ToArray();

            Assert.Equal(2, errorLogs.Length);
            Assert.Contains(errorLogs, e => e.Exception == err[0].TryExtendAsyncException);
            Assert.Contains(errorLogs, e => e.Exception == err[1].TryExtendAsyncException);
        }
コード例 #5
0
        public async Task TryExtendAsync_EmptyInstances()
        {
            var l = new Redlock("r", "n", Ttl, _now, _emptyInstances, _log);

            Assert.Null(await l.TryExtendAsync());
        }