public async void GivenMeasurementWithDeviceId_WhenAddAsync_ThenEventSentWithDeviceIdAsPartitionKey_Test() { var measurement = Substitute.For <IMeasurement>(); measurement.DeviceId.Returns("1"); await _measurementCollector.AddAsync(measurement).ConfigureAwait(false); await _eventHubService.Received(1) .SendAsync( Arg.Is <IEnumerable <EventData> >( data => data.Count() == 1 && data.First().EventBody.ToObjectFromJson <Measurement>(null).DeviceId == measurement.DeviceId), "1", default); }
public async Task GivenEventsAndDefaultErrorConsumer_WhenProcessAsyncAndConsumerErrors_ThenEachEventResultConsumed_And_ErrorPerBatchProprogated_Test() { _template.GetMeasurements(null).ReturnsForAnyArgs(new[] { Substitute.For <Measurement>() }); var events = Enumerable.Range(0, 10).Select(i => BuildEvent(i)).ToArray(); _consumer.AddAsync(null).ReturnsForAnyArgs(v => Task.FromException(new Exception())); var srv = new MeasurementEventNormalizationService(_logger, _template, _converter, _exceptionTelemetryProcessor, 1, 5); // Set asyncCollectorBatchSize to 5 to produce 2 batches var exception = await Assert.ThrowsAsync <AggregateException>(() => srv.ProcessAsync(events, _consumer)); Assert.Equal(2, exception.InnerExceptions.Count); _template.ReceivedWithAnyArgs(events.Length).GetMeasurements(null); _converter.ReceivedWithAnyArgs(events.Length).Convert(null); await _consumer.Received(2).AddAsync(Arg.Is <IEnumerable <IMeasurement> >(l => l.Count() == 5), Arg.Any <CancellationToken>()); }