Skip to content

Commit ecc7605

Browse files
committed
Test helper consistency in MuzzleVersionScanPlugin without requiring HelperInjector
This helps decouple internals and provides the same feedback with simpler code
1 parent 0b95702 commit ecc7605

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/muzzle/MuzzleVersionScanPlugin.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package datadog.trace.agent.tooling.muzzle;
22

33
import datadog.trace.agent.tooling.AdviceShader;
4-
import datadog.trace.agent.tooling.HelperInjector;
54
import datadog.trace.agent.tooling.InstrumenterModule;
65
import datadog.trace.agent.tooling.bytebuddy.SharedTypePools;
76
import datadog.trace.agent.tooling.bytebuddy.matcher.ClassLoaderMatchers;
@@ -72,16 +71,15 @@ public static void assertInstrumentationMuzzled(
7271
if (assertPass) {
7372
for (InstrumenterModule module : toBeTested) {
7473
try {
75-
// verify helper injector works
74+
// verify helper consistency
7675
final String[] helperClassNames = module.helperClassNames();
7776
if (helperClassNames.length > 0) {
78-
new HelperInjector(
79-
module.useAgentCodeSource(),
80-
MuzzleVersionScanPlugin.class.getSimpleName(),
81-
createHelperMap(module))
82-
.transform(null, null, testApplicationLoader, null, null);
77+
HelperClassLoader helperClassLoader = new HelperClassLoader(testApplicationLoader);
78+
for (Map.Entry<String, byte[]> helper : createHelperMap(module).entrySet()) {
79+
helperClassLoader.injectClass(helper.getKey(), helper.getValue());
80+
}
8381
}
84-
} catch (final Exception e) {
82+
} catch (final Throwable e) {
8583
System.err.println(
8684
"FAILED HELPER INJECTION. Are Helpers being injected in the correct order?");
8785
System.err.println(e.getMessage());
@@ -107,6 +105,18 @@ private static synchronized List<InstrumenterModule> toBeTested(
107105
return toBeTested;
108106
}
109107

108+
// Exposes ClassLoader.defineClass() to test helper consistency
109+
// without requiring java.lang.instrument.Instrumentation agent
110+
static final class HelperClassLoader extends ClassLoader {
111+
HelperClassLoader(ClassLoader parent) {
112+
super(parent);
113+
}
114+
115+
public void injectClass(String name, byte[] bytecode) {
116+
defineClass(name, bytecode, 0, bytecode.length);
117+
}
118+
}
119+
110120
private static Map<String, byte[]> createHelperMap(final InstrumenterModule module)
111121
throws IOException {
112122
String[] helperClasses = module.helperClassNames();

0 commit comments

Comments
 (0)