public SendingErrorPolicyTests(SharedTestDirectory testDirectory) { _logger = new RecordingLogger(); _scheduler = new TestScheduler(); _store = new LmdbMessageStore(testDirectory.CreateNewDirectoryForTest()); _subject = new Subject <OutgoingMessageFailure>(); _errorPolicy = new SendingErrorPolicy(_logger, _store, _subject, _scheduler); }
public void Start() { _logger.Debug("Starting LightningQueues"); var errorPolicy = new SendingErrorPolicy(_logger, _messageStore, _sender.FailedToSend()); _sender.StartSending(_messageStore.PersistedOutgoingMessages() .Merge(_sendSubject) .Merge(errorPolicy.RetryStream) .ObserveOn(TaskPoolScheduler.Default)); }
public void errors_in_storage_dont_end_stream() { var message = ObjectMother.NewMessage <OutgoingMessage>(); var store = Substitute.For <IMessageStore>(); store.FailedToSend(Arg.Is(message)).Throws(new Exception("bam!")); var errorPolicy = new SendingErrorPolicy(new RecordingLogger(), store, _subject, _scheduler); bool ended = false; var failure = new OutgoingMessageFailure(); failure.Batch = new OutgoingMessageBatch(message.Destination, new[] { message }, new TcpClient(), new NoSecurity()); using (errorPolicy.RetryStream.Finally(() => ended = true).Subscribe(x => { })) { _subject.OnNext(failure); _scheduler.AdvanceBy(TimeSpan.FromSeconds(1).Ticks); ended.ShouldBeFalse(); } }