From 4fcaa1ec212dfebe2b7b479ba867af318209dc7a Mon Sep 17 00:00:00 2001 From: AMER JUSUPOVIC Date: Mon, 16 Jun 2025 14:56:12 -0700 Subject: [PATCH 01/10] add environment variable, unit test --- .../FeatureManagementKeyValueAdapter.cs | 14 +++- .../Unit/FeatureManagementTests.cs | 71 +++++++++++++++++++ 2 files changed, 84 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs index 13408385..353616b9 100644 --- a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs +++ b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs @@ -8,6 +8,7 @@ using System.Diagnostics; using System.Linq; using System.Net.Mime; +using System.Security; using System.Security.Cryptography; using System.Text; using System.Text.Json; @@ -18,12 +19,20 @@ namespace Microsoft.Extensions.Configuration.AzureAppConfiguration.FeatureManage { internal class FeatureManagementKeyValueAdapter : IKeyValueAdapter { + private const string DisableFmSchemaCompatibilityEnvironmentVariable = "AZURE_APP_CONFIGURATION_FM_SCHEMA_COMPATIBILITY_DISABLED"; private FeatureFlagTracing _featureFlagTracing; private int _featureFlagIndex = 0; + private bool _fmSchemaCompatibilityDisabled = false; public FeatureManagementKeyValueAdapter(FeatureFlagTracing featureFlagTracing) { _featureFlagTracing = featureFlagTracing ?? throw new ArgumentNullException(nameof(featureFlagTracing)); + + try + { + _fmSchemaCompatibilityDisabled = bool.TryParse(Environment.GetEnvironmentVariable(DisableFmSchemaCompatibilityEnvironmentVariable), out bool disabled) ? disabled : false; + } + catch (SecurityException) { } } public Task>> ProcessKeyValue(ConfigurationSetting setting, Uri endpoint, Logger logger, CancellationToken cancellationToken) @@ -33,7 +42,10 @@ public Task>> ProcessKeyValue(Configura var keyValues = new List>(); // Check if we need to process the feature flag using the microsoft schema - if ((featureFlag.Variants != null && featureFlag.Variants.Any()) || featureFlag.Allocation != null || featureFlag.Telemetry != null) + if (_fmSchemaCompatibilityDisabled || + (featureFlag.Variants != null && featureFlag.Variants.Any()) || + featureFlag.Allocation != null || + featureFlag.Telemetry != null) { keyValues = ProcessMicrosoftSchemaFeatureFlag(featureFlag, setting, endpoint); } diff --git a/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs b/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs index 929bcbc5..0b3f865a 100644 --- a/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs +++ b/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs @@ -2291,6 +2291,77 @@ public void ThrowsOnIncorrectJsonTypes() } } + [Fact] + public void EnvironmentVariableForcesMicrosoftSchemaForAllFlags() + { + // Arrange - Create a collection with one .NET schema flag and one Microsoft schema flag + var mixedSchemaFlags = new List + { + _kv, // This is a .NET schema flag (no variants/allocation/telemetry) + _variantFeatureFlagCollection[0] // This is a Microsoft schema flag (has variants) + }; + + var mockResponse = new Mock(); + var mockClient = new Mock(MockBehavior.Strict); + + mockClient.Setup(c => c.GetConfigurationSettingsAsync(It.IsAny(), It.IsAny())) + .Returns(new MockAsyncPageable(mixedSchemaFlags)); + + try + { + // Act - Set environment variable to force Microsoft schema + Environment.SetEnvironmentVariable("AZURE_APP_CONFIGURATION_FM_SCHEMA_COMPATIBILITY_DISABLED", "true"); + + var config = new ConfigurationBuilder() + .AddAzureAppConfiguration(options => + { + options.ClientManager = TestHelpers.CreateMockedConfigurationClientManager(mockClient.Object); + options.UseFeatureFlags(); + }) + .Build(); + + // Assert - Both flags should be in Microsoft schema format + // First flag (originally .NET schema) should now be in Microsoft schema + Assert.Equal("Beta", config["feature_management:feature_flags:0:id"]); + Assert.Equal("True", config["feature_management:feature_flags:0:enabled"]); + Assert.Equal("Browser", config["feature_management:feature_flags:0:conditions:client_filters:0:name"]); + Assert.Equal("Firefox", config["feature_management:feature_flags:0:conditions:client_filters:0:parameters:AllowedBrowsers:0"]); + + // Second flag (already Microsoft schema) should still be in Microsoft schema + Assert.Equal("VariantsFeature1", config["feature_management:feature_flags:1:id"]); + Assert.Equal("True", config["feature_management:feature_flags:1:enabled"]); + Assert.Equal("Big", config["feature_management:feature_flags:1:variants:0:name"]); + Assert.Equal("600px", config["feature_management:feature_flags:1:variants:0:configuration_value"]); + + // Verify .NET schema paths are NOT present + Assert.Null(config["FeatureManagement:myFeature:EnabledFor:0:Name"]); + Assert.Null(config["FeatureManagement:VariantsFeature1:EnabledFor:0:Name"]); + } + finally + { + // Cleanup - Reset environment variable + Environment.SetEnvironmentVariable("AZURE_APP_CONFIGURATION_FM_SCHEMA_COMPATIBILITY_DISABLED", null); + } + + // Act - Verify normal behavior when environment variable is not set + var configWithoutEnvVar = new ConfigurationBuilder() + .AddAzureAppConfiguration(options => + { + options.ClientManager = TestHelpers.CreateMockedConfigurationClientManager(mockClient.Object); + options.UseFeatureFlags(); + }) + .Build(); + + // Assert - First flag should be in .NET schema, second in Microsoft schema + // First flag (no variants) should be in .NET schema + Assert.Equal("Browser", configWithoutEnvVar["FeatureManagement:myFeature:EnabledFor:0:Name"]); + Assert.Equal("Firefox", configWithoutEnvVar["FeatureManagement:myFeature:EnabledFor:0:Parameters:AllowedBrowsers:0"]); + + // Second flag (has variants) should be in Microsoft schema + Assert.Equal("VariantsFeature1", configWithoutEnvVar["feature_management:feature_flags:0:id"]); + Assert.Equal("Big", configWithoutEnvVar["feature_management:feature_flags:0:variants:0:name"]); + } + Response GetIfChanged(ConfigurationSetting setting, bool onlyIfChanged, CancellationToken cancellationToken) { return Response.FromValue(FirstKeyValue, new MockResponse(200)); From a7e9bbde2fd08b76f29e95f76eb4db212700a9a5 Mon Sep 17 00:00:00 2001 From: AMER JUSUPOVIC Date: Mon, 16 Jun 2025 15:34:32 -0700 Subject: [PATCH 02/10] remove comments --- .../Unit/FeatureManagementTests.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs b/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs index 0b3f865a..9f763aed 100644 --- a/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs +++ b/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs @@ -2294,11 +2294,10 @@ public void ThrowsOnIncorrectJsonTypes() [Fact] public void EnvironmentVariableForcesMicrosoftSchemaForAllFlags() { - // Arrange - Create a collection with one .NET schema flag and one Microsoft schema flag var mixedSchemaFlags = new List { - _kv, // This is a .NET schema flag (no variants/allocation/telemetry) - _variantFeatureFlagCollection[0] // This is a Microsoft schema flag (has variants) + _kv, + _variantFeatureFlagCollection[0] }; var mockResponse = new Mock(); From e5cd9dac251d06b5dfb37d6efcae0dc1ba8b638d Mon Sep 17 00:00:00 2001 From: Amer Jusupovic <32405726+amerjusupovic@users.noreply.github.com> Date: Tue, 17 Jun 2025 13:42:17 -0700 Subject: [PATCH 03/10] Update src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../FeatureManagement/FeatureManagementKeyValueAdapter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs index 353616b9..54a6e57e 100644 --- a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs +++ b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs @@ -8,8 +8,8 @@ using System.Diagnostics; using System.Linq; using System.Net.Mime; -using System.Security; using System.Security.Cryptography; +using System.Security; using System.Text; using System.Text.Json; using System.Threading; From aaf449c62accf4bf7261a57d1fa3861c56ac8aa0 Mon Sep 17 00:00:00 2001 From: AMER JUSUPOVIC Date: Wed, 18 Jun 2025 11:01:26 -0700 Subject: [PATCH 04/10] fix unit test --- .../Unit/FeatureManagementTests.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs b/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs index 9f763aed..493695db 100644 --- a/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs +++ b/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs @@ -2351,10 +2351,9 @@ public void EnvironmentVariableForcesMicrosoftSchemaForAllFlags() }) .Build(); - // Assert - First flag should be in .NET schema, second in Microsoft schema // First flag (no variants) should be in .NET schema - Assert.Equal("Browser", configWithoutEnvVar["FeatureManagement:myFeature:EnabledFor:0:Name"]); - Assert.Equal("Firefox", configWithoutEnvVar["FeatureManagement:myFeature:EnabledFor:0:Parameters:AllowedBrowsers:0"]); + Assert.Equal("Browser", configWithoutEnvVar["FeatureManagement:Beta:EnabledFor:0:Name"]); + Assert.Equal("Firefox", configWithoutEnvVar["FeatureManagement:Beta:EnabledFor:0:Parameters:AllowedBrowsers:0"]); // Second flag (has variants) should be in Microsoft schema Assert.Equal("VariantsFeature1", configWithoutEnvVar["feature_management:feature_flags:0:id"]); From 6f98669d253fbcfb3775f9f2ab186bd148ebf501 Mon Sep 17 00:00:00 2001 From: AMER JUSUPOVIC Date: Mon, 23 Jun 2025 15:56:40 -0700 Subject: [PATCH 05/10] update comments --- .../Unit/FeatureManagementTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs b/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs index 493695db..3d204f74 100644 --- a/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs +++ b/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs @@ -2320,13 +2320,13 @@ public void EnvironmentVariableForcesMicrosoftSchemaForAllFlags() .Build(); // Assert - Both flags should be in Microsoft schema format - // First flag (originally .NET schema) should now be in Microsoft schema + // First flag (would be in .NET schema without environment variable) should now be in Microsoft schema Assert.Equal("Beta", config["feature_management:feature_flags:0:id"]); Assert.Equal("True", config["feature_management:feature_flags:0:enabled"]); Assert.Equal("Browser", config["feature_management:feature_flags:0:conditions:client_filters:0:name"]); Assert.Equal("Firefox", config["feature_management:feature_flags:0:conditions:client_filters:0:parameters:AllowedBrowsers:0"]); - // Second flag (already Microsoft schema) should still be in Microsoft schema + // Second flag (always Microsoft schema) should still be in Microsoft schema Assert.Equal("VariantsFeature1", config["feature_management:feature_flags:1:id"]); Assert.Equal("True", config["feature_management:feature_flags:1:enabled"]); Assert.Equal("Big", config["feature_management:feature_flags:1:variants:0:name"]); From 89f769bc311245390f5313c7195bbc06709ca25a Mon Sep 17 00:00:00 2001 From: AMER JUSUPOVIC Date: Tue, 24 Jun 2025 10:05:28 -0700 Subject: [PATCH 06/10] move bool parsing logic outside try --- .../FeatureManagement/FeatureManagementKeyValueAdapter.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs index 54a6e57e..a5caba83 100644 --- a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs +++ b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs @@ -28,11 +28,16 @@ public FeatureManagementKeyValueAdapter(FeatureFlagTracing featureFlagTracing) { _featureFlagTracing = featureFlagTracing ?? throw new ArgumentNullException(nameof(featureFlagTracing)); + + string fmSchemaCompatibilityDisabled = null; + try { - _fmSchemaCompatibilityDisabled = bool.TryParse(Environment.GetEnvironmentVariable(DisableFmSchemaCompatibilityEnvironmentVariable), out bool disabled) ? disabled : false; + fmSchemaCompatibilityDisabled = Environment.GetEnvironmentVariable(DisableFmSchemaCompatibilityEnvironmentVariable); } catch (SecurityException) { } + + _fmSchemaCompatibilityDisabled = bool.TryParse(fmSchemaCompatibilityDisabled, out bool disabled) ? disabled : false; } public Task>> ProcessKeyValue(ConfigurationSetting setting, Uri endpoint, Logger logger, CancellationToken cancellationToken) From 670b569212f784dfb85988b1ee522ddf8c8896fb Mon Sep 17 00:00:00 2001 From: AMER JUSUPOVIC Date: Tue, 24 Jun 2025 11:29:10 -0700 Subject: [PATCH 07/10] fix formatting --- .../FeatureManagement/FeatureManagementKeyValueAdapter.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs index a5caba83..78ad5244 100644 --- a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs +++ b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs @@ -28,7 +28,6 @@ public FeatureManagementKeyValueAdapter(FeatureFlagTracing featureFlagTracing) { _featureFlagTracing = featureFlagTracing ?? throw new ArgumentNullException(nameof(featureFlagTracing)); - string fmSchemaCompatibilityDisabled = null; try From 6c06d525d2d559e1cce54ab1aa3cb3f14df8bb3e Mon Sep 17 00:00:00 2001 From: Zhiyuan Liang Date: Wed, 16 Jul 2025 11:20:09 +0800 Subject: [PATCH 08/10] add environment variable class --- ...ureAppConfigurationEnvironmentVariables.cs | 19 +++++++++++++++++++ .../FeatureManagementKeyValueAdapter.cs | 3 +-- .../Unit/FeatureManagementTests.cs | 2 +- 3 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationEnvironmentVariables.cs diff --git a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationEnvironmentVariables.cs b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationEnvironmentVariables.cs new file mode 100644 index 00000000..22f659d3 --- /dev/null +++ b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationEnvironmentVariables.cs @@ -0,0 +1,19 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +// +namespace Microsoft.Extensions.Configuration.AzureAppConfiguration +{ + /// + /// Environment variables used to configure Azure App Configuration provider behavior. + /// + public static class AzureAppConfigurationEnvironmentVariables + { + /// + /// Environment variable to disable Feature Management schema compatibility. + /// The value of this variable is a boolean string, e.g. "true" or "false". + /// When set to "true", schema compatibility checks for feature flags are disabled, + /// and all feature flags will be interpreted using the Microsoft Feature Flags schema. + /// + public const string DisableFmSchemaCompatibility = "AZURE_APP_CONFIGURATION_FM_SCHEMA_COMPATIBILITY_DISABLED"; + } +} diff --git a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs index 78ad5244..2e6403d9 100644 --- a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs +++ b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs @@ -19,7 +19,6 @@ namespace Microsoft.Extensions.Configuration.AzureAppConfiguration.FeatureManage { internal class FeatureManagementKeyValueAdapter : IKeyValueAdapter { - private const string DisableFmSchemaCompatibilityEnvironmentVariable = "AZURE_APP_CONFIGURATION_FM_SCHEMA_COMPATIBILITY_DISABLED"; private FeatureFlagTracing _featureFlagTracing; private int _featureFlagIndex = 0; private bool _fmSchemaCompatibilityDisabled = false; @@ -32,7 +31,7 @@ public FeatureManagementKeyValueAdapter(FeatureFlagTracing featureFlagTracing) try { - fmSchemaCompatibilityDisabled = Environment.GetEnvironmentVariable(DisableFmSchemaCompatibilityEnvironmentVariable); + fmSchemaCompatibilityDisabled = Environment.GetEnvironmentVariable(AzureAppConfigurationEnvironmentVariables.DisableFmSchemaCompatibility); } catch (SecurityException) { } diff --git a/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs b/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs index 3d204f74..f3d5994f 100644 --- a/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs +++ b/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs @@ -2309,7 +2309,7 @@ public void EnvironmentVariableForcesMicrosoftSchemaForAllFlags() try { // Act - Set environment variable to force Microsoft schema - Environment.SetEnvironmentVariable("AZURE_APP_CONFIGURATION_FM_SCHEMA_COMPATIBILITY_DISABLED", "true"); + Environment.SetEnvironmentVariable(AzureAppConfigurationEnvironmentVariables.DisableFmSchemaCompatibility, "true"); var config = new ConfigurationBuilder() .AddAzureAppConfiguration(options => From eb1ca75bc44b87c1f293d65fe35a152a6b4186c0 Mon Sep 17 00:00:00 2001 From: Zhiyuan Liang Date: Thu, 17 Jul 2025 13:43:07 +0800 Subject: [PATCH 09/10] update --- .../AzureAppConfigurationProvider.cs | 2 +- .../Constants/RequestTracingConstants.cs | 1 - ...ionEnvironmentVariables.cs => EnvironmentVariables.cs} | 8 +++++++- .../FeatureManagement/FeatureManagementKeyValueAdapter.cs | 2 +- .../Unit/FeatureManagementTests.cs | 2 +- 5 files changed, 10 insertions(+), 5 deletions(-) rename src/Microsoft.Extensions.Configuration.AzureAppConfiguration/{AzureAppConfigurationEnvironmentVariables.cs => EnvironmentVariables.cs} (70%) diff --git a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationProvider.cs b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationProvider.cs index 8ca456a1..b2610fab 100644 --- a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationProvider.cs +++ b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationProvider.cs @@ -146,7 +146,7 @@ public AzureAppConfigurationProvider(IConfigurationClientManager configClientMan string requestTracingDisabled = null; try { - requestTracingDisabled = Environment.GetEnvironmentVariable(RequestTracingConstants.RequestTracingDisabledEnvironmentVariable); + requestTracingDisabled = Environment.GetEnvironmentVariable(EnvironmentVariables.RequestTracingDisabled); } catch (SecurityException) { } diff --git a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/Constants/RequestTracingConstants.cs b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/Constants/RequestTracingConstants.cs index 612e1bcc..979ea9ad 100644 --- a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/Constants/RequestTracingConstants.cs +++ b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/Constants/RequestTracingConstants.cs @@ -5,7 +5,6 @@ namespace Microsoft.Extensions.Configuration.AzureAppConfiguration { internal class RequestTracingConstants { - public const string RequestTracingDisabledEnvironmentVariable = "AZURE_APP_CONFIGURATION_TRACING_DISABLED"; public const string AzureFunctionEnvironmentVariable = "FUNCTIONS_EXTENSION_VERSION"; public const string AzureWebAppEnvironmentVariable = "WEBSITE_SITE_NAME"; public const string ContainerAppEnvironmentVariable = "CONTAINER_APP_NAME"; diff --git a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationEnvironmentVariables.cs b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/EnvironmentVariables.cs similarity index 70% rename from src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationEnvironmentVariables.cs rename to src/Microsoft.Extensions.Configuration.AzureAppConfiguration/EnvironmentVariables.cs index 22f659d3..d212520a 100644 --- a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationEnvironmentVariables.cs +++ b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/EnvironmentVariables.cs @@ -6,7 +6,7 @@ namespace Microsoft.Extensions.Configuration.AzureAppConfiguration /// /// Environment variables used to configure Azure App Configuration provider behavior. /// - public static class AzureAppConfigurationEnvironmentVariables + internal static class EnvironmentVariables { /// /// Environment variable to disable Feature Management schema compatibility. @@ -15,5 +15,11 @@ public static class AzureAppConfigurationEnvironmentVariables /// and all feature flags will be interpreted using the Microsoft Feature Flags schema. /// public const string DisableFmSchemaCompatibility = "AZURE_APP_CONFIGURATION_FM_SCHEMA_COMPATIBILITY_DISABLED"; + + /// + /// Environment variable to disable request tracing. + /// The value of this variable is a boolean string, e.g. "true" or "false". + /// + public const string RequestTracingDisabled = "AZURE_APP_CONFIGURATION_TRACING_DISABLED"; } } diff --git a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs index 2e6403d9..1b1adfb9 100644 --- a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs +++ b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs @@ -31,7 +31,7 @@ public FeatureManagementKeyValueAdapter(FeatureFlagTracing featureFlagTracing) try { - fmSchemaCompatibilityDisabled = Environment.GetEnvironmentVariable(AzureAppConfigurationEnvironmentVariables.DisableFmSchemaCompatibility); + fmSchemaCompatibilityDisabled = Environment.GetEnvironmentVariable(EnvironmentVariables.DisableFmSchemaCompatibility); } catch (SecurityException) { } diff --git a/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs b/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs index f3d5994f..21d4e92e 100644 --- a/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs +++ b/tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs @@ -2309,7 +2309,7 @@ public void EnvironmentVariableForcesMicrosoftSchemaForAllFlags() try { // Act - Set environment variable to force Microsoft schema - Environment.SetEnvironmentVariable(AzureAppConfigurationEnvironmentVariables.DisableFmSchemaCompatibility, "true"); + Environment.SetEnvironmentVariable(EnvironmentVariables.DisableFmSchemaCompatibility, "true"); var config = new ConfigurationBuilder() .AddAzureAppConfiguration(options => From 22fc0f3c72606f0a30cf4328d46fa643b50c864c Mon Sep 17 00:00:00 2001 From: Zhiyuan Liang Date: Thu, 17 Jul 2025 13:58:46 +0800 Subject: [PATCH 10/10] update --- .../AzureAppConfigurationProvider.cs | 2 +- .../EnvironmentVariables.cs | 2 +- tests/Tests.AzureAppConfiguration/Unit/Tests.cs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationProvider.cs b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationProvider.cs index b2610fab..cba9dc1b 100644 --- a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationProvider.cs +++ b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationProvider.cs @@ -146,7 +146,7 @@ public AzureAppConfigurationProvider(IConfigurationClientManager configClientMan string requestTracingDisabled = null; try { - requestTracingDisabled = Environment.GetEnvironmentVariable(EnvironmentVariables.RequestTracingDisabled); + requestTracingDisabled = Environment.GetEnvironmentVariable(EnvironmentVariables.DisableRequestTracing); } catch (SecurityException) { } diff --git a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/EnvironmentVariables.cs b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/EnvironmentVariables.cs index d212520a..2a223280 100644 --- a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/EnvironmentVariables.cs +++ b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/EnvironmentVariables.cs @@ -20,6 +20,6 @@ internal static class EnvironmentVariables /// Environment variable to disable request tracing. /// The value of this variable is a boolean string, e.g. "true" or "false". /// - public const string RequestTracingDisabled = "AZURE_APP_CONFIGURATION_TRACING_DISABLED"; + public const string DisableRequestTracing = "AZURE_APP_CONFIGURATION_TRACING_DISABLED"; } } diff --git a/tests/Tests.AzureAppConfiguration/Unit/Tests.cs b/tests/Tests.AzureAppConfiguration/Unit/Tests.cs index 1f2ab5fa..7e68f1cf 100644 --- a/tests/Tests.AzureAppConfiguration/Unit/Tests.cs +++ b/tests/Tests.AzureAppConfiguration/Unit/Tests.cs @@ -273,7 +273,7 @@ public void TestTurnOffRequestTracing() var options = new AzureAppConfigurationOptions(); options.ClientOptions.Transport = mockTransport; - Environment.SetEnvironmentVariable(RequestTracingConstants.RequestTracingDisabledEnvironmentVariable, "True"); + Environment.SetEnvironmentVariable(EnvironmentVariables.DisableRequestTracing, "True"); var clientManager = TestHelpers.CreateMockedConfigurationClientManager(options); var config = new ConfigurationBuilder() @@ -296,7 +296,7 @@ public void TestTurnOffRequestTracing() options.ClientOptions.Transport = mockTransport; // Delete the request tracing environment variable - Environment.SetEnvironmentVariable(RequestTracingConstants.RequestTracingDisabledEnvironmentVariable, null); + Environment.SetEnvironmentVariable(EnvironmentVariables.DisableRequestTracing, null); Environment.SetEnvironmentVariable(RequestTracingConstants.AzureFunctionEnvironmentVariable, "v1.0"); var clientManager1 = TestHelpers.CreateMockedConfigurationClientManager(options);