Beispiel #1
0
        public async Task Should_start_new_queue_reader_when_lock_is_released()
        {
            //arrange
            var lockManager = new Mock <ISingletonLockManager>();

            lockManager.SetupSequence(x => x.TryLockAsync(It.IsAny <string>(), TimeSpan.FromSeconds(60), CancellationToken.None))
            .ReturnsAsync(Mock.Of <ISingletonLockHandle>())
            .ReturnsAsync((ISingletonLockHandle)null)
            .ReturnsAsync(Mock.Of <ISingletonLockHandle>());
            var underlyingReader = new Mock <IChannelReceiver>();

            underlyingReader.Setup(x => x.Settings).Returns(new Mock <IProcessingSettings>().Object);
            var singletonChannelReceiver = new SingletonChannelReceiver(underlyingReader.Object, lockManager.Object, Mock.Of <ILog>())
            {
                TimerIntervalMs = 1000
            };
            //act
            await singletonChannelReceiver.StartAsync(CancellationToken.None);

            await singletonChannelReceiver.StartAsync(CancellationToken.None);

            await Task.Delay(1500);

            //assert
            underlyingReader.Verify(x => x.StartAsync(CancellationToken.None), Times.Exactly(2));
        }
Beispiel #2
0
        public async Task Should_restart_queue_reader_when_lock_is_lost()
        {
            //arrange
            var handle      = new Mock <ISingletonLockHandle>();
            var lockManager = new Mock <ISingletonLockManager>();

            lockManager.Setup(x => x.TryLockAsync(It.IsAny <string>(), TimeSpan.FromSeconds(60), CancellationToken.None))
            .ReturnsAsync(handle.Object);

            handle.SetupSequence(x => x.RenewAsync(It.IsAny <ILog>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(true)
            .Throws(new Exception())
            .ReturnsAsync(true);

            var underlyingReceiver = new Mock <IChannelReceiver>();

            underlyingReceiver.Setup(x => x.Settings).Returns(new Mock <IProcessingSettings>().Object);
            var singletonChannelReceiver = new SingletonChannelReceiver(underlyingReceiver.Object, lockManager.Object, Mock.Of <ILog>())
            {
                TimerInterval       = TimeSpan.FromSeconds(1),
                LockRefreshInterval = TimeSpan.FromSeconds(1)
            };
            //act
            await singletonChannelReceiver.StartAsync(CancellationToken.None);

            await Task.Delay(2000);

            //assert
            underlyingReceiver.Verify(x => x.StartAsync(It.IsAny <CancellationToken>()), Times.Exactly(2));
        }