From b985c6997f9e32a2a26d0edd4043753050e2e0cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Thu, 14 Sep 2023 12:01:06 +0200 Subject: [PATCH] Add checkpointEvent extension property. It should allow to configure other events than org.springframework.boot.context.event.ApplicationReadyEvent to trigger the checkpoint. Closes gh-22 --- .../springframework/cr/gradle/CrSmokeTestPlugin.java | 4 ++++ .../cr/gradle/dsl/CrSmokeTestExtension.java | 10 ++++++++++ .../gradle/tasks/StartAndCheckpointJvmApplication.java | 10 +++++++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/gradle/plugins/cr-smoke-test-plugin/src/main/java/org/springframework/cr/gradle/CrSmokeTestPlugin.java b/gradle/plugins/cr-smoke-test-plugin/src/main/java/org/springframework/cr/gradle/CrSmokeTestPlugin.java index a1e29b7..a115b85 100644 --- a/gradle/plugins/cr-smoke-test-plugin/src/main/java/org/springframework/cr/gradle/CrSmokeTestPlugin.java +++ b/gradle/plugins/cr-smoke-test-plugin/src/main/java/org/springframework/cr/gradle/CrSmokeTestPlugin.java @@ -73,6 +73,7 @@ public class CrSmokeTestPlugin implements Plugin { CrSmokeTestExtension extension = project.getExtensions() .create("crSmokeTest", CrSmokeTestExtension.class, project); extension.getWebApplication().convention(false); + extension.getCheckpointEvent().convention("org.springframework.boot.context.event.ApplicationReadyEvent"); JavaPluginExtension javaExtension = project.getExtensions().getByType(JavaPluginExtension.class); SourceSet appTest = javaExtension.getSourceSets().create("appTest"); javaExtension.setSourceCompatibility(JavaVersion.VERSION_17); @@ -262,6 +263,9 @@ public class CrSmokeTestPlugin implements Plugin { start.getOutputDirectory().set(outputDirectory); start.setDescription("Starts the " + type.description + " application."); start.getWebApplication().convention(extension.getWebApplication()); + if (start instanceof StartAndCheckpointJvmApplication startAndCheckpoint) { + startAndCheckpoint.getCheckpointEvent().convention(extension.getCheckpointEvent()); + } }); } diff --git a/gradle/plugins/cr-smoke-test-plugin/src/main/java/org/springframework/cr/gradle/dsl/CrSmokeTestExtension.java b/gradle/plugins/cr-smoke-test-plugin/src/main/java/org/springframework/cr/gradle/dsl/CrSmokeTestExtension.java index 1d7fff6..ad01c01 100644 --- a/gradle/plugins/cr-smoke-test-plugin/src/main/java/org/springframework/cr/gradle/dsl/CrSmokeTestExtension.java +++ b/gradle/plugins/cr-smoke-test-plugin/src/main/java/org/springframework/cr/gradle/dsl/CrSmokeTestExtension.java @@ -31,9 +31,12 @@ public class CrSmokeTestExtension { private final Property webApplication; + private final Property checkpointEvent; + @Inject public CrSmokeTestExtension(Project project) { this.webApplication = project.getObjects().property(Boolean.class); + this.checkpointEvent = project.getObjects().property(String.class); } /** @@ -44,4 +47,11 @@ public class CrSmokeTestExtension { return this.webApplication; } + /** + * @return The Spring event class name to be used to trigger a checkpoint. + */ + public Property getCheckpointEvent() { + return this.checkpointEvent; + } + } diff --git a/gradle/plugins/cr-smoke-test-plugin/src/main/java/org/springframework/cr/gradle/tasks/StartAndCheckpointJvmApplication.java b/gradle/plugins/cr-smoke-test-plugin/src/main/java/org/springframework/cr/gradle/tasks/StartAndCheckpointJvmApplication.java index 8b172da..b2e5a31 100644 --- a/gradle/plugins/cr-smoke-test-plugin/src/main/java/org/springframework/cr/gradle/tasks/StartAndCheckpointJvmApplication.java +++ b/gradle/plugins/cr-smoke-test-plugin/src/main/java/org/springframework/cr/gradle/tasks/StartAndCheckpointJvmApplication.java @@ -8,6 +8,8 @@ import java.util.ArrayList; import java.util.List; import org.gradle.api.Task; +import org.gradle.api.provider.Property; +import org.gradle.api.tasks.Input; import org.gradle.api.tasks.TaskAction; import org.gradle.internal.jvm.Jvm; @@ -32,7 +34,8 @@ public abstract class StartAndCheckpointJvmApplication extends StartApplication command.add("/bin/bash"); command.add("-c"); StringBuilder builder = new StringBuilder(executable.getAbsolutePath()); - builder.append(" -Dorg.springframework.cr.smoketest.checkpoint=org.springframework.boot.context.event.ApplicationReadyEvent"); + builder.append(" -Dorg.springframework.cr.smoketest.checkpoint="); + builder.append(getCheckpointEvent().get()); builder.append(" -XX:CRaCCheckpointTo="); builder.append(outputDirectory); if (getWebApplication().get()) { @@ -67,5 +70,10 @@ public abstract class StartAndCheckpointJvmApplication extends StartApplication Files.write(pid, List.of(Long.toString(process.pid()))); } + /** + * @return The Spring event class name to be used to trigger a checkpoint. + */ + @Input + public abstract Property getCheckpointEvent(); }