public void recovery_is_started_after_connection_is_back() { _timeProvider.Now = new DateTime(2000, 1, 1, 12, 0, 0); var disconnectedTime = _timeProvider.Now - TimeSpan.FromHours(2); _producer.SetLastTimestampBeforeDisconnect(disconnectedTime); var recoveryOperation = new RecoveryOperation(_producer, _recoveryRequestIssuerMock.Object, new[] { DefaultInterest }, 0, false); var recoveryManager = new ProducerRecoveryManager(_producer, recoveryOperation, _timestampTracker, 30); recoveryManager.ProcessSystemMessage(_messageBuilder.BuildAlive()); _recoveryRequestIssuerMock.Verify(x => x.RequestRecoveryAfterTimestampAsync(_producer, disconnectedTime, 0), Times.Once); Assert.AreEqual(ProducerRecoveryStatus.Started, recoveryManager.Status); Debug.Assert(recoveryOperation.RequestId != null, "recoveryOperation.RequestId != null"); recoveryManager.ProcessUserMessage(_messageBuilder.BuildSnapshotComplete(recoveryOperation.RequestId.Value), DefaultInterest); Assert.AreEqual(ProducerRecoveryStatus.Completed, recoveryManager.Status); recoveryManager.ProcessUserMessage(_messageBuilder.BuildAlive(_producer.Id, _timeProvider.Now), DefaultInterest); recoveryManager.ConnectionShutdown(); Assert.AreEqual(ProducerRecoveryStatus.Error, recoveryManager.Status); recoveryManager.ConnectionRecovered(); var time = _timeProvider.Now; _timeProvider.AddSeconds(40); recoveryManager.ProcessSystemMessage(_messageBuilder.BuildAlive()); Assert.AreEqual(ProducerRecoveryStatus.Started, recoveryManager.Status); _recoveryRequestIssuerMock.Verify(x => x.RequestRecoveryAfterTimestampAsync(_producer, time, 0)); }
public void recovery_is_restarted_after_connection_is_up() { var recoveryOperationMock = new Mock <IRecoveryOperation>(); recoveryOperationMock.Setup(x => x.Start()).Returns(true); _producerRecoveryManager = new ProducerRecoveryManager(_producer, recoveryOperationMock.Object, _timestampTracker, 30); _producerRecoveryManager.ProcessSystemMessage(_messageBuilder.BuildAlive()); Assert.AreEqual(ProducerRecoveryStatus.Started, _producerRecoveryManager.Status); recoveryOperationMock.Verify(x => x.Start(), Times.Once); _producerRecoveryManager.ConnectionShutdown(); Assert.AreEqual(ProducerRecoveryStatus.Error, _producerRecoveryManager.Status); recoveryOperationMock.Verify(x => x.Reset(), Times.Once); _producerRecoveryManager.ProcessSystemMessage(_messageBuilder.BuildAlive()); recoveryOperationMock.Verify(x => x.Start(), Times.Exactly(1)); _producerRecoveryManager.ConnectionRecovered(); Assert.AreEqual(ProducerRecoveryStatus.Error, _producerRecoveryManager.Status); recoveryOperationMock.Verify(x => x.Reset(), Times.Once); _producerRecoveryManager.ProcessSystemMessage(_messageBuilder.BuildAlive()); recoveryOperationMock.Verify(x => x.Start(), Times.Exactly(2)); }