public void AddResourceData_SameSourceDifferentResource_StoredSeparately() { // Arrange var re1 = CreateSampleResourceEvent(method: nameof(FindPackageByIdResource.GetDependencyInfoAsync)); var re2 = CreateSampleResourceEvent(method: nameof(FindPackageByIdResource.CopyNupkgToStreamAsync)); var data = CreateDataDictionary(SampleSource); var stringTable = new ConcurrentDictionary <string, ConcurrentDictionary <string, string> >(); // Act PackageSourceTelemetry.AddResourceData(re1, data, stringTable); PackageSourceTelemetry.AddResourceData(re2, data, stringTable); // Assert var sourceData = data[SampleSource]; Assert.Equal(2, sourceData.Resources.Count); }
public void AddResourceData_SameSourceSameResource_AccumulatesCorrectly() { // Arrange var re1 = CreateSampleResourceEvent(duration: TimeSpan.FromMilliseconds(100)); var re2 = CreateSampleResourceEvent(duration: TimeSpan.FromMilliseconds(200)); var data = CreateDataDictionary(SampleSource); var stringTable = new ConcurrentDictionary <string, ConcurrentDictionary <string, string> >(); // Act PackageSourceTelemetry.AddResourceData(re1, data, stringTable); PackageSourceTelemetry.AddResourceData(re2, data, stringTable); // Assert var result = Assert.Single(data).Value; var resourceData = Assert.Single(result.Resources).Value; Assert.Equal(2, resourceData.count); Assert.Equal(TimeSpan.FromMilliseconds(300), resourceData.duration); }
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); }