public void Create_many_concurrent_instances(int numberOfAgentInstances) { var agents = new ApmAgent[numberOfAgentInstances]; numberOfAgentInstances.Repeat(i => { var configSnapshotFromReader = new ConfigSnapshotFromReader(new EnvironmentConfigurationReader(), "local"); var configStore = new ConfigStore(configSnapshotFromReader, LoggerBase); var service = Service.GetDefaultService(new EnvironmentConfigurationReader(), LoggerBase); using (agents[i] = new ApmAgent(new TestAgentComponents(LoggerBase, centralConfigFetcher: new CentralConfigFetcher(LoggerBase, configStore, service), payloadSender: new PayloadSenderV2(LoggerBase, configSnapshotFromReader, service, new SystemInfoHelper(LoggerBase).ParseSystemInfo(null), new MockApmServerInfo())))) { ((CentralConfigFetcher)agents[i].CentralConfigFetcher).IsRunning.Should().BeTrue(); ((PayloadSenderV2)agents[i].PayloadSender).IsRunning.Should().BeTrue(); } }); // Sleep a few seconds to let backend component to get to the stage where they contact APM Server Thread.Sleep(5.Seconds()); numberOfAgentInstances.Repeat(i => { agents[i].Dispose(); ((CentralConfigFetcher)agents[i].CentralConfigFetcher).IsRunning.Should().BeFalse(); ((PayloadSenderV2)agents[i].PayloadSender).IsRunning.Should().BeFalse(); }); }
public void Dispose_stops_the_thread() { CentralConfigFetcher lastCentralConfigFetcher; var configSnapshotFromReader = new ConfigSnapshotFromReader(new EnvironmentConfigurationReader(), "local"); var configStore = new ConfigStore(configSnapshotFromReader, LoggerBase); var service = Service.GetDefaultService(new EnvironmentConfigurationReader(), LoggerBase); using (var agent = new ApmAgent(new TestAgentComponents(LoggerBase, centralConfigFetcher: new CentralConfigFetcher(LoggerBase, configStore, service), payloadSender: new PayloadSenderV2(LoggerBase, configSnapshotFromReader, service, new SystemInfoHelper(LoggerBase).ParseSystemInfo(null), new MockApmServerInfo())))) { lastCentralConfigFetcher = (CentralConfigFetcher)agent.CentralConfigFetcher; lastCentralConfigFetcher.IsRunning.Should().BeTrue(); // Sleep a few seconds to let backend component to get to the stage where they contact APM Server Thread.Sleep(5.Seconds()); } lastCentralConfigFetcher.IsRunning.Should().BeFalse(); }
public void Should_Update_Logger_That_Is_ILogLevelSwitchable() { var testLogger = new ConsoleLogger(LogLevel.Trace); var environmentConfigurationReader = new EnvironmentConfigurationReader(); var configSnapshotFromReader = new ConfigSnapshotFromReader(environmentConfigurationReader, "local"); var configStore = new ConfigStore(configSnapshotFromReader, testLogger); var service = Service.GetDefaultService(environmentConfigurationReader, testLogger); var waitHandle = new ManualResetEvent(false); var handler = new MockHttpMessageHandler(); var configUrl = BackendCommUtils.ApmServerEndpoints .BuildGetConfigAbsoluteUrl(environmentConfigurationReader.ServerUrl, service); handler.When(configUrl.AbsoluteUri) .Respond(_ => { waitHandle.Set(); return(new HttpResponseMessage(HttpStatusCode.OK) { Headers = { ETag = new EntityTagHeaderValue("\"etag\"") }, Content = new StringContent("{ \"log_level\": \"error\" }", Encoding.UTF8) }); }); var centralConfigFetcher = new CentralConfigFetcher(testLogger, configStore, service, handler); using (var agent = new ApmAgent(new TestAgentComponents(testLogger, centralConfigFetcher: centralConfigFetcher, payloadSender: new NoopPayloadSender()))) { centralConfigFetcher.IsRunning.Should().BeTrue(); waitHandle.WaitOne(); Thread.Sleep(TimeSpan.FromSeconds(3)); } testLogger.LogLevelSwitch.Level.Should().Be(LogLevel.Error); }