From b78e7b5ac72a2a8351e954f7b07e7ee02d530355 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 24 Oct 2022 10:04:39 +0100 Subject: [PATCH] Disable TestRestTemplateContextCustomizer after AOT processing After AOT processing, a TestRestTemplate bean will be defined directly so the context customizer that initiates its registration is not needed. We'd already disabled the registrar but this is insufficient in Graal 22.3 which fails fast when the customizer tries to reference the registrar. Fixes gh-32848 --- .../test/web/client/TestRestTemplateContextCustomizer.java | 3 +++ .../web/client/TestRestTemplateContextCustomizerTests.java | 7 +++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/web/client/TestRestTemplateContextCustomizer.java b/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/web/client/TestRestTemplateContextCustomizer.java index 73312c4adbc..550b6125764 100644 --- a/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/web/client/TestRestTemplateContextCustomizer.java +++ b/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/web/client/TestRestTemplateContextCustomizer.java @@ -53,6 +53,9 @@ class TestRestTemplateContextCustomizer implements ContextCustomizer { @Override public void customizeContext(ConfigurableApplicationContext context, MergedContextConfiguration mergedContextConfiguration) { + if (AotDetector.useGeneratedArtifacts()) { + return; + } SpringBootTest springBootTest = TestContextAnnotationUtils .findMergedAnnotation(mergedContextConfiguration.getTestClass(), SpringBootTest.class); if (springBootTest.webEnvironment().isEmbedded()) { diff --git a/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/client/TestRestTemplateContextCustomizerTests.java b/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/client/TestRestTemplateContextCustomizerTests.java index bb754700a7b..a598ef0cb42 100644 --- a/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/client/TestRestTemplateContextCustomizerTests.java +++ b/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/client/TestRestTemplateContextCustomizerTests.java @@ -23,6 +23,7 @@ import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer.TestRestTemplateRegistrar; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.test.context.MergedContextConfiguration; @@ -48,8 +49,10 @@ class TestRestTemplateContextCustomizerTests { @Test void whenUsingAotGeneratedArtifactsTestRestTemplateIsNotRegistered() { new ApplicationContextRunner().withSystemProperties("spring.aot.enabled:true") - .withInitializer(this::applyTestRestTemplateContextCustomizer) - .run((context) -> assertThat(context).doesNotHaveBean(TestRestTemplate.class)); + .withInitializer(this::applyTestRestTemplateContextCustomizer).run((context) -> { + assertThat(context).doesNotHaveBean(TestRestTemplateRegistrar.class); + assertThat(context).doesNotHaveBean(TestRestTemplate.class); + }); } @SuppressWarnings({ "unchecked", "rawtypes" })