Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,12 @@ private fun TestJvmConstraintsExtension.withinAllowedRange(currentJvmVersion: Ja
val definedMax = maxJavaVersion.isPresent

if (definedMin && (minJavaVersion.get()) > currentJvmVersion) {
logger.info("isWithinAllowedRange returns false b/o minProp=${minJavaVersion.get()} is defined and greater than version=$currentJvmVersion")
logger.info("'isWithinAllowedRange' returns false b/o testJvmConstraints.minJavaVersion=${minJavaVersion.get()} is defined and greater than test JVM version=$currentJvmVersion")
return false
}

if (definedMax && (maxJavaVersion.get()) < currentJvmVersion) {
logger.info("isWithinAllowedRange returns false b/o maxProp=${maxJavaVersion.get()} is defined and lower than version=$currentJvmVersion")
logger.info("'isWithinAllowedRange' returns false because testJvmConstraints.maxJavaVersion=${maxJavaVersion.get()} is defined and lower than test JVM version=$currentJvmVersion")
return false
}

Expand Down
1 change: 0 additions & 1 deletion dd-java-agent/instrumentation/play/play-2.3/.gitignore

This file was deleted.

2 changes: 1 addition & 1 deletion dd-java-agent/instrumentation/play/play-2.3/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -60,5 +60,5 @@ dependencies {
}

tasks.named("compileLatestDepTestGroovy", GroovyCompile) {
classpath += files(tasks.named('compileLatestDepTestScala').map { it.destinationDirectory })
classpath += files(tasks.named('compileLatestDepTestScala'))
}
1 change: 0 additions & 1 deletion dd-java-agent/instrumentation/play/play-2.4/.gitignore

This file was deleted.

1 change: 0 additions & 1 deletion dd-java-agent/instrumentation/play/play-2.6/.gitignore

This file was deleted.

165 changes: 18 additions & 147 deletions dd-java-agent/instrumentation/play/play-2.6/build.gradle
Original file line number Diff line number Diff line change
@@ -1,54 +1,43 @@
def scalaVersion = '2.11'
def playVersion = '2.6.0'

muzzle {
extraRepository("typesafe", "https://repo.typesafe.com/typesafe/maven-releases/")

pass {
name = 'play26Plus'
group = 'com.typesafe.play'
module = "play_$scalaVersion"
versions = "[$playVersion,)"
module = "play_2.11"
versions = "[2.6.0,)"
assertInverse = true
javaVersion = 11
}
pass {
name = 'play26Plus'
group = 'com.typesafe.play'
module = 'play_2.12'
versions = "[$playVersion,)"
versions = "[2.6.0,)"
assertInverse = true
javaVersion = 11
}
pass {
name = 'play26Plus'
group = 'com.typesafe.play'
module = 'play_2.13'
versions = "[$playVersion,)"
versions = "[2.6.0,)"
assertInverse = true
javaVersion = 11
}

pass {
name = 'play26Only'
group = 'com.typesafe.play'
module = 'play-java_2.11'
versions = "[2.6.0,2.7.0)"
assertInverse = true
}

pass {
name = 'play27'
group = 'com.typesafe.play'
module = 'play-java_2.13'
versions = "[2.7.0,)"
assertInverse = true
javaVersion = 11
}
}

apply from: "$rootDir/gradle/java.gradle"
apply plugin: 'scala'
apply plugin: 'groovy'
apply plugin: 'java-test-fixtures'

testJvmConstraints {
// Play doesn't work with Java 9+ until 2.6.12
Expand All @@ -64,49 +53,22 @@ repositories {
}
}

addTestSuite('baseTest')
addTestSuite('latestDepTest')

sourceSets {
main_play27 {
java.srcDirs "${project.projectDir}/src/main/java_play27"
}
}

tasks.named("jar", Jar) {
from sourceSets.main_play27.output
}

tasks.named("compileMain_play27Java", JavaCompile) {
dependsOn(compileJava)
}

project.afterEvaluate {
tasks.named('instrumentJava') { dependsOn 'compileMain_play27Java' }
tasks.named('forbiddenApisMain_play27') { dependsOn 'instrumentMain_play27Java' }
}

instrument {
additionalClasspath = [
instrumentJava: compileMain_play27Java.destinationDirectory
]
}

dependencies {
compileOnly group: 'com.typesafe.play', name: "play_$scalaVersion", version: playVersion
compileOnly group: 'com.typesafe.play', name: "play-java_$scalaVersion", version: playVersion
compileOnly group: 'com.typesafe.play', name: "play_2.11", version: '2.6.0'
compileOnly group: 'com.typesafe.play', name: "play-java_2.11", version: '2.6.0'

main_play27CompileOnly group: 'com.typesafe.play', name: "play-java_$scalaVersion", version: '2.7.0'
main_play27CompileOnly project(':internal-api')
main_play27CompileOnly project(':dd-java-agent:agent-tooling')
main_play27CompileOnly project(':dd-java-agent:agent-bootstrap')
main_play27CompileOnly files("${project.buildDir}/classes/java/raw") {
builtBy = ['compileJava']
testFixturesCompileOnly group: 'com.typesafe.play', name: "play-java_2.11", version: '2.6.0'
// TODO: Play WS is a separately versioned library starting with 2.6 and needs separate instrumentation.
testFixturesCompileOnly(group: 'com.typesafe.play', name: "play-test_2.11", version: '2.6.0') {
exclude group: 'org.eclipse.jetty.websocket', module: 'websocket-client'
}
testFixturesApi project(':dd-java-agent:instrumentation-testing')
testFixturesApi libs.spock.core

baseTestImplementation group: 'com.typesafe.play', name: "play-java_$scalaVersion", version: playVersion
// TODO: Play WS is a separately versioned library starting with 2.6 and needs separate instrumentation.
baseTestImplementation(group: 'com.typesafe.play', name: "play-test_$scalaVersion", version: playVersion) {
testImplementation group: 'com.typesafe.play', name: "play-java_2.11", version: '2.6.0'
testImplementation testFixtures(project(':dd-java-agent:instrumentation:play:play-2.6'))
testImplementation group: 'com.typesafe.play', name: "play-java_2.11", version: '2.6.0'
testImplementation(group: 'com.typesafe.play', name: "play-test_2.11", version: '2.6.0') {
exclude group: 'org.eclipse.jetty.websocket', module: 'websocket-client'
}

Expand All @@ -117,96 +79,5 @@ dependencies {
testRuntimeOnly project(':dd-java-agent:instrumentation:scala:scala-concurrent-2.8')
testRuntimeOnly project(':dd-java-agent:instrumentation:scala:scala-promise:scala-promise-2.10')
testRuntimeOnly project(':dd-java-agent:instrumentation:scala:scala-promise:scala-promise-2.13')

latestDepTestRuntimeOnly sourceSets.baseTest.output
latestDepTestImplementation libs.scala213
latestDepTestImplementation group: 'com.typesafe.play', name: "play-java_2.13", version: '2.+'
latestDepTestImplementation(group: 'com.typesafe.play', name: "play-test_2.13", version: '2.+') {
exclude group: 'org.eclipse.jetty.websocket', module: 'websocket-client'
}
latestDepTestImplementation group: 'com.typesafe.play', name: 'play-akka-http-server_2.13', version: '2.+'
}

configurations.matching({ it.name.startsWith('latestDepTest') }).configureEach({
it.resolutionStrategy {
// logback-classic 1.4.11 doesn't like being loaded in the bootstrap classloader (NPE)
force group: 'ch.qos.logback', name: 'logback-classic', version: '1.4.5'
}
})

tasks.named("compileLatestDepTestJava", JavaCompile) {
configureCompiler(it, 11)
}

tasks.named("compileLatestDepTestScala", ScalaCompile) {
configureCompiler(it, 11)
classpath = classpath + files(tasks.named('compileBaseTestJava').map { it.destinationDirectory })
}

tasks.named("latestDepTest", Test) {
javaLauncher = getJavaLauncherFor(11)
testClassesDirs = testClassesDirs + sourceSets.baseTest.output.classesDirs
}

final generatedRoutes = layout.buildDirectory.dir('generated/sources/latestDepTestRoutes/scala')
sourceSets {
routeGenerator {
scala {
srcDir "${project.projectDir}/src/routeGenerator/scala"
}
}
latestDepTestGenerated {
scala {
srcDir generatedRoutes
}
}
}

dependencies {
routeGeneratorImplementation libs.scala213
routeGeneratorImplementation group: 'com.typesafe.play', name: "routes-compiler_2.13", version: '2.+'
}

configurations {
latestDepTestGeneratedCompileClasspath.extendsFrom(latestDepTestCompileClasspath)
}

tasks.register('buildLatestDepTestRoutes', JavaExec) {
String routesFile = "${project.projectDir}/src/latestDepTest/routes/conf/routes"
def outputDir = generatedRoutes

it.inputs.file routesFile
it.outputs.dir outputDir

it.mainClass = 'generator.CompileRoutes'
it.args routesFile, outputDir.get().asFile.absolutePath

it.classpath configurations.named('routeGeneratorRuntimeClasspath')
it.classpath tasks.named('compileRouteGeneratorScala').map { it.destinationDirectory }
it.classpath tasks.named('compileLatestDepTestScala').map { it.destinationDirectory }

it.javaLauncher = getJavaLauncherFor(11)
}

tasks.named("compileLatestDepTestGeneratedScala", ScalaCompile) {
configureCompiler(it, 11)
classpath = classpath + files(tasks.named('compileLatestDepTestScala').map { it.destinationDirectory })
dependsOn 'buildLatestDepTestRoutes'
}

tasks.named("forbiddenApisLatestDepTestGenerated") {
enabled = false
}

tasks.named("compileLatestDepTestGroovy", GroovyCompile) {
configureCompiler(it, 11)
classpath = classpath +
files(tasks.named('compileLatestDepTestScala').map { it.destinationDirectory }) +
files(tasks.named('compileBaseTestGroovy').map { it.destinationDirectory }) +
files(tasks.named('compileBaseTestJava').map { it.destinationDirectory }) +
files(tasks.named('compileLatestDepTestGeneratedScala').map { it.destinationDirectory })
}

dependencies {
latestDepTestRuntimeOnly sourceSets.latestDepTestGenerated.output
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package datadog.trace.instrumentation.play26.server

class PlayServerTest extends AbstractPlayServerTest {
// Disabling involving Appsec / Instrumentation Gateway, they are tested in play-appsec-2.x modules

@Override
boolean testBlocking() {
false
}

@Override
boolean testBlockingOnResponse() {
false
}

@Override
boolean testRequestBody() {
false
}

@Override
boolean testBodyJson() {
false
}

@Override
boolean testBodyUrlencoded() {
false
}

@Override
boolean testBodyMultipart() {
false
}

@Override
boolean testResponseBodyJson() {
false
}

@Override
Map<String, ?> expectedIGPathParams() {
null
}

@Override
boolean testBodyXml() {
false
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package datadog.trace.instrumentation.play26.server

class PlayServerWithErrorHandlerTest extends AbstractPlayServerWithErrorHandlerTest {
// Disabling involving Appsec / Instrumentation Gateway, they are tested in play-appsec-2.x modules

@Override
boolean testBlocking() {
false
}

@Override
boolean testBlockingOnResponse() {
false
}

@Override
boolean testRequestBody() {
false
}

@Override
boolean testBodyJson() {
false
}

@Override
boolean testBodyUrlencoded() {
false
}

@Override
boolean testBodyMultipart() {
false
}

@Override
boolean testResponseBodyJson() {
false
}

@Override
Map<String, ?> expectedIGPathParams() {
null
}

@Override
boolean testBodyXml() {
false
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,15 @@ import groovy.transform.CompileStatic
import okhttp3.MediaType
import okhttp3.RequestBody
import play.server.Server
import spock.lang.IgnoreIf

import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.BODY_XML
import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.CUSTOM_EXCEPTION
import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.EXCEPTION
import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.FORWARDED
import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.SUCCESS

class PlayServerTest extends HttpServerTest<Server> {
class AbstractPlayServerTest extends HttpServerTest<Server> {

@Override
@CompileStatic
Expand Down Expand Up @@ -151,6 +152,11 @@ class PlayServerTest extends HttpServerTest<Server> {
}
}

boolean testBodyXml() {
true
}

@IgnoreIf({ !instance.testBodyXml() })
def 'test instrumentation gateway xml request body'() {
setup:
def request = request(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package datadog.trace.instrumentation.play26.server

import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.CUSTOM_EXCEPTION

import datadog.trace.agent.test.base.HttpServer
import spock.lang.IgnoreIf

import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.CUSTOM_EXCEPTION

class PlayServerWithErrorHandlerTest extends PlayServerTest {
abstract class AbstractPlayServerWithErrorHandlerTest extends AbstractPlayServerTest {
@Override
HttpServer server() {
new PlayHttpServer(PlayRouters.&sync, new TestHttpErrorHandler())
Expand Down
Loading