public void QuickPulseTelemetryModuleInteractsWithTelemetryProcessorCorrectlyWhenLoadedAtRuntime() { // ARRANGE TelemetryConfiguration config = new TelemetryConfiguration(); QuickPulseTelemetryModule newModule = new QuickPulseTelemetryModule(); newModule.Initialize(config); config.TelemetryProcessorChainBuilder.Use(next => { QuickPulseTelemetryProcessor processor = new QuickPulseTelemetryProcessor(next); newModule.RegisterTelemetryProcessor(processor); return(processor); }); config.TelemetryProcessorChainBuilder.Build(); TelemetryModules.Instance.Modules.Add(newModule); // ASSERT var module = TelemetryModules.Instance.Modules.OfType <QuickPulseTelemetryModule>().SingleOrDefault(); Assert.IsNotNull(module); var telemetryProcessor = config.TelemetryProcessors.OfType <QuickPulseTelemetryProcessor>().SingleOrDefault(); Assert.IsNotNull(telemetryProcessor); Assert.AreEqual(telemetryProcessor, QuickPulseTestHelper.GetTelemetryProcessors(module).SingleOrDefault()); }
public void QuickPulseTelemetryModuleInitializesServiceClientFromConfiguration() { // ARRANGE var module = new QuickPulseTelemetryModule(null, null, null, null, null, null); module.QuickPulseServiceEndpoint = "https://test.com/api"; // ACT module.Initialize(new TelemetryConfiguration()); // ASSERT Assert.IsInstanceOfType(QuickPulseTestHelper.GetPrivateField(module, "serviceClient"), typeof(QuickPulseServiceClient)); }
public void QuickPulseTelemetryModuleDoesNotRegisterSameProcessorMoreThanOnce() { // ARRANGE var module = new QuickPulseTelemetryModule(null, null, null, null, null, null); var telemetryProcessor = new QuickPulseTelemetryProcessor(new SimpleTelemetryProcessorSpy()); // ACT module.RegisterTelemetryProcessor(telemetryProcessor); module.RegisterTelemetryProcessor(telemetryProcessor); module.RegisterTelemetryProcessor(telemetryProcessor); // ASSERT Assert.AreEqual(telemetryProcessor, QuickPulseTestHelper.GetTelemetryProcessors(module).Single()); }
public void QuickPulseTelemetryModuleInitializesServiceClientFromDefault() { // ARRANGE var module = new QuickPulseTelemetryModule(null, null, null, null, null, null); // ACT // do not provide module configuration, force default service client module.Initialize(new TelemetryConfiguration()); // ASSERT IQuickPulseServiceClient serviceClient = (IQuickPulseServiceClient)QuickPulseTestHelper.GetPrivateField(module, "serviceClient"); Assert.IsInstanceOfType(serviceClient, typeof(QuickPulseServiceClient)); Assert.AreEqual(QuickPulseDefaults.ServiceEndpoint, serviceClient.ServiceUri); }
public void QuickPulseTopCpuCollectorCleansUpStateWhenProcessesGoAway() { // ARRANGE var processProvider = new QuickPulseProcessProviderMock(); var baseProcessorTime = TimeSpan.FromSeconds(100); processProvider.Processes = new List <QuickPulseProcess>() { new QuickPulseProcess("Process1", baseProcessorTime), new QuickPulseProcess("Process2", baseProcessorTime), new QuickPulseProcess("Process3", baseProcessorTime), new QuickPulseProcess("Process4", baseProcessorTime), new QuickPulseProcess("Process5", baseProcessorTime), }; var timeProvider = new ClockMock(); var collector = new QuickPulseTopCpuCollector(timeProvider, processProvider); var processDictionary = QuickPulseTestHelper.GetPrivateField(collector, "processObservations") as Dictionary <string, TimeSpan>; // ACT collector.GetTopProcessesByCpu(3); int itemCount1 = processDictionary.Count; timeProvider.FastForward(TimeSpan.FromSeconds(1)); processProvider.Processes = new List <QuickPulseProcess>() { new QuickPulseProcess("Process1", baseProcessorTime) }; collector.GetTopProcessesByCpu(3); int itemCount3 = processDictionary.Count; // ASSERT Assert.AreEqual(5, itemCount1); Assert.AreEqual(1, itemCount3); }
public void QuickPulseTelemetryModuleSupportsMultipleTelemetryProcessorsForMultipleConfigurations() { if (QuickPulseTelemetryModuleTests.Ignored) { return; } // ARRANGE var pollingInterval = TimeSpan.FromMilliseconds(1); var collectionInterval = TimeSpan.FromMilliseconds(1); var timings = new QuickPulseTimings(pollingInterval, collectionInterval); var collectionTimeSlotManager = new QuickPulseCollectionTimeSlotManagerMock(timings); CollectionConfigurationError[] errors; var accumulatorManager = new QuickPulseDataAccumulatorManager( new CollectionConfiguration( new CollectionConfigurationInfo() { ETag = string.Empty, Metrics = new CalculatedMetricInfo[0] }, out errors, new ClockMock())); var serviceClient = new QuickPulseServiceClientMock { ReturnValueFromPing = true, ReturnValueFromSubmitSample = true }; var performanceCollector = new PerformanceCollectorMock(); var topCpuCollector = new QuickPulseTopCpuCollectorMock(); var module = new QuickPulseTelemetryModule( collectionTimeSlotManager, accumulatorManager, serviceClient, performanceCollector, topCpuCollector, timings); const int TelemetryProcessorCount = 4; var ikey = "some ikey"; var config = new TelemetryConfiguration { InstrumentationKey = ikey }; // spawn a bunch of configurations, each one having an individual instance of QuickPulseTelemetryProcessor var telemetryProcessors = new List <QuickPulseTelemetryProcessor>(); for (int i = 0; i < TelemetryProcessorCount; i++) { var configuration = new TelemetryConfiguration(); var builder = configuration.TelemetryProcessorChainBuilder; builder = builder.Use(current => new QuickPulseTelemetryProcessor(new SimpleTelemetryProcessorSpy())); builder.Build(); telemetryProcessors.Add(configuration.TelemetryProcessors.OfType <QuickPulseTelemetryProcessor>().Single()); } // ACT foreach (var telemetryProcessor in telemetryProcessors) { module.RegisterTelemetryProcessor(telemetryProcessor); } module.Initialize(config); Thread.Sleep(TimeSpan.FromMilliseconds(100)); // send data to each instance of QuickPulseTelemetryProcessor var request = new RequestTelemetry() { ResponseCode = "200", Success = true, Context = { InstrumentationKey = ikey } }; telemetryProcessors[0].Process(request); request = new RequestTelemetry() { ResponseCode = "500", Success = false, Context = { InstrumentationKey = ikey } }; telemetryProcessors[1].Process(request); var dependency = new DependencyTelemetry() { Success = true, Context = { InstrumentationKey = ikey } }; telemetryProcessors[2].Process(dependency); dependency = new DependencyTelemetry() { Success = false, Context = { InstrumentationKey = ikey } }; telemetryProcessors[3].Process(dependency); Thread.Sleep(TimeSpan.FromMilliseconds(100)); // ASSERT // verify that every telemetry processor has contributed to the accumulator int samplesWithSomeRequests = serviceClient.SnappedSamples.Count(s => s.AIRequestsPerSecond > 0); int samplesWithSomeDependencies = serviceClient.SnappedSamples.Count(s => s.AIDependencyCallsPerSecond > 0); Assert.AreEqual(TelemetryProcessorCount, QuickPulseTestHelper.GetTelemetryProcessors(module).Count); Assert.IsTrue(samplesWithSomeRequests > 0 && samplesWithSomeRequests <= 2); Assert.AreEqual(1, serviceClient.SnappedSamples.Count(s => s.AIRequestsFailedPerSecond > 0)); Assert.IsTrue(samplesWithSomeDependencies > 0 && samplesWithSomeDependencies < 2); Assert.AreEqual(1, serviceClient.SnappedSamples.Count(s => s.AIDependencyCallsFailedPerSecond > 0)); }
public void TestInitialize() { QuickPulseTestHelper.ClearEnvironment(); }