From acaa744fc839a2625bda12429741a9abe2efa2b2 Mon Sep 17 00:00:00 2001 From: Vadim Galaktionov Date: Wed, 18 Nov 2020 02:16:48 +0300 Subject: [PATCH 1/2] Add test --- .../tests/ConfigurationExtensionTest.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/libraries/Microsoft.Extensions.Configuration.UserSecrets/tests/ConfigurationExtensionTest.cs b/src/libraries/Microsoft.Extensions.Configuration.UserSecrets/tests/ConfigurationExtensionTest.cs index 6f59604a79e19..e297fe379d2ac 100644 --- a/src/libraries/Microsoft.Extensions.Configuration.UserSecrets/tests/ConfigurationExtensionTest.cs +++ b/src/libraries/Microsoft.Extensions.Configuration.UserSecrets/tests/ConfigurationExtensionTest.cs @@ -107,6 +107,19 @@ public void AddUserSecrets_DoesNotThrowsIfOptional() Assert.Empty(config.AsEnumerable()); } + [Fact] + public void AddUserSecrets_DoesThrowsIfNotOptionalAndSecretDoesNotExist() + { + var secretId = Assembly.GetExecutingAssembly().GetName().Name; + var secretPath = PathHelper.GetSecretsPathFromSecretsId(secretId); + if (File.Exists(secretPath)) + { + File.Delete(secretPath); + } + + Assert.Throws(() => new ConfigurationBuilder().AddUserSecrets(Assembly.GetExecutingAssembly(), false).Build()); + } + [Fact] [ActiveIssue("https://github.com/dotnet/runtime/issues/34580", TestPlatforms.Windows, TargetFrameworkMonikers.Netcoreapp, TestRuntimes.Mono)] public void AddUserSecrets_With_SecretsId_Passed_Explicitly() From 760fe549eccb39541f9a152671125ffe5f82920e Mon Sep 17 00:00:00 2001 From: Vadim Galaktionov Date: Wed, 18 Nov 2020 02:05:30 +0300 Subject: [PATCH 2/2] Fix AddUserSecrets --- .../src/UserSecretsConfigurationExtensions.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/libraries/Microsoft.Extensions.Configuration.UserSecrets/src/UserSecretsConfigurationExtensions.cs b/src/libraries/Microsoft.Extensions.Configuration.UserSecrets/src/UserSecretsConfigurationExtensions.cs index 0da3963fe2aad..4e99cd30def67 100644 --- a/src/libraries/Microsoft.Extensions.Configuration.UserSecrets/src/UserSecretsConfigurationExtensions.cs +++ b/src/libraries/Microsoft.Extensions.Configuration.UserSecrets/src/UserSecretsConfigurationExtensions.cs @@ -131,7 +131,7 @@ public static IConfigurationBuilder AddUserSecrets(this IConfigurationBuilder co UserSecretsIdAttribute attribute = assembly.GetCustomAttribute(); if (attribute != null) { - return AddUserSecrets(configuration, attribute.UserSecretsId, reloadOnChange); + return AddUserSecretsInternal(configuration, attribute.UserSecretsId, optional, reloadOnChange); } if (!optional) @@ -169,6 +169,9 @@ public static IConfigurationBuilder AddUserSecrets(this IConfigurationBuilder co /// Whether the configuration should be reloaded if the file changes. /// The configuration builder. public static IConfigurationBuilder AddUserSecrets(this IConfigurationBuilder configuration, string userSecretsId, bool reloadOnChange) + => AddUserSecretsInternal(configuration, userSecretsId, true, reloadOnChange); + + private static IConfigurationBuilder AddUserSecretsInternal(IConfigurationBuilder configuration, string userSecretsId, bool optional, bool reloadOnChange) { if (configuration == null) { @@ -180,16 +183,16 @@ public static IConfigurationBuilder AddUserSecrets(this IConfigurationBuilder co throw new ArgumentNullException(nameof(userSecretsId)); } - return AddSecretsFile(configuration, PathHelper.GetSecretsPathFromSecretsId(userSecretsId), reloadOnChange); + return AddSecretsFile(configuration, PathHelper.GetSecretsPathFromSecretsId(userSecretsId), optional, reloadOnChange); } - private static IConfigurationBuilder AddSecretsFile(IConfigurationBuilder configuration, string secretPath, bool reloadOnChange) + private static IConfigurationBuilder AddSecretsFile(IConfigurationBuilder configuration, string secretPath, bool optional, bool reloadOnChange) { string directoryPath = Path.GetDirectoryName(secretPath); PhysicalFileProvider fileProvider = Directory.Exists(directoryPath) ? new PhysicalFileProvider(directoryPath) : null; - return configuration.AddJsonFile(fileProvider, PathHelper.SecretsFileName, optional: true, reloadOnChange); + return configuration.AddJsonFile(fileProvider, PathHelper.SecretsFileName, optional, reloadOnChange); } } }