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> >())); }
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>())); }
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)); }
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); }
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)); }
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)); }
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))); }
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); }