public void ReadConfingsFromEnvVarsViaIConfig()
        {
            Environment.SetEnvironmentVariable(ConfigConsts.ConfigKeys.Level, "Debug");
            var serverUrl = "http://myServerFromEnvVar.com:1234";

            Environment.SetEnvironmentVariable(ConfigConsts.ConfigKeys.Urls, serverUrl);
            var serviceName = "MyServiceName123";

            Environment.SetEnvironmentVariable(ConfigConsts.ConfigKeys.ServiceName, serviceName);
            var secretToken = "SecretToken";

            Environment.SetEnvironmentVariable(ConfigConsts.ConfigKeys.SecretToken, secretToken);
            var captureHeaders = false;

            Environment.SetEnvironmentVariable(ConfigConsts.ConfigKeys.CaptureHeaders, captureHeaders.ToString());
            var configBuilder = new ConfigurationBuilder()
                                .AddEnvironmentVariables()
                                .Build();

            var config = new MicrosoftExtensionsConfig(configBuilder, new TestLogger());

            config.LogLevel.Should().Be(LogLevel.Debug);
            config.ServerUrls[0].Should().Be(new Uri(serverUrl));
            config.ServiceName.Should().Be(serviceName);
            config.SecretToken.Should().Be(secretToken);
            config.CaptureHeaders.Should().Be(captureHeaders);
        }
        public void ReadConfingsFromEnvVarsViaIConfig()
        {
            Environment.SetEnvironmentVariable(ConfigConsts.EnvVarNames.LogLevel, "Debug");
            var serverUrl = "http://myServerFromEnvVar.com:1234";

            Environment.SetEnvironmentVariable(ConfigConsts.EnvVarNames.ServerUrls, serverUrl);
            var serviceName = "MyServiceName123";

            Environment.SetEnvironmentVariable(ConfigConsts.EnvVarNames.ServiceName, serviceName);
            var serviceVersion = "2.1.0.5";

            Environment.SetEnvironmentVariable(ConfigConsts.EnvVarNames.ServiceVersion, serviceVersion);
            var environment = "staging";

            Environment.SetEnvironmentVariable(ConfigConsts.EnvVarNames.Environment, environment);
            var secretToken = "SecretToken";

            Environment.SetEnvironmentVariable(ConfigConsts.EnvVarNames.SecretToken, secretToken);
            Environment.SetEnvironmentVariable(ConfigConsts.EnvVarNames.CaptureHeaders, false.ToString());
            Environment.SetEnvironmentVariable(ConfigConsts.EnvVarNames.TransactionSampleRate, "0.123");
            var configBuilder = new ConfigurationBuilder()
                                .AddEnvironmentVariables()
                                .Build();

            var config = new MicrosoftExtensionsConfig(configBuilder, new NoopLogger(), "test");

            config.LogLevel.Should().Be(LogLevel.Debug);
            config.ServerUrls[0].Should().Be(new Uri(serverUrl));
            config.ServiceName.Should().Be(serviceName);
            config.ServiceVersion.Should().Be(serviceVersion);
            config.Environment.Should().Be(environment);
            config.SecretToken.Should().Be(secretToken);
            config.CaptureHeaders.Should().Be(false);
            config.TransactionSampleRate.Should().Be(0.123);
        }
        public void ReadValidConfigsFromAppSettingsJson()
        {
            var config = new MicrosoftExtensionsConfig(GetConfig($"TestConfigs{Path.DirectorySeparatorChar}appsettings_valid.json"), new TestLogger());

            Assert.Equal(LogLevel.Debug, config.LogLevel);
            Assert.Equal(new Uri("http://myServerFromTheConfigFile:8080"), config.ServerUrls[0]);
            Assert.Equal("My_Test_Application", config.ServiceName);
        }
        public void LoggerNotNull()
        {
            var testLogger = new TestLogger();
            var config     = new MicrosoftExtensionsConfig(GetConfig($"TestConfigs{Path.DirectorySeparatorChar}appsettings_invalid.json"), testLogger);
            var serverUrl  = config.ServerUrls.FirstOrDefault();

            serverUrl.Should().NotBeNull();
            testLogger.Lines.Should().NotBeEmpty();
        }
        public void ReadValidConfigsFromAppSettingsJson()
        {
            var config = new MicrosoftExtensionsConfig(GetConfig($"TestConfigs{Path.DirectorySeparatorChar}appsettings_valid.json"),
                                                       new TestLogger());

            config.LogLevel.Should().Be(LogLevel.Debug);
            config.ServerUrls[0].Should().Be(new Uri("http://myServerFromTheConfigFile:8080"));
            config.ServiceName.Should().Be("My_Test_Application");
            config.CaptureHeaders.Should().Be(false);
        }
        public void ReadInvalidServerUrlsConfigFromAppsettingsJson()
        {
            var logger = new TestLogger();
            var config = new MicrosoftExtensionsConfig(GetConfig($"TestConfigs{Path.DirectorySeparatorChar}appsettings_invalid.json"), logger);

            Assert.Equal(LogLevel.Error, config.LogLevel);

            Assert.Equal(
                $"Error Config: Failed parsing log level from {MicrosoftExtensionsConfig.Origin}: {MicrosoftExtensionsConfig.Keys.Level}, value: DbeugMisspelled. Defaulting to log level 'Error'",
                logger.Lines[0]);
        }
        public MicrosoftExtensionsConfigIntegrationTests(WebApplicationFactory <Startup> factory)
        {
            _factory = factory;
            _logger  = new TestLogger();
            var capturedPayload = new MockPayloadSender();

            var config = new MicrosoftExtensionsConfig(
                MicrosoftExtensionsConfigTests.GetConfig($"TestConfigs{Path.DirectorySeparatorChar}appsettings_invalid.json"), _logger, "test");

            _agent = new ApmAgent(
                new AgentComponents(payloadSender: capturedPayload, configurationReader: config, logger: _logger));
            _client = Helper.GetClient(_agent, _factory);
        }
Example #8
0
        public void MicrosoftExtensionsConfig_falls_back_on_env_vars()
        {
            var configBeforeEnvVarSet = new MicrosoftExtensionsConfig(GetConfig($"TestConfigs{Path.DirectorySeparatorChar}appsettings_valid.json"),
                                                                      new NoopLogger(), "test");

            configBeforeEnvVarSet.FlushInterval.Should().Be(ConfigConsts.DefaultValues.FlushIntervalInMilliseconds.Milliseconds());

            var flushIntervalVal = 98.Seconds();

            Environment.SetEnvironmentVariable(ConfigConsts.EnvVarNames.FlushInterval, (int)flushIntervalVal.TotalSeconds + "s");

            var configAfterEnvVarSet = new MicrosoftExtensionsConfig(GetConfig($"TestConfigs{Path.DirectorySeparatorChar}appsettings_valid.json"),
                                                                     new NoopLogger(), "test");

            configAfterEnvVarSet.FlushInterval.Should().Be(flushIntervalVal);
        }
        public MicrosoftExtensionsConfigIntegrationTests(WebApplicationFactory <Startup> factory)
        {
            _factory         = factory;
            _logger          = new TestLogger();
            _capturedPayload = new MockPayloadSender();

            //The agent is instantiated with ApmMiddlewareExtension.GetService, so we can also test the calculation of the service instance.
            //(e.g. ASP.NET Core version)

            var config = new MicrosoftExtensionsConfig(
                MicrosoftExtensionsConfigTests.GetConfig($"TestConfigs{Path.DirectorySeparatorChar}appsettings_invalid.json"), _logger);

            _agent = new ApmAgent(
                new AgentComponents(payloadSender: _capturedPayload, configurationReader: config, logger: _logger));
            _client = Helper.GetClient(_agent, _factory);
        }
        public void ReadInvalidServerUrlsConfigFromAppsettingsJson()
        {
            var logger = new TestLogger();
            var config = new MicrosoftExtensionsConfig(GetConfig($"TestConfigs{Path.DirectorySeparatorChar}appsettings_invalid.json"), logger);

            config.LogLevel.Should().Be(LogLevel.Error);

            logger.Lines.Should().NotBeEmpty();
            logger.Lines[0].Should()
            .ContainAll(
                $"{{{nameof(MicrosoftExtensionsConfig)}}}",
                "Failed parsing log level from",
                MicrosoftExtensionsConfig.Origin,
                MicrosoftExtensionsConfig.Keys.LogLevel,
                "Defaulting to ",
                "DbeugMisspelled"
                );
        }
Example #11
0
        public void TransactionMaxSpansTest(string configurationValue, int expectedValue)
        {
            // Arrange
            var logger = new TestLogger();

            var configurationBuilder = new ConfigurationBuilder()
                                       .AddInMemoryCollection(new Dictionary <string, string> {
                { ConfigConsts.KeyNames.TransactionMaxSpans, configurationValue }
            });

            var reader = new MicrosoftExtensionsConfig(configurationBuilder.Build(), logger, "test");

            // Act
            var transactionMaxSpans = reader.TransactionMaxSpans;

            // Assert
            transactionMaxSpans.Should().Be(expectedValue);
        }
Example #12
0
        public void MicrosoftExtensionsConfig_has_precedence_over_on_env_vars()
        {
            const double transactionSampleRateEnvVarValue        = 0.851;
            const double transactionSampleRateValueInAppSettings = 0.456;

            var configBeforeEnvVarSet = new MicrosoftExtensionsConfig(GetConfig($"TestConfigs{Path.DirectorySeparatorChar}appsettings_valid.json"),
                                                                      new NoopLogger(), "test");

            configBeforeEnvVarSet.TransactionSampleRate.Should().Be(transactionSampleRateValueInAppSettings);

            Environment.SetEnvironmentVariable(ConfigConsts.EnvVarNames.TransactionSampleRate, transactionSampleRateEnvVarValue.ToString(System.Globalization.CultureInfo.InvariantCulture));
            new EnvironmentConfigurationReader(new NoopLogger()).TransactionSampleRate.Should().Be(transactionSampleRateEnvVarValue);

            var configAfterEnvVarSet = new MicrosoftExtensionsConfig(GetConfig($"TestConfigs{Path.DirectorySeparatorChar}appsettings_valid.json"),
                                                                     new NoopLogger(), "test");

            configAfterEnvVarSet.TransactionSampleRate.Should().Be(transactionSampleRateValueInAppSettings);
        }
        public void ReadConfingsFromEnvVarsViaIConfig()
        {
            Environment.SetEnvironmentVariable(ConfigConsts.ConfigKeys.Level, "Debug");
            var serverUrl = "http://myServerFromEnvVar.com:1234";

            Environment.SetEnvironmentVariable(ConfigConsts.ConfigKeys.Urls, serverUrl);
            var serviceName = "MyServiceName123";

            Environment.SetEnvironmentVariable(ConfigConsts.ConfigKeys.ServiceName, serviceName);
            var configBuilder = new ConfigurationBuilder()
                                .AddEnvironmentVariables()
                                .Build();

            var config = new MicrosoftExtensionsConfig(configBuilder);

            Assert.Equal(LogLevel.Debug, config.LogLevel);
            Assert.Equal(new Uri(serverUrl), config.ServerUrls[0]);
            Assert.Equal(serviceName, config.ServiceName);
        }
Example #14
0
        public void ReadValidConfigsFromAppSettingsJson()
        {
            var config = new MicrosoftExtensionsConfig(GetConfig($"TestConfigs{Path.DirectorySeparatorChar}appsettings_valid.json"),
                                                       new TestLogger());

            config.LogLevel.Should().Be(LogLevel.Debug);
            config.ServerUrls[0].Should().Be(new Uri("http://myServerFromTheConfigFile:8080"));
            config.ServiceName.Should().Be("My_Test_Application");
            config.ServiceVersion.Should().Be("2.1.0.5");
            config.CaptureHeaders.Should().Be(false);
            config.TransactionSampleRate.Should().Be(0.456);
            config.CaptureBody.Should().Be(ConfigConsts.SupportedValues.CaptureBodyAll);
            var supportedContentTypes = new List <string>()
            {
                "application/x-www-form-urlencoded*", "text/*", "application/json*", "application/xml*"
            };

            config.CaptureBodyContentTypes.Should().BeEquivalentTo(supportedContentTypes);
        }
        public void ReadInvalidLogLevelConfigFromAppsettingsJson()
        {
            var logger = new TestLogger();
            var config = new MicrosoftExtensionsConfig(GetConfig($"TestConfigs{Path.DirectorySeparatorChar}appsettings_invalid.json"), logger);

            config.LogLevel.Should().Be(LogLevel.Error);
            logger.Lines.Should().NotBeEmpty();
            logger.Lines[0].Should()
            .ContainAll(
                $"{{{nameof(MicrosoftExtensionsConfig)}}}",
                "Failed parsing log level from",
                MicrosoftExtensionsConfig.Origin,
                MicrosoftExtensionsConfig.Keys.LogLevel,
                "Defaulting to "
                );

            config.CaptureHeaders.Should().Be(true);

            config.TransactionSampleRate.Should().Be(1.0);
        }
Example #16
0
        public void ReadInvalidLogLevelConfigFromAppsettingsJson()
        {
            Environment.SetEnvironmentVariable(ConfigConsts.EnvVarNames.Environment, "");
            var logger = new TestLogger();
            var config = new MicrosoftExtensionsConfig(GetConfig($"TestConfigs{Path.DirectorySeparatorChar}appsettings_invalid.json"), logger,
                                                       "test");

            config.LogLevel.Should().Be(LogLevel.Error);
            logger.Lines.Should().NotBeEmpty();
            logger.Lines[0].Should()
            .ContainAll(
                nameof(MicrosoftExtensionsConfig),
                "Failed parsing log level from",
                MicrosoftExtensionsConfig.Origin,
                ConfigConsts.KeyNames.LogLevel,
                "Defaulting to "
                );

            config.Environment.Should().Be("test");
            config.CaptureHeaders.Should().Be(true);
            config.TransactionSampleRate.Should().Be(1.0);
        }