public async Task SendAsyncTransformsEventBatches() { var messages = new[] { AmqpMessage.Create(new Data { Value = new ArraySegment <byte>(new byte[] { 0x11 }) }), AmqpMessage.Create(new Data { Value = new ArraySegment <byte>(new byte[] { 0x22 }) }), AmqpMessage.Create(new Data { Value = new ArraySegment <byte>(new byte[] { 0x33 }) }), }; var options = new BatchOptions { MaximumizeInBytes = 30 }; var transportBatch = new TransportBatchMock { Messages = messages }; var batch = new EventDataBatch(transportBatch, options); var mock = new ObservableSenderMock(new ClientMock(), null); var producer = new TrackOneEventHubProducer(_ => mock, Mock.Of <EventHubRetryPolicy>()); await producer.SendAsync(batch, CancellationToken.None); Assert.That(mock.SendCalledWithParameters, Is.Not.Null, "The Send request should have been delegated."); var sentEvents = mock.SendCalledWithParameters.Events.ToArray(); Assert.That(sentEvents.Length, Is.EqualTo(messages.Length), "The number of events sent should match the number of source events."); Assert.That(sentEvents.Where(evt => evt.AmqpMessage == null).Any(), Is.False, "The events should have had an AMQP message populated at transform."); var sentMessages = sentEvents.Select(evt => evt.AmqpMessage).ToList(); for (var index = 0; index < messages.Length; ++index) { Assert.That(sentMessages.Contains(messages[index]), $"The message at index: { index } was not part of the set that was sent."); } foreach (var message in messages) { message.Dispose(); } }
public async Task SendAsyncForwardsThePartitionHashKeyForBatches() { var messages = new[] { AmqpMessage.Create(new Data { Value = new ArraySegment <byte>(new byte[] { 0x11 }) }), AmqpMessage.Create(new Data { Value = new ArraySegment <byte>(new byte[] { 0x22 }) }), AmqpMessage.Create(new Data { Value = new ArraySegment <byte>(new byte[] { 0x33 }) }), }; var expectedHashKey = "TestKEy"; var options = new BatchOptions { MaximumizeInBytes = 30, PartitionKey = expectedHashKey }; var transportBatch = new TransportBatchMock { Messages = messages }; var batch = new EventDataBatch(transportBatch, options); var mock = new ObservableSenderMock(new ClientMock(), null); var producer = new TrackOneEventHubProducer(_ => mock, Mock.Of <EventHubRetryPolicy>()); await producer.SendAsync(batch, CancellationToken.None); Assert.That(mock.SendCalledWithParameters, Is.Not.Null, "The Send request should have been delegated."); (_, var actualHashKey) = mock.SendCalledWithParameters; Assert.That(actualHashKey, Is.EqualTo(expectedHashKey), "The partition hash key should have been forwarded."); foreach (var message in messages) { message.Dispose(); } }