Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 11 additions & 6 deletions src/Connectors/src/Connectors/ConnectionStringPostProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ namespace Steeltoe.Connectors;
internal abstract class ConnectionStringPostProcessor : IConfigurationPostProcessor
{
private const string ConnectionStringName = "ConnectionString";
public const string DefaultBindingName = "Default";
private const string DefaultBindingName = "Default";

private static readonly string ClientBindingsConfigurationKey = ConfigurationPath.Combine("Steeltoe", "Client");
public static readonly string ServiceBindingsConfigurationKey = ConfigurationPath.Combine("steeltoe", "service-bindings");
Expand All @@ -37,7 +37,7 @@ public void PostProcessConfiguration(PostProcessorConfigurationProvider provider
{
bindingsByName.TryGetValue(DefaultBindingName, out BindingInfo? defaultBinding);

string? alternateBindingName = bindingsByName.Keys.SingleOrDefault(bindingName => bindingName != DefaultBindingName);
string? alternateBindingName = bindingsByName.Keys.SingleOrDefault(bindingName => !IsDefaultBindingName(bindingName));
BindingInfo? alternateBinding = alternateBindingName == null ? null : bindingsByName[alternateBindingName];

var bindingInfo = new BindingInfo
Expand All @@ -55,20 +55,25 @@ public void PostProcessConfiguration(PostProcessorConfigurationProvider provider
}
else
{
foreach ((string bindingName, BindingInfo bindingInfo) in bindingsByName.Where(binding => binding.Key != DefaultBindingName))
foreach ((string bindingName, BindingInfo bindingInfo) in bindingsByName.Where(binding => !IsDefaultBindingName(binding.Key)))
{
SetConnectionString(configurationData, bindingName, bindingInfo);
}
}
}

public static bool IsDefaultBindingName(string bindingName)
{
return string.Equals(bindingName, DefaultBindingName, StringComparison.OrdinalIgnoreCase);
}

private static bool ShouldSetDefault(Dictionary<string, BindingInfo> bindingsByName)
{
if (bindingsByName.Count == 1)
{
(string bindingName, BindingInfo binding) = bindingsByName.Single();

if (bindingName == DefaultBindingName && binding.IsClientOnly)
if (IsDefaultBindingName(bindingName) && binding.IsClientOnly)
{
return true;
}
Expand All @@ -78,7 +83,7 @@ private static bool ShouldSetDefault(Dictionary<string, BindingInfo> bindingsByN

if (bindingsByName.Count == 2 && bindingsByName.TryGetValue(DefaultBindingName, out BindingInfo? defaultBinding) && defaultBinding.IsClientOnly)
{
BindingInfo alternateBinding = bindingsByName.Single(binding => binding.Key != DefaultBindingName).Value;
BindingInfo alternateBinding = bindingsByName.Single(binding => !IsDefaultBindingName(binding.Key)).Value;

if (alternateBinding.IsServerOnly)
{
Expand All @@ -91,7 +96,7 @@ private static bool ShouldSetDefault(Dictionary<string, BindingInfo> bindingsByN

private Dictionary<string, BindingInfo> GetBindingsByName(IConfiguration configuration)
{
Dictionary<string, BindingInfo> bindingsByName = [];
var bindingsByName = new Dictionary<string, BindingInfo>(StringComparer.OrdinalIgnoreCase);

foreach (IConfigurationSection clientBinding in GetBindingSections(configuration, ClientBindingsConfigurationKey))
{
Expand Down
6 changes: 3 additions & 3 deletions src/Connectors/src/Connectors/ConnectorOptionsBinder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public static IReadOnlySet<string> RegisterNamedOptions<TOptions>(IServiceCollec
{
string bindingName = childSection.Key;

if (bindingName == ConnectionStringPostProcessor.DefaultBindingName)
if (ConnectionStringPostProcessor.IsDefaultBindingName(bindingName))
{
services.Configure<TOptions>(childSection);

Expand Down Expand Up @@ -62,7 +62,7 @@ private static bool ContainsNamedServiceBindings(IConfigurationSection[] section
return false;
}

if (sections is [{ Key: ConnectionStringPostProcessor.DefaultBindingName }])
if (sections is [{ } singleSection] && ConnectionStringPostProcessor.IsDefaultBindingName(singleSection.Key))
{
return false;
}
Expand All @@ -81,6 +81,6 @@ private static void RegisterHealthContributor(IServiceCollection services, strin

private static HashSet<string> GetNamedOptions(IConfigurationSection[] childSections)
{
return childSections.Select(section => section.Key == ConnectionStringPostProcessor.DefaultBindingName ? string.Empty : section.Key).ToHashSet();
return childSections.Select(section => ConnectionStringPostProcessor.IsDefaultBindingName(section.Key) ? string.Empty : section.Key).ToHashSet();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -488,7 +488,7 @@ public async Task Registers_default_connection_string_when_single_server_binding
{
var appSettings = new Dictionary<string, string?>
{
["Steeltoe:Client:PostgreSql:Default:ConnectionString"] = "SERVER=localhost;DB=myDb;UID=myUser;PWD=myPass;Log Parameters=True"
["Steeltoe:Client:PostgreSql:DEFAULT:ConnectionString"] = "SERVER=localhost;DB=myDb;UID=myUser;PWD=myPass;Log Parameters=True"
};

WebApplicationBuilder builder = TestWebApplicationBuilderFactory.Create();
Expand Down
Loading