public async Task SendAsyncLogsIngestionReponseTimeAndStatusCode() { var handler = new HandlerForFakeHttpClient { InnerHandler = new HttpClientHandler(), OnSendAsync = (req, cancellationToken) => { return(Task.FromResult <HttpResponseMessage>(new HttpResponseMessage())); } }; using (var fakeHttpClient = new HttpClient(handler)) { // Instantiate Transmission with the mock HttpClient Transmission transmission = new Transmission(testUri, new byte[] { 1, 2, 3, 4, 5 }, fakeHttpClient, string.Empty, string.Empty); using (var listener = new TestEventListener()) { var eventCounterArguments = new Dictionary <string, string> { { "EventCounterIntervalSec", "1" } }; listener.EnableEvents(CoreEventSource.Log, EventLevel.LogAlways, (EventKeywords)AllKeywords, eventCounterArguments); HttpWebResponseWrapper result = await transmission.SendAsync(); // VERIFY // We validate by checking SDK traces. var allTraces = listener.Messages.ToList(); // Event 67 is logged after response from Ingestion Service. var traces = allTraces.Where(item => item.EventId == 67).ToList(); Assert.AreEqual(1, traces.Count); } } }
public async Task SendAsyncUsesEmptyContentTypeIfNoneSpecifiedInConstructor() { var handler = new HandlerForFakeHttpClient { InnerHandler = new HttpClientHandler(), OnSendAsync = (req, cancellationToken) => { // VALIDATE Assert.IsNull(req.Content.Headers.ContentType); return Task.FromResult<HttpResponseMessage>(new HttpResponseMessage()); } }; using (var fakeHttpClient = new HttpClient(handler)) { var items = new List<ITelemetry> { new EventTelemetry(), new EventTelemetry() }; // Instantiate Transmission with the mock HttpClient var transmission = new Transmission(testUri, new byte[] { 1, 2, 3, 4, 5 }, fakeHttpClient, string.Empty, "ContentEncoding"); HttpWebResponseWrapper result = await transmission.SendAsync(); } }
public async Task SendAsyncSendsContentPassedInConstructor() { var expectedContent = new byte[] {1, 2, 3, 4, 5}; var handler = new HandlerForFakeHttpClient { InnerHandler = new HttpClientHandler(), OnSendAsync = async (req, cancellationToken) => { HttpResponseMessage response = new HttpResponseMessage(); byte[] actualContent = await req.Content.ReadAsByteArrayAsync(); AssertEx.AreEqual(expectedContent, actualContent); return await Task.FromResult<HttpResponseMessage>(response); } }; using (var fakeHttpClient = new HttpClient(handler)) { // Instantiate Transmission with the mock HttpClient Transmission transmission = new Transmission(testUri, expectedContent, fakeHttpClient, string.Empty, string.Empty); // ACT HttpWebResponseWrapper result = await transmission.SendAsync(); } }
public async Task TestTransmissionStatusEventHandlerWithUnKnownFailureTransmission() { // ARRANGE var handler = new HandlerForFakeHttpClient { InnerHandler = new HttpClientHandler(), OnSendAsync = (req, cancellationToken) => { throw new Exception("test"); } }; using (var fakeHttpClient = new HttpClient(handler)) { // Instantiate Transmission with the mock HttpClient Transmission transmission = new Transmission(testUri, new byte[] { 1, 2, 3, 4, 5 }, fakeHttpClient, string.Empty, string.Empty); transmission.Timeout = TimeSpan.Zero; // VALIDATE transmission.TransmissionStatusEvent += delegate(object sender, TransmissionStatusEventArgs args) { Assert.AreEqual(999, args.Response.StatusCode); Assert.AreEqual(0, args.ResponseDurationInMs); }; // ACT try { HttpWebResponseWrapper result = await transmission.SendAsync(); } catch (Exception ex) { Assert.AreEqual("test", ex.Message); } } }
public async Task TestTransmissionStatusEventWithEventsFromMultipleIKey() { // ARRANGE // Raw response from backend for partial response var ingestionResponse = "{" + "\r\n \"itemsReceived\": 5,\r\n \"itemsAccepted\": 2,\r\n " + "\"errors\": [\r\n {\r\n " + "\"index\": 0,\r\n \"statusCode\": 400,\r\n \"message\": \"Error 1\"\r\n },\r\n {\r\n " + "\"index\": 2,\r\n \"statusCode\": 503,\r\n \"message\": \"Error 2\"\r\n },\r\n {\r\n " + "\"index\": 3,\r\n \"statusCode\": 500,\r\n \"message\": \"Error 3\"\r\n }\r\n ]\r\n}"; // Fake HttpClient will respond back with partial content var handler = new HandlerForFakeHttpClient { InnerHandler = new HttpClientHandler(), OnSendAsync = (req, cancellationToken) => { return(Task.FromResult <HttpResponseMessage>(new HttpResponseMessage { StatusCode = HttpStatusCode.PartialContent, Content = new StringContent(ingestionResponse) })); } }; using (var fakeHttpClient = new HttpClient(handler)) { // Create a list of telemetry which could send information to different instrumentation keys var telemetryItems = new List <ITelemetry>(); EventTelemetry eventTelemetry1 = new EventTelemetry("Event1"); eventTelemetry1.Context.InstrumentationKey = "IKEY_1"; telemetryItems.Add(eventTelemetry1); EventTelemetry eventTelemetry2 = new EventTelemetry("Event2"); eventTelemetry2.Context.InstrumentationKey = "IKEY_2"; telemetryItems.Add(eventTelemetry2); EventTelemetry eventTelemetry3 = new EventTelemetry("Event3"); eventTelemetry3.Context.InstrumentationKey = "IKEY_3"; telemetryItems.Add(eventTelemetry3); EventTelemetry eventTelemetry4 = new EventTelemetry("Event3"); eventTelemetry4.Context.InstrumentationKey = "IKEY_2"; telemetryItems.Add(eventTelemetry4); EventTelemetry eventTelemetry5 = new EventTelemetry("Event5"); eventTelemetry5.Context.InstrumentationKey = "IKEY_1"; telemetryItems.Add(eventTelemetry5); // Serialize the telemetry items before passing to transmission var serializedData = JsonSerializer.Serialize(telemetryItems, true); // Instantiate Transmission with the mock HttpClient Transmission transmission = new Transmission(testUri, serializedData, fakeHttpClient, string.Empty, string.Empty); // VALIDATE transmission.TransmissionStatusEvent += delegate(object sender, TransmissionStatusEventArgs args) { var sendertransmission = sender as Transmission; // convert raw JSON response to Backendresponse object BackendResponse backendResponse = GetBackendResponse(args.Response.Content); // Deserialize telemetry items to identify which items has failed string[] items = JsonSerializer .Deserialize(sendertransmission.Content) .Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); string[] failedItems = new string[3]; int i = 0; // Create a list of failed items foreach (var error in backendResponse.Errors) { failedItems[i++] = items[error.Index]; } Assert.AreEqual((int)HttpStatusCode.PartialContent, args.Response.StatusCode); Assert.AreEqual(5, backendResponse.ItemsReceived); Assert.AreEqual(2, backendResponse.ItemsAccepted); //IKEY_1 int totalItemsForIkey = items.Where(x => x.Contains("IKEY_1")).Count(); int failedItemsForIkey = failedItems.Where(x => x.Contains("IKEY_1")).Count(); Assert.AreEqual(2, totalItemsForIkey); Assert.AreEqual(1, failedItemsForIkey); //IKEY_2 totalItemsForIkey = items.Where(x => x.Contains("IKEY_2")).Count(); failedItemsForIkey = failedItems.Where(x => x.Contains("IKEY_2")).Count(); Assert.AreEqual(2, totalItemsForIkey); Assert.AreEqual(1, failedItemsForIkey); //IKEY_3 totalItemsForIkey = items.Where(x => x.Contains("IKEY_3")).Count(); failedItemsForIkey = failedItems.Where(x => x.Contains("IKEY_3")).Count(); Assert.AreEqual(1, totalItemsForIkey); Assert.AreEqual(1, failedItemsForIkey); }; // ACT HttpWebResponseWrapper result = await transmission.SendAsync(); } }