From 213cab3cdaca6dd4a4e638ce94b161c6b3d31031 Mon Sep 17 00:00:00 2001 From: Tim Hess Date: Fri, 3 Nov 2023 09:33:01 -0500 Subject: [PATCH] Add mappings for MongoDb and Redis --- .../LegacyConnectorsPostProcessors.cs | 52 +++++++++++++++++++ .../LegacyConnectorsPostProcessorsTest.cs | 32 ++++++++++++ 2 files changed, 84 insertions(+) diff --git a/src/Configuration/src/Kubernetes.ServiceBinding/LegacyConnectorsPostProcessors.cs b/src/Configuration/src/Kubernetes.ServiceBinding/LegacyConnectorsPostProcessors.cs index 7c32e49153..08d71d1e93 100644 --- a/src/Configuration/src/Kubernetes.ServiceBinding/LegacyConnectorsPostProcessors.cs +++ b/src/Configuration/src/Kubernetes.ServiceBinding/LegacyConnectorsPostProcessors.cs @@ -6,6 +6,33 @@ namespace Steeltoe.Extensions.Configuration.Kubernetes.ServiceBinding; +internal sealed class MongoDbLegacyConnectorPostProcessor : IConfigurationPostProcessor +{ + internal const string BindingTypeKey = "mongodb"; + + public void PostProcessConfiguration(PostProcessorConfigurationProvider provider, IDictionary configData) + { + if (!provider.IsBindingTypeEnabled(BindingTypeKey)) + { + return; + } + + configData.Filter(ServiceBindingConfigurationProvider.KubernetesBindingsPrefix, ServiceBindingConfigurationProvider.TypeKey, BindingTypeKey).ForEach( + bindingNameKey => + { + var mapper = new ServiceBindingMapper(configData, bindingNameKey, "mongodb", "client"); + + // Spring -> spring.data.mongodb.... + // Steeltoe -> mongodb:client:... + mapper.MapFromTo("host", "server"); + mapper.MapFromTo("port", "port"); + mapper.MapFromTo("database", "database"); + mapper.MapFromTo("username", "username"); + mapper.MapFromTo("password", "password"); + }); + } +} + internal sealed class MySqlLegacyConnectorPostProcessor : IConfigurationPostProcessor { internal const string BindingTypeKey = "mysql"; @@ -100,3 +127,28 @@ public void PostProcessConfiguration(PostProcessorConfigurationProvider provider }); } } + +internal sealed class RedisLegacyConnectorPostProcessor : IConfigurationPostProcessor +{ + internal const string BindingTypeKey = "redis"; + + public void PostProcessConfiguration(PostProcessorConfigurationProvider provider, IDictionary configData) + { + if (!provider.IsBindingTypeEnabled(BindingTypeKey)) + { + return; + } + + configData.Filter(ServiceBindingConfigurationProvider.KubernetesBindingsPrefix, ServiceBindingConfigurationProvider.TypeKey, BindingTypeKey).ForEach( + bindingNameKey => + { + var mapper = new ServiceBindingMapper(configData, bindingNameKey, "redis", "client"); + + mapper.MapFromTo("host", "host"); + mapper.MapFromTo("port", "port"); + mapper.MapFromTo("ssl", "ssl"); + mapper.MapFromTo("password", "password"); + mapper.MapFromTo("client-name", "clientName"); + }); + } +} diff --git a/src/Configuration/test/Kubernetes.ServiceBinding.Test/LegacyConnectorsPostProcessorsTest.cs b/src/Configuration/test/Kubernetes.ServiceBinding.Test/LegacyConnectorsPostProcessorsTest.cs index ea3db77de3..63c2bfc7ec 100644 --- a/src/Configuration/test/Kubernetes.ServiceBinding.Test/LegacyConnectorsPostProcessorsTest.cs +++ b/src/Configuration/test/Kubernetes.ServiceBinding.Test/LegacyConnectorsPostProcessorsTest.cs @@ -10,6 +10,22 @@ namespace Steeltoe.Extensions.Configuration.Kubernetes.ServiceBinding.Test; public class LegacyConnectorsPostProcessorsTest : BasePostProcessorsTest { + [Fact] + public void MongoDbTest_BindingTypeEnabled() + { + var postProcessor = new MongoDbLegacyConnectorPostProcessor(); + + Dictionary configData = GetConfigData(_testBindingName, MongoDbPostProcessor.BindingTypeKey, Tuple.Create("database", "test-database"), Tuple.Create("host", "test-host"), Tuple.Create("password", "test-password"), Tuple.Create("port", "test-port"), Tuple.Create("username", "test-username")); + + // BindingType enabled + postProcessor.PostProcessConfiguration(GetConfigurationProvider(postProcessor, MongoDbPostProcessor.BindingTypeKey, true), configData); + Assert.Equal("test-host", configData["mongodb:client:server"]); + Assert.Equal("test-port", configData["mongodb:client:port"]); + Assert.Equal("test-database", configData["mongodb:client:database"]); + Assert.Equal("test-username", configData["mongodb:client:username"]); + Assert.Equal("test-password", configData["mongodb:client:password"]); + } + [Fact] public void MySqlTest_BindingTypeEnabled() { @@ -63,4 +79,20 @@ public void RabbitMQTest_BindingTypeEnabled() Assert.Equal("test-username", configData["rabbitmq:client:username"]); Assert.Equal("test-virtual-host", configData["rabbitmq:client:virtualhost"]); } + + [Fact] + public void RedisTest_BindingTypeEnabled() + { + var postProcessor = new RedisLegacyConnectorPostProcessor(); + + Dictionary configData = GetConfigData(_testBindingName, RedisPostProcessor.BindingTypeKey, Tuple.Create("host", "test-host"), Tuple.Create("password", "test-password"), Tuple.Create("port", "test-port"), Tuple.Create("username", "test-username"), Tuple.Create("client-name", "test-client"), Tuple.Create("ssl", "true")); + + // BindingType enabled + postProcessor.PostProcessConfiguration(GetConfigurationProvider(postProcessor, RedisPostProcessor.BindingTypeKey, true), configData); + Assert.Equal("test-host", configData["redis:client:host"]); + Assert.Equal("test-port", configData["redis:client:port"]); + Assert.Equal("true", configData["redis:client:ssl"]); + Assert.Equal("test-password", configData["redis:client:password"]); + Assert.Equal("test-client", configData["redis:client:clientName"]); + } }