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); }
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"))); }
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); }
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); }
public async Task TryExtendAsync_EmptyInstances() { var l = new Redlock("r", "n", Ttl, _now, _emptyInstances, _log); Assert.Null(await l.TryExtendAsync()); }