11package datadog .trace .agent .tooling .muzzle ;
22
33import datadog .trace .agent .tooling .AdviceShader ;
4- import datadog .trace .agent .tooling .HelperInjector ;
54import datadog .trace .agent .tooling .InstrumenterModule ;
65import datadog .trace .agent .tooling .bytebuddy .SharedTypePools ;
76import 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