Beispiel #1
0
        public async Task RaiseEventAsync_forwards_to_bus(IBus bus, FirstTestEvent testEvent)
        {
            await BusExtensions.RaiseEventAsync(bus, testEvent);

            Mock.Get(bus).Verify(p => p.RaiseEventAsync(testEvent, It.IsAny <Guid>(), It.IsAny <IDictionary <string, string> >()));
        }
Beispiel #2
0
        public async Task NotifySuccess_acks_event_messages([Frozen] IRabbitMqConfiguration configuration, RabbitMqBusEngine sut, string consumerTag, ulong deliveryTag, bool redelivered, string exchange, string routingKey, string messageId, Guid correlationId, FirstTestEvent @event)
        {
            sut.SubscribeToEvent <FirstTestEvent>();

            var sequence = await sut.StartAsync().ConfigureAwait(false);

            var encoding = Encoding.UTF8;

            IBasicProperties properties = new BasicProperties
            {
                MessageId       = messageId,
                ContentEncoding = encoding.WebName,
                Headers         = new Dictionary <string, object>
                {
                    ["Nybus:MessageId"]     = encoding.GetBytes(messageId),
                    ["Nybus:MessageType"]   = encoding.GetBytes(DescriptorName(@event.GetType())),
                    ["Nybus:CorrelationId"] = correlationId.ToByteArray()
                }
            };

            var body = configuration.Serializer.SerializeObject(@event, encoding);

            var incomingMessages = sequence.DumpInList();

            sut.Consumers.First().Value.HandleBasicDeliver(consumerTag, deliveryTag, redelivered, exchange, routingKey, properties, body);

            await sut.NotifySuccessAsync(incomingMessages.First());

            Mock.Get(configuration.ConnectionFactory.CreateConnection().CreateModel()).Verify(p => p.BasicAck(deliveryTag, It.IsAny <bool>()));
        }
Beispiel #3
0
        public async Task RabbitMq_headers_are_read_from_incoming_message([Frozen] IRabbitMqConfiguration configuration, RabbitMqBusEngine sut, string consumerTag, ulong deliveryTag, bool redelivered, string exchange, string routingKey, string messageId, Guid correlationId, FirstTestEvent Event, string headerKey, string headerValue)
        {
            sut.SubscribeToEvent <FirstTestEvent>();

            var sequence = await sut.StartAsync();

            var encoding = Encoding.UTF8;

            IBasicProperties properties = new BasicProperties
            {
                MessageId       = messageId,
                ContentEncoding = encoding.WebName,
                Headers         = new Dictionary <string, object>
                {
                    ["Nybus:MessageId"]       = encoding.GetBytes(messageId),
                    ["Nybus:MessageType"]     = encoding.GetBytes(DescriptorName(Event.GetType())),
                    ["Nybus:CorrelationId"]   = correlationId.ToByteArray(),
                    [$"RabbitMq:{headerKey}"] = headerValue
                }
            };

            var body = configuration.Serializer.SerializeObject(Event, encoding);

            var incomingMessages = sequence.DumpInList();

            sut.Consumers.First().Value.HandleBasicDeliver(consumerTag, deliveryTag, redelivered, exchange, routingKey, properties, body);

            Assert.That(incomingMessages, Has.Exactly(1).InstanceOf <EventMessage <FirstTestEvent> >());

            var message = incomingMessages[0] as EventMessage <FirstTestEvent>;

            Assert.That(message, Is.Not.Null);
            Assert.That(message.MessageId, Is.EqualTo(messageId));
            Assert.That(message.MessageType, Is.EqualTo(MessageType.Event));
            Assert.That(message.Type, Is.EqualTo(Event.GetType()));
            Assert.That(message.Event, Is.Not.Null);

            Assert.That(message.Headers, Contains.Key($"RabbitMq:{headerKey}"));
            Assert.That(message.Headers[$"RabbitMq:{headerKey}"], Is.EqualTo(headerValue));
        }
Beispiel #4
0
        public async Task Event_is_raised_with_given_correlationId([Frozen] IBus bus, [Frozen] Message message, NybusDispatcher sut, FirstTestEvent testEvent, IDictionary <string, string> headers)
        {
            await sut.RaiseEventAsync(testEvent, headers);

            Mock.Get(bus).Verify(p => p.RaiseEventAsync(testEvent, message.Headers.CorrelationId, It.IsAny <IDictionary <string, string> >()), Times.Once);
        }
Beispiel #5
0
        public async Task Events_with_invalid_type_format_are_ignored_and_nacked([Frozen] IRabbitMqConfiguration configuration, RabbitMqBusEngine sut, string consumerTag, ulong deliveryTag, bool redelivered, string exchange, string routingKey, string messageId, Guid correlationId, FirstTestEvent @event)
        {
            sut.SubscribeToEvent <FirstTestEvent>();

            var sequence = await sut.StartAsync();

            var encoding = Encoding.UTF8;

            IBasicProperties properties = new BasicProperties
            {
                MessageId       = messageId,
                ContentEncoding = encoding.WebName,
                Headers         = new Dictionary <string, object>
                {
                    ["Nybus:MessageId"]     = encoding.GetBytes(messageId),
                    ["Nybus:MessageType"]   = encoding.GetBytes(@event.GetType().FullName),
                    ["Nybus:CorrelationId"] = correlationId.ToByteArray()
                }
            };

            var body = configuration.Serializer.SerializeObject(@event, encoding);

            var incomingMessages = sequence.DumpInList();

            sut.Consumers.First().Value.HandleBasicDeliver(consumerTag, deliveryTag, redelivered, exchange, routingKey, properties, body);

            Assert.That(incomingMessages, Is.Empty);

            Mock.Get(configuration.ConnectionFactory.CreateConnection().CreateModel()).Verify(p => p.BasicNack(deliveryTag, It.IsAny <bool>(), It.IsAny <bool>()));
        }
        public async Task RaiseEventAsync_forwards_with_empty_header_set(IDispatcher dispatcher, FirstTestEvent testEvent)
        {
            await DispatcherExtensions.RaiseEventAsync(dispatcher, testEvent);

            Mock.Get(dispatcher).Verify(p => p.RaiseEventAsync(testEvent, It.IsAny <IDictionary <string, string> >()));
        }
 public void RaiseEventAsync_requires_dispatcher(FirstTestEvent testEvent)
 {
     Assert.ThrowsAsync <ArgumentNullException>(() => DispatcherExtensions.RaiseEventAsync(null, testEvent));
 }
Beispiel #8
0
        public void CreateEventMessage_returns_message_from_Envelope([Frozen] ISerializer serializer, EnvelopeService sut, Envelope envelope, FirstTestEvent testEvent)
        {
            envelope.MessageType = MessageType.Event;

            Mock.Get(serializer).Setup(p => p.DeserializeObject(It.IsAny <string>(), typeof(FirstTestEvent))).Returns(testEvent);

            var eventMessage = sut.CreateEventMessage(envelope, typeof(FirstTestEvent)) as EventMessage <FirstTestEvent>;

            Assert.That(eventMessage, Is.Not.Null);
            Assert.That(eventMessage.Event, Is.SameAs(testEvent));
            Assert.That(eventMessage.Headers, Is.SameAs(envelope.Headers));
            Assert.That(eventMessage.MessageId, Is.EqualTo(envelope.MessageId));
            Assert.That(eventMessage.MessageType, Is.EqualTo(envelope.MessageType));
        }
Beispiel #9
0
        public async Task RaiseEventAsync_forwards_given_headers([Frozen] IBusEngine engine, NybusHost sut, FirstTestEvent testEvent, Guid correlationId, string headerKey, string headerValue)
        {
            var headers = new Dictionary <string, string>
            {
                [headerKey] = headerValue
            };

            await sut.RaiseEventAsync(testEvent, correlationId, headers);

            Mock.Get(engine).Verify(p => p.SendMessageAsync(It.Is <Message>(message => message.Headers.ContainsKey(headerKey) && message.Headers[headerKey] == headerValue)));
        }
Beispiel #10
0
        public async Task RaiseEventAsync_forwards_message_to_engine([Frozen] IBusEngine engine, NybusHost sut, FirstTestEvent testEvent, Guid correlationId, IDictionary <string, string> headers)
        {
            await sut.RaiseEventAsync(testEvent, correlationId, headers);

            Mock.Get(engine).Verify(p => p.SendMessageAsync(It.Is <EventMessage <FirstTestEvent> >(m => ReferenceEquals(m.Event, testEvent) && m.Headers.CorrelationId == correlationId)), Times.Once);
        }