diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginDefine.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginDefine.java index 5ccd13b70..307139574 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginDefine.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginDefine.java @@ -5,6 +5,7 @@ import org.skywalking.apm.agent.core.plugin.exception.IllegalPluginDefineExcepti import org.skywalking.apm.util.StringUtil; public class PluginDefine { + public static final String PLUGIN_OFF_PREFIX = "[OFF]"; /** * Plugin name. */ @@ -38,17 +39,20 @@ public class PluginDefine { String pluginName = pluginDefine[0]; String defineClass = pluginDefine[1]; - if (pluginName.toUpperCase().startsWith("[OFF]")) { - return new PluginDefine(pluginName.substring(5), defineClass, State.OFF); + if (pluginName.toUpperCase().startsWith(PLUGIN_OFF_PREFIX)) { + return new PluginDefine(pluginName.substring(PLUGIN_OFF_PREFIX.length()), defineClass, State.OFF); } else { return new PluginDefine(pluginName, defineClass, State.ON); } } public boolean enable() { - return !Config.Plugin.DISABLED_PLUGINS.contains(name) || forceEnable(); + return !forceDisable() || forceEnable(); } + private boolean forceDisable() { + return state != State.ON || Config.Plugin.DISABLED_PLUGINS.contains(name); + } private boolean forceEnable() { return state == State.OFF && Config.Plugin.FORCE_ENABLE_PLUGINS.contains(name); diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/PluginDefineTest.java b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/PluginDefineTest.java new file mode 100644 index 000000000..1f0a69dd9 --- /dev/null +++ b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/PluginDefineTest.java @@ -0,0 +1,48 @@ +package org.skywalking.apm.agent.core.plugin; + +import org.junit.Test; +import org.skywalking.apm.agent.core.conf.Config; +import org.skywalking.apm.agent.core.plugin.exception.IllegalPluginDefineException; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class PluginDefineTest { + + private static final String TEST_PLUGIN = "test_plugin"; + private static final String TEST_DEFINE_CLASS = "test_define_class"; + + @Test(expected = IllegalPluginDefineException.class) + public void testIllegalPluginDefine() throws IllegalPluginDefineException { + PluginDefine.build("illegal_plugin_define"); + } + + @Test(expected = IllegalPluginDefineException.class) + public void testEmptyPluginDefine() throws IllegalPluginDefineException { + PluginDefine.build(""); + } + + @Test + public void testOffStatePlugin() throws IllegalPluginDefineException { + PluginDefine pluginDefine = PluginDefine.build(PluginDefine.PLUGIN_OFF_PREFIX + TEST_PLUGIN + "=" + TEST_DEFINE_CLASS); + assertFalse(pluginDefine.enable()); + assertEquals(TEST_DEFINE_CLASS, pluginDefine.getDefineClass()); + } + + @Test + public void testDefaultStatePlugin() throws IllegalPluginDefineException { + PluginDefine pluginDefine = PluginDefine.build(TEST_PLUGIN + "=" + TEST_DEFINE_CLASS); + assertTrue(pluginDefine.enable()); + assertEquals(TEST_DEFINE_CLASS, pluginDefine.getDefineClass()); + } + + @Test + public void testForceEnablePlugin() throws IllegalPluginDefineException { + Config.Plugin.FORCE_ENABLE_PLUGINS.add(TEST_PLUGIN); + PluginDefine pluginDefine = PluginDefine.build(PluginDefine.PLUGIN_OFF_PREFIX + TEST_PLUGIN + "=" + TEST_DEFINE_CLASS); + assertTrue(pluginDefine.enable()); + assertEquals(TEST_DEFINE_CLASS, pluginDefine.getDefineClass()); + Config.Plugin.FORCE_ENABLE_PLUGINS.clear(); + } +}