public void AddHttpData_NullHeaderDuration_SetsResultToNull() { // Arrange var pde1 = CreateSampleHttpEvent(headerDuration: TimeSpan.FromMilliseconds(150)); var pde2 = CreateSampleHttpEvent(headerDuration: null); var pde3 = CreateSampleHttpEvent(headerDuration: TimeSpan.FromMilliseconds(100)); var data = CreateDataDictionary(SampleSource); // Act PackageSourceTelemetry.AddHttpData(pde1, data); PackageSourceTelemetry.AddHttpData(pde2, data); PackageSourceTelemetry.AddHttpData(pde3, data); // Assert KeyValuePair <string, PackageSourceTelemetry.Data> pair = Assert.Single(data); Assert.Null(pair.Value.Http.HeaderDuration); }
public void AddHttpData_MultipleEvents_DurationsAccumulate() { // Arrange var timings = new[] { TimeSpan.FromMilliseconds(100), TimeSpan.FromMilliseconds(150), TimeSpan.FromMilliseconds(200) }; var data = CreateDataDictionary(SampleSource); // Act for (int i = 0; i < timings.Length; i++) { var pde = CreateSampleHttpEvent(eventDuration: timings[i]); PackageSourceTelemetry.AddHttpData(pde, data); } // Assert var pair = Assert.Single(data); var http = pair.Value.Http; Assert.Equal(timings.Length, http.Requests); Assert.Equal(timings.Aggregate(TimeSpan.Zero, (a, b) => a + b), http.TotalDuration); }
public async Task AddData_IsThreadSafe() { // Arrange var data = CreateDataDictionary(SampleSource); var stringTable = new ConcurrentDictionary <string, ConcurrentDictionary <string, string> >(); var eventsToRaise = 10000; var sources = new HashSet <string> { SampleSource }; Task SendEvents(Action action) { var tasks = new List <Task>(); for (int i = 0; i < eventsToRaise; i++) { tasks.Add(Task.Run(() => action())); } return(Task.WhenAll(tasks)); } var resourceEvent = CreateSampleResourceEvent(); var httpEvent = CreateSampleHttpEvent(); var nupkgCopiedEvent = new ProtocolDiagnosticNupkgCopiedEvent(SampleSource, fileSize: 123456); // Act var resourceEvents = Task.Run(() => SendEvents(() => PackageSourceTelemetry.AddResourceData(resourceEvent, data, stringTable))); var httpEvents = Task.Run(() => SendEvents(() => PackageSourceTelemetry.AddHttpData(httpEvent, data))); var nupkgCopiedEvents = Task.Run(() => SendEvents(() => PackageSourceTelemetry.AddNupkgCopiedData(nupkgCopiedEvent, data))); await Task.WhenAll(resourceEvents, httpEvents, nupkgCopiedEvents); // Assert KeyValuePair <string, PackageSourceTelemetry.Data> pair = Assert.Single(data); Assert.Equal(eventsToRaise, pair.Value.Resources.Sum(r => r.Value.count)); Assert.Equal(eventsToRaise, pair.Value.Http.Requests); Assert.Equal(eventsToRaise, pair.Value.NupkgCount); }