public RedlockFactoryExtensionsTests()
 {
     _f = new Mock <IRedlockFactory>(
         MockBehavior.Strict);
     _defaultTtl     = TimeSpan.FromMinutes(10);
     _defaultMaxWait = 10;
     _impl           = TestRedlockImplementation.Create(TestRedlock.Instances(5, MemoryRedlockInstance.Create));
 }
Example #2
0
        public RedlockFactoryTests()
        {
            var minValidity = TimeSpan.FromSeconds(10);

            _mem = TestRedlock.Instances(3, i => new MemoryRedlockInstance(i.ToString(), (ttl, duration) => minValidity));
            var now  = new DateTime(2020, 07, 08, 1, 2, 3, DateTimeKind.Utc);
            var impl = TestRedlockImplementation.Create(_mem);

            _expectedValidUntil = new DateTime(2020, 07, 08, 1, 2, 13, DateTimeKind.Utc);
            _f = new TestRedlockFactory(impl, () => now, NullLogger <RedlockFactory> .Instance);
        }
Example #3
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);
        }
Example #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);
        }
Example #5
0
        public async Task DisposeAsync_ExceptionsOnUnlock()
        {
            var mem = MemInstances(3);
            var err = ErrInstances(2);
            var l   = new Redlock("r", "n", Ttl, _now, TestRedlock.Instances(mem, err), _log);

            Lock("r", "n", mem);

            await l.DisposeAsync();

            Assert.All(mem, i => Assert.False(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].UnlockAsyncException);
            Assert.Contains(errorLogs, e => e.Exception == err[1].UnlockAsyncException);
        }
Example #6
0
        public void TryLock_ExceptionsOnLock_NoQuorum()
        {
            var mem = MemInstances(2);
            var err = ErrInstances(3);

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

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

            Assert.Equal(6, errorLogs.Length);
            Assert.Contains(errorLogs, e => e.Exception == err[0].TryLockException);
            Assert.Contains(errorLogs, e => e.Exception == err[1].TryLockException);
            Assert.Contains(errorLogs, e => e.Exception == err[2].TryLockException);
            Assert.Contains(errorLogs, e => e.Exception == err[0].UnlockException);
            Assert.Contains(errorLogs, e => e.Exception == err[1].UnlockException);
            Assert.Contains(errorLogs, e => e.Exception == err[2].UnlockException);
        }
Example #7
0
 private static ImmutableArray <T> Instances <T>(int count, Func <int, T> create) => TestRedlock.Instances(count, create);