Esempio n. 1
0
        /// <summary>
        ///
        /// </summary>
        /// <exception cref="EndpointNotFoundException"></exception>
        /// <param name="envelope"></param>
        /// <returns></returns>
        public async Task DeliverToLocalProcessors(EnvelopeToClient envelope)
        {
            if (envelope.Messages.Length == 0)
            {
                this.LogWarn("Received an empty envelope from server");
                return;
            }
            var ep = _endpoints.FirstOrDefault(d => d.Id == envelope.To);

            if (ep == null)
            {
                _errors.UnknownEndpoint(new EndpointNotFoundException(envelope.To, _hostName));
                return;
            }

            var toSend = ep.Filter(envelope.Messages);

            if (toSend.Length != envelope.Messages.Length)
            {
                var diff = toSend.Compare(envelope.Messages, (m1, m2) => m1.Id == m2.Id);
                _errors.MessagesRejected(ep.Id, diff.Removed.ToArray());
                _auditor.MessagesRejected(envelope.To, diff.Removed);
            }
            _auditor.DispatchStarted(_hostName, toSend);
            await SendToProcessor(ep, toSend).ConfigureFalse();

            _auditor.DispatchEnded(toSend);
        }
 protected override void MarkAsHandled(EnvelopeToClient env)
 {
     if (Handled != null)
     {
         throw new Exception("Already handled");
     }
     Handled = env;
 }
        public async Task received_messages_are_not_sent_to_server()
        {
            var to = new EnvelopeToClient()
            {
                To = new EndpointId("other", "locat"), Messages = new[] { new MyEvent() }
            };
            await _sut.DeliverToLocalProcessors(to).ConfigureFalse();

            await _server.DidNotReceiveWithAnyArgs().SendMessages(null);
        }
        public async Task receive_message_from_server()
        {
            var to = new EnvelopeToClient()
            {
                To = Setup.TestEndpoint, Messages = new [] { new MyEvent() }
            };
            await _sut.DeliverToLocalProcessors(to).ConfigureFalse();

            await _config.Received(1).AddToProcessing(Arg.Any <MyEvent>());
        }
        public async Task receiving_for_unkown_endpoint_sents_to_err_queue()
        {
            var to = new EnvelopeToClient()
            {
                To = new EndpointId("other", "locat"), Messages = new[] { new MyEvent() }
            };
            await _sut.DeliverToLocalProcessors(to).ConfigureFalse();

            _err.Received(1).UnknownEndpoint(Arg.Any <EndpointNotFoundException>());
            await _config.DidNotReceive().AddToProcessing(Arg.Any <MyEvent>());
        }
        public async Task received_but_unkown_messages_are_rejected()
        {
            var to = new EnvelopeToClient()
            {
                To = Setup.TestEndpoint, Messages = new IMessage[] { new MyEvent(), new LocalEvent() }
            };
            await _sut.DeliverToLocalProcessors(to);

            await _config.Received(1).AddToProcessing(Arg.Any <MyEvent>());

            await _config.DidNotReceive().AddToProcessing(Arg.Any <LocalEvent>());

            _err.Received(1).MessagesRejected(Setup.TestEndpoint, Arg.Any <LocalEvent>());
        }
Esempio n. 7
0
 private async Task Send(IDeliverToEndpoint transporter, EnvelopeToClient envelopeTo)
 {
     try
     {
         await transporter.Send(envelopeTo).ConfigureFalse();
     }
     catch (CouldntSendMessagesException ex)
     {
         this.LogError(ex);
         _config.DeliveryErrorsQueue.TransporterError(ex);
     }
     //we need the server to not crash if one transporter throws an unhandled exception
     catch (Exception ex)
     {
         this.LogError(ex);
     }
 }
Esempio n. 8
0
        public async Task routing_messages_for_each_endpoint()
        {
            var myEvent = new MyEvent();
            var env     = new EnvelopeFromClient()
            {
                From     = "some host",
                Messages = new IMessage[] { myEvent, new OtherEvent() }
            };

            EnvelopeToClient dest = null;
            await _transporter.Send(Arg.Do <EnvelopeToClient>(e => dest = e));

            await _sut.Route(env);

            dest.To.Should().Be(Setup.TestEndpoint);
            dest.Messages.ShouldAllBeEquivalentTo(new[] { myEvent });
        }