diff --git a/dd-smoke-tests/apm-tracing-disabled/application/build.gradle b/dd-smoke-tests/apm-tracing-disabled/application/build.gradle new file mode 100644 index 00000000000..b5653805e95 --- /dev/null +++ b/dd-smoke-tests/apm-tracing-disabled/application/build.gradle @@ -0,0 +1,44 @@ +// Spring Boot 2.7.x is the last line that still supports Java 8, which this smoke test +// exercises (see the `sourceCompatibility = '1.8'` below). Do not bump to 3.x without +// also moving the smoke test off Java 8. +plugins { + id 'java' + id 'org.springframework.boot' version '2.7.15' + id 'io.spring.dependency-management' version '1.0.15.RELEASE' +} + +def sharedRootDir = "$rootDir/../../../" +def sharedConfigDirectory = "$sharedRootDir/gradle" +rootProject.ext.sharedConfigDirectory = sharedConfigDirectory + +apply from: "$sharedConfigDirectory/repositories.gradle" + +if (hasProperty('appBuildDir')) { + buildDir = property('appBuildDir') +} + +version = "" + +java { + sourceCompatibility = '1.8' +} + +if (hasProperty('apiJar')) { + dependencies { + implementation files(property('apiJar')) + } +} else { + dependencies { + implementation "com.datadoghq:dd-trace-api:+" + } +} + +dependencies { + compileOnly 'com.github.spotbugs:spotbugs-annotations:4.9.8' + implementation 'org.springframework.boot:spring-boot-starter-web' + // OpenTracing 0.32.0 is the last release and is intentionally pinned: this smoke test + // exercises the legacy OpenTracing bridge in dd-trace-ot. Do not "upgrade" — there is + // no newer version. + implementation group: 'io.opentracing', name: 'opentracing-api', version: '0.32.0' + implementation group: 'io.opentracing', name: 'opentracing-util', version: '0.32.0' +} diff --git a/dd-smoke-tests/apm-tracing-disabled/application/settings.gradle b/dd-smoke-tests/apm-tracing-disabled/application/settings.gradle new file mode 100644 index 00000000000..1cd03bc7775 --- /dev/null +++ b/dd-smoke-tests/apm-tracing-disabled/application/settings.gradle @@ -0,0 +1,41 @@ +// The `gradlePluginProxy` / `mavenRepositoryProxy` properties point to internal Maven +// mirrors used by CI when the public repos are unreachable; they are forwarded from the +// outer build via the smoke-test plugin. `allowInsecureProtocol` is required because the +// mirrors are reached over plain HTTP inside the CI network. +pluginManagement { + repositories { + mavenLocal() + if (settings.hasProperty("gradlePluginProxy")) { + maven { + url settings["gradlePluginProxy"] + allowInsecureProtocol = true + } + } + if (settings.hasProperty("mavenRepositoryProxy")) { + maven { + url settings["mavenRepositoryProxy"] + allowInsecureProtocol = true + } + } + gradlePluginPortal() + mavenCentral() + } +} + +def isCI = providers.environmentVariable("CI").isPresent() + +// On CI, point the local Gradle build cache to the shared workspace directory under the +// repository root, so cache entries are reused across the many smoke-test nested builds +// (and across CI jobs that mount the same workspace). See f6ec1f5cc8 / #982 for the +// root-level cache, and b34ccbc048 for the `isCI` gating — locally we keep the default +// per-user cache to avoid leaking entries into the repo tree. +if (isCI) { + def sharedRootDir = "$rootDir/../../../" + buildCache { + local { + directory = "$sharedRootDir/workspace/build-cache" + } + } +} + +rootProject.name = 'apm-tracing-disabled-smoketest' diff --git a/dd-smoke-tests/apm-tracing-disabled/src/main/java/datadog/smoketest/apmtracingdisabled/AppConfig.java b/dd-smoke-tests/apm-tracing-disabled/application/src/main/java/datadog/smoketest/apmtracingdisabled/AppConfig.java similarity index 100% rename from dd-smoke-tests/apm-tracing-disabled/src/main/java/datadog/smoketest/apmtracingdisabled/AppConfig.java rename to dd-smoke-tests/apm-tracing-disabled/application/src/main/java/datadog/smoketest/apmtracingdisabled/AppConfig.java diff --git a/dd-smoke-tests/apm-tracing-disabled/src/main/java/datadog/smoketest/apmtracingdisabled/Controller.java b/dd-smoke-tests/apm-tracing-disabled/application/src/main/java/datadog/smoketest/apmtracingdisabled/Controller.java similarity index 100% rename from dd-smoke-tests/apm-tracing-disabled/src/main/java/datadog/smoketest/apmtracingdisabled/Controller.java rename to dd-smoke-tests/apm-tracing-disabled/application/src/main/java/datadog/smoketest/apmtracingdisabled/Controller.java diff --git a/dd-smoke-tests/apm-tracing-disabled/src/main/java/datadog/smoketest/apmtracingdisabled/SpringbootApplication.java b/dd-smoke-tests/apm-tracing-disabled/application/src/main/java/datadog/smoketest/apmtracingdisabled/SpringbootApplication.java similarity index 100% rename from dd-smoke-tests/apm-tracing-disabled/src/main/java/datadog/smoketest/apmtracingdisabled/SpringbootApplication.java rename to dd-smoke-tests/apm-tracing-disabled/application/src/main/java/datadog/smoketest/apmtracingdisabled/SpringbootApplication.java diff --git a/dd-smoke-tests/apm-tracing-disabled/build.gradle b/dd-smoke-tests/apm-tracing-disabled/build.gradle index 638260752db..7b5d43b11db 100644 --- a/dd-smoke-tests/apm-tracing-disabled/build.gradle +++ b/dd-smoke-tests/apm-tracing-disabled/build.gradle @@ -1,36 +1,32 @@ -import org.springframework.boot.gradle.tasks.bundling.BootJar - plugins { - id 'java' - id 'org.springframework.boot' version '2.7.15' - id 'io.spring.dependency-management' version '1.0.15.RELEASE' + id 'dd-trace-java.smoke-test-app' id 'java-test-fixtures' } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/spring-boot-plugin.gradle" + description = 'ASM Standalone Billing Tests.' -java { - sourceCompatibility = '1.8' +smokeTestApp { + application { + taskName = 'bootJar' + artifactPath = 'libs/apm-tracing-disabled-smoketest.jar' + sysProperty = 'datadog.smoketest.springboot.shadowJar.path' + } + projectJar('apiJar', project(':dd-trace-api')) } dependencies { - implementation 'org.springframework.boot:spring-boot-starter-web' - implementation group: 'io.opentracing', name: 'opentracing-api', version: '0.32.0' - implementation group: 'io.opentracing', name: 'opentracing-util', version: '0.32.0' - implementation project(':dd-trace-api') testImplementation project(':dd-smoke-tests') testImplementation(testFixtures(project(":dd-smoke-tests:iast-util"))) } -tasks.withType(Test).configureEach { - def bootJarTask = tasks.named('bootJar', BootJar) - dependsOn bootJarTask - jvmArgumentProviders.add(new CommandLineArgumentProvider() { - @Override - Iterable asArguments() { - return bootJarTask.map { ["-Ddatadog.smoketest.springboot.shadowJar.path=${it.archiveFile.get()}"] }.get() - } - }) +spotless { + java { + target "**/*.java" + } + + groovyGradle { + target '*.gradle', "**/*.gradle" + } } diff --git a/dd-smoke-tests/kafka-2/application/build.gradle b/dd-smoke-tests/kafka-2/application/build.gradle new file mode 100644 index 00000000000..31411ab9e3e --- /dev/null +++ b/dd-smoke-tests/kafka-2/application/build.gradle @@ -0,0 +1,42 @@ +// Spring Boot 2.7.x is the last line that still supports Java 8, which this smoke test +// exercises (see the Java 8 `sourceCompatibility` below). Do not bump to 3.x without +// also moving the smoke test off Java 8. +plugins { + id 'java' + id 'org.springframework.boot' version '2.7.15' + id 'io.spring.dependency-management' version '1.0.15.RELEASE' +} + +def sharedRootDir = "$rootDir/../../../" +def sharedConfigDirectory = "$sharedRootDir/gradle" +rootProject.ext.sharedConfigDirectory = sharedConfigDirectory + +apply from: "$sharedConfigDirectory/repositories.gradle" + +if (hasProperty('appBuildDir')) { + buildDir = property('appBuildDir') +} + +version = "" + +// Pin bytecode target: the nested daemon now runs on JDK 21, but the smoke test launches +// the produced jar on Java 8. +java { + sourceCompatibility = JavaVersion.VERSION_1_8 +} + +// `iastUtilJar` is wired up by the outer `smokeTestApp { projectJar('iastUtilJar', ...) }` +// block in ../build.gradle: it passes the path of the built `:dd-smoke-tests:iast-util` +// jar into this nested build as a Gradle property. We add it as a flat-file dependency +// because the outer build's projects are not addressable from inside the nested build. +if (hasProperty('iastUtilJar')) { + dependencies { + implementation files(property('iastUtilJar')) + } +} + +dependencies { + implementation('org.springframework.boot:spring-boot-starter-web') + implementation('org.springframework.boot:spring-boot-starter-actuator') + implementation('org.springframework.kafka:spring-kafka') +} diff --git a/dd-smoke-tests/kafka-2/application/settings.gradle b/dd-smoke-tests/kafka-2/application/settings.gradle new file mode 100644 index 00000000000..52cb42bea22 --- /dev/null +++ b/dd-smoke-tests/kafka-2/application/settings.gradle @@ -0,0 +1,41 @@ +// The `gradlePluginProxy` / `mavenRepositoryProxy` properties point to internal Maven +// mirrors used by CI when the public repos are unreachable; they are forwarded from the +// outer build via the smoke-test plugin. `allowInsecureProtocol` is required because the +// mirrors are reached over plain HTTP inside the CI network. +pluginManagement { + repositories { + mavenLocal() + if (settings.hasProperty("gradlePluginProxy")) { + maven { + url settings["gradlePluginProxy"] + allowInsecureProtocol = true + } + } + if (settings.hasProperty("mavenRepositoryProxy")) { + maven { + url settings["mavenRepositoryProxy"] + allowInsecureProtocol = true + } + } + gradlePluginPortal() + mavenCentral() + } +} + +def isCI = providers.environmentVariable("CI").isPresent() + +// On CI, point the local Gradle build cache to the shared workspace directory under the +// repository root, so cache entries are reused across the many smoke-test nested builds +// (and across CI jobs that mount the same workspace). See f6ec1f5cc8 / #982 for the +// root-level cache, and b34ccbc048 for the `isCI` gating — locally we keep the default +// per-user cache to avoid leaking entries into the repo tree. +if (isCI) { + def sharedRootDir = "$rootDir/../../../" + buildCache { + local { + directory = "$sharedRootDir/workspace/build-cache" + } + } +} + +rootProject.name = 'kafka-2-smoketest' diff --git a/dd-smoke-tests/kafka-2/src/main/java/datadog/smoketest/kafka/KafkaApplication.java b/dd-smoke-tests/kafka-2/application/src/main/java/datadog/smoketest/kafka/KafkaApplication.java similarity index 100% rename from dd-smoke-tests/kafka-2/src/main/java/datadog/smoketest/kafka/KafkaApplication.java rename to dd-smoke-tests/kafka-2/application/src/main/java/datadog/smoketest/kafka/KafkaApplication.java diff --git a/dd-smoke-tests/kafka-2/src/main/java/datadog/smoketest/kafka/iast/IastConfiguration.java b/dd-smoke-tests/kafka-2/application/src/main/java/datadog/smoketest/kafka/iast/IastConfiguration.java similarity index 100% rename from dd-smoke-tests/kafka-2/src/main/java/datadog/smoketest/kafka/iast/IastConfiguration.java rename to dd-smoke-tests/kafka-2/application/src/main/java/datadog/smoketest/kafka/iast/IastConfiguration.java diff --git a/dd-smoke-tests/kafka-2/src/main/java/datadog/smoketest/kafka/iast/IastController.java b/dd-smoke-tests/kafka-2/application/src/main/java/datadog/smoketest/kafka/iast/IastController.java similarity index 100% rename from dd-smoke-tests/kafka-2/src/main/java/datadog/smoketest/kafka/iast/IastController.java rename to dd-smoke-tests/kafka-2/application/src/main/java/datadog/smoketest/kafka/iast/IastController.java diff --git a/dd-smoke-tests/kafka-2/src/main/java/datadog/smoketest/kafka/iast/IastMessage.java b/dd-smoke-tests/kafka-2/application/src/main/java/datadog/smoketest/kafka/iast/IastMessage.java similarity index 100% rename from dd-smoke-tests/kafka-2/src/main/java/datadog/smoketest/kafka/iast/IastMessage.java rename to dd-smoke-tests/kafka-2/application/src/main/java/datadog/smoketest/kafka/iast/IastMessage.java diff --git a/dd-smoke-tests/kafka-2/build.gradle b/dd-smoke-tests/kafka-2/build.gradle index c947425a4ba..29a18a59f20 100644 --- a/dd-smoke-tests/kafka-2/build.gradle +++ b/dd-smoke-tests/kafka-2/build.gradle @@ -1,34 +1,36 @@ -import org.springframework.boot.gradle.tasks.bundling.BootJar - plugins { - id 'org.springframework.boot' version '2.7.15' - id 'io.spring.dependency-management' version '1.0.15.RELEASE' + id 'dd-trace-java.smoke-test-app' id 'java-test-fixtures' } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/spring-boot-plugin.gradle" -description = 'Kafka 2.x Smoke Tests.' -dependencies { - implementation('org.springframework.boot:spring-boot-starter-web') - implementation('org.springframework.boot:spring-boot-starter-actuator') - implementation('org.springframework.kafka:spring-kafka') +description = 'Kafka 2.x Smoke Tests.' - testImplementation('org.springframework.kafka:spring-kafka-test') +smokeTestApp { + application { + taskName = 'bootJar' + artifactPath = 'libs/kafka-2-smoketest.jar' + sysProperty = 'datadog.smoketest.springboot.shadowJar.path' + } + projectJar('iastUtilJar', project(':dd-smoke-tests:iast-util')) +} +dependencies { + // Pinned: this version was previously resolved transitively from the Spring Boot BOM in + // the outer build. Now that the application is in a nested build, the BOM is no longer + // available here. + testImplementation('org.springframework.kafka:spring-kafka-test:2.8.11') testImplementation project(':dd-smoke-tests') - implementation project(':dd-smoke-tests:iast-util') testImplementation(testFixtures(project(":dd-smoke-tests:iast-util"))) } -tasks.withType(Test).configureEach { - def bootJarTask = tasks.named('bootJar', BootJar) - dependsOn bootJarTask - jvmArgumentProviders.add(new CommandLineArgumentProvider() { - @Override - Iterable asArguments() { - return bootJarTask.map { ["-Ddatadog.smoketest.springboot.shadowJar.path=${it.archiveFile.get()}"] }.get() - } - }) +spotless { + java { + target "**/*.java" + } + + groovyGradle { + target '*.gradle', "**/*.gradle" + } } diff --git a/dd-smoke-tests/openfeature/application/build.gradle b/dd-smoke-tests/openfeature/application/build.gradle new file mode 100644 index 00000000000..9f7f9558e9b --- /dev/null +++ b/dd-smoke-tests/openfeature/application/build.gradle @@ -0,0 +1,38 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '2.7.15' + id 'io.spring.dependency-management' version '1.0.15.RELEASE' +} + +def sharedRootDir = "$rootDir/../../../" +def sharedConfigDirectory = "$sharedRootDir/gradle" +rootProject.ext.sharedConfigDirectory = sharedConfigDirectory + +apply from: "$sharedConfigDirectory/repositories.gradle" + +if (hasProperty('appBuildDir')) { + buildDir = property('appBuildDir') +} + +version = "" + +// Java 11 (not Java 8 like the other Spring Boot 2.x smoke tests): the OpenFeature SDK +// requires Java 11+. This matches what the outer (pre-nested) build was doing before +// the application was extracted into this nested build. +java { + sourceCompatibility = 11 + targetCompatibility = 11 +} + +if (hasProperty('featureFlaggingApiJar')) { + dependencies { + implementation files(property('featureFlaggingApiJar')) + } +} + +dependencies { + // OpenFeature SDK is an API dependency of feature-flagging-api but is not + // transitively resolved when the jar is passed as a files() dependency. + implementation 'dev.openfeature:sdk:1.20.1' + implementation 'org.springframework.boot:spring-boot-starter-web' +} diff --git a/dd-smoke-tests/openfeature/application/settings.gradle b/dd-smoke-tests/openfeature/application/settings.gradle new file mode 100644 index 00000000000..6e990889506 --- /dev/null +++ b/dd-smoke-tests/openfeature/application/settings.gradle @@ -0,0 +1,41 @@ +// The `gradlePluginProxy` / `mavenRepositoryProxy` properties point to internal Maven +// mirrors used by CI when the public repos are unreachable; they are forwarded from the +// outer build via the smoke-test plugin. `allowInsecureProtocol` is required because the +// mirrors are reached over plain HTTP inside the CI network. +pluginManagement { + repositories { + mavenLocal() + if (settings.hasProperty("gradlePluginProxy")) { + maven { + url settings["gradlePluginProxy"] + allowInsecureProtocol = true + } + } + if (settings.hasProperty("mavenRepositoryProxy")) { + maven { + url settings["mavenRepositoryProxy"] + allowInsecureProtocol = true + } + } + gradlePluginPortal() + mavenCentral() + } +} + +def isCI = providers.environmentVariable("CI").isPresent() + +// On CI, point the local Gradle build cache to the shared workspace directory under the +// repository root, so cache entries are reused across the many smoke-test nested builds +// (and across CI jobs that mount the same workspace). See f6ec1f5cc8 / #982 for the +// root-level cache, and b34ccbc048 for the `isCI` gating — locally we keep the default +// per-user cache to avoid leaking entries into the repo tree. +if (isCI) { + def sharedRootDir = "$rootDir/../../../" + buildCache { + local { + directory = "$sharedRootDir/workspace/build-cache" + } + } +} + +rootProject.name = 'openfeature-smoketest' diff --git a/dd-smoke-tests/openfeature/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java b/dd-smoke-tests/openfeature/application/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java similarity index 100% rename from dd-smoke-tests/openfeature/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java rename to dd-smoke-tests/openfeature/application/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java diff --git a/dd-smoke-tests/openfeature/src/main/java/datadog/smoketest/springboot/openfeature/OpenFeatureConfiguration.java b/dd-smoke-tests/openfeature/application/src/main/java/datadog/smoketest/springboot/openfeature/OpenFeatureConfiguration.java similarity index 100% rename from dd-smoke-tests/openfeature/src/main/java/datadog/smoketest/springboot/openfeature/OpenFeatureConfiguration.java rename to dd-smoke-tests/openfeature/application/src/main/java/datadog/smoketest/springboot/openfeature/OpenFeatureConfiguration.java diff --git a/dd-smoke-tests/openfeature/src/main/java/datadog/smoketest/springboot/openfeature/OpenFeatureController.java b/dd-smoke-tests/openfeature/application/src/main/java/datadog/smoketest/springboot/openfeature/OpenFeatureController.java similarity index 100% rename from dd-smoke-tests/openfeature/src/main/java/datadog/smoketest/springboot/openfeature/OpenFeatureController.java rename to dd-smoke-tests/openfeature/application/src/main/java/datadog/smoketest/springboot/openfeature/OpenFeatureController.java diff --git a/dd-smoke-tests/openfeature/build.gradle b/dd-smoke-tests/openfeature/build.gradle index a38696418ef..cb2c83d112d 100644 --- a/dd-smoke-tests/openfeature/build.gradle +++ b/dd-smoke-tests/openfeature/build.gradle @@ -1,38 +1,35 @@ -import org.springframework.boot.gradle.tasks.bundling.BootJar - plugins { - id 'java' - id 'org.springframework.boot' version '2.7.15' - id 'io.spring.dependency-management' version '1.0.15.RELEASE' + id 'dd-trace-java.smoke-test-app' } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/spring-boot-plugin.gradle" + description = 'Open Feature provider Smoke Tests.' testJvmConstraints { minJavaVersion = JavaVersion.VERSION_11 } -tasks.named("compileJava", JavaCompile) { - configureCompiler(it, 11, JavaVersion.VERSION_11) +smokeTestApp { + application { + taskName = 'bootJar' + artifactPath = 'libs/openfeature-smoketest.jar' + sysProperty = 'datadog.smoketest.springboot.shadowJar.path' + } + projectJar('featureFlaggingApiJar', project(':products:feature-flagging:feature-flagging-api')) } dependencies { - implementation project(':products:feature-flagging:feature-flagging-api') - implementation 'org.springframework.boot:spring-boot-starter-web' - testImplementation project(':dd-smoke-tests') testImplementation project(':products:feature-flagging:feature-flagging-lib') } -tasks.withType(Test).configureEach { - dependsOn "bootJar" - def bootJarTask = tasks.named('bootJar', BootJar) - jvmArgumentProviders.add(new CommandLineArgumentProvider() { - @Override - Iterable asArguments() { - return bootJarTask.map { ["-Ddatadog.smoketest.springboot.shadowJar.path=${it.archiveFile.get()}"] }.get() - } - }) +spotless { + java { + target "**/*.java" + } + + groovyGradle { + target '*.gradle', "**/*.gradle" + } } diff --git a/dd-smoke-tests/springboot-freemarker/application/build.gradle b/dd-smoke-tests/springboot-freemarker/application/build.gradle new file mode 100644 index 00000000000..3a0220c4ca8 --- /dev/null +++ b/dd-smoke-tests/springboot-freemarker/application/build.gradle @@ -0,0 +1,26 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '2.7.15' + id 'io.spring.dependency-management' version '1.0.15.RELEASE' +} + +def sharedRootDir = "$rootDir/../../../" +def sharedConfigDirectory = "$sharedRootDir/gradle" +rootProject.ext.sharedConfigDirectory = sharedConfigDirectory + +apply from: "$sharedConfigDirectory/repositories.gradle" + +if (hasProperty('appBuildDir')) { + buildDir = property('appBuildDir') +} + +version = "" + +java { + sourceCompatibility = '1.8' +} + +dependencies { + implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '1.5.18.RELEASE' + implementation group: 'org.freemarker', name: 'freemarker', version: '2.3.24-incubating' +} diff --git a/dd-smoke-tests/springboot-freemarker/application/settings.gradle b/dd-smoke-tests/springboot-freemarker/application/settings.gradle new file mode 100644 index 00000000000..c35041e5d73 --- /dev/null +++ b/dd-smoke-tests/springboot-freemarker/application/settings.gradle @@ -0,0 +1,32 @@ +pluginManagement { + repositories { + mavenLocal() + if (settings.hasProperty("gradlePluginProxy")) { + maven { + url settings["gradlePluginProxy"] + allowInsecureProtocol = true + } + } + if (settings.hasProperty("mavenRepositoryProxy")) { + maven { + url settings["mavenRepositoryProxy"] + allowInsecureProtocol = true + } + } + gradlePluginPortal() + mavenCentral() + } +} + +def isCI = providers.environmentVariable("CI").isPresent() + +if (isCI) { + def sharedRootDir = "$rootDir/../../../" + buildCache { + local { + directory = "$sharedRootDir/workspace/build-cache" + } + } +} + +rootProject.name = 'springboot-freemarker-smoketest' diff --git a/dd-smoke-tests/springboot-freemarker/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java b/dd-smoke-tests/springboot-freemarker/application/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java similarity index 100% rename from dd-smoke-tests/springboot-freemarker/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java rename to dd-smoke-tests/springboot-freemarker/application/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java diff --git a/dd-smoke-tests/springboot-freemarker/src/main/java/datadog/smoketest/springboot/XssController.java b/dd-smoke-tests/springboot-freemarker/application/src/main/java/datadog/smoketest/springboot/XssController.java similarity index 100% rename from dd-smoke-tests/springboot-freemarker/src/main/java/datadog/smoketest/springboot/XssController.java rename to dd-smoke-tests/springboot-freemarker/application/src/main/java/datadog/smoketest/springboot/XssController.java diff --git a/dd-smoke-tests/springboot-freemarker/src/main/resources/templates/freemarker-2.3.24-insecure.ftlh b/dd-smoke-tests/springboot-freemarker/application/src/main/resources/templates/freemarker-2.3.24-insecure.ftlh similarity index 100% rename from dd-smoke-tests/springboot-freemarker/src/main/resources/templates/freemarker-2.3.24-insecure.ftlh rename to dd-smoke-tests/springboot-freemarker/application/src/main/resources/templates/freemarker-2.3.24-insecure.ftlh diff --git a/dd-smoke-tests/springboot-freemarker/src/main/resources/templates/freemarker-2.3.24-secure.ftlh b/dd-smoke-tests/springboot-freemarker/application/src/main/resources/templates/freemarker-2.3.24-secure.ftlh similarity index 100% rename from dd-smoke-tests/springboot-freemarker/src/main/resources/templates/freemarker-2.3.24-secure.ftlh rename to dd-smoke-tests/springboot-freemarker/application/src/main/resources/templates/freemarker-2.3.24-secure.ftlh diff --git a/dd-smoke-tests/springboot-freemarker/src/main/resources/templates/freemarker-2.3.9-insecure.ftlh b/dd-smoke-tests/springboot-freemarker/application/src/main/resources/templates/freemarker-2.3.9-insecure.ftlh similarity index 100% rename from dd-smoke-tests/springboot-freemarker/src/main/resources/templates/freemarker-2.3.9-insecure.ftlh rename to dd-smoke-tests/springboot-freemarker/application/src/main/resources/templates/freemarker-2.3.9-insecure.ftlh diff --git a/dd-smoke-tests/springboot-freemarker/src/main/resources/templates/freemarker-2.3.9-secure.ftlh b/dd-smoke-tests/springboot-freemarker/application/src/main/resources/templates/freemarker-2.3.9-secure.ftlh similarity index 100% rename from dd-smoke-tests/springboot-freemarker/src/main/resources/templates/freemarker-2.3.9-secure.ftlh rename to dd-smoke-tests/springboot-freemarker/application/src/main/resources/templates/freemarker-2.3.9-secure.ftlh diff --git a/dd-smoke-tests/springboot-freemarker/build.gradle b/dd-smoke-tests/springboot-freemarker/build.gradle index 57c7a4e9eb1..ca3fd1c8991 100644 --- a/dd-smoke-tests/springboot-freemarker/build.gradle +++ b/dd-smoke-tests/springboot-freemarker/build.gradle @@ -1,35 +1,52 @@ -import org.springframework.boot.gradle.tasks.bundling.BootJar - plugins { - id 'java' - id 'org.springframework.boot' version '2.7.15' - id 'io.spring.dependency-management' version '1.0.15.RELEASE' + id 'dd-trace-java.smoke-test-app' id 'java-test-fixtures' } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/spring-boot-plugin.gradle" + description = 'SpringBoot Freemarker Smoke Tests.' -java { - sourceCompatibility = '1.8' +smokeTestApp { + application { + taskName = 'bootJar' + artifactPath = 'libs/springboot-freemarker-smoketest.jar' + sysProperty = 'datadog.smoketest.springboot.shadowJar.path' + } } dependencies { - implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '1.5.18.RELEASE' - implementation group: 'org.freemarker', name: 'freemarker', version: '2.3.24-incubating' - testImplementation project(':dd-smoke-tests') testImplementation(testFixtures(project(":dd-smoke-tests:iast-util"))) } +// XssController loads templates from the filesystem at "resources/main/templates" relative to +// the test JVM's working directory (this module's build dir). Mirror the nested app's +// processed resources so that path resolves at runtime. +def applicationResourcesProvider = layout.buildDirectory.dir("application/resources/main") +tasks.register('copyAppResources', Copy) { + dependsOn 'bootJar' + from applicationResourcesProvider + into layout.buildDirectory.dir("resources/main") +} + +// `java.gradle` applies the `java` plugin so an empty `jar` task is created with +// `build/resources/main` as one of its inputs. Wire the dependency so Gradle knows +// `copyAppResources` writes there. +tasks.named('jar') { + dependsOn 'copyAppResources' +} + tasks.withType(Test).configureEach { - dependsOn "bootJar" - def bootJarTask = tasks.named('bootJar', BootJar) - jvmArgumentProviders.add(new CommandLineArgumentProvider() { - @Override - Iterable asArguments() { - return bootJarTask.map { ["-Ddatadog.smoketest.springboot.shadowJar.path=${it.archiveFile.get()}"] }.get() - } - }) + dependsOn 'copyAppResources' +} + +spotless { + java { + target "**/*.java" + } + + groovyGradle { + target '*.gradle', "**/*.gradle" + } } diff --git a/dd-smoke-tests/springboot-java-11/application/build.gradle b/dd-smoke-tests/springboot-java-11/application/build.gradle new file mode 100644 index 00000000000..ea12bb0cdc4 --- /dev/null +++ b/dd-smoke-tests/springboot-java-11/application/build.gradle @@ -0,0 +1,31 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '2.7.15' + id 'io.spring.dependency-management' version '1.0.15.RELEASE' +} + +def sharedRootDir = "$rootDir/../../../" +def sharedConfigDirectory = "$sharedRootDir/gradle" +rootProject.ext.sharedConfigDirectory = sharedConfigDirectory + +apply from: "$sharedConfigDirectory/repositories.gradle" + +if (hasProperty('appBuildDir')) { + buildDir = property('appBuildDir') +} + +version = "" + +java { + sourceCompatibility = 11 +} + +if (hasProperty('iastUtil11Jar')) { + dependencies { + implementation files(property('iastUtil11Jar')) + } +} + +dependencies { + implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.2.0.RELEASE' +} diff --git a/dd-smoke-tests/springboot-java-11/application/settings.gradle b/dd-smoke-tests/springboot-java-11/application/settings.gradle new file mode 100644 index 00000000000..d2356e2b0b3 --- /dev/null +++ b/dd-smoke-tests/springboot-java-11/application/settings.gradle @@ -0,0 +1,32 @@ +pluginManagement { + repositories { + mavenLocal() + if (settings.hasProperty("gradlePluginProxy")) { + maven { + url settings["gradlePluginProxy"] + allowInsecureProtocol = true + } + } + if (settings.hasProperty("mavenRepositoryProxy")) { + maven { + url settings["mavenRepositoryProxy"] + allowInsecureProtocol = true + } + } + gradlePluginPortal() + mavenCentral() + } +} + +def isCI = providers.environmentVariable("CI").isPresent() + +if (isCI) { + def sharedRootDir = "$rootDir/../../../" + buildCache { + local { + directory = "$sharedRootDir/workspace/build-cache" + } + } +} + +rootProject.name = 'springboot-java-11-smoketest' diff --git a/dd-smoke-tests/springboot-java-11/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java b/dd-smoke-tests/springboot-java-11/application/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java similarity index 100% rename from dd-smoke-tests/springboot-java-11/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java rename to dd-smoke-tests/springboot-java-11/application/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java diff --git a/dd-smoke-tests/springboot-java-11/build.gradle b/dd-smoke-tests/springboot-java-11/build.gradle index 029df98dbd8..142199fc645 100644 --- a/dd-smoke-tests/springboot-java-11/build.gradle +++ b/dd-smoke-tests/springboot-java-11/build.gradle @@ -1,42 +1,37 @@ -import org.springframework.boot.gradle.tasks.bundling.BootJar - plugins { - id 'java' - id 'org.springframework.boot' version '2.7.15' - id 'io.spring.dependency-management' version '1.0.15.RELEASE' + id 'dd-trace-java.smoke-test-app' id 'java-test-fixtures' } apply from: "$rootDir/gradle/java.gradle" +description = 'SpringBoot Java 11 Smoke Tests.' + testJvmConstraints { minJavaVersion = JavaVersion.VERSION_11 } -apply from: "$rootDir/gradle/spring-boot-plugin.gradle" -description = 'SpringBoot Java 11 Smoke Tests.' +smokeTestApp { + application { + taskName = 'bootJar' + artifactPath = 'libs/springboot-java-11-smoketest.jar' + sysProperty = 'datadog.smoketest.springboot.shadowJar.path' + } + projectJar('iastUtil11Jar', project(':dd-smoke-tests:iast-util:iast-util-11')) +} dependencies { - implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.2.0.RELEASE' - testImplementation project(':dd-smoke-tests') testImplementation testFixtures(project(":dd-smoke-tests:iast-util:iast-util-11")) testImplementation testFixtures(project(':dd-smoke-tests:iast-util')) - - implementation project(':dd-smoke-tests:iast-util:iast-util-11') } -tasks.named("compileJava", JavaCompile) { - configureCompiler(it, 11, JavaVersion.VERSION_11) -} +spotless { + java { + target "**/*.java" + } -tasks.withType(Test).configureEach { - dependsOn "bootJar" - def bootJarTask = tasks.named('bootJar', BootJar) - jvmArgumentProviders.add(new CommandLineArgumentProvider() { - @Override - Iterable asArguments() { - return bootJarTask.map { ["-Ddatadog.smoketest.springboot.shadowJar.path=${it.archiveFile.get()}"] }.get() - } - }) + groovyGradle { + target '*.gradle', "**/*.gradle" + } } diff --git a/dd-smoke-tests/springboot-java-17/application/build.gradle b/dd-smoke-tests/springboot-java-17/application/build.gradle new file mode 100644 index 00000000000..413f24ce06d --- /dev/null +++ b/dd-smoke-tests/springboot-java-17/application/build.gradle @@ -0,0 +1,31 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '2.7.15' + id 'io.spring.dependency-management' version '1.0.15.RELEASE' +} + +def sharedRootDir = "$rootDir/../../../" +def sharedConfigDirectory = "$sharedRootDir/gradle" +rootProject.ext.sharedConfigDirectory = sharedConfigDirectory + +apply from: "$sharedConfigDirectory/repositories.gradle" + +if (hasProperty('appBuildDir')) { + buildDir = property('appBuildDir') +} + +version = "" + +java { + sourceCompatibility = 17 +} + +if (hasProperty('iastUtil17Jar')) { + dependencies { + implementation files(property('iastUtil17Jar')) + } +} + +dependencies { + implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.2.0.RELEASE' +} diff --git a/dd-smoke-tests/springboot-java-17/application/settings.gradle b/dd-smoke-tests/springboot-java-17/application/settings.gradle new file mode 100644 index 00000000000..83e3c7f2135 --- /dev/null +++ b/dd-smoke-tests/springboot-java-17/application/settings.gradle @@ -0,0 +1,32 @@ +pluginManagement { + repositories { + mavenLocal() + if (settings.hasProperty("gradlePluginProxy")) { + maven { + url settings["gradlePluginProxy"] + allowInsecureProtocol = true + } + } + if (settings.hasProperty("mavenRepositoryProxy")) { + maven { + url settings["mavenRepositoryProxy"] + allowInsecureProtocol = true + } + } + gradlePluginPortal() + mavenCentral() + } +} + +def isCI = providers.environmentVariable("CI").isPresent() + +if (isCI) { + def sharedRootDir = "$rootDir/../../../" + buildCache { + local { + directory = "$sharedRootDir/workspace/build-cache" + } + } +} + +rootProject.name = 'springboot-java-17-smoketest' diff --git a/dd-smoke-tests/springboot-java-17/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java b/dd-smoke-tests/springboot-java-17/application/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java similarity index 100% rename from dd-smoke-tests/springboot-java-17/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java rename to dd-smoke-tests/springboot-java-17/application/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java diff --git a/dd-smoke-tests/springboot-java-17/build.gradle b/dd-smoke-tests/springboot-java-17/build.gradle index cb878a92c7f..c896ee5efee 100644 --- a/dd-smoke-tests/springboot-java-17/build.gradle +++ b/dd-smoke-tests/springboot-java-17/build.gradle @@ -1,42 +1,37 @@ -import org.springframework.boot.gradle.tasks.bundling.BootJar - plugins { - id 'java' - id 'org.springframework.boot' version '2.7.15' - id 'io.spring.dependency-management' version '1.0.15.RELEASE' + id 'dd-trace-java.smoke-test-app' id 'java-test-fixtures' } apply from: "$rootDir/gradle/java.gradle" +description = 'SpringBoot Java 17 Smoke Tests.' + testJvmConstraints { minJavaVersion = JavaVersion.VERSION_17 } -apply from: "$rootDir/gradle/spring-boot-plugin.gradle" -description = 'SpringBoot Java 17 Smoke Tests.' +smokeTestApp { + application { + taskName = 'bootJar' + artifactPath = 'libs/springboot-java-17-smoketest.jar' + sysProperty = 'datadog.smoketest.springboot.shadowJar.path' + } + projectJar('iastUtil17Jar', project(':dd-smoke-tests:iast-util:iast-util-17')) +} dependencies { - implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.2.0.RELEASE' - testImplementation project(':dd-smoke-tests') testImplementation testFixtures(project(":dd-smoke-tests:iast-util:iast-util-17")) testImplementation testFixtures(project(':dd-smoke-tests:iast-util')) - - implementation project(':dd-smoke-tests:iast-util:iast-util-17') } -tasks.named("compileJava", JavaCompile) { - configureCompiler(it, 17, JavaVersion.VERSION_17) -} +spotless { + java { + target "**/*.java" + } -tasks.withType(Test).configureEach { - dependsOn "bootJar" - def bootJarTask = tasks.named('bootJar', BootJar) - jvmArgumentProviders.add(new CommandLineArgumentProvider() { - @Override - Iterable asArguments() { - return bootJarTask.map { ["-Ddatadog.smoketest.springboot.shadowJar.path=${it.archiveFile.get()}"] }.get() - } - }) + groovyGradle { + target '*.gradle', "**/*.gradle" + } } diff --git a/dd-smoke-tests/springboot-jetty-jsp/application/build.gradle b/dd-smoke-tests/springboot-jetty-jsp/application/build.gradle new file mode 100644 index 00000000000..4c68c426f93 --- /dev/null +++ b/dd-smoke-tests/springboot-jetty-jsp/application/build.gradle @@ -0,0 +1,37 @@ +plugins { + id 'java' + id 'war' + id 'org.springframework.boot' version '2.7.15' + id 'io.spring.dependency-management' version '1.0.15.RELEASE' +} + +def sharedRootDir = "$rootDir/../../../" +def sharedConfigDirectory = "$sharedRootDir/gradle" +rootProject.ext.sharedConfigDirectory = sharedConfigDirectory + +apply from: "$sharedConfigDirectory/repositories.gradle" + +if (hasProperty('appBuildDir')) { + buildDir = property('appBuildDir') +} + +version = "" + +java { + sourceCompatibility = '1.8' +} + +sourceSets { + main { + resources.srcDir("src/main/webapp") + } +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-web' + + runtimeOnly("javax.servlet:jstl") + runtimeOnly("org.apache.tomcat.embed:tomcat-embed-jasper") + + providedRuntime("org.springframework.boot:spring-boot-starter-jetty") +} diff --git a/dd-smoke-tests/springboot-jetty-jsp/application/settings.gradle b/dd-smoke-tests/springboot-jetty-jsp/application/settings.gradle new file mode 100644 index 00000000000..dad60537f79 --- /dev/null +++ b/dd-smoke-tests/springboot-jetty-jsp/application/settings.gradle @@ -0,0 +1,32 @@ +pluginManagement { + repositories { + mavenLocal() + if (settings.hasProperty("gradlePluginProxy")) { + maven { + url settings["gradlePluginProxy"] + allowInsecureProtocol = true + } + } + if (settings.hasProperty("mavenRepositoryProxy")) { + maven { + url settings["mavenRepositoryProxy"] + allowInsecureProtocol = true + } + } + gradlePluginPortal() + mavenCentral() + } +} + +def isCI = providers.environmentVariable("CI").isPresent() + +if (isCI) { + def sharedRootDir = "$rootDir/../../../" + buildCache { + local { + directory = "$sharedRootDir/workspace/build-cache" + } + } +} + +rootProject.name = 'springboot-jetty-jsp-smoketest' diff --git a/dd-smoke-tests/springboot-jetty-jsp/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java b/dd-smoke-tests/springboot-jetty-jsp/application/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java similarity index 100% rename from dd-smoke-tests/springboot-jetty-jsp/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java rename to dd-smoke-tests/springboot-jetty-jsp/application/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java diff --git a/dd-smoke-tests/springboot-jetty-jsp/src/main/java/datadog/smoketest/springboot/ViewController.java b/dd-smoke-tests/springboot-jetty-jsp/application/src/main/java/datadog/smoketest/springboot/ViewController.java similarity index 100% rename from dd-smoke-tests/springboot-jetty-jsp/src/main/java/datadog/smoketest/springboot/ViewController.java rename to dd-smoke-tests/springboot-jetty-jsp/application/src/main/java/datadog/smoketest/springboot/ViewController.java diff --git a/dd-smoke-tests/springboot-jetty-jsp/src/main/resources/application.properties b/dd-smoke-tests/springboot-jetty-jsp/application/src/main/resources/application.properties similarity index 100% rename from dd-smoke-tests/springboot-jetty-jsp/src/main/resources/application.properties rename to dd-smoke-tests/springboot-jetty-jsp/application/src/main/resources/application.properties diff --git a/dd-smoke-tests/springboot-jetty-jsp/src/main/webapp/WEB-INF/jsp/test_xss.jsp b/dd-smoke-tests/springboot-jetty-jsp/application/src/main/webapp/WEB-INF/jsp/test_xss.jsp similarity index 100% rename from dd-smoke-tests/springboot-jetty-jsp/src/main/webapp/WEB-INF/jsp/test_xss.jsp rename to dd-smoke-tests/springboot-jetty-jsp/application/src/main/webapp/WEB-INF/jsp/test_xss.jsp diff --git a/dd-smoke-tests/springboot-jetty-jsp/build.gradle b/dd-smoke-tests/springboot-jetty-jsp/build.gradle index d8fdc4fbab4..29abca9fab9 100644 --- a/dd-smoke-tests/springboot-jetty-jsp/build.gradle +++ b/dd-smoke-tests/springboot-jetty-jsp/build.gradle @@ -1,47 +1,31 @@ -import org.springframework.boot.gradle.tasks.bundling.BootWar - plugins { - id 'java' - id 'war' - id 'org.springframework.boot' version '2.7.15' - id 'io.spring.dependency-management' version '1.0.15.RELEASE' + id 'dd-trace-java.smoke-test-app' id 'java-test-fixtures' } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/spring-boot-plugin.gradle" -description = 'SpringBoot Jetty JSP Smoke Tests.' -java { - sourceCompatibility = '1.8' -} +description = 'SpringBoot Jetty JSP Smoke Tests.' -sourceSets { - main { - resources.srcDir("src/main/webapp") +smokeTestApp { + application { + taskName = 'bootWar' + artifactPath = 'libs/springboot-jetty-jsp-smoketest.war' + sysProperty = 'datadog.smoketest.springboot.war.path' } } dependencies { - implementation 'org.springframework.boot:spring-boot-starter-web' - - runtimeOnly("javax.servlet:jstl") - runtimeOnly("org.apache.tomcat.embed:tomcat-embed-jasper") - - providedRuntime("org.springframework.boot:spring-boot-starter-jetty") - testImplementation project(':dd-smoke-tests') testImplementation(testFixtures(project(":dd-smoke-tests:iast-util"))) } -tasks.withType(Test).configureEach { - dependsOn "war", "bootWar" +spotless { + java { + target "**/*.java" + } - jvmArgumentProviders.add(new CommandLineArgumentProvider() { - @Override - Iterable asArguments() { - def bootWarTask = tasks.named('bootWar', BootWar).get() - return ["-Ddatadog.smoketest.springboot.war.path=${bootWarTask.archiveFile.get().getAsFile()}"] - } - }) + groovyGradle { + target '*.gradle', "**/*.gradle" + } } diff --git a/dd-smoke-tests/springboot-jpa/application/build.gradle b/dd-smoke-tests/springboot-jpa/application/build.gradle new file mode 100644 index 00000000000..73438253bb8 --- /dev/null +++ b/dd-smoke-tests/springboot-jpa/application/build.gradle @@ -0,0 +1,36 @@ +plugins { + id 'java' + id 'war' + id 'org.springframework.boot' version '2.6.0' +} + +apply plugin: 'io.spring.dependency-management' + +def sharedRootDir = "$rootDir/../../../" +def sharedConfigDirectory = "$sharedRootDir/gradle" +rootProject.ext.sharedConfigDirectory = sharedConfigDirectory + +apply from: "$sharedConfigDirectory/repositories.gradle" + +if (hasProperty('appBuildDir')) { + buildDir = property('appBuildDir') +} + +version = "" + +// Pin bytecode target: the nested daemon now runs on JDK 21, but the smoke test launches +// the produced jar/war on Java 8. +java { + sourceCompatibility = JavaVersion.VERSION_1_8 +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' + implementation 'javax.servlet:jstl:1.2' + implementation 'com.h2database:h2:2.1.214' + + compileOnly 'org.projectlombok:lombok:1.18.34' + annotationProcessor 'org.projectlombok:lombok:1.18.34' +} diff --git a/dd-smoke-tests/springboot-jpa/application/settings.gradle b/dd-smoke-tests/springboot-jpa/application/settings.gradle new file mode 100644 index 00000000000..ff156736e67 --- /dev/null +++ b/dd-smoke-tests/springboot-jpa/application/settings.gradle @@ -0,0 +1,32 @@ +pluginManagement { + repositories { + mavenLocal() + if (settings.hasProperty("gradlePluginProxy")) { + maven { + url settings["gradlePluginProxy"] + allowInsecureProtocol = true + } + } + if (settings.hasProperty("mavenRepositoryProxy")) { + maven { + url settings["mavenRepositoryProxy"] + allowInsecureProtocol = true + } + } + gradlePluginPortal() + mavenCentral() + } +} + +def isCI = providers.environmentVariable("CI").isPresent() + +if (isCI) { + def sharedRootDir = "$rootDir/../../../" + buildCache { + local { + directory = "$sharedRootDir/workspace/build-cache" + } + } +} + +rootProject.name = 'springboot-jpa-smoketest' diff --git a/dd-smoke-tests/springboot-jpa/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java b/dd-smoke-tests/springboot-jpa/application/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java similarity index 100% rename from dd-smoke-tests/springboot-jpa/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java rename to dd-smoke-tests/springboot-jpa/application/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java diff --git a/dd-smoke-tests/springboot-jpa/src/main/java/datadog/smoketest/springboot/controller/LibraryController.java b/dd-smoke-tests/springboot-jpa/application/src/main/java/datadog/smoketest/springboot/controller/LibraryController.java similarity index 100% rename from dd-smoke-tests/springboot-jpa/src/main/java/datadog/smoketest/springboot/controller/LibraryController.java rename to dd-smoke-tests/springboot-jpa/application/src/main/java/datadog/smoketest/springboot/controller/LibraryController.java diff --git a/dd-smoke-tests/springboot-jpa/src/main/java/datadog/smoketest/springboot/entity/Author.java b/dd-smoke-tests/springboot-jpa/application/src/main/java/datadog/smoketest/springboot/entity/Author.java similarity index 100% rename from dd-smoke-tests/springboot-jpa/src/main/java/datadog/smoketest/springboot/entity/Author.java rename to dd-smoke-tests/springboot-jpa/application/src/main/java/datadog/smoketest/springboot/entity/Author.java diff --git a/dd-smoke-tests/springboot-jpa/src/main/java/datadog/smoketest/springboot/entity/Book.java b/dd-smoke-tests/springboot-jpa/application/src/main/java/datadog/smoketest/springboot/entity/Book.java similarity index 100% rename from dd-smoke-tests/springboot-jpa/src/main/java/datadog/smoketest/springboot/entity/Book.java rename to dd-smoke-tests/springboot-jpa/application/src/main/java/datadog/smoketest/springboot/entity/Book.java diff --git a/dd-smoke-tests/springboot-jpa/src/main/java/datadog/smoketest/springboot/entity/Library.java b/dd-smoke-tests/springboot-jpa/application/src/main/java/datadog/smoketest/springboot/entity/Library.java similarity index 100% rename from dd-smoke-tests/springboot-jpa/src/main/java/datadog/smoketest/springboot/entity/Library.java rename to dd-smoke-tests/springboot-jpa/application/src/main/java/datadog/smoketest/springboot/entity/Library.java diff --git a/dd-smoke-tests/springboot-jpa/src/main/java/datadog/smoketest/springboot/entity/Owner.java b/dd-smoke-tests/springboot-jpa/application/src/main/java/datadog/smoketest/springboot/entity/Owner.java similarity index 100% rename from dd-smoke-tests/springboot-jpa/src/main/java/datadog/smoketest/springboot/entity/Owner.java rename to dd-smoke-tests/springboot-jpa/application/src/main/java/datadog/smoketest/springboot/entity/Owner.java diff --git a/dd-smoke-tests/springboot-jpa/src/main/java/datadog/smoketest/springboot/filter/SessionVisitorFilter.java b/dd-smoke-tests/springboot-jpa/application/src/main/java/datadog/smoketest/springboot/filter/SessionVisitorFilter.java similarity index 100% rename from dd-smoke-tests/springboot-jpa/src/main/java/datadog/smoketest/springboot/filter/SessionVisitorFilter.java rename to dd-smoke-tests/springboot-jpa/application/src/main/java/datadog/smoketest/springboot/filter/SessionVisitorFilter.java diff --git a/dd-smoke-tests/springboot-jpa/src/main/java/datadog/smoketest/springboot/service/LibraryService.java b/dd-smoke-tests/springboot-jpa/application/src/main/java/datadog/smoketest/springboot/service/LibraryService.java similarity index 100% rename from dd-smoke-tests/springboot-jpa/src/main/java/datadog/smoketest/springboot/service/LibraryService.java rename to dd-smoke-tests/springboot-jpa/application/src/main/java/datadog/smoketest/springboot/service/LibraryService.java diff --git a/dd-smoke-tests/springboot-jpa/src/main/resources/application.yml b/dd-smoke-tests/springboot-jpa/application/src/main/resources/application.yml similarity index 100% rename from dd-smoke-tests/springboot-jpa/src/main/resources/application.yml rename to dd-smoke-tests/springboot-jpa/application/src/main/resources/application.yml diff --git a/dd-smoke-tests/springboot-jpa/src/main/webapp/WEB-INF/jsp/update.jsp b/dd-smoke-tests/springboot-jpa/application/src/main/webapp/WEB-INF/jsp/update.jsp similarity index 100% rename from dd-smoke-tests/springboot-jpa/src/main/webapp/WEB-INF/jsp/update.jsp rename to dd-smoke-tests/springboot-jpa/application/src/main/webapp/WEB-INF/jsp/update.jsp diff --git a/dd-smoke-tests/springboot-jpa/build.gradle b/dd-smoke-tests/springboot-jpa/build.gradle index af9c22ff235..b70934ee101 100644 --- a/dd-smoke-tests/springboot-jpa/build.gradle +++ b/dd-smoke-tests/springboot-jpa/build.gradle @@ -1,44 +1,29 @@ -import org.springframework.boot.gradle.tasks.bundling.BootWar - plugins { - id 'java' - id 'war' - id 'org.springframework.boot' version '2.6.0' + id 'dd-trace-java.smoke-test-app' } -apply plugin: 'io.spring.dependency-management' apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/spring-boot-plugin.gradle" + description = 'SpringBoot JPA Smoke Tests.' -dependencies { - implementation 'org.springframework.boot:spring-boot-starter-web' - implementation 'org.springframework.boot:spring-boot-starter-data-jpa' - implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' - implementation 'javax.servlet:jstl:1.2' - implementation 'com.h2database:h2:2.1.214' +smokeTestApp { + application { + taskName = 'bootWar' + artifactPath = 'libs/springboot-jpa-smoketest.war' + sysProperty = 'datadog.smoketest.springboot.bootWar.path' + } +} +dependencies { testImplementation project(':dd-smoke-tests') - - compileOnly 'org.projectlombok:lombok:1.18.34' - annotationProcessor 'org.projectlombok:lombok:1.18.34' - - testCompileOnly 'org.projectlombok:lombok:1.18.34' - testAnnotationProcessor 'org.projectlombok:lombok:1.18.34' } -tasks.withType(Test).configureEach { - dependsOn "bootWar" - - jvmArgumentProviders.add(new CommandLineArgumentProvider() { - @Override - Iterable asArguments() { - def bootWarTask = tasks.named('bootWar', BootWar).get() - return ["-Ddatadog.smoketest.springboot.bootWar.path=${bootWarTask.archiveFile.get()}"] - } - }) -} +spotless { + java { + target "**/*.java" + } -tasks.withType(GroovyCompile).configureEach { - configureCompiler(it, 8) + groovyGradle { + target '*.gradle', "**/*.gradle" + } } diff --git a/dd-smoke-tests/springboot-thymeleaf/application/build.gradle b/dd-smoke-tests/springboot-thymeleaf/application/build.gradle new file mode 100644 index 00000000000..77f8e57d848 --- /dev/null +++ b/dd-smoke-tests/springboot-thymeleaf/application/build.gradle @@ -0,0 +1,26 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '2.7.15' + id 'io.spring.dependency-management' version '1.0.15.RELEASE' +} + +def sharedRootDir = "$rootDir/../../../" +def sharedConfigDirectory = "$sharedRootDir/gradle" +rootProject.ext.sharedConfigDirectory = sharedConfigDirectory + +apply from: "$sharedConfigDirectory/repositories.gradle" + +if (hasProperty('appBuildDir')) { + buildDir = property('appBuildDir') +} + +version = "" + +java { + sourceCompatibility = '1.8' +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' +} diff --git a/dd-smoke-tests/springboot-thymeleaf/application/settings.gradle b/dd-smoke-tests/springboot-thymeleaf/application/settings.gradle new file mode 100644 index 00000000000..0dbff5f340e --- /dev/null +++ b/dd-smoke-tests/springboot-thymeleaf/application/settings.gradle @@ -0,0 +1,32 @@ +pluginManagement { + repositories { + mavenLocal() + if (settings.hasProperty("gradlePluginProxy")) { + maven { + url settings["gradlePluginProxy"] + allowInsecureProtocol = true + } + } + if (settings.hasProperty("mavenRepositoryProxy")) { + maven { + url settings["mavenRepositoryProxy"] + allowInsecureProtocol = true + } + } + gradlePluginPortal() + mavenCentral() + } +} + +def isCI = providers.environmentVariable("CI").isPresent() + +if (isCI) { + def sharedRootDir = "$rootDir/../../../" + buildCache { + local { + directory = "$sharedRootDir/workspace/build-cache" + } + } +} + +rootProject.name = 'springboot-thymeleaf-smoketest' diff --git a/dd-smoke-tests/springboot-thymeleaf/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java b/dd-smoke-tests/springboot-thymeleaf/application/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java similarity index 100% rename from dd-smoke-tests/springboot-thymeleaf/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java rename to dd-smoke-tests/springboot-thymeleaf/application/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java diff --git a/dd-smoke-tests/springboot-thymeleaf/src/main/java/datadog/smoketest/springboot/XssController.java b/dd-smoke-tests/springboot-thymeleaf/application/src/main/java/datadog/smoketest/springboot/XssController.java similarity index 100% rename from dd-smoke-tests/springboot-thymeleaf/src/main/java/datadog/smoketest/springboot/XssController.java rename to dd-smoke-tests/springboot-thymeleaf/application/src/main/java/datadog/smoketest/springboot/XssController.java diff --git a/dd-smoke-tests/springboot-thymeleaf/src/main/resources/templates/utext.html b/dd-smoke-tests/springboot-thymeleaf/application/src/main/resources/templates/utext.html similarity index 100% rename from dd-smoke-tests/springboot-thymeleaf/src/main/resources/templates/utext.html rename to dd-smoke-tests/springboot-thymeleaf/application/src/main/resources/templates/utext.html diff --git a/dd-smoke-tests/springboot-thymeleaf/build.gradle b/dd-smoke-tests/springboot-thymeleaf/build.gradle index 7de0a0833e5..4cd0d533f81 100644 --- a/dd-smoke-tests/springboot-thymeleaf/build.gradle +++ b/dd-smoke-tests/springboot-thymeleaf/build.gradle @@ -1,35 +1,31 @@ -import org.springframework.boot.gradle.tasks.bundling.BootJar - plugins { - id 'java' - id 'org.springframework.boot' version '2.7.15' - id 'io.spring.dependency-management' version '1.0.15.RELEASE' + id 'dd-trace-java.smoke-test-app' id 'java-test-fixtures' } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/spring-boot-plugin.gradle" + description = 'SpringBoot thymeleaf 3 Smoke Tests.' -java { - sourceCompatibility = '1.8' +smokeTestApp { + application { + taskName = 'bootJar' + artifactPath = 'libs/springboot-thymeleaf-smoketest.jar' + sysProperty = 'datadog.smoketest.springboot.shadowJar.path' + } } dependencies { - implementation 'org.springframework.boot:spring-boot-starter-web' - implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' - testImplementation project(':dd-smoke-tests') testImplementation(testFixtures(project(":dd-smoke-tests:iast-util"))) } -tasks.withType(Test).configureEach { - dependsOn "bootJar" - def bootJarTask = tasks.named('bootJar', BootJar) - jvmArgumentProviders.add(new CommandLineArgumentProvider() { - @Override - Iterable asArguments() { - return bootJarTask.map { ["-Ddatadog.smoketest.springboot.shadowJar.path=${it.archiveFile.get()}"] }.get() - } - }) +spotless { + java { + target "**/*.java" + } + + groovyGradle { + target '*.gradle', "**/*.gradle" + } } diff --git a/dd-smoke-tests/springboot-tomcat-jsp/application/build.gradle b/dd-smoke-tests/springboot-tomcat-jsp/application/build.gradle new file mode 100644 index 00000000000..8632e7afc64 --- /dev/null +++ b/dd-smoke-tests/springboot-tomcat-jsp/application/build.gradle @@ -0,0 +1,37 @@ +plugins { + id 'java' + id 'war' + id 'org.springframework.boot' version '2.7.15' + id 'io.spring.dependency-management' version '1.0.15.RELEASE' +} + +def sharedRootDir = "$rootDir/../../../" +def sharedConfigDirectory = "$sharedRootDir/gradle" +rootProject.ext.sharedConfigDirectory = sharedConfigDirectory + +apply from: "$sharedConfigDirectory/repositories.gradle" + +if (hasProperty('appBuildDir')) { + buildDir = property('appBuildDir') +} + +version = "" + +java { + sourceCompatibility = '1.8' +} + +sourceSets { + main { + resources.srcDir("src/main/webapp") + } +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-web' + + runtimeOnly("javax.servlet:jstl") + runtimeOnly("org.apache.tomcat.embed:tomcat-embed-jasper") + + providedRuntime("org.springframework.boot:spring-boot-starter-tomcat") +} diff --git a/dd-smoke-tests/springboot-tomcat-jsp/application/settings.gradle b/dd-smoke-tests/springboot-tomcat-jsp/application/settings.gradle new file mode 100644 index 00000000000..1c31089a007 --- /dev/null +++ b/dd-smoke-tests/springboot-tomcat-jsp/application/settings.gradle @@ -0,0 +1,32 @@ +pluginManagement { + repositories { + mavenLocal() + if (settings.hasProperty("gradlePluginProxy")) { + maven { + url settings["gradlePluginProxy"] + allowInsecureProtocol = true + } + } + if (settings.hasProperty("mavenRepositoryProxy")) { + maven { + url settings["mavenRepositoryProxy"] + allowInsecureProtocol = true + } + } + gradlePluginPortal() + mavenCentral() + } +} + +def isCI = providers.environmentVariable("CI").isPresent() + +if (isCI) { + def sharedRootDir = "$rootDir/../../../" + buildCache { + local { + directory = "$sharedRootDir/workspace/build-cache" + } + } +} + +rootProject.name = 'springboot-tomcat-jsp-smoketest' diff --git a/dd-smoke-tests/springboot-tomcat-jsp/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java b/dd-smoke-tests/springboot-tomcat-jsp/application/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java similarity index 100% rename from dd-smoke-tests/springboot-tomcat-jsp/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java rename to dd-smoke-tests/springboot-tomcat-jsp/application/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java diff --git a/dd-smoke-tests/springboot-tomcat-jsp/src/main/java/datadog/smoketest/springboot/ViewController.java b/dd-smoke-tests/springboot-tomcat-jsp/application/src/main/java/datadog/smoketest/springboot/ViewController.java similarity index 100% rename from dd-smoke-tests/springboot-tomcat-jsp/src/main/java/datadog/smoketest/springboot/ViewController.java rename to dd-smoke-tests/springboot-tomcat-jsp/application/src/main/java/datadog/smoketest/springboot/ViewController.java diff --git a/dd-smoke-tests/springboot-tomcat-jsp/src/main/resources/application.properties b/dd-smoke-tests/springboot-tomcat-jsp/application/src/main/resources/application.properties similarity index 100% rename from dd-smoke-tests/springboot-tomcat-jsp/src/main/resources/application.properties rename to dd-smoke-tests/springboot-tomcat-jsp/application/src/main/resources/application.properties diff --git a/dd-smoke-tests/springboot-tomcat-jsp/src/main/webapp/WEB-INF/jsp/test_xss.jsp b/dd-smoke-tests/springboot-tomcat-jsp/application/src/main/webapp/WEB-INF/jsp/test_xss.jsp similarity index 100% rename from dd-smoke-tests/springboot-tomcat-jsp/src/main/webapp/WEB-INF/jsp/test_xss.jsp rename to dd-smoke-tests/springboot-tomcat-jsp/application/src/main/webapp/WEB-INF/jsp/test_xss.jsp diff --git a/dd-smoke-tests/springboot-tomcat-jsp/build.gradle b/dd-smoke-tests/springboot-tomcat-jsp/build.gradle index 224274ece2a..0cf65d39298 100644 --- a/dd-smoke-tests/springboot-tomcat-jsp/build.gradle +++ b/dd-smoke-tests/springboot-tomcat-jsp/build.gradle @@ -1,47 +1,31 @@ -import org.springframework.boot.gradle.tasks.bundling.BootWar - plugins { - id 'java' - id 'war' - id 'org.springframework.boot' version '2.7.15' - id 'io.spring.dependency-management' version '1.0.15.RELEASE' + id 'dd-trace-java.smoke-test-app' id 'java-test-fixtures' } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/spring-boot-plugin.gradle" -description = 'SpringBoot Tomcat JSP Smoke Tests.' -java { - sourceCompatibility = '1.8' -} +description = 'SpringBoot Tomcat JSP Smoke Tests.' -sourceSets { - main { - resources.srcDir("src/main/webapp") +smokeTestApp { + application { + taskName = 'bootWar' + artifactPath = 'libs/springboot-tomcat-jsp-smoketest.war' + sysProperty = 'datadog.smoketest.springboot.war.path' } } dependencies { - implementation 'org.springframework.boot:spring-boot-starter-web' - - runtimeOnly("javax.servlet:jstl") - runtimeOnly("org.apache.tomcat.embed:tomcat-embed-jasper") - - providedRuntime("org.springframework.boot:spring-boot-starter-tomcat") - testImplementation project(':dd-smoke-tests') testImplementation(testFixtures(project(":dd-smoke-tests:iast-util"))) } -tasks.withType(Test).configureEach { - dependsOn "war", "bootWar" +spotless { + java { + target "**/*.java" + } - jvmArgumentProviders.add(new CommandLineArgumentProvider() { - @Override - Iterable asArguments() { - def bootWarTask = tasks.named('bootWar', BootWar).get() - return ["-Ddatadog.smoketest.springboot.war.path=${bootWarTask.archiveFile.get().getAsFile()}"] - } - }) + groovyGradle { + target '*.gradle', "**/*.gradle" + } } diff --git a/dd-smoke-tests/springboot-tomcat/application/build.gradle b/dd-smoke-tests/springboot-tomcat/application/build.gradle new file mode 100644 index 00000000000..923b5d34006 --- /dev/null +++ b/dd-smoke-tests/springboot-tomcat/application/build.gradle @@ -0,0 +1,89 @@ +plugins { + id 'war' + id 'org.springframework.boot' version '2.5.12' +} + +def sharedRootDir = "$rootDir/../../../" +def sharedConfigDirectory = "$sharedRootDir/gradle" +rootProject.ext.sharedConfigDirectory = sharedConfigDirectory + +apply from: "$sharedConfigDirectory/repositories.gradle" + +if (hasProperty('appBuildDir')) { + buildDir = property('appBuildDir') +} + +version = "" + +// Pin bytecode target: the nested daemon now runs on JDK 21, but the smoke test launches +// the produced war on Java 8. +java { + sourceCompatibility = JavaVersion.VERSION_1_8 +} + +ext { + serverName = 'tomcat' + serverModule = 'tomcat-9' + serverVersion = '9.0.117' + serverExtension = 'zip' +} + +repositories { + ivy { + url = 'https://dlcdn.apache.org' + patternLayout { + artifact '/[organisation]/[module]/v[revision]/bin/apache-[organisation]-[revision].[ext]' + } + metadataSources { + it.artifact() + } + } +} + +configurations { + serverFile { + extendsFrom implementation + canBeResolved = true + } +} + +dependencies { + // uses the ivy repository url to download the tomcat server + // organisation = serverName, revision = serverVersion, module = serverModule, ext = serverExtension + serverFile "${serverName}:${serverModule}:${serverVersion}@${serverExtension}" + + implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.5.12' + providedRuntime group: 'org.springframework.boot', name: 'spring-boot-starter-tomcat', version: '2.5.12' +} + +tasks.register("unzip", Copy) { + def zipFileNamePrefix = "tomcat" + def serverZipTree = providers.provider { + // eager access + def zipPath = project.configurations.serverFile.find { + it.name.startsWith(zipFileNamePrefix) + } + if (zipPath == null) { + throw new GradleException("Can't find server zip file that starts with: " + zipFileNamePrefix) + } + zipTree(zipPath) + } + + from serverZipTree + into layout.buildDirectory + + // When tests are disabled this would still be run, so disable this manually + onlyIf { !project.rootProject.hasProperty("skipTests") } +} + +tasks.named('bootWar') { + dependsOn 'unzip' +} + +tasks.named('bootWarMainClassName') { + dependsOn 'unzip' +} + +tasks.named('war') { + dependsOn 'unzip' +} diff --git a/dd-smoke-tests/springboot-tomcat/application/settings.gradle b/dd-smoke-tests/springboot-tomcat/application/settings.gradle new file mode 100644 index 00000000000..c526fe40384 --- /dev/null +++ b/dd-smoke-tests/springboot-tomcat/application/settings.gradle @@ -0,0 +1,32 @@ +pluginManagement { + repositories { + mavenLocal() + if (settings.hasProperty("gradlePluginProxy")) { + maven { + url settings["gradlePluginProxy"] + allowInsecureProtocol = true + } + } + if (settings.hasProperty("mavenRepositoryProxy")) { + maven { + url settings["mavenRepositoryProxy"] + allowInsecureProtocol = true + } + } + gradlePluginPortal() + mavenCentral() + } +} + +def isCI = providers.environmentVariable("CI").isPresent() + +if (isCI) { + def sharedRootDir = "$rootDir/../../../" + buildCache { + local { + directory = "$sharedRootDir/workspace/build-cache" + } + } +} + +rootProject.name = 'springboot-tomcat-smoketest' diff --git a/dd-smoke-tests/springboot-tomcat/src/main/java/datadog/smoketest/springboot/SpringbootTomcatApplication.java b/dd-smoke-tests/springboot-tomcat/application/src/main/java/datadog/smoketest/springboot/SpringbootTomcatApplication.java similarity index 100% rename from dd-smoke-tests/springboot-tomcat/src/main/java/datadog/smoketest/springboot/SpringbootTomcatApplication.java rename to dd-smoke-tests/springboot-tomcat/application/src/main/java/datadog/smoketest/springboot/SpringbootTomcatApplication.java diff --git a/dd-smoke-tests/springboot-tomcat/src/main/java/datadog/smoketest/springboot/controller/TestSuite.java b/dd-smoke-tests/springboot-tomcat/application/src/main/java/datadog/smoketest/springboot/controller/TestSuite.java similarity index 100% rename from dd-smoke-tests/springboot-tomcat/src/main/java/datadog/smoketest/springboot/controller/TestSuite.java rename to dd-smoke-tests/springboot-tomcat/application/src/main/java/datadog/smoketest/springboot/controller/TestSuite.java diff --git a/dd-smoke-tests/springboot-tomcat/src/main/java/datadog/smoketest/springboot/controller/ViewController.java b/dd-smoke-tests/springboot-tomcat/application/src/main/java/datadog/smoketest/springboot/controller/ViewController.java similarity index 100% rename from dd-smoke-tests/springboot-tomcat/src/main/java/datadog/smoketest/springboot/controller/ViewController.java rename to dd-smoke-tests/springboot-tomcat/application/src/main/java/datadog/smoketest/springboot/controller/ViewController.java diff --git a/dd-smoke-tests/springboot-tomcat/src/main/resources/application.properties b/dd-smoke-tests/springboot-tomcat/application/src/main/resources/application.properties similarity index 100% rename from dd-smoke-tests/springboot-tomcat/src/main/resources/application.properties rename to dd-smoke-tests/springboot-tomcat/application/src/main/resources/application.properties diff --git a/dd-smoke-tests/springboot-tomcat/build.gradle b/dd-smoke-tests/springboot-tomcat/build.gradle index 14d0705eeca..6ae55b8e65d 100644 --- a/dd-smoke-tests/springboot-tomcat/build.gradle +++ b/dd-smoke-tests/springboot-tomcat/build.gradle @@ -1,126 +1,34 @@ -import org.springframework.boot.gradle.tasks.bundling.BootWar - plugins { - id 'war' - id 'org.springframework.boot' version '2.5.12' -} - -ext { - serverName = 'tomcat' - serverModule = 'tomcat-9' - serverVersion = '9.0.117' - serverExtension = 'zip' + id 'dd-trace-java.smoke-test-app' } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/spring-boot-plugin.gradle" + description = 'SpringBoot Tomcat Smoke Tests.' -repositories { - ivy { - url = 'https://dlcdn.apache.org' - patternLayout { - artifact '/[organisation]/[module]/v[revision]/bin/apache-[organisation]-[revision].[ext]' - } - metadataSources { - it.artifact() - } - } -} +def serverName = 'tomcat' +def serverVersion = '9.0.117' -configurations { - serverFile { - extendsFrom implementation - canBeResolved = true +smokeTestApp { + application { + taskName = 'bootWar' + artifactPath = 'libs/springboot-tomcat-smoketest.war' + sysProperty = 'datadog.smoketest.springboot.war.path' + additionalSystemProperties.put('datadog.smoketest.tomcatDir', "apache-${serverName}-${serverVersion}") } } dependencies { - // uses the ivy repository url to download the tomcat server - // organisation = serverName, revision = serverVersion, module = serverModule, ext = serverExtension - serverFile "${serverName}:${serverModule}:${serverVersion}@${serverExtension}" - testImplementation project(':dd-smoke-tests') -} - -tasks.register("unzip", Copy) { - def zipFileNamePrefix = "tomcat" - def serverZipTree = providers.provider { - // eager access - def zipPath = project.configurations.serverFile.find { - it.name.startsWith(zipFileNamePrefix) - } - if (zipPath == null) { - throw new GradleException("Can't find server zip file that starts with: " + zipFileNamePrefix) - } - zipTree(zipPath) - } - - from serverZipTree - into layout.buildDirectory - - // When tests are disabled this would still be run, so disable this manually - onlyIf { !project.rootProject.hasProperty("skipTests") } -} - -dependencies { - implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.5.12' - providedRuntime group: 'org.springframework.boot', name: 'spring-boot-starter-tomcat', version: '2.5.12' testImplementation group: 'commons-io', name: 'commons-io', version: '2.11.0' - testImplementation project(':dd-smoke-tests') -} - -tasks.named('sourcesJar') { - dependsOn 'unzip' -} - -tasks.named('javadocJar') { - dependsOn 'unzip' -} - -tasks.named('bootWar') { - dependsOn 'unzip' -} - -tasks.named('bootWarMainClassName') { - dependsOn 'unzip' } -tasks.named('war') { - dependsOn 'unzip' -} - -tasks.named('javadocJar') { - dependsOn 'unzip' -} - -tasks.named('sourcesJar') { - dependsOn 'unzip' -} - -tasks.named('forbiddenApisMain') { - dependsOn 'unzip' -} - -tasks.named('spotbugsMain') { - dependsOn 'unzip' -} - -tasks.matching({it.name.startsWith('compileTest')}).configureEach { - dependsOn 'war', 'bootWar', 'unzip' -} - -tasks.withType(Test).configureEach { - dependsOn "war", "bootWar", "unzip" +spotless { + java { + target "**/*.java" + } - jvmArgumentProviders.add(new CommandLineArgumentProvider() { - @Override - Iterable asArguments() { - def bootWarTask = tasks.named('bootWar', BootWar).get() - return [ - "-Ddatadog.smoketest.springboot.war.path=${bootWarTask.archiveFile.get().getAsFile()}", - "-Ddatadog.smoketest.tomcatDir=${layout.buildDirectory.get()}/apache-${serverName}-${serverVersion}" - ] - } - }) + groovyGradle { + target '*.gradle', "**/*.gradle" + } } diff --git a/dd-smoke-tests/springboot-velocity/application/build.gradle b/dd-smoke-tests/springboot-velocity/application/build.gradle new file mode 100644 index 00000000000..866c726b521 --- /dev/null +++ b/dd-smoke-tests/springboot-velocity/application/build.gradle @@ -0,0 +1,31 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '2.7.15' + id 'io.spring.dependency-management' version '1.0.15.RELEASE' +} + +def sharedRootDir = "$rootDir/../../../" +def sharedConfigDirectory = "$sharedRootDir/gradle" +rootProject.ext.sharedConfigDirectory = sharedConfigDirectory + +apply from: "$sharedConfigDirectory/repositories.gradle" + +if (hasProperty('appBuildDir')) { + buildDir = property('appBuildDir') +} + +version = "" + +// Pin bytecode target: the nested daemon now runs on JDK 21, but the smoke test launches +// the produced jar on Java 8. +java { + sourceCompatibility = JavaVersion.VERSION_1_8 +} + +dependencies { + implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '1.5.18.RELEASE' + implementation group: 'org.apache.velocity', name: 'velocity', version: '1.5' + implementation(group: 'org.apache.velocity', name: 'velocity-tools', version: '1.3') { + exclude group: 'javax.servlet', module: 'servlet-api' + } +} diff --git a/dd-smoke-tests/springboot-velocity/application/settings.gradle b/dd-smoke-tests/springboot-velocity/application/settings.gradle new file mode 100644 index 00000000000..0d5e7d082bc --- /dev/null +++ b/dd-smoke-tests/springboot-velocity/application/settings.gradle @@ -0,0 +1,32 @@ +pluginManagement { + repositories { + mavenLocal() + if (settings.hasProperty("gradlePluginProxy")) { + maven { + url settings["gradlePluginProxy"] + allowInsecureProtocol = true + } + } + if (settings.hasProperty("mavenRepositoryProxy")) { + maven { + url settings["mavenRepositoryProxy"] + allowInsecureProtocol = true + } + } + gradlePluginPortal() + mavenCentral() + } +} + +def isCI = providers.environmentVariable("CI").isPresent() + +if (isCI) { + def sharedRootDir = "$rootDir/../../../" + buildCache { + local { + directory = "$sharedRootDir/workspace/build-cache" + } + } +} + +rootProject.name = 'springboot-velocity-smoketest' diff --git a/dd-smoke-tests/springboot-velocity/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java b/dd-smoke-tests/springboot-velocity/application/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java similarity index 100% rename from dd-smoke-tests/springboot-velocity/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java rename to dd-smoke-tests/springboot-velocity/application/src/main/java/datadog/smoketest/springboot/SpringbootApplication.java diff --git a/dd-smoke-tests/springboot-velocity/src/main/java/datadog/smoketest/springboot/XssController.java b/dd-smoke-tests/springboot-velocity/application/src/main/java/datadog/smoketest/springboot/XssController.java similarity index 100% rename from dd-smoke-tests/springboot-velocity/src/main/java/datadog/smoketest/springboot/XssController.java rename to dd-smoke-tests/springboot-velocity/application/src/main/java/datadog/smoketest/springboot/XssController.java diff --git a/dd-smoke-tests/springboot-velocity/src/main/resources/templates/velocity-insecure.vm b/dd-smoke-tests/springboot-velocity/application/src/main/resources/templates/velocity-insecure.vm similarity index 100% rename from dd-smoke-tests/springboot-velocity/src/main/resources/templates/velocity-insecure.vm rename to dd-smoke-tests/springboot-velocity/application/src/main/resources/templates/velocity-insecure.vm diff --git a/dd-smoke-tests/springboot-velocity/src/main/resources/templates/velocity-secure.vm b/dd-smoke-tests/springboot-velocity/application/src/main/resources/templates/velocity-secure.vm similarity index 100% rename from dd-smoke-tests/springboot-velocity/src/main/resources/templates/velocity-secure.vm rename to dd-smoke-tests/springboot-velocity/application/src/main/resources/templates/velocity-secure.vm diff --git a/dd-smoke-tests/springboot-velocity/build.gradle b/dd-smoke-tests/springboot-velocity/build.gradle index 76881a53bc1..79f63efeb90 100644 --- a/dd-smoke-tests/springboot-velocity/build.gradle +++ b/dd-smoke-tests/springboot-velocity/build.gradle @@ -1,34 +1,52 @@ -import org.springframework.boot.gradle.tasks.bundling.BootJar - plugins { - id 'java' - id 'org.springframework.boot' version '2.7.15' - id 'io.spring.dependency-management' version '1.0.15.RELEASE' + id 'dd-trace-java.smoke-test-app' id 'java-test-fixtures' } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/spring-boot-plugin.gradle" + description = 'SpringBoot Velocity Smoke Tests.' -dependencies { - implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '1.5.18.RELEASE' - implementation group: 'org.apache.velocity', name: 'velocity', version: '1.5' - implementation(group: 'org.apache.velocity', name: 'velocity-tools', version: '1.3') { - exclude group: 'javax.servlet', module: 'servlet-api' +smokeTestApp { + application { + taskName = 'bootJar' + artifactPath = 'libs/springboot-velocity-smoketest.jar' + sysProperty = 'datadog.smoketest.springboot.shadowJar.path' } +} +dependencies { testImplementation project(':dd-smoke-tests') testImplementation(testFixtures(project(":dd-smoke-tests:iast-util"))) } +// XssController loads templates from the filesystem at "resources/main/templates" relative to +// the test JVM's working directory (this module's build dir). Mirror the nested app's +// processed resources so that path resolves at runtime. +def applicationResourcesProvider = layout.buildDirectory.dir("application/resources/main") +tasks.register('copyAppResources', Copy) { + dependsOn 'bootJar' + from applicationResourcesProvider + into layout.buildDirectory.dir("resources/main") +} + +// `java.gradle` applies the `java` plugin so an empty `jar` task is created with +// `build/resources/main` as one of its inputs. Wire the dependency so Gradle knows +// `copyAppResources` writes there. +tasks.named('jar') { + dependsOn 'copyAppResources' +} + tasks.withType(Test).configureEach { - dependsOn "bootJar" - def bootJarTask = tasks.named('bootJar', BootJar) - jvmArgumentProviders.add(new CommandLineArgumentProvider() { - @Override - Iterable asArguments() { - return bootJarTask.map { ["-Ddatadog.smoketest.springboot.shadowJar.path=${it.archiveFile.get()}"] }.get() - } - }) + dependsOn 'copyAppResources' +} + +spotless { + java { + target "**/*.java" + } + + groovyGradle { + target '*.gradle', "**/*.gradle" + } }