Skip to content

sdeleuze/spring-aot-smoke-tests

 
 

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.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages

  • Java 97.8%
  • Kotlin 1.8%
  • Other 0.4%