Skip to content

spring-projects/spring-aot-smoke-tests

Folders and files

NameName
Last commit message
Last commit date

Latest commit

f62ffd5 · Feb 8, 2025
Sep 24, 2024
Oct 21, 2024
Dec 9, 2024
Oct 21, 2024
Oct 21, 2024
Oct 28, 2024
Jan 17, 2025
Jul 29, 2024
Oct 21, 2024
Jan 31, 2025
Oct 21, 2024
Jul 28, 2022
May 8, 2024
Nov 24, 2022
Jul 4, 2022
Jan 30, 2024
Feb 29, 2024
Feb 3, 2025
Jul 24, 2024
Jul 24, 2024
Sep 24, 2024

Repository files navigation

Spring AOT Smoke Tests Revved up by Develocity

A suite of tests for applications using AOT on the JVM and in GraalVM native images. There are two types of tests: unit tests and application tests.

Unit tests are processed ahead of time and are then either run on the JVM or as a native executable. Unit tests can be run on the JVM using the test task and as a native executable using the nativeTest task.

Application tests are always executed on the JVM against an application that’s running on the JVM or as a native executable. The appTest task tests the application running on the JVM.The nativeAppTest task tests the application running as a native executable.

Contributing

Please read and follow the contributing guide.

How to

Run all of a project’s smoke tests

./gradlew :<name of the group>:<name of the smoke test>:build

for example

./gradlew :boot:actuator-webmvc:build

Run a specific type of tests for a project

./gradlew :<name of the group>:<name of the smoke test>:<test task name>

Valid test task names are:

  1. appTest – tests the application running on the JVM

  2. nativeAppTest – tests the application running as a native executable

  3. test – executes the AOT-processed unit tests on the JVM

  4. nativeTest – executes the AOT-processed unit tests in a native executable

for example

./gradlew :boot:actuator-webmvc:appTest

Add a new smoke test

  1. Create a new directory for your smoke test in the appropriate group

  2. Include the directory in settings.gradle (new groups only)

  3. Consult the README in the ci branch to update the CI infrastructure

Test against local changes

Your project uses Gradle

./gradlew :<name of the group>:<name of the smoke test>:build --include-build /path/to/your/project

Gradle will then substitute the dependency with your provided version.

Hint: You can use --include-build multiple times.

Your project uses Maven or --include-build does not work

First, install the snapshots into your local Maven cache. You can now consume those snapshots using -PfromMavenLocal which takes a comma-separated list of group IDs:

./gradlew :rest-template:build -PfromMavenLocal=org.springframework,org.springframework.data

The preceding example will run the rest-template smoke test, resolving Spring Framework and Spring Data modules from your local Maven cache.

Using snapshots

By default, the smoke tests will use snapshots of org.springframework.* dependencies. Note that org.springframework.boot and org.springframework.cloud dependencies are not affected. Their versions are controlled by the springBootVersion and springCloudVersion properties defined in gradle.properties.

For each eligible dependency, the snapshot version that is used is derived from the dependency’s default version:

  • x.y.z-SNAPSHOT is left as-is

  • x.y.z is changed to x.y.z+1-SNAPSHOT

  • x.y.z-Mn is changed to x.y.z-SNAPSHOT

  • x.y.z-RCn is changed to x.y.z-SNAPSHOT

To disable this behavior, set the forceSnapshots property to false, as shown in the following example:

./gradlew :boot:actuator-webmvc:build -PforceSnapshots=false

Override a dependency version

As the test doesn’t use the Spring Dependency Management Plugin, you can’t use the ext['…​'] = '…​' method.

Instead, use Gradle dependency constraints. Say, for example, you want to update the version of Spring Session JDBC to 3.0.0-SNAPSHOT:

dependencies {
    // ...
    constraints {
        implementation('org.springframework.session:spring-session-jdbc:3.0.0-SNAPSHOT')
    }
}

This works for direct and transitive dependencies.

Releases

No releases published

Packages

No packages published

Languages