Skip to content

Commit c4f315b

Browse files
committed
Review feedback: filter already registered post-processors
1 parent 236b3aa commit c4f315b

3 files changed

Lines changed: 42 additions & 6 deletions

File tree

src/Configuration/src/CloudFoundry/ServiceBindings/CloudFoundryServiceBindingConfigurationSource.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,15 @@ namespace Steeltoe.Configuration.CloudFoundry.ServiceBindings;
1111
internal sealed class CloudFoundryServiceBindingConfigurationSource : PostProcessorConfigurationSource, IConfigurationSource
1212
{
1313
private readonly IServiceBindingsReader _serviceBindingsReader;
14-
private readonly CloudFoundryServiceBrokerTypes _brokerTypes;
14+
15+
public CloudFoundryServiceBrokerTypes BrokerTypes { get; }
1516

1617
public CloudFoundryServiceBindingConfigurationSource(IServiceBindingsReader serviceBindingsReader, CloudFoundryServiceBrokerTypes brokerTypes)
1718
{
1819
ArgumentNullException.ThrowIfNull(serviceBindingsReader);
1920

2021
_serviceBindingsReader = serviceBindingsReader;
21-
_brokerTypes = brokerTypes;
22+
BrokerTypes = brokerTypes;
2223
}
2324

2425
public IConfigurationProvider Build(IConfigurationBuilder builder)
@@ -31,6 +32,6 @@ public IConfigurationProvider Build(IConfigurationBuilder builder)
3132

3233
private string DebuggerToString()
3334
{
34-
return $"{GetType().FullName} ({_brokerTypes})";
35+
return $"{GetType().FullName} ({BrokerTypes})";
3536
}
3637
}

src/Configuration/src/CloudFoundry/ServiceBindings/ConfigurationBuilderExtensions.cs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,11 @@ public static IConfigurationBuilder AddCloudFoundryServiceBindings(this IConfigu
119119
ArgumentNullException.ThrowIfNull(ignoreKeyPredicate);
120120
ArgumentNullException.ThrowIfNull(loggerFactory);
121121

122-
if (brokerTypes != CloudFoundryServiceBrokerTypes.None)
122+
CloudFoundryServiceBrokerTypes missingBrokerTypes = GetMissingBrokerTypes(builder, brokerTypes);
123+
124+
if (missingBrokerTypes != CloudFoundryServiceBrokerTypes.None)
123125
{
124-
var source = new CloudFoundryServiceBindingConfigurationSource(serviceBindingsReader ?? DefaultReader, brokerTypes)
126+
var source = new CloudFoundryServiceBindingConfigurationSource(serviceBindingsReader ?? DefaultReader, missingBrokerTypes)
125127
{
126128
IgnoreKeyPredicate = ignoreKeyPredicate
127129
};
@@ -130,13 +132,28 @@ public static IConfigurationBuilder AddCloudFoundryServiceBindings(this IConfigu
130132
// WebApplicationBuilder immediately builds the configuration provider and loads it, which executes the post-processors.
131133
// Therefore, adding post-processors afterward is a no-op.
132134

133-
RegisterPostProcessors(source, brokerTypes, loggerFactory);
135+
RegisterPostProcessors(source, missingBrokerTypes, loggerFactory);
134136
builder.Add(source);
135137
}
136138

137139
return builder;
138140
}
139141

142+
private static CloudFoundryServiceBrokerTypes GetMissingBrokerTypes(IConfigurationBuilder builder, CloudFoundryServiceBrokerTypes brokerTypesRequested)
143+
{
144+
CloudFoundryServiceBrokerTypes missingBrokerTypes = brokerTypesRequested;
145+
146+
if (brokerTypesRequested != CloudFoundryServiceBrokerTypes.None)
147+
{
148+
foreach (var existingSource in builder.EnumerateSources<CloudFoundryServiceBindingConfigurationSource>())
149+
{
150+
missingBrokerTypes &= ~existingSource.BrokerTypes;
151+
}
152+
}
153+
154+
return missingBrokerTypes;
155+
}
156+
140157
private static void RegisterPostProcessors(CloudFoundryServiceBindingConfigurationSource source, CloudFoundryServiceBrokerTypes brokerTypes,
141158
ILoggerFactory loggerFactory)
142159
{

src/Configuration/test/CloudFoundry.Test/ServiceBindings/ConfigurationBuilderExtensionsTest.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,24 @@ public void AddCloudFoundryServiceBindings_RegistersSubsetOfProcessors()
6868
source.PostProcessors.Should().HaveCount(2);
6969
}
7070

71+
[Fact]
72+
public void AddCloudFoundryServiceBindings_DoesNotAddMultipleSourcesForSamePostProcessor()
73+
{
74+
var builder = new ConfigurationBuilder();
75+
76+
builder.AddCloudFoundryServiceBindings(CloudFoundryServiceBrokerTypes.None);
77+
builder.AddCloudFoundryServiceBindings(CloudFoundryServiceBrokerTypes.PostgreSql | CloudFoundryServiceBrokerTypes.MySql);
78+
builder.AddCloudFoundryServiceBindings(CloudFoundryServiceBrokerTypes.PostgreSql | CloudFoundryServiceBrokerTypes.SqlServer);
79+
builder.AddCloudFoundryServiceBindings(CloudFoundryServiceBrokerTypes.MySql | CloudFoundryServiceBrokerTypes.RabbitMQ);
80+
builder.AddCloudFoundryServiceBindings(CloudFoundryServiceBrokerTypes.SqlServer | CloudFoundryServiceBrokerTypes.RabbitMQ);
81+
82+
var sources = builder.Sources.OfType<CloudFoundryServiceBindingConfigurationSource>().Should().HaveCount(3).And.Subject.ToArray();
83+
84+
sources[0].BrokerTypes.Should().Be(CloudFoundryServiceBrokerTypes.PostgreSql | CloudFoundryServiceBrokerTypes.MySql);
85+
sources[1].BrokerTypes.Should().Be(CloudFoundryServiceBrokerTypes.SqlServer);
86+
sources[2].BrokerTypes.Should().Be(CloudFoundryServiceBrokerTypes.RabbitMQ);
87+
}
88+
7189
[Fact]
7290
public void AddCloudFoundryServiceBindings_EnvironmentVariableSet_LoadsServiceBindings()
7391
{

0 commit comments

Comments
 (0)