@@ -3,109 +3,140 @@ plugins {
33}
44apply from : " $rootDir /gradle/java.gradle"
55
6- String relAppDir = ' openliberty-jars/wlp/usr/servers/defaultServer/dropins/war/testapp'
6+ def openlibertyHomeDir = project. layout. buildDirectory. dir(" openliberty" )
7+
8+ String testWebAppDir = ' wlp/usr/servers/defaultServer/dropins/war/testapp'
9+
710sourceSets {
8- webapp {
11+ register( " webapp" ) {
912 java {
10- destinationDirectory. value project . layout . buildDirectory . dir(" $r elAppDir /WEB-INF/classes" )
13+ destinationDirectory = openlibertyHomeDir . map {it . dir(" $t estWebAppDir /WEB-INF/classes" ) }
1114 }
12- output. resourcesDir = project . layout . buildDirectory . dir(" $r elAppDir / " )
15+ output. resourcesDir = openlibertyHomeDir . map { it . dir(testWebAppDir) }
1316 }
1417}
1518
1619configurations {
17- zipped
18- testLogging
20+ register( " zipped" )
21+ register( " testLogging" )
1922}
2023
2124evaluationDependsOn ' :dd-java-agent:instrumentation:servlet:request-3'
2225
26+ // Since these tasks output are used in dependencies they have to be declared before, they can be configured later
27+ def unpackOpenLiberty = tasks. register(' unpackOpenLiberty' , UnpackOpenLiberty ) {
28+ extractDir. set(openlibertyHomeDir)
29+ }
30+ def filterLogbackClassic = tasks. register(' filterLogbackClassic' , Sync )
31+
2332dependencies {
2433 zipped group : ' io.openliberty' , name : ' openliberty-runtime' , version : ' 21.0.0.3' , ext : ' zip'
2534 testLogging libs. bundles. test. logging
2635
2736 compileOnly group : ' javax.servlet' , name : ' javax.servlet-api' , version : ' 3.0.1'
28- compileOnly files({ tasks . installOpenLibertyDeps . extractedJars })
37+ compileOnly files(unpackOpenLiberty . map {it . extractedJars. get() })
2938 implementation project(' :dd-java-agent:instrumentation:servlet-common' )
3039
31- testImplementation files({ tasks . installOpenLibertyDeps . wsServerJar })
40+ testImplementation files(unpackOpenLiberty . map {it . wsServerJar. get() })
3241 testImplementation project(' :dd-java-agent:appsec:appsec-test-fixtures' )
3342 testRuntimeOnly project(' :dd-java-agent:instrumentation:osgi-4.3' )
34- testRuntimeOnly files({ tasks . filterLogbackClassic . filteredLogbackDir })
43+ testRuntimeOnly files(filterLogbackClassic . map { it . destinationDir })
3544 testRuntimeOnly project(' :dd-java-agent:instrumentation:servlet:request-3' )
3645
3746 webappCompileOnly group : ' javax.servlet' , name : ' javax.servlet-api' , version : ' 3.1.0'
3847 // compileOnly to avoid bringing all the test dependencies to the test app
3948 // these are to be provided by the system classloader on test time
4049 webappCompileOnly testFixtures(project(' :dd-java-agent:instrumentation:servlet:request-3' ))
4150 // only the testFixtures jar (not its dependencies) and groovy should be included in the webapp
42- webappImplementation files(
43- project(' :dd-java-agent:instrumentation:servlet:request-3' )
44- .getTasksByName(' testFixturesJar' , false ). archiveFile
45- )
51+ add(" webappImplementation" , testFixtures(project(' :dd-java-agent:instrumentation:servlet:request-3' ))) {
52+ transitive = false
53+ }
4654 // use the above instead of:
4755 // webappImplementation testFixtures(project(':dd-java-agent:instrumentation:servlet:request-3'))
4856 // because using testFixtures() causes some early evaluation of dependencies
4957 webappRuntimeOnly libs. groovy
5058}
51- compileWebappJava. dependsOn ' :dd-java-agent:instrumentation:servlet:request-3:testFixturesJar'
5259
53- configurations. testRuntimeOnly {
60+ configurations. named( " testRuntimeOnly" ) {
5461 exclude group : ' ch.qos.logback' , module : ' logback-classic'
5562 exclude group : ' org.codehaus.groovy' , module : ' groovy-servlet'
5663}
57- configurations. webappRuntimeClasspath {
64+ configurations. named( " webappRuntimeClasspath" ) {
5865 exclude group : ' ch.qos.logback' , module : ' logback-classic'
5966}
6067
61- // unzips the dependencies from the 'zipped' configuration so 'compileOnly' can reference it
62- tasks. register(' installOpenLibertyDeps' , Copy ) {
63- def extractDir = " ${ buildDir} /openliberty-jars"
64- ext. extractedJars = fileTree(extractDir) {
65- include " wlp/lib/*.jar"
66- builtBy " installOpenLibertyDeps"
67- }
68- ext. wsServerJar = fileTree(" $extractDir " ) {
69- include " wlp/bin/tools/ws-server.jar"
70- builtBy " installOpenLibertyDeps"
68+ // unzips the dependencies from the 'zipped' configuration so 'compileOnly' can reference it
69+ abstract class UnpackOpenLiberty extends Copy {
70+ @Input
71+ final Property<String > configurationName = project. objects. property(String ). convention(" zipped" )
72+
73+ @OutputDirectory
74+ final DirectoryProperty extractDir = project. objects. directoryProperty()
75+
76+ @OutputFiles
77+ final Provider<FileTree > extractedJars = project. providers. provider {
78+ project. fileTree(extractDir) {
79+ include " wlp/lib/*.jar"
80+ }
7181 }
72- dependsOn configurations. zipped
73- // I didn't manage to get this to work correctly using a Sync task or Sync + outputs.upToDateWhen
74- // (files are updated when not needed, causing intellij to reindex or they are deemed up to date
75- // when the extraction was not done at all).
76- ext. serverXmlFile = file(" $extractDir /wlp/usr/servers/defaultServer/server.xml" )
77- onlyIf {
78- ! ext. serverXmlFile. exists()
82+
83+ @OutputFiles
84+ final Provider<FileTree > wsServerJar = project. providers. provider {
85+ project. fileTree(extractDir) {
86+ include " wlp/bin/tools/ws-server.jar"
87+ }
7988 }
80- from {
81- configurations. zipped. collect { zipTree(it) }
89+
90+ @OutputFile
91+ final Provider<File > serverXmlFile = project. providers. provider { extractDir. get(). file(" wlp/usr/servers/defaultServer/server.xml" ). asFile }
92+
93+ UnpackOpenLiberty () {
94+ from project. zipTree(configurationName. map {project. configurations. named(it). map { it. singleFile } })
95+ eachFile { FileCopyDetails fcd ->
96+ fcd. path = fcd. path. replaceAll(/ \/ templates\/ (servers\/ defaultServer\/ .+)/ , ' /usr/$1' )
97+ }
98+ into extractDir
8299 }
83- eachFile { fcd ->
84- fcd. path = fcd. path. replaceAll(/ \/ templates\/ (servers\/ defaultServer\/ .+)/ , ' /usr/$1' )
100+ }
101+
102+ def webappCopyJars = tasks. register(' webappCopyJars' , Sync ) {
103+ from configurations. named(" webappRuntimeClasspath" ). map { Configuration config ->
104+ config. filter { file ->
105+ file. name. endsWith(' .jar' )
106+ }
85107 }
86- into extractDir
87- outputs . file ext . serverXmlFile
108+
109+ into openlibertyHomeDir . map { it . dir( " $t estWebAppDir /WEB-INF/lib " ) }
88110}
89- [test, forkedTest]* . dependsOn webappClasses, installOpenLibertyDeps
90- [test, forkedTest]. each {
91- it. configure {
92- jvmArgs + = [" -Dserver.xml=${ installOpenLibertyDeps.serverXmlFile.absoluteFile} " ]
111+
112+ tasks. named(' filterLogbackClassic' , Sync ) {
113+ from configurations. named(" testLogging" ). map {
114+ it. filter {
115+ it. name. contains(' logback-' )
116+ }. collect {zipTree(it) }
93117 }
118+
119+ exclude ' META-INF/**'
120+ into project. layout. buildDirectory. dir(' tmp/filteredLogback' )
94121}
95122
96- tasks. register(' webappCopyJars' , Sync ) {
97- from configurations. webappRuntimeClasspath. findAll { it. name. endsWith(' .jar' ) }
98- into project. layout. buildDirectory. dir(" $relAppDir /WEB-INF/lib" )
99- dependsOn ' :dd-java-agent:instrumentation:servlet:request-3:testFixturesJar'
123+ [" test" , " forkedTest" ]. each {
124+ tasks. named(it, Test ) {
125+ dependsOn(
126+ " webappClasses" ,
127+ unpackOpenLiberty,
128+ webappCopyJars,
129+ filterLogbackClassic
130+ )
131+ jvmArgumentProviders. add(new CommandLineArgumentProvider () {
132+ @Override
133+ Iterable<String > asArguments () {
134+ return unpackOpenLiberty. map {[" -Dserver.xml=${ it.serverXmlFile.get().absolutePath} " ] }. get()
135+ }
136+ })
137+ }
100138}
101- [test, forkedTest]* . dependsOn webappCopyJars
102139
103- tasks. register(' filterLogbackClassic' , Sync ) {
104- ext. filteredLogbackDir = project. layout. buildDirectory. dir(' filteredLogback' )
105- from configurations. testLogging
106- .findAll { it. name. contains(' logback-' ) }
107- .collect { zipTree(it) }
108- exclude ' META-INF/**'
109- into ext. filteredLogbackDir
140+ tasks. named(" forbiddenApisWebapp" ) {
141+ enabled = false
110142}
111- [test, forkedTest]* . dependsOn filterLogbackClassic
0 commit comments