Skip to content

Commit ee6212a

Browse files
committed
move classloading to java-lang
1 parent 45bc239 commit ee6212a

File tree

19 files changed

+416
-130
lines changed

19 files changed

+416
-130
lines changed

dd-java-agent/instrumentation/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ subprojects { Project subProj ->
6969
testImplementation project(':dd-java-agent:instrumentation:java:java-concurrent:java-concurrent-1.8')
7070
// FIXME: we should enable this, but currently this fails tests for google http client
7171
//testImplementation project(':dd-java-agent:instrumentation:http-url-connection')
72-
testImplementation project(':dd-java-agent:instrumentation:classloading')
72+
testImplementation project(':dd-java-agent:instrumentation:java:java-lang:java-lang-classloading-1.8')
7373

7474
testImplementation project(':dd-java-agent:instrumentation-testing')
7575
}

dd-java-agent/instrumentation/classloading/build.gradle

Lines changed: 0 additions & 1 deletion
This file was deleted.

dd-java-agent/instrumentation/classloading/jboss-testing/build.gradle

Lines changed: 0 additions & 13 deletions
This file was deleted.

dd-java-agent/instrumentation/classloading/jsr14-testing/build.gradle

Lines changed: 0 additions & 6 deletions
This file was deleted.

dd-java-agent/instrumentation/classloading/osgi-testing/build.gradle

Lines changed: 0 additions & 12 deletions
This file was deleted.

dd-java-agent/instrumentation/classloading/osgi-testing/src/test/groovy/OSGIClassloadingTest.groovy

Lines changed: 0 additions & 69 deletions
This file was deleted.

dd-java-agent/instrumentation/classloading/tomcat-testing/build.gradle

Lines changed: 0 additions & 23 deletions
This file was deleted.
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
muzzle {
2+
pass {
3+
coreJdk()
4+
}
5+
}
6+
7+
apply from: "$rootDir/gradle/java.gradle"
8+
9+
addTestSuite('classloadingJbossTest')
10+
addTestSuite('classloadingTomcatTest')
11+
addTestSuiteExtendingForDir('classloadingTomcatLatestDepTest', 'classloadingTomcatTest', 'classloadingTomcatTest')
12+
addTestSuite('classloadingOsgiTest')
13+
addTestSuite('classloadingJsr14Test')
14+
15+
tasks.named("classloadingJbossTest") {
16+
testJvmConstraints {
17+
// TODO Java 17: This version of jboss-modules doesn't support Java 17
18+
// __redirected.__SAXParserFactory can't access com.sun.org.apache.xerces.internal.jaxp
19+
maxJavaVersion = JavaVersion.VERSION_15
20+
}
21+
}
22+
23+
tasks.named("classloadingTomcatLatestDepTest") {
24+
testJvmConstraints {
25+
minJavaVersion = JavaVersion.VERSION_17
26+
}
27+
}
28+
29+
dependencies {
30+
classloadingJbossTestImplementation group: 'org.jboss.modules', name: 'jboss-modules', version: '1.3.10.Final'
31+
classloadingJsr14TestImplementation files('src/classloadingJsr14Test/precompiled')
32+
// TODO: we should separate core and Eclipse tests at some point,
33+
// but right now core-specific tests are quite dump and are run with
34+
// core version provided by Eclipse implementation.
35+
//testImplementation group: 'org.osgi', name: 'org.osgi.core', version: '4.0.0'
36+
classloadingOsgiTestImplementation group: 'org.eclipse.platform', name: 'org.eclipse.osgi', version: '3.13.200'
37+
classloadingOsgiTestImplementation group: 'org.apache.felix', name: 'org.apache.felix.framework', version: '6.0.2'
38+
//This seems to be the earliest version that has org.apache.catalina.loader.WebappClassLoaderBase
39+
//Older versions would require slightly different instrumentation.
40+
classloadingTomcatTestImplementation group: 'org.apache.tomcat', name: 'tomcat-catalina', version: '8.0.14'
41+
42+
// Tomcat 10.1.+ seems to require Java 11. Limit to fix build.
43+
classloadingTomcatLatestDepTestImplementation group: 'org.apache.tomcat', name: 'tomcat-catalina', version: '+'
44+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import datadog.trace.agent.test.InstrumentationSpecification
2+
import org.jboss.modules.ModuleFinder
3+
import org.jboss.modules.ModuleIdentifier
4+
import org.jboss.modules.ModuleLoadException
5+
import org.jboss.modules.ModuleLoader
6+
import org.jboss.modules.ModuleSpec
7+
8+
class JBossClassloadingTest extends InstrumentationSpecification {
9+
def "delegates to bootstrap class loader for agent classes"() {
10+
setup:
11+
def moduleFinders = new ModuleFinder[1]
12+
moduleFinders[0] = new ModuleFinder() {
13+
@Override
14+
ModuleSpec findModule(ModuleIdentifier identifier, ModuleLoader delegateLoader) throws ModuleLoadException {
15+
return ModuleSpec.build(identifier).create()
16+
}
17+
}
18+
def moduleLoader = new ModuleLoader(moduleFinders)
19+
def moduleId = ModuleIdentifier.fromString("test")
20+
def testModule = moduleLoader.loadModule(moduleId)
21+
def classLoader = testModule.getClassLoader()
22+
23+
when:
24+
Class<?> clazz
25+
try {
26+
clazz = Class.forName("datadog.trace.api.GlobalTracer", false, classLoader)
27+
} catch (ClassNotFoundException e) {
28+
}
29+
30+
then:
31+
assert clazz != null
32+
assert clazz.getClassLoader() == null
33+
}
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import datadog.trace.agent.test.InstrumentationSpecification
2+
import test.jsr14.Jsr14ClassLoader
3+
4+
class Jsr14ClassloadingTest extends InstrumentationSpecification {
5+
def "OSGI delegates to bootstrap class loader for agent classes using #args args"() {
6+
when:
7+
def clazz
8+
if (args == 1) {
9+
clazz = loader.loadClass("datadog.trace.api.GlobalTracer")
10+
} else {
11+
clazz = loader.loadClass("datadog.trace.api.GlobalTracer", false)
12+
}
13+
14+
then:
15+
assert clazz != null
16+
assert clazz.getClassLoader() == null
17+
18+
where:
19+
loader | args
20+
new Jsr14ClassLoader() | 1
21+
new Jsr14ClassLoader() | 2
22+
}
23+
}

0 commit comments

Comments
 (0)