Adapt integration tests to proxy changes in Spring Framework

pull/32077/head
Stephane Nicoll 2 years ago
parent 332419e3a7
commit 4a00d76b85

@ -41,18 +41,48 @@ public class AotGenerateTests {
Path aotDirectory = project.toPath().resolve("target/spring-aot/main"); Path aotDirectory = project.toPath().resolve("target/spring-aot/main");
assertThat(collectRelativePaths(aotDirectory.resolve("sources"))) assertThat(collectRelativePaths(aotDirectory.resolve("sources")))
.contains(Path.of("org", "test", "SampleApplication__ApplicationContextInitializer.java")); .contains(Path.of("org", "test", "SampleApplication__ApplicationContextInitializer.java"));
});
}
@TestTemplate
void whenAotRunsResourcesAreGenerated(MavenBuild mavenBuild) {
mavenBuild.project("aot").goals("package").execute((project) -> {
Path aotDirectory = project.toPath().resolve("target/spring-aot/main");
assertThat(collectRelativePaths(aotDirectory.resolve("resources"))).containsOnly( assertThat(collectRelativePaths(aotDirectory.resolve("resources"))).containsOnly(
Path.of("META-INF", "native-image", "org.springframework.boot.maven.it", "aot", Path.of("META-INF", "native-image", "org.springframework.boot.maven.it", "aot",
"reflect-config.json"), "reflect-config.json"),
Path.of("META-INF", "native-image", "org.springframework.boot.maven.it", "aot", Path.of("META-INF", "native-image", "org.springframework.boot.maven.it", "aot",
"resource-config.json"), "resource-config.json"),
Path.of("META-INF", "native-image", "org.springframework.boot.maven.it", "aot", Path.of("META-INF", "native-image", "org.springframework.boot.maven.it", "aot",
"native-image.properties"));
});
}
@TestTemplate
void whenAotRunsWithJdkProxyResourcesIncludeProxyConfig(MavenBuild mavenBuild) {
mavenBuild.project("aot-jdk-proxy").goals("package").execute((project) -> {
Path aotDirectory = project.toPath().resolve("target/spring-aot/main");
assertThat(collectRelativePaths(aotDirectory.resolve("resources"))).containsOnly(
Path.of("META-INF", "native-image", "org.springframework.boot.maven.it", "aot-jdk-proxy",
"reflect-config.json"),
Path.of("META-INF", "native-image", "org.springframework.boot.maven.it", "aot-jdk-proxy",
"resource-config.json"),
Path.of("META-INF", "native-image", "org.springframework.boot.maven.it", "aot-jdk-proxy",
"proxy-config.json"), "proxy-config.json"),
Path.of("META-INF", "native-image", "org.springframework.boot.maven.it", "aot", Path.of("META-INF", "native-image", "org.springframework.boot.maven.it", "aot-jdk-proxy",
"native-image.properties")); "native-image.properties"));
}); });
} }
@TestTemplate
void whenAotRunsWithClassProxyClassesAreGenerated(MavenBuild mavenBuild) {
mavenBuild.project("aot-class-proxy").goals("package").execute((project) -> {
Path aotDirectory = project.toPath().resolve("target/spring-aot/main");
assertThat(collectRelativePaths(aotDirectory.resolve("classes")))
.contains(Path.of("org", "test", "SampleRunner$$SpringCGLIB$$0.class"));
});
}
@TestTemplate @TestTemplate
void whenAotRunsSourcesAreCompiled(MavenBuild mavenBuild) { void whenAotRunsSourcesAreCompiled(MavenBuild mavenBuild) {
mavenBuild.project("aot").goals("package").execute((project) -> { mavenBuild.project("aot").goals("package").execute((project) -> {
@ -64,13 +94,22 @@ public class AotGenerateTests {
@TestTemplate @TestTemplate
void whenAotRunsResourcesAreCopiedToTargetClasses(MavenBuild mavenBuild) { void whenAotRunsResourcesAreCopiedToTargetClasses(MavenBuild mavenBuild) {
mavenBuild.project("aot").goals("package").execute((project) -> { mavenBuild.project("aot-jdk-proxy").goals("package").execute((project) -> {
Path classesDirectory = project.toPath().resolve("target/classes/META-INF/native-image"); Path classesDirectory = project.toPath().resolve("target/classes/META-INF/native-image");
assertThat(collectRelativePaths(classesDirectory)).contains( assertThat(collectRelativePaths(classesDirectory)).contains(
Path.of("org.springframework.boot.maven.it", "aot", "reflect-config.json"), Path.of("org.springframework.boot.maven.it", "aot-jdk-proxy", "reflect-config.json"),
Path.of("org.springframework.boot.maven.it", "aot", "resource-config.json"), Path.of("org.springframework.boot.maven.it", "aot-jdk-proxy", "resource-config.json"),
Path.of("org.springframework.boot.maven.it", "aot", "proxy-config.json"), Path.of("org.springframework.boot.maven.it", "aot-jdk-proxy", "proxy-config.json"),
Path.of("org.springframework.boot.maven.it", "aot", "native-image.properties")); Path.of("org.springframework.boot.maven.it", "aot-jdk-proxy", "native-image.properties"));
});
}
@TestTemplate
void whenAotRunsWithClassProxyClassesAreCopiedToTargetClasses(MavenBuild mavenBuild) {
mavenBuild.project("aot-class-proxy").goals("package").execute((project) -> {
Path classesDirectory = project.toPath().resolve("target/classes/");
assertThat(collectRelativePaths(classesDirectory))
.contains(Path.of("org", "test", "SampleRunner$$SpringCGLIB$$0.class"));
}); });
} }

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.boot.maven.it</groupId>
<artifactId>aot-class-proxy</artifactId>
<version>0.0.1.BUILD-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>@java.version@</maven.compiler.source>
<maven.compiler.target>@java.version@</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>@project.groupId@</groupId>
<artifactId>@project.artifactId@</artifactId>
<version>@project.version@</version>
<executions>
<execution>
<goals>
<goal>aot-generate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>@project.version@</version>
</dependency>
</dependencies>
</project>

@ -0,0 +1,33 @@
/*
* Copyright 2012-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.test;
import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
@Configuration(proxyBeanMethods = false)
@ComponentScan
@EnableAsync
public class SampleApplication {
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
}

@ -0,0 +1,30 @@
/*
* Copyright 2012-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.test;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
@Component
public class SampleRunner {
@Async
public void run() {
}
}

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.boot.maven.it</groupId>
<artifactId>aot-jdk-proxy</artifactId>
<version>0.0.1.BUILD-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>@java.version@</maven.compiler.source>
<maven.compiler.target>@java.version@</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>@project.groupId@</groupId>
<artifactId>@project.artifactId@</artifactId>
<version>@project.version@</version>
<executions>
<execution>
<goals>
<goal>aot-generate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>@project.version@</version>
</dependency>
</dependencies>
</project>

@ -0,0 +1,46 @@
/*
* Copyright 2012-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.test;
import org.test.SampleApplication.SampleApplicationRuntimeHints;
import org.springframework.aot.hint.RuntimeHints;
import org.springframework.aot.hint.RuntimeHintsRegistrar;
import org.springframework.aot.hint.support.RuntimeHintsUtils;
import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportRuntimeHints;
import org.springframework.stereotype.Service;
@Configuration(proxyBeanMethods = false)
@ImportRuntimeHints(SampleApplicationRuntimeHints.class)
public class SampleApplication {
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
static class SampleApplicationRuntimeHints implements RuntimeHintsRegistrar {
@Override
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
// Force creation of at least one JDK proxy
RuntimeHintsUtils.registerAnnotation(hints, Service.class);
}
}
}
Loading…
Cancel
Save