diff --git a/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/ClassLoding.java b/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/ClassLoding.java new file mode 100644 index 0000000000000..95019fe96bcf6 --- /dev/null +++ b/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/ClassLoding.java @@ -0,0 +1,6 @@ +package com.navercorp.pinpoint.test.plugin; + +public enum ClassLoding { + System, + Child +} diff --git a/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/DefaultPluginForkedTestInstance.java b/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/DefaultPluginForkedTestInstance.java index f8fa5fcca3927..a5801e3cb173e 100644 --- a/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/DefaultPluginForkedTestInstance.java +++ b/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/DefaultPluginForkedTestInstance.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Objects; import java.util.Scanner; import static com.navercorp.pinpoint.test.plugin.PluginTestConstants.CHILD_CLASS_PATH_PREFIX; @@ -33,14 +34,16 @@ public class DefaultPluginForkedTestInstance implements PluginForkedTestInstance private final PluginForkedTestContext context; private final String testId; private final List libs; - private final boolean onSystemClassLoader; + private final ClassLoding type; private final ProcessManager processManager; - public DefaultPluginForkedTestInstance(PluginForkedTestContext context, String testId, List libs, boolean onSystemClassLoader) { + public DefaultPluginForkedTestInstance(PluginForkedTestContext context, + String testId, List libs, + ClassLoding type) { this.context = context; - this.testId = testId + ":" + (onSystemClassLoader ? "system" : "child") + ":" + context.getJvmVersion(); + this.testId = testId + ":" + type + ":" + context.getJvmVersion(); this.libs = libs; - this.onSystemClassLoader = onSystemClassLoader; + this.type = Objects.requireNonNull(type, "type"); this.processManager = new DefaultProcessManager(context); } @@ -51,7 +54,7 @@ public String getTestId() { @Override public List getClassPath() { - if (onSystemClassLoader) { + if (type == ClassLoding.System) { List libs = new ArrayList<>(context.getRequiredLibraries()); libs.addAll(this.libs); libs.add(context.getTestClassLocation()); @@ -78,7 +81,7 @@ public List getAppArgs() { args.add(context.getTestClass().getName()); - if (!onSystemClassLoader) { + if (type == ClassLoding.Child) { StringBuilder classPath = new StringBuilder(); classPath.append(CHILD_CLASS_PATH_PREFIX); diff --git a/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/DefaultPluginForkedTestSuite.java b/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/DefaultPluginForkedTestSuite.java index 54b28ca072f58..909a66e0f8d85 100644 --- a/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/DefaultPluginForkedTestSuite.java +++ b/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/DefaultPluginForkedTestSuite.java @@ -46,8 +46,9 @@ public class DefaultPluginForkedTestSuite extends AbstractPluginForkedTestSuite private static final Map RESOLVER_OPTION = createResolverOption(); private static final DependencyResolverFactory RESOLVER_FACTORY = new DependencyResolverFactory(RESOLVER_OPTION); private final TaggedLogger logger = TestLogger.getLogger(); - private final boolean testOnSystemClassLoader; - private final boolean testOnChildClassLoader; + + private final ClassLoding classLoding; + private final String[] repositories; private final String[] dependencies; @@ -73,16 +74,7 @@ public DefaultPluginForkedTestSuite(Class testClass, boolean sharedProcess) { super(testClass); OnClassLoader onClassLoader = testClass.getAnnotation(OnClassLoader.class); - if (onClassLoader == null) { - this.testOnChildClassLoader = true; - } else { - this.testOnChildClassLoader = onClassLoader.child(); - } - if (onClassLoader == null) { - this.testOnSystemClassLoader = false; - } else { - this.testOnSystemClassLoader = onClassLoader.system(); - } + this.classLoding = onClassLoader.type(); Set dependenySet = new HashSet<>(); Dependency deps = testClass.getAnnotation(Dependency.class); @@ -170,33 +162,15 @@ private DependencyResolver getDependencyResolver(String[] repositories) { } private PluginForkedTestInstance newSharedProcessPluginTestCase(PluginForkedTestContext context, String testId, List libs, SharedProcessManager sharedProcessManager) { - if (testOnSystemClassLoader) { + if (classLoding == ClassLoding.System) { return new SharedPluginForkedTestInstance(context, testId, libs, true, sharedProcessManager); } - if (testOnChildClassLoader) { - return new SharedPluginForkedTestInstance(context, testId, libs, false, sharedProcessManager); - } - throw new IllegalStateException("Illegal classLoader"); + return new SharedPluginForkedTestInstance(context, testId, libs, false, sharedProcessManager); } private List createCasesWithJdkOnly(PluginForkedTestContext context) throws ClassNotFoundException { - List instanceList = new ArrayList<>(); - - if (testOnSystemClassLoader) { - instanceList.add(new DefaultPluginForkedTestInstance(context, "", Collections.emptyList(), true)); - } else { - instanceList.add(new DefaultPluginForkedTestInstance(context, "", Collections.emptyList(), false)); - } - return instanceList; + DefaultPluginForkedTestInstance testInstance = new DefaultPluginForkedTestInstance(context, "", Collections.emptyList(), classLoding); + return Collections.singletonList(testInstance); } - boolean isOnSystemClassLoader() { - if (testOnSystemClassLoader) { - return true; - } - if (testOnChildClassLoader) { - return false; - } - return false; - } } diff --git a/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/DefaultPluginTestSuite.java b/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/DefaultPluginTestSuite.java index 1d4616f90ab3d..d6af391ad0d11 100644 --- a/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/DefaultPluginTestSuite.java +++ b/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/DefaultPluginTestSuite.java @@ -49,8 +49,9 @@ public class DefaultPluginTestSuite extends AbstractPluginTestSuite { private static final Map RESOLVER_OPTION = createResolverOption(); private static final DependencyResolverFactory RESOLVER_FACTORY = new DependencyResolverFactory(RESOLVER_OPTION); private final TaggedLogger logger = TestLogger.getLogger(); - private final boolean testOnSystemClassLoader; - private final boolean testOnChildClassLoader; + + private final ClassLoding classLoding; + private final String[] repositories; private final String[] dependencies; private final Class sharedClass; @@ -72,16 +73,7 @@ public DefaultPluginTestSuite(Class testClass, boolean sharedProcess) { super(testClass); OnClassLoader onClassLoader = testClass.getAnnotation(OnClassLoader.class); - if (onClassLoader == null) { - this.testOnChildClassLoader = true; - } else { - this.testOnChildClassLoader = onClassLoader.child(); - } - if (onClassLoader == null) { - this.testOnSystemClassLoader = false; - } else { - this.testOnSystemClassLoader = onClassLoader.system(); - } + this.classLoding = onClassLoader.type(); Dependency deps = testClass.getAnnotation(Dependency.class); this.dependencies = deps == null ? null : deps.value(); @@ -182,7 +174,8 @@ private List createCasesWithDependencies(PluginTestContext c agentClassLoader.setTransformIncludeList(context.getTransformIncludeList()); try { thread.setContextClassLoader(agentClassLoader); - final PluginTestInstance pluginTestInstance = pluginTestInstanceFactory.create(currentClassLoader, testId, agentClassLoader, libs, context.getTransformIncludeList(), isOnSystemClassLoader()); + final PluginTestInstance pluginTestInstance = pluginTestInstanceFactory.create(currentClassLoader, testId, agentClassLoader, + libs, context.getTransformIncludeList(), classLoding); pluginTestInstanceList.add(pluginTestInstance); } finally { thread.setContextClassLoader(currentClassLoader); @@ -204,22 +197,15 @@ private DependencyResolver getDependencyResolver(String[] repositories) { private List createCasesWithJdkOnly(PluginTestContext context) throws ClassNotFoundException { final PluginTestInstanceFactory pluginTestInstanceFactory = new PluginTestInstanceFactory(context); ClassLoader contextClassLoader = ClassLoaderUtils.getContextClassLoader(); - boolean onSystemClassLoader = isOnSystemClassLoader(); List libs = Collections.emptyList(); List transformIncludeList = Collections.emptyList(); - final PluginTestInstance pluginTestInstance = pluginTestInstanceFactory.create(contextClassLoader, "", null, libs, transformIncludeList, onSystemClassLoader); + final PluginTestInstance pluginTestInstance = pluginTestInstanceFactory.create(contextClassLoader, "", null, libs, transformIncludeList, classLoding); final List pluginTestInstanceList = new ArrayList<>(); pluginTestInstanceList.add(pluginTestInstance); return pluginTestInstanceList; } boolean isOnSystemClassLoader() { - if (testOnSystemClassLoader) { - return true; - } - if (testOnChildClassLoader) { - return false; - } - return false; + return classLoding == ClassLoding.System; } } diff --git a/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/OnClassLoader.java b/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/OnClassLoader.java index 4e8e55a7769f9..93149b4ee4e19 100644 --- a/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/OnClassLoader.java +++ b/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/OnClassLoader.java @@ -24,6 +24,5 @@ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface OnClassLoader { - boolean system() default false; - boolean child() default true; + ClassLoding type() default ClassLoding.System; } diff --git a/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/PluginTestInstanceFactory.java b/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/PluginTestInstanceFactory.java index 71bdeceb8c3d0..0de33a0197fe9 100644 --- a/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/PluginTestInstanceFactory.java +++ b/agent-module/plugins-test-module/plugins-test/src/main/java/com/navercorp/pinpoint/test/plugin/PluginTestInstanceFactory.java @@ -27,20 +27,25 @@ import java.net.URL; import java.util.ArrayList; import java.util.List; +import java.util.Objects; public class PluginTestInstanceFactory { private final PluginTestContext context; public PluginTestInstanceFactory(PluginTestContext context) { - this.context = context; + this.context = Objects.requireNonNull(context, "context"); } - public PluginTestInstance create(ClassLoader parentClassLoader, String testId, PluginAgentTestClassLoader agentClassLoader, List libs, List transformIncludeList, boolean onSystemClassLoader) throws ClassNotFoundException { - final String id = testId + ":" + (onSystemClassLoader ? "system" : "child"); + public PluginTestInstance create(ClassLoader parentClassLoader, String testId, + PluginAgentTestClassLoader agentClassLoader, + List libs, + List transformIncludeList, + ClassLoding classLoading) throws ClassNotFoundException { + final String id = testId + ":" + classLoading; PluginTestInstanceCallback instanceContext = startAgent(context.getConfigFile(), agentClassLoader); final List fileList = new ArrayList<>(); - for (String classPath : getClassPath(libs, onSystemClassLoader)) { + for (String classPath : getClassPath(libs, classLoading)) { File file = new File(classPath); fileList.add(file); } @@ -55,7 +60,7 @@ public PluginTestInstance create(ClassLoader parentClassLoader, String testId, P return new DefaultPluginTestInstance(id, testClassLoader, testClass, context.isManageTraceObject(), instanceContext); } - List getClassPath(List libs, boolean onSystemClassLoader) { + List getClassPath(List libs, ClassLoding classLoading) { final List libList = new ArrayList<>(context.getJunitLibList()); libList.addAll(libs); libList.add(context.getTestClassLocation());