Пример #1
0
        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();
            });
        }
Пример #2
0
        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);
        }