Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }