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);
 }
Exemplo n.º 2
0
        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();
            }
        }