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)); }
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)); }