public void ShouldRaiseFlushFailedOnFlushAsyncWhenHttpClientFails() { var httpClient = HttpClientTestHelper.Create(); httpClient.When(client => client.PostAsync(Arg.Any<string>(), Arg.Any<HttpContent>())).Do(action => { throw new Exception(); }); using (var sink = new EventHubHttpSink(httpClient, "eventHubNameNs", "eventhubName", "pubId", "token", Buffering.DefaultBufferingInterval, Buffering.DefaultBufferingCount, Buffering.DefaultMaxBufferSize, TimeSpan.Zero)) using (var collectErrorsListener = new MockEventListener()) { collectErrorsListener.EnableEvents(SemanticLoggingEventSource.Log, EventLevel.Error, Keywords.All); sink.OnNext(EventEntryTestHelper.Create()); try { sink.FlushAsync().Wait(); Assert.Fail("AggregateException should be thrown."); } catch (AggregateException ex) { Assert.IsInstanceOfType(ex.InnerException, typeof(FlushFailedException)); } Assert.IsTrue(collectErrorsListener.WrittenEntries.Any(x => x.EventId == 1)); } }
public void ShouldRaiseFlushFailedOnFlushAsyncWhenHttpClientFails() { var httpClient = HttpClientTestHelper.Create(); httpClient.When(client => client.PostAsync(Arg.Any <string>(), Arg.Any <HttpContent>())).Do(action => { throw new Exception(); }); using (var sink = new EventHubHttpSink(httpClient, "eventHubNameNs", "eventhubName", "pubId", "token", Buffering.DefaultBufferingInterval, Buffering.DefaultBufferingCount, Buffering.DefaultMaxBufferSize, TimeSpan.Zero)) using (var collectErrorsListener = new MockEventListener()) { collectErrorsListener.EnableEvents(SemanticLoggingEventSource.Log, EventLevel.Error, Keywords.All); sink.OnNext(EventEntryTestHelper.Create()); try { sink.FlushAsync().Wait(); Assert.Fail("AggregateException should be thrown."); } catch (AggregateException ex) { Assert.IsInstanceOfType(ex.InnerException, typeof(FlushFailedException)); } Assert.IsTrue(collectErrorsListener.WrittenEntries.Any(x => x.EventId == 1)); } }
public async Task ShouldWritePropertiesForBatchMessage() { var httpClient = HttpClientTestHelper.Create(); httpClient.PostAsync(Arg.Any <string>(), Arg.Any <HttpContent>()).Returns(Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK))); var entry = EventEntryTestHelper.Create(); using (var sink = new EventHubHttpSink(httpClient, "eventHubNameNs", "eventhubName", "pubId", "token", Buffering.DefaultBufferingInterval, Buffering.DefaultBufferingCount, Buffering.DefaultMaxBufferSize, TimeSpan.Zero)) { sink.OnNext(entry); sink.OnNext(entry); await sink.FlushAsync(); } IList <EventEntry> entries = new List <EventEntry> { entry, entry }; var messages = entries.Select(c => c.ToBatchMessage()); var sendMessage = new ServiceBusHttpMessage { Body = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(messages)) }; var byteRepresentation = sendMessage.Body; await httpClient.Received().PostAsync(Arg.Any <string>(), Arg.Is <HttpContent>(c => byteRepresentation.SequenceEqual(c.ReadAsByteArrayAsync().Result))); }
public async Task ShouldWriteEntriesOnFlushAsync() { var httpClient = HttpClientTestHelper.Create(); httpClient.PostAsync(Arg.Any <string>(), Arg.Any <HttpContent>()).Returns(Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK))); using (var sink = new EventHubHttpSink(httpClient, "eventHubNameNs", "eventhubName", "pubId", "token", Buffering.DefaultBufferingInterval, Buffering.DefaultBufferingCount, Buffering.DefaultMaxBufferSize, TimeSpan.Zero)) { sink.OnNext(EventEntryTestHelper.Create()); sink.OnNext(EventEntryTestHelper.Create()); await sink.FlushAsync(); } await httpClient.Received().PostAsync(Arg.Any <string>(), Arg.Any <HttpContent>()); }
public async Task ShouldWritePropertiesForBatchMessageUsingAutoSizedBatch() { var httpClient = HttpClientTestHelper.Create(); httpClient.PostAsync(Arg.Any <string>(), Arg.Any <HttpContent>()).Returns(Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK))); var entry = EventEntryTestHelper.Create(); using (var sink = new EventHubHttpSink(httpClient, "eventHubNameNs", "eventhubName", "pubId", "token", Buffering.DefaultBufferingInterval, 0, Buffering.DefaultMaxBufferSize, TimeSpan.Zero)) { foreach (var i in Enumerable.Range(0, 500)) { sink.OnNext(entry); } await sink.FlushAsync(); } await httpClient.Received(2).PostAsync(Arg.Any <string>(), Arg.Is <HttpContent>(c => c.Headers.ContentLength < 256 * 1024)); }
public async Task ShouldNotUseBatchMessagesWhenBatchCountSetToOne() { var httpClient = HttpClientTestHelper.Create(); httpClient.PostAsync(Arg.Any <string>(), Arg.Any <HttpContent>()).Returns(Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK))); var entry = EventEntryTestHelper.Create(); using (var sink = new EventHubHttpSink(httpClient, "eventHubNameNs", "eventhubName", "pubId", "token", Buffering.DefaultBufferingInterval, 1, 500, TimeSpan.Zero)) { sink.OnNext(entry); sink.OnNext(entry); await sink.FlushAsync(); } var byteRepresentation = Encoding.Default.GetBytes(JsonConvert.SerializeObject(entry)); await httpClient.Received(2).PostAsync(Arg.Any <string>(), Arg.Is <HttpContent>(c => byteRepresentation.SequenceEqual(c.ReadAsByteArrayAsync().Result))); }
public async Task ShouldWriteEntriesOnFlushAsync() { var httpClient = HttpClientTestHelper.Create(); httpClient.PostAsync(Arg.Any<string>(), Arg.Any<HttpContent>()).Returns(Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK))); using (var sink = new EventHubHttpSink(httpClient, "eventHubNameNs", "eventhubName", "pubId", "token", Buffering.DefaultBufferingInterval, Buffering.DefaultBufferingCount, Buffering.DefaultMaxBufferSize, TimeSpan.Zero)) { sink.OnNext(EventEntryTestHelper.Create()); sink.OnNext(EventEntryTestHelper.Create()); await sink.FlushAsync(); } await httpClient.Received().PostAsync(Arg.Any<string>(), Arg.Any<HttpContent>()); }
public async Task ShouldWritePropertiesForBatchMessage() { var httpClient = HttpClientTestHelper.Create(); httpClient.PostAsync(Arg.Any<string>(), Arg.Any<HttpContent>()).Returns(Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK))); var entry = EventEntryTestHelper.Create(); using (var sink = new EventHubHttpSink(httpClient, "eventHubNameNs", "eventhubName", "pubId", "token", Buffering.DefaultBufferingInterval, Buffering.DefaultBufferingCount, Buffering.DefaultMaxBufferSize, TimeSpan.Zero)) { sink.OnNext(entry); sink.OnNext(entry); await sink.FlushAsync(); } IList<EventEntry> entries = new List<EventEntry> { entry, entry }; var messages = entries.Select(c => c.ToBatchMessage()); var sendMessage = new ServiceBusHttpMessage { Body = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(messages)) }; var byteRepresentation = sendMessage.Body; await httpClient.Received().PostAsync(Arg.Any<string>(), Arg.Is<HttpContent>(c => byteRepresentation.SequenceEqual(c.ReadAsByteArrayAsync().Result))); }
public async Task ShouldNotUseBatchMessagesWhenBatchCountSetToOne() { var httpClient = HttpClientTestHelper.Create(); httpClient.PostAsync(Arg.Any<string>(), Arg.Any<HttpContent>()).Returns(Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK))); var entry = EventEntryTestHelper.Create(); using (var sink = new EventHubHttpSink(httpClient, "eventHubNameNs", "eventhubName", "pubId", "token", Buffering.DefaultBufferingInterval, 1, 500, TimeSpan.Zero)) { sink.OnNext(entry); sink.OnNext(entry); await sink.FlushAsync(); } var byteRepresentation = Encoding.Default.GetBytes(JsonConvert.SerializeObject(entry)); await httpClient.Received(2).PostAsync(Arg.Any<string>(), Arg.Is<HttpContent>(c => byteRepresentation.SequenceEqual(c.ReadAsByteArrayAsync().Result))); }