From 3ed0e021acdbd6a304f5865c914aae7265f62dab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Nicoll?= Date: Mon, 17 Feb 2025 11:49:28 +0100 Subject: [PATCH] Polish "Auto-configure ObjectDirectoryMapper" See gh-44290 --- .../ldap/LdapAutoConfiguration.java | 25 ++++---- .../ldap/LdapAutoConfigurationTests.java | 59 +++++++++---------- 2 files changed, 39 insertions(+), 45 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/ldap/LdapAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/ldap/LdapAutoConfiguration.java index 164ff6fbfe..92e52dcb09 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/ldap/LdapAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/ldap/LdapAutoConfiguration.java @@ -28,7 +28,6 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.boot.context.properties.PropertyMapper; import org.springframework.boot.convert.ApplicationConversionService; import org.springframework.context.annotation.Bean; -import org.springframework.core.convert.ConversionService; import org.springframework.core.env.Environment; import org.springframework.ldap.convert.ConverterUtils; import org.springframework.ldap.core.ContextSource; @@ -75,6 +74,16 @@ public class LdapAutoConfiguration { return source; } + @Bean + @ConditionalOnMissingBean + public ObjectDirectoryMapper objectDirectoryMapper() { + ApplicationConversionService conversionService = new ApplicationConversionService(); + ConverterUtils.addDefaultConverters(conversionService); + DefaultObjectDirectoryMapper objectDirectoryMapper = new DefaultObjectDirectoryMapper(); + objectDirectoryMapper.setConversionService(conversionService); + return objectDirectoryMapper; + } + @Bean @ConditionalOnMissingBean(LdapOperations.class) public LdapTemplate ldapTemplate(LdapProperties properties, ContextSource contextSource, @@ -91,18 +100,4 @@ public class LdapAutoConfiguration { return ldapTemplate; } - @Bean - @ConditionalOnMissingBean - public ObjectDirectoryMapper objectDirectoryMapper() { - DefaultObjectDirectoryMapper objectDirectoryMapper = new DefaultObjectDirectoryMapper(); - objectDirectoryMapper.setConversionService(createConversionService()); - return objectDirectoryMapper; - } - - private static ConversionService createConversionService() { - ApplicationConversionService conversionService = new ApplicationConversionService(); - ConverterUtils.addDefaultConverters(conversionService); - return conversionService; - } - } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/ldap/LdapAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/ldap/LdapAutoConfigurationTests.java index 43d4434d91..fd22d5001e 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/ldap/LdapAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/ldap/LdapAutoConfigurationTests.java @@ -137,6 +137,21 @@ class LdapAutoConfigurationTests { }); } + @Test + void objectDirectoryMapperExists() { + this.contextRunner.withPropertyValues("spring.ldap.urls:ldap://localhost:389").run((context) -> { + assertThat(context).hasSingleBean(ObjectDirectoryMapper.class); + ObjectDirectoryMapper objectDirectoryMapper = context.getBean(ObjectDirectoryMapper.class); + ApplicationConversionService conversionService = assertThat(objectDirectoryMapper) + .extracting("converterManager") + .extracting("conversionService") + .asInstanceOf(InstanceOfAssertFactories.type(ApplicationConversionService.class)) + .actual(); + assertThat(conversionService.canConvert(String.class, Name.class)).isTrue(); + assertThat(conversionService.canConvert(Name.class, String.class)).isTrue(); + }); + } + @Test void templateExists() { this.contextRunner.withPropertyValues("spring.ldap.urls:ldap://localhost:389").run((context) -> { @@ -145,9 +160,23 @@ class LdapAutoConfigurationTests { assertThat(ldapTemplate).hasFieldOrPropertyWithValue("ignorePartialResultException", false); assertThat(ldapTemplate).hasFieldOrPropertyWithValue("ignoreNameNotFoundException", false); assertThat(ldapTemplate).hasFieldOrPropertyWithValue("ignoreSizeLimitExceededException", true); + assertThat(ldapTemplate).extracting("objectDirectoryMapper") + .isSameAs(context.getBean(ObjectDirectoryMapper.class)); }); } + @Test + void templateCanBeConfiguredWithCustomObjectDirectoryMapper() { + ObjectDirectoryMapper objectDirectoryMapper = mock(ObjectDirectoryMapper.class); + this.contextRunner.withPropertyValues("spring.ldap.urls:ldap://localhost:389") + .withBean(ObjectDirectoryMapper.class, () -> objectDirectoryMapper) + .run((context) -> { + assertThat(context).hasSingleBean(LdapTemplate.class); + LdapTemplate ldapTemplate = context.getBean(LdapTemplate.class); + assertThat(ldapTemplate).extracting("objectDirectoryMapper").isSameAs(objectDirectoryMapper); + }); + } + @Test void templateConfigurationCanBeCustomized() { this.contextRunner @@ -199,36 +228,6 @@ class LdapAutoConfigurationTests { }); } - @Test - void objectDirectoryMapperBeanAutoConfigured() { - this.contextRunner.withPropertyValues("spring.ldap.urls:ldap://localhost:389").run((context) -> { - assertThat(context).hasSingleBean(ObjectDirectoryMapper.class); - assertThat(context).hasSingleBean(LdapTemplate.class); - ObjectDirectoryMapper objectDirectoryMapper = context.getBean(ObjectDirectoryMapper.class); - LdapTemplate ldapTemplate = context.getBean(LdapTemplate.class); - ApplicationConversionService conversionService = assertThat(objectDirectoryMapper) - .extracting("converterManager") - .extracting("conversionService") - .asInstanceOf(InstanceOfAssertFactories.type(ApplicationConversionService.class)) - .actual(); - assertThat(conversionService.canConvert(String.class, Name.class)).isTrue(); - assertThat(conversionService.canConvert(Name.class, String.class)).isTrue(); - assertThat(ldapTemplate).extracting("objectDirectoryMapper").isSameAs(objectDirectoryMapper); - }); - } - - @Test - void customObjectDirectoryMapperBeanCanBeUsed() { - ObjectDirectoryMapper objectDirectoryMapper = mock(ObjectDirectoryMapper.class); - this.contextRunner.withPropertyValues("spring.ldap.urls:ldap://localhost:389") - .withBean(ObjectDirectoryMapper.class, () -> objectDirectoryMapper) - .run((context) -> { - assertThat(context).hasSingleBean(LdapTemplate.class); - LdapTemplate ldapTemplate = context.getBean(LdapTemplate.class); - assertThat(ldapTemplate).extracting("objectDirectoryMapper").isSameAs(objectDirectoryMapper); - }); - } - @Configuration(proxyBeanMethods = false) static class ConnectionDetailsConfiguration {