This is an automated email from the ASF dual-hosted git repository.
xiaoyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 3d21ffc rrefactor agent tracing plugin test (#9039)
3d21ffc is described below
commit 3d21ffcaa4b7aeb854496c403f46c0aa4ee6d611
Author: Daming <[email protected]>
AuthorDate: Fri Jan 15 10:40:24 2021 +0800
rrefactor agent tracing plugin test (#9039)
* refactor agent tracing plugin test
* Update CommandExecutorTaskAdviceTest.java
rename method
* add license header
---
.../shardingsphere-agent-plugin-tracing/pom.xml | 16 +++
.../shardingsphere-agent-tracing-jaeger/pom.xml | 7 +-
.../jaeger/advice/CommandExecutorTaskAdvice.java | 24 ++--
.../jaeger/advice/JDBCExecutorCallbackAdvice.java | 28 +++--
.../jaeger/advice/SQLParserEngineAdvice.java | 6 +-
...hardingSphereTags.java => JaegerConstants.java} | 40 +++++--
.../tracing/jaeger/span/JaegerErrorSpan.java | 8 +-
.../advice/CommandExecutorTaskAdviceTest.java | 60 ++++------
.../advice/JDBCExecutorCallbackAdviceTest.java | 75 ++++--------
.../jaeger/advice/SQLParserEngineAdviceTest.java | 56 +++------
.../advice/CommandExecutorTaskAdvice.java | 2 +-
.../advice/JDBCExecutorCallbackAdvice.java | 2 +-
.../pom.xml | 51 +++++----
.../agent/plugin/tracing/AgentRunner.java | 126 +++++++++++++++++++++
.../plugin/tracing}/MockDataSourceMetaData.java | 2 +-
.../AbstractCommandExecutorTaskAdviceTest.java} | 25 ++--
.../AbstractJDBCExecutorCallbackAdviceTest.java | 84 ++++++++++++++
.../advice/AbstractSQLParserEngineAdviceTest.java | 52 +++++++++
.../plugin/tracing/advice/AdviceTestBase.java} | 20 +---
.../agent/plugin/tracing/rule/CollectorRule.java} | 21 +---
.../agent/plugin/tracing/rule/JaegerCollector.java | 60 ++++++++++
.../agent/plugin/tracing/rule/ZipkinCollector.java | 60 ++++++++++
.../shardingsphere-agent-tracing-zipkin/pom.xml | 9 +-
.../zipkin/advice/CommandExecutorTaskAdvice.java | 2 +-
.../zipkin/advice/SQLParserEngineAdvice.java | 1 +
.../tracing/zipkin/constant/ZipkinConstants.java | 2 +-
.../tracing/zipkin/advice/AdviceBaseTest.java | 62 ----------
.../advice/CommandExecutorTaskAdviceTest.java | 50 +++-----
.../advice/JDBCExecutorCallbackAdviceTest.java | 87 +++-----------
.../zipkin/advice/SQLParserEngineAdviceTest.java | 60 +++-------
30 files changed, 647 insertions(+), 451 deletions(-)
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/pom.xml
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/pom.xml
index df2b844..4aa4da9 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/pom.xml
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/pom.xml
@@ -30,6 +30,7 @@
<name>${project.artifactId}</name>
<modules>
+ <module>shardingsphere-agent-tracing-test</module>
<module>shardingsphere-agent-tracing-jaeger</module>
<module>shardingsphere-agent-tracing-zipkin</module>
<module>shardingsphere-agent-tracing-opentracing</module>
@@ -37,6 +38,10 @@
<properties>
<tracing.target.directory>${project.basedir}/../target/plugins</tracing.target.directory>
+ <opentracing.version>0.31.0</opentracing.version>
+ <jaeger-client.version>0.31.0</jaeger-client.version>
+ <zipkin-brave.version>5.13.2</zipkin-brave.version>
+ <zipkin-reporter.version>2.16.2</zipkin-reporter.version>
</properties>
<dependencies>
@@ -49,6 +54,17 @@
<artifactId>shardingsphere-proxy-common</artifactId>
</dependency>
</dependencies>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.shardingsphere</groupId>
+ <artifactId>shardingsphere-agent-tracing-test</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
<build>
<plugins>
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/pom.xml
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/pom.xml
index 0fab780..9eee90e 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/pom.xml
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/pom.xml
@@ -29,8 +29,8 @@
<name>${project.artifactId}</name>
<properties>
- <jaeger-client.version>0.31.0</jaeger-client.version>
<opentracing.version>0.31.0</opentracing.version>
+ <jaeger-client.version>0.31.0</jaeger-client.version>
</properties>
<dependencies>
@@ -49,7 +49,6 @@
<artifactId>opentracing-util</artifactId>
<version>${opentracing.version}</version>
</dependency>
-
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-proxy-frontend-core</artifactId>
@@ -62,5 +61,9 @@
<version>${opentracing.version}</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.shardingsphere</groupId>
+ <artifactId>shardingsphere-agent-tracing-test</artifactId>
+ </dependency>
</dependencies>
</project>
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/CommandExecutorTaskAdvice.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/CommandExecutorTaskAdvice.java
index 872c89c..8206ba1 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/CommandExecutorTaskAdvice.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/CommandExecutorTaskAdvice.java
@@ -20,13 +20,17 @@ package
org.apache.shardingsphere.agent.plugin.tracing.jaeger.advice;
import io.opentracing.Scope;
import io.opentracing.tag.Tags;
import io.opentracing.util.GlobalTracer;
-import org.apache.shardingsphere.agent.api.advice.InstanceMethodAroundAdvice;
+import lombok.SneakyThrows;
import org.apache.shardingsphere.agent.api.advice.AdviceTargetObject;
+import org.apache.shardingsphere.agent.api.advice.InstanceMethodAroundAdvice;
import org.apache.shardingsphere.agent.api.result.MethodInvocationResult;
-import
org.apache.shardingsphere.agent.plugin.tracing.jaeger.constant.ShardingSphereTags;
+import
org.apache.shardingsphere.agent.plugin.tracing.jaeger.constant.JaegerConstants;
import
org.apache.shardingsphere.agent.plugin.tracing.jaeger.span.JaegerErrorSpan;
import org.apache.shardingsphere.infra.executor.kernel.model.ExecutorDataMap;
+import
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
+import org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask;
+import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
@@ -36,20 +40,24 @@ public final class CommandExecutorTaskAdvice implements
InstanceMethodAroundAdvi
private static final String OPERATION_NAME = "/ShardingSphere/rootInvoke/";
- private static final String ROOT_SPAN = "_root_span_";
-
@Override
public void beforeMethod(final AdviceTargetObject target, final Method
method, final Object[] args, final MethodInvocationResult result) {
Scope scope = GlobalTracer.get().buildSpan(OPERATION_NAME)
- .withTag(Tags.COMPONENT.getKey(),
ShardingSphereTags.COMPONENT_NAME)
+ .withTag(Tags.COMPONENT.getKey(),
JaegerConstants.COMPONENT_NAME)
.startActive(true);
- ExecutorDataMap.getValue().put(ROOT_SPAN, scope.span());
+ ExecutorDataMap.getValue().put(JaegerConstants.ROOT_SPAN,
scope.span());
}
@Override
+ @SneakyThrows
public void afterMethod(final AdviceTargetObject target, final Method
method, final Object[] args, final MethodInvocationResult result) {
- GlobalTracer.get().scopeManager().active().close();
- ExecutorDataMap.getValue().remove(ROOT_SPAN);
+ ExecutorDataMap.getValue().remove(JaegerConstants.ROOT_SPAN);
+ Field field =
CommandExecutorTask.class.getDeclaredField("backendConnection");
+ field.setAccessible(true);
+ BackendConnection connection = (BackendConnection) field.get(target);
+ Scope scope = GlobalTracer.get().scopeManager().active();
+
scope.span().setTag(JaegerConstants.ShardingSphereTags.CONNECTION_COUNT.getKey(),
connection.getConnectionSize());
+ scope.close();
}
@Override
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/JDBCExecutorCallbackAdvice.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/JDBCExecutorCallbackAdvice.java
index 03035ba..a752c64 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/JDBCExecutorCallbackAdvice.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/JDBCExecutorCallbackAdvice.java
@@ -22,15 +22,19 @@ import io.opentracing.Span;
import io.opentracing.Tracer;
import io.opentracing.tag.Tags;
import io.opentracing.util.GlobalTracer;
+import lombok.SneakyThrows;
+import org.apache.shardingsphere.agent.api.advice.AdviceTargetObject;
import org.apache.shardingsphere.agent.api.advice.InstanceMethodAroundAdvice;
import org.apache.shardingsphere.agent.api.result.MethodInvocationResult;
-import org.apache.shardingsphere.agent.api.advice.AdviceTargetObject;
+import
org.apache.shardingsphere.agent.plugin.tracing.jaeger.constant.JaegerConstants;
import
org.apache.shardingsphere.agent.plugin.tracing.jaeger.span.JaegerErrorSpan;
-import
org.apache.shardingsphere.agent.plugin.tracing.jaeger.constant.ShardingSphereTags;
+import org.apache.shardingsphere.infra.database.metadata.DataSourceMetaData;
import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
import
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
+import
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutorCallback;
import java.lang.reflect.Method;
+import java.sql.DatabaseMetaData;
import java.util.Map;
/**
@@ -41,20 +45,26 @@ public final class JDBCExecutorCallbackAdvice implements
InstanceMethodAroundAdv
private static final String OPERATION_NAME = "/ShardingSphere/executeSQL/";
@Override
+ @SneakyThrows
public void beforeMethod(final AdviceTargetObject target, final Method
method, final Object[] args, final MethodInvocationResult result) {
- Span root = (Span) ((Map<String, Object>) args[2]).get("_root_span_");
+ Span root = (Span) ((Map<String, Object>)
args[2]).get(JaegerConstants.ROOT_SPAN);
Tracer.SpanBuilder builder =
GlobalTracer.get().buildSpan(OPERATION_NAME);
if ((boolean) args[1]) {
builder.asChildOf(root);
} else {
- JDBCExecutionUnit executionUnit = (JDBCExecutionUnit) args[0];
- ExecutionUnit unit = executionUnit.getExecutionUnit();
- builder.withTag(Tags.COMPONENT.getKey(),
ShardingSphereTags.COMPONENT_NAME)
- .withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CLIENT)
- .withTag(Tags.DB_TYPE.getKey(), "sql")
+ final JDBCExecutionUnit executionUnit = (JDBCExecutionUnit)
args[0];
+ final ExecutionUnit unit = executionUnit.getExecutionUnit();
+ Method getMetadataMethod =
JDBCExecutorCallback.class.getDeclaredMethod("getDataSourceMetaData",
DatabaseMetaData.class);
+ getMetadataMethod.setAccessible(true);
+ DataSourceMetaData metaData = (DataSourceMetaData)
getMetadataMethod.invoke(target, new
Object[]{executionUnit.getStorageResource().getConnection().getMetaData()});
+ builder.withTag(Tags.COMPONENT.getKey(),
JaegerConstants.COMPONENT_NAME)
+ .withTag(Tags.DB_TYPE.getKey(),
JaegerConstants.DB_TYPE_VALUE)
.withTag(Tags.DB_INSTANCE.getKey(),
unit.getDataSourceName())
+ .withTag(Tags.PEER_HOSTNAME.getKey(),
metaData.getHostName())
+ .withTag(Tags.PEER_PORT.getKey(), metaData.getPort())
+ .withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CLIENT)
.withTag(Tags.DB_STATEMENT.getKey(),
unit.getSqlUnit().getSql())
- .withTag(ShardingSphereTags.DB_BIND_VARIABLES.getKey(),
unit.getSqlUnit().getParameters().toString());
+
.withTag(JaegerConstants.ShardingSphereTags.DB_BIND_VARIABLES.getKey(),
unit.getSqlUnit().getParameters().toString());
}
target.setAttachment(builder.startActive(true));
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/SQLParserEngineAdvice.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/SQLParserEngineAdvice.java
index 9aed790..185aefb 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/SQLParserEngineAdvice.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/SQLParserEngineAdvice.java
@@ -20,11 +20,11 @@ package
org.apache.shardingsphere.agent.plugin.tracing.jaeger.advice;
import io.opentracing.Scope;
import io.opentracing.tag.Tags;
import io.opentracing.util.GlobalTracer;
+import org.apache.shardingsphere.agent.api.advice.AdviceTargetObject;
import org.apache.shardingsphere.agent.api.advice.InstanceMethodAroundAdvice;
import org.apache.shardingsphere.agent.api.result.MethodInvocationResult;
-import org.apache.shardingsphere.agent.api.advice.AdviceTargetObject;
+import
org.apache.shardingsphere.agent.plugin.tracing.jaeger.constant.JaegerConstants;
import
org.apache.shardingsphere.agent.plugin.tracing.jaeger.span.JaegerErrorSpan;
-import
org.apache.shardingsphere.agent.plugin.tracing.jaeger.constant.ShardingSphereTags;
import java.lang.reflect.Method;
@@ -38,7 +38,7 @@ public final class SQLParserEngineAdvice implements
InstanceMethodAroundAdvice {
@Override
public void beforeMethod(final AdviceTargetObject target, final Method
method, final Object[] args, final MethodInvocationResult result) {
Scope scope = GlobalTracer.get().buildSpan(OPERATION_NAME)
- .withTag(Tags.COMPONENT.getKey(),
ShardingSphereTags.COMPONENT_NAME)
+ .withTag(Tags.COMPONENT.getKey(),
JaegerConstants.COMPONENT_NAME)
.withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CLIENT)
.withTag(Tags.DB_STATEMENT.getKey(), String.valueOf(args[0]))
.startActive(true);
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/constant/ShardingSphereTags.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/constant/JaegerConstants.java
similarity index 53%
rename from
shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/constant/ShardingSphereTags.java
rename to
shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/constant/JaegerConstants.java
index adf19c2..99cfc1e 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/constant/ShardingSphereTags.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/constant/JaegerConstants.java
@@ -18,27 +18,45 @@
package org.apache.shardingsphere.agent.plugin.tracing.jaeger.constant;
import io.opentracing.tag.StringTag;
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-/**
- * ShardingSphere tags.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class ShardingSphereTags {
+public class JaegerConstants {
+
+ public static final String ROOT_SPAN = "jaeger_root_span";
/**
* Component name of ShardingSphere's open tracing tag.
*/
public static final String COMPONENT_NAME = "ShardingSphere";
+ public static final String DB_TYPE_VALUE = "shardingsphere-proxy";
+
/**
- * The tag to record the bind variables of SQL.
+ * Error log tag keys.
*/
- public static final StringTag DB_BIND_VARIABLES = new
StringTag("db.bind_vars");
+ public static final class ErrorLogTagKeys {
+
+ public static final String EVENT = "event";
+
+ public static final String EVENT_ERROR_TYPE = "error";
+
+ public static final String ERROR_KIND = "error.kind";
+
+ public static final String MESSAGE = "message";
+ }
/**
- * The tag to record the connection count.
+ * ShardingSphere tags.
*/
- public static final StringTag CONNECTION_COUNT = new
StringTag("connection.count");
+ public static final class ShardingSphereTags {
+
+ /**
+ * The tag to record the bind variables of SQL.
+ */
+ public static final StringTag DB_BIND_VARIABLES = new
StringTag("db.bind_vars");
+
+ /**
+ * The tag to record the connection count.
+ */
+ public static final StringTag CONNECTION_COUNT = new
StringTag("connection.count");
+ }
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/span/JaegerErrorSpan.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/span/JaegerErrorSpan.java
index 6dd2279..41da1c3 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/span/JaegerErrorSpan.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/span/JaegerErrorSpan.java
@@ -21,7 +21,7 @@ import io.opentracing.Span;
import io.opentracing.tag.Tags;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
-import
org.apache.shardingsphere.agent.plugin.tracing.jaeger.constant.ErrorLogTagKeys;
+import
org.apache.shardingsphere.agent.plugin.tracing.jaeger.constant.JaegerConstants;
import java.util.HashMap;
import java.util.Map;
@@ -44,9 +44,9 @@ public final class JaegerErrorSpan {
private static Map<String, ?> getReason(final Throwable cause) {
Map<String, String> result = new HashMap<>(3, 1);
- result.put(ErrorLogTagKeys.EVENT, ErrorLogTagKeys.EVENT_ERROR_TYPE);
- result.put(ErrorLogTagKeys.ERROR_KIND, cause.getClass().getName());
- result.put(ErrorLogTagKeys.MESSAGE, cause.getMessage());
+ result.put(JaegerConstants.ErrorLogTagKeys.EVENT,
JaegerConstants.ErrorLogTagKeys.EVENT_ERROR_TYPE);
+ result.put(JaegerConstants.ErrorLogTagKeys.ERROR_KIND,
cause.getClass().getName());
+ result.put(JaegerConstants.ErrorLogTagKeys.MESSAGE,
cause.getMessage());
return result;
}
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/CommandExecutorTaskAdviceTest.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/CommandExecutorTaskAdviceTest.java
index d02f670..3e57e52 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/CommandExecutorTaskAdviceTest.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/CommandExecutorTaskAdviceTest.java
@@ -17,23 +17,19 @@
package org.apache.shardingsphere.agent.plugin.tracing.jaeger.advice;
-import io.netty.channel.ChannelHandlerContext;
+import com.google.common.collect.Maps;
import io.opentracing.mock.MockSpan;
-import io.opentracing.mock.MockTracer;
-import io.opentracing.util.GlobalTracer;
-import lombok.SneakyThrows;
+import io.opentracing.tag.Tags;
import org.apache.shardingsphere.agent.api.result.MethodInvocationResult;
-import org.apache.shardingsphere.db.protocol.payload.PacketPayload;
-import
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
-import org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask;
+import
org.apache.shardingsphere.agent.plugin.tracing.advice.AbstractCommandExecutorTaskAdviceTest;
+import
org.apache.shardingsphere.agent.plugin.tracing.jaeger.constant.JaegerConstants;
+import org.apache.shardingsphere.agent.plugin.tracing.rule.JaegerCollector;
import org.junit.Assert;
-import org.junit.Before;
import org.junit.BeforeClass;
+import org.junit.ClassRule;
import org.junit.Test;
-import org.mockito.internal.util.reflection.FieldReader;
import java.io.IOException;
-import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;
@@ -41,48 +37,38 @@ import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
-public final class CommandExecutorTaskAdviceTest {
+public final class CommandExecutorTaskAdviceTest extends
AbstractCommandExecutorTaskAdviceTest {
- private static final CommandExecutorTaskAdvice ADVICE = new
CommandExecutorTaskAdvice();
+ @ClassRule
+ public static JaegerCollector collector = new JaegerCollector();
- private static MockTracer tracer;
+ private static final CommandExecutorTaskAdvice ADVICE = new
CommandExecutorTaskAdvice();
- private static Method executeCommandMethod;
+ private static final Map<String, Object> EXPECTED = Maps.newHashMap();
@BeforeClass
- @SneakyThrows
public static void setup() {
- if (!GlobalTracer.isRegistered()) {
- GlobalTracer.register(new MockTracer());
- }
- FieldReader fieldReader = new FieldReader(GlobalTracer.get(),
GlobalTracer.class.getDeclaredField("tracer"));
- tracer = (MockTracer) fieldReader.read();
- executeCommandMethod =
CommandExecutorTask.class.getDeclaredMethod("executeCommand",
ChannelHandlerContext.class, PacketPayload.class, BackendConnection.class);
- }
-
- @Before
- public void reset() {
- tracer.reset();
+ EXPECTED.put(Tags.COMPONENT.getKey(), JaegerConstants.COMPONENT_NAME);
+
EXPECTED.put(JaegerConstants.ShardingSphereTags.CONNECTION_COUNT.getKey(), 0);
}
@Test
public void assertMethod() {
- MockAdviceTargetObject targetObject = new MockAdviceTargetObject();
- ADVICE.beforeMethod(targetObject, executeCommandMethod, new
Object[]{}, new MethodInvocationResult());
- ADVICE.afterMethod(targetObject, executeCommandMethod, new Object[]{},
new MethodInvocationResult());
- List<MockSpan> spans = tracer.finishedSpans();
+ ADVICE.beforeMethod(getTargetObject(), null, new Object[]{}, new
MethodInvocationResult());
+ ADVICE.afterMethod(getTargetObject(), null, new Object[]{}, new
MethodInvocationResult());
+ List<MockSpan> spans = collector.finishedSpans();
assertThat(spans.size(), is(1));
assertThat(spans.get(0).logEntries().size(), is(0));
assertThat(spans.get(0).operationName(),
is("/ShardingSphere/rootInvoke/"));
+ assertThat(spans.get(0).tags(), is(EXPECTED));
}
@Test
public void assertExceptionHandle() {
- MockAdviceTargetObject targetObject = new MockAdviceTargetObject();
- ADVICE.beforeMethod(targetObject, executeCommandMethod, new
Object[]{}, new MethodInvocationResult());
- ADVICE.onThrowing(targetObject, executeCommandMethod, new Object[]{},
new IOException());
- ADVICE.afterMethod(targetObject, executeCommandMethod, new Object[]{},
new MethodInvocationResult());
- List<MockSpan> spans = tracer.finishedSpans();
+ ADVICE.beforeMethod(getTargetObject(), null, new Object[]{}, new
MethodInvocationResult());
+ ADVICE.onThrowing(getTargetObject(), null, new Object[]{}, new
IOException());
+ ADVICE.afterMethod(getTargetObject(), null, new Object[]{}, new
MethodInvocationResult());
+ List<MockSpan> spans = collector.finishedSpans();
Assert.assertEquals(1, spans.size());
MockSpan span = spans.get(0);
assertThat(span.tags().get("error"), is(true));
@@ -93,5 +79,9 @@ public final class CommandExecutorTaskAdviceTest {
assertNull(fields.get("message"));
assertThat(fields.get("error.kind"), is("java.io.IOException"));
assertThat(span.operationName(), is("/ShardingSphere/rootInvoke/"));
+ Map<Object, Object> map = Maps.newHashMap(EXPECTED);
+ map.put(JaegerConstants.ErrorLogTagKeys.EVENT_ERROR_TYPE, true);
+ assertThat(spans.get(0).tags(), is(map));
}
+
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/JDBCExecutorCallbackAdviceTest.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/JDBCExecutorCallbackAdviceTest.java
index 9680d59..6388687 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/JDBCExecutorCallbackAdviceTest.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/JDBCExecutorCallbackAdviceTest.java
@@ -17,99 +17,66 @@
package org.apache.shardingsphere.agent.plugin.tracing.jaeger.advice;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
import io.opentracing.mock.MockSpan;
-import io.opentracing.mock.MockTracer;
-import io.opentracing.util.GlobalTracer;
-import lombok.SneakyThrows;
import org.apache.shardingsphere.agent.api.result.MethodInvocationResult;
-import
org.apache.shardingsphere.agent.plugin.tracing.jaeger.constant.ErrorLogTagKeys;
-import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
-import org.apache.shardingsphere.infra.executor.sql.context.SQLUnit;
-import
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
-import
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutorCallback;
+import
org.apache.shardingsphere.agent.plugin.tracing.advice.AbstractJDBCExecutorCallbackAdviceTest;
+import
org.apache.shardingsphere.agent.plugin.tracing.jaeger.constant.JaegerConstants;
+import org.apache.shardingsphere.agent.plugin.tracing.rule.JaegerCollector;
import org.junit.Before;
-import org.junit.BeforeClass;
+import org.junit.ClassRule;
import org.junit.Test;
-import org.mockito.internal.util.reflection.FieldReader;
import java.io.IOException;
-import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-public final class JDBCExecutorCallbackAdviceTest {
+public final class JDBCExecutorCallbackAdviceTest extends
AbstractJDBCExecutorCallbackAdviceTest {
- private static final JDBCExecutorCallbackAdvice ADVICE = new
JDBCExecutorCallbackAdvice();
-
- private static MockTracer tracer;
-
- private static Method executeMethod;
+ @ClassRule
+ public static JaegerCollector collector = new JaegerCollector();
- @BeforeClass
- @SneakyThrows
- public static void setup() {
- if (!GlobalTracer.isRegistered()) {
- GlobalTracer.register(new MockTracer());
- }
- FieldReader fieldReader = new FieldReader(GlobalTracer.get(),
GlobalTracer.class.getDeclaredField("tracer"));
- tracer = (MockTracer) fieldReader.read();
- executeMethod =
JDBCExecutorCallback.class.getDeclaredMethod("execute",
JDBCExecutionUnit.class, boolean.class, Map.class);
- }
+ private static final JDBCExecutorCallbackAdvice ADVICE = new
JDBCExecutorCallbackAdvice();
@Before
- public void reset() {
- tracer.reset();
+ public void setup() {
+ getExtraMap().put(JaegerConstants.ROOT_SPAN, null);
}
@Test
public void assertMethod() {
- MockAdviceTargetObject targetObject = new MockAdviceTargetObject();
- Map<String, Object> extraMap = Maps.newHashMap();
- extraMap.put("_root_span_", null);
- JDBCExecutionUnit executionUnit = mock(JDBCExecutionUnit.class);
- when(executionUnit.getExecutionUnit()).thenReturn(new
ExecutionUnit("mock.db", new SQLUnit("select 1", Lists.newArrayList())));
- ADVICE.beforeMethod(targetObject, executeMethod, new
Object[]{executionUnit, false, extraMap}, new MethodInvocationResult());
- ADVICE.afterMethod(targetObject, executeMethod, new
Object[]{executionUnit, false, extraMap}, new MethodInvocationResult());
- List<MockSpan> spans = tracer.finishedSpans();
+ ADVICE.beforeMethod(getTargetObject(), null, new
Object[]{getExecutionUnit(), false, getExtraMap()}, new
MethodInvocationResult());
+ ADVICE.afterMethod(getTargetObject(), null, new
Object[]{getExecutionUnit(), false, getExtraMap()}, new
MethodInvocationResult());
+ List<MockSpan> spans = collector.finishedSpans();
assertThat(spans.size(), is(1));
MockSpan span = spans.get(0);
Map<String, Object> tags = span.tags();
assertThat(spans.get(0).logEntries().size(), is(0));
assertThat(span.operationName(), is("/ShardingSphere/executeSQL/"));
assertThat(tags.get("db.instance"), is("mock.db"));
- assertThat(tags.get("db.type"), is("sql"));
+ assertThat(tags.get("db.type"), is(JaegerConstants.DB_TYPE_VALUE));
assertThat(tags.get("span.kind"), is("client"));
assertThat(tags.get("db.statement"), is("select 1"));
}
@Test
public void assertExceptionHandle() {
- MockAdviceTargetObject targetObject = new MockAdviceTargetObject();
- Map<String, Object> extraMap = Maps.newHashMap();
- extraMap.put("_root_span_", null);
- JDBCExecutionUnit executionUnit = mock(JDBCExecutionUnit.class);
- when(executionUnit.getExecutionUnit()).thenReturn(new
ExecutionUnit("mock.db", new SQLUnit("select 1", Lists.newArrayList())));
- ADVICE.beforeMethod(targetObject, executeMethod, new
Object[]{executionUnit, false, extraMap}, new MethodInvocationResult());
- ADVICE.onThrowing(targetObject, executeMethod, new
Object[]{executionUnit, false, extraMap}, new IOException());
- ADVICE.afterMethod(targetObject, executeMethod, new
Object[]{executionUnit, false, extraMap}, new MethodInvocationResult());
- List<MockSpan> spans = tracer.finishedSpans();
+ ADVICE.beforeMethod(getTargetObject(), null, new
Object[]{getExecutionUnit(), false, getExtraMap()}, new
MethodInvocationResult());
+ ADVICE.onThrowing(getTargetObject(), null, new
Object[]{getExecutionUnit(), false, getExtraMap()}, new IOException());
+ ADVICE.afterMethod(getTargetObject(), null, new
Object[]{getExecutionUnit(), false, getExtraMap()}, new
MethodInvocationResult());
+ List<MockSpan> spans = collector.finishedSpans();
assertThat(spans.size(), is(1));
MockSpan span = spans.get(0);
List<MockSpan.LogEntry> entries = span.logEntries();
Map<String, ?> fields = entries.get(0).fields();
- assertThat(fields.get(ErrorLogTagKeys.EVENT), is("error"));
- assertThat(fields.get(ErrorLogTagKeys.ERROR_KIND),
is("java.io.IOException"));
+ assertThat(fields.get(JaegerConstants.ErrorLogTagKeys.EVENT),
is("error"));
+ assertThat(fields.get(JaegerConstants.ErrorLogTagKeys.ERROR_KIND),
is("java.io.IOException"));
Map<String, Object> tags = span.tags();
assertThat(span.operationName(), is("/ShardingSphere/executeSQL/"));
assertThat(tags.get("db.instance"), is("mock.db"));
- assertThat(tags.get("db.type"), is("sql"));
+ assertThat(tags.get("db.type"), is(JaegerConstants.DB_TYPE_VALUE));
assertThat(tags.get("span.kind"), is("client"));
assertThat(tags.get("db.statement"), is("select 1"));
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/SQLParserEngineAdviceTest.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/SQLParserEngineAdviceTest.java
index 7472e5b..885f209 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/SQLParserEngineAdviceTest.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/SQLParserEngineAdviceTest.java
@@ -18,53 +18,32 @@
package org.apache.shardingsphere.agent.plugin.tracing.jaeger.advice;
import io.opentracing.mock.MockSpan;
-import io.opentracing.mock.MockTracer;
-import io.opentracing.util.GlobalTracer;
import org.apache.shardingsphere.agent.api.result.MethodInvocationResult;
-import
org.apache.shardingsphere.agent.plugin.tracing.jaeger.constant.ErrorLogTagKeys;
-import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
-import org.junit.Before;
-import org.junit.BeforeClass;
+import
org.apache.shardingsphere.agent.plugin.tracing.advice.AbstractSQLParserEngineAdviceTest;
+import
org.apache.shardingsphere.agent.plugin.tracing.jaeger.constant.JaegerConstants;
+import org.apache.shardingsphere.agent.plugin.tracing.rule.JaegerCollector;
+import org.junit.ClassRule;
import org.junit.Test;
-import org.mockito.internal.util.reflection.FieldReader;
import java.io.IOException;
-import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
-public final class SQLParserEngineAdviceTest {
+public final class SQLParserEngineAdviceTest extends
AbstractSQLParserEngineAdviceTest {
- private static final SQLParserEngineAdvice ADVICE = new
SQLParserEngineAdvice();
-
- private static MockTracer tracer;
+ @ClassRule
+ public static JaegerCollector collector = new JaegerCollector();
- private static Method parserMethod;
-
- @BeforeClass
- public static void setup() throws NoSuchMethodException,
NoSuchFieldException {
- if (!GlobalTracer.isRegistered()) {
- GlobalTracer.register(new MockTracer());
- }
- FieldReader fieldReader = new FieldReader(GlobalTracer.get(),
GlobalTracer.class.getDeclaredField("tracer"));
- tracer = (MockTracer) fieldReader.read();
- parserMethod =
ShardingSphereSQLParserEngine.class.getDeclaredMethod("parse", String.class,
boolean.class);
- }
-
- @Before
- public void reset() {
- tracer.reset();
- }
+ private static final SQLParserEngineAdvice ADVICE = new
SQLParserEngineAdvice();
@Test
public void assertMethod() {
- MockAdviceTargetObject targetObject = new MockAdviceTargetObject();
- ADVICE.beforeMethod(targetObject, parserMethod, new Object[]{"select
1"}, new MethodInvocationResult());
- ADVICE.afterMethod(targetObject, parserMethod, new Object[]{}, new
MethodInvocationResult());
- List<MockSpan> spans = tracer.finishedSpans();
+ ADVICE.beforeMethod(getTargetObject(), null, new Object[]{"select 1"},
new MethodInvocationResult());
+ ADVICE.afterMethod(getTargetObject(), null, new Object[]{}, new
MethodInvocationResult());
+ List<MockSpan> spans = collector.finishedSpans();
assertThat(spans.size(), is(1));
assertThat(spans.get(0).logEntries().size(), is(0));
assertThat(spans.get(0).operationName(),
is("/ShardingSphere/parseSQL/"));
@@ -72,19 +51,18 @@ public final class SQLParserEngineAdviceTest {
@Test
public void assertExceptionHandle() {
- MockAdviceTargetObject targetObject = new MockAdviceTargetObject();
- ADVICE.beforeMethod(targetObject, parserMethod, new Object[]{"select
1"}, new MethodInvocationResult());
- ADVICE.onThrowing(targetObject, parserMethod, new Object[]{}, new
IOException());
- ADVICE.afterMethod(targetObject, parserMethod, new Object[]{}, new
MethodInvocationResult());
- List<MockSpan> spans = tracer.finishedSpans();
+ ADVICE.beforeMethod(getTargetObject(), null, new Object[]{"select 1"},
new MethodInvocationResult());
+ ADVICE.onThrowing(getTargetObject(), null, new Object[]{}, new
IOException());
+ ADVICE.afterMethod(getTargetObject(), null, new Object[]{}, new
MethodInvocationResult());
+ List<MockSpan> spans = collector.finishedSpans();
assertThat(spans.size(), is(1));
MockSpan span = spans.get(0);
assertThat(span.tags().get("error"), is(true));
List<MockSpan.LogEntry> entries = span.logEntries();
assertThat(entries.size(), is(1));
Map<String, ?> fields = entries.get(0).fields();
- assertThat(fields.get(ErrorLogTagKeys.EVENT), is("error"));
- assertThat(fields.get(ErrorLogTagKeys.ERROR_KIND),
is("java.io.IOException"));
+ assertThat(fields.get(JaegerConstants.ErrorLogTagKeys.EVENT),
is("error"));
+ assertThat(fields.get(JaegerConstants.ErrorLogTagKeys.ERROR_KIND),
is("java.io.IOException"));
assertThat(span.operationName(), is("/ShardingSphere/parseSQL/"));
}
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-opentracing/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/CommandExecutorTaskAdvice.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-opentracing/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/CommandExecutorTaskAdvice.java
index 6fc0f41..0397d75 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-opentracing/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/CommandExecutorTaskAdvice.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-opentracing/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/CommandExecutorTaskAdvice.java
@@ -36,7 +36,7 @@ public final class CommandExecutorTaskAdvice implements
InstanceMethodAroundAdvi
private static final String OPERATION_NAME = "/ShardingSphere/rootInvoke/";
- private static final String ROOT_SPAN = "_root_span_";
+ private static final String ROOT_SPAN = "ot_root_span_";
@Override
public void beforeMethod(final AdviceTargetObject target, final Method
method, final Object[] args, final MethodInvocationResult result) {
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-opentracing/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/JDBCExecutorCallbackAdvice.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-opentracing/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/JDBCExecutorCallbackAdvice.java
index 1592ec8..492a8a0 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-opentracing/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/JDBCExecutorCallbackAdvice.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-opentracing/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/JDBCExecutorCallbackAdvice.java
@@ -41,7 +41,7 @@ public final class JDBCExecutorCallbackAdvice implements
InstanceMethodAroundAdv
@Override
public void beforeMethod(final AdviceTargetObject target, final Method
method, final Object[] args, final MethodInvocationResult result) {
- Span root = (Span) ((Map<String, Object>) args[2]).get("_root_span_");
+ Span root = (Span) ((Map<String, Object>)
args[2]).get("ot_root_span_");
Tracer.SpanBuilder builder =
GlobalTracer.get().buildSpan(OPERATION_NAME);
if ((boolean) args[1]) {
builder.asChildOf(root);
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/pom.xml
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/pom.xml
similarity index 70%
copy from
shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/pom.xml
copy to
shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/pom.xml
index 0fab780..628d4bc 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/pom.xml
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/pom.xml
@@ -25,42 +25,49 @@
<artifactId>shardingsphere-agent-plugin-tracing</artifactId>
<version>5.0.0-RC1-SNAPSHOT</version>
</parent>
- <artifactId>shardingsphere-agent-tracing-jaeger</artifactId>
+ <artifactId>shardingsphere-agent-tracing-test</artifactId>
<name>${project.artifactId}</name>
-
- <properties>
- <jaeger-client.version>0.31.0</jaeger-client.version>
- <opentracing.version>0.31.0</opentracing.version>
- </properties>
-
+
<dependencies>
<dependency>
- <groupId>io.jaegertracing</groupId>
- <artifactId>jaeger-client</artifactId>
- <version>${jaeger-client.version}</version>
+ <groupId>org.apache.shardingsphere</groupId>
+ <artifactId>shardingsphere-proxy-frontend-core</artifactId>
</dependency>
<dependency>
- <groupId>io.opentracing</groupId>
- <artifactId>opentracing-api</artifactId>
- <version>${opentracing.version}</version>
+ <groupId>io.zipkin.brave</groupId>
+ <artifactId>brave</artifactId>
+ <version>${zipkin-brave.version}</version>
+ <scope>provided</scope>
</dependency>
<dependency>
- <groupId>io.opentracing</groupId>
- <artifactId>opentracing-util</artifactId>
- <version>${opentracing.version}</version>
+ <groupId>net.bytebuddy</groupId>
+ <artifactId>byte-buddy-agent</artifactId>
+ <version>${bytebuddy.version}</version>
+ <scope>compile</scope>
</dependency>
-
<dependency>
- <groupId>org.apache.shardingsphere</groupId>
- <artifactId>shardingsphere-proxy-frontend-core</artifactId>
- <version>${project.version}</version>
- <scope>provided</scope>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>${junit.version}</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <version>${mockito.version}</version>
+ <scope>compile</scope>
</dependency>
<dependency>
<groupId>io.opentracing</groupId>
<artifactId>opentracing-mock</artifactId>
<version>${opentracing.version}</version>
- <scope>test</scope>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>io.opentracing</groupId>
+ <artifactId>opentracing-util</artifactId>
+ <version>${opentracing.version}</version>
+ <scope>provided</scope>
</dependency>
</dependencies>
</project>
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/AgentRunner.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/AgentRunner.java
new file mode 100644
index 0000000..405fa5c
--- /dev/null
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/AgentRunner.java
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.agent.plugin.tracing;
+
+import com.google.common.collect.Sets;
+import lombok.extern.slf4j.Slf4j;
+import net.bytebuddy.ByteBuddy;
+import net.bytebuddy.agent.ByteBuddyAgent;
+import net.bytebuddy.agent.builder.AgentBuilder;
+import net.bytebuddy.agent.builder.ResettableClassFileTransformer;
+import net.bytebuddy.dynamic.scaffold.TypeValidation;
+import net.bytebuddy.implementation.FieldAccessor;
+import net.bytebuddy.jar.asm.Opcodes;
+import net.bytebuddy.matcher.ElementMatchers;
+import org.apache.shardingsphere.agent.api.advice.AdviceTargetObject;
+import org.apache.shardingsphere.agent.plugin.tracing.advice.AdviceTestBase;
+import org.apache.shardingsphere.agent.plugin.tracing.rule.CollectorRule;
+import org.junit.rules.TestRule;
+import org.junit.runners.BlockJUnit4ClassRunner;
+import org.junit.runners.model.FrameworkMethod;
+import org.junit.runners.model.InitializationError;
+import org.junit.runners.model.Statement;
+
+import java.util.List;
+import java.util.Set;
+
+@Slf4j
+public final class AgentRunner extends BlockJUnit4ClassRunner {
+
+ private static final String EXTRA_DATA = "_$EXTRA_DATA$_";
+
+ private static ResettableClassFileTransformer byteBuddyAgent;
+
+ private static final String[] ENHANCEMENT_CLASSES = new String[]{
+ "org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask",
+
"org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutorCallback",
+ "org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine",
+ };
+
+ private CollectorRule collectorRule;
+
+ public AgentRunner(final Class<?> testClass) throws InitializationError {
+ super(testClass);
+ }
+
+ @Override
+ protected Statement withBeforeClasses(final Statement statement) {
+ ByteBuddyAgent.install();
+ final Set<String> classes = Sets.newHashSet(ENHANCEMENT_CLASSES);
+ byteBuddyAgent = new AgentBuilder.Default()
+ .with(new ByteBuddy().with(TypeValidation.ENABLED))
+ .type(ElementMatchers.namedOneOf(ENHANCEMENT_CLASSES))
+ .transform((builder, typeDescription, classLoader, module) -> {
+ if (classes.contains(typeDescription.getTypeName())) {
+ return builder.defineField(EXTRA_DATA, Object.class,
Opcodes.ACC_PRIVATE | Opcodes.ACC_VOLATILE)
+ .implement(AdviceTargetObject.class)
+ .intercept(FieldAccessor.ofField(EXTRA_DATA));
+ }
+ return builder;
+ }).installOnByteBuddyAgent();
+ // load them into current classloader
+ classes.forEach(className -> {
+ try {
+ Class<?> klass = Class.forName(className);
+ log.info("It is successful to enhance the {}", klass);
+ } catch (ClassNotFoundException ignore) {
+ }
+ });
+ return super.withBeforeClasses(statement);
+ }
+
+ @Override
+ protected List<TestRule> classRules() {
+ List<TestRule> testRules = super.classRules();
+ collectorRule = testRules.stream()
+ .filter(rule -> rule instanceof CollectorRule)
+ .findFirst()
+ .map(rule -> (CollectorRule) rule)
+ .orElse(() -> {
+ });
+ return testRules;
+ }
+
+ @Override
+ protected Statement withBefores(final FrameworkMethod method, final Object
target, final Statement statement) {
+ if (target instanceof AdviceTestBase) {
+ ((AdviceTestBase) target).prepare();
+ }
+ return super.withBefores(method, target, statement);
+ }
+
+ @Override
+ protected Statement withAfters(final FrameworkMethod method, final Object
target, final Statement statement) {
+ return super.withAfters(method, target, new Statement() {
+ @Override
+ public void evaluate() throws Throwable {
+ try {
+ statement.evaluate();
+ } finally {
+ collectorRule.cleanup();
+ }
+ }
+ });
+ }
+
+ @Override
+ protected Statement withAfterClasses(final Statement statement) {
+ byteBuddyAgent.reset(ByteBuddyAgent.getInstrumentation(),
AgentBuilder.RedefinitionStrategy.RETRANSFORMATION);
+ return super.withAfterClasses(statement);
+ }
+}
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/MockDataSourceMetaData.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/MockDataSourceMetaData.java
similarity index 94%
rename from
shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/MockDataSourceMetaData.java
rename to
shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/MockDataSourceMetaData.java
index 976ee40..eecb7b3 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/MockDataSourceMetaData.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/MockDataSourceMetaData.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.plugin.tracing.zipkin.advice;
+package org.apache.shardingsphere.agent.plugin.tracing;
import org.apache.shardingsphere.infra.database.metadata.DataSourceMetaData;
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/MockAdviceTargetObject.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/advice/AbstractCommandExecutorTaskAdviceTest.java
similarity index 52%
copy from
shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/MockAdviceTargetObject.java
copy to
shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/advice/AbstractCommandExecutorTaskAdviceTest.java
index cd0e559..a2c32e6 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/MockAdviceTargetObject.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/advice/AbstractCommandExecutorTaskAdviceTest.java
@@ -15,21 +15,26 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.plugin.tracing.jaeger.advice;
+package org.apache.shardingsphere.agent.plugin.tracing.advice;
+import lombok.Getter;
import org.apache.shardingsphere.agent.api.advice.AdviceTargetObject;
+import org.apache.shardingsphere.agent.plugin.tracing.AgentRunner;
+import
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
+import org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask;
+import org.apache.shardingsphere.transaction.core.TransactionType;
+import org.junit.runner.RunWith;
-public final class MockAdviceTargetObject implements AdviceTargetObject {
+@RunWith(AgentRunner.class)
+public abstract class AbstractCommandExecutorTaskAdviceTest implements
AdviceTestBase {
- private Object object;
+ @Getter
+ private AdviceTargetObject targetObject;
@Override
- public Object getAttachment() {
- return object;
- }
-
- @Override
- public void setAttachment(final Object attachment) {
- this.object = attachment;
+ @SuppressWarnings("all")
+ public void prepare() {
+ Object executorTask = new CommandExecutorTask(null, new
BackendConnection(TransactionType.BASE), null, null);
+ targetObject = (AdviceTargetObject) executorTask;
}
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/advice/AbstractJDBCExecutorCallbackAdviceTest.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/advice/AbstractJDBCExecutorCallbackAdviceTest.java
new file mode 100644
index 0000000..595db4b
--- /dev/null
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/advice/AbstractJDBCExecutorCallbackAdviceTest.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.agent.plugin.tracing.advice;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import lombok.Getter;
+import lombok.SneakyThrows;
+import org.apache.shardingsphere.agent.api.advice.AdviceTargetObject;
+import org.apache.shardingsphere.agent.plugin.tracing.AgentRunner;
+import org.apache.shardingsphere.agent.plugin.tracing.MockDataSourceMetaData;
+import org.apache.shardingsphere.infra.database.metadata.DataSourceMetaData;
+import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
+import org.apache.shardingsphere.infra.executor.sql.context.SQLUnit;
+import
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
+import
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutorCallback;
+import org.junit.runner.RunWith;
+import org.mockito.internal.util.reflection.FieldReader;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.Statement;
+import java.util.Map;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+@RunWith(AgentRunner.class)
+public abstract class AbstractJDBCExecutorCallbackAdviceTest implements
AdviceTestBase {
+
+ @Getter
+ private AdviceTargetObject targetObject;
+
+ private Object attachment;
+
+ @Getter
+ private JDBCExecutionUnit executionUnit;
+
+ @Getter
+ private Map<String, Object> extraMap;
+
+ @SneakyThrows
+ @SuppressWarnings("all")
+ @Override
+ public void prepare() {
+ extraMap = Maps.newHashMap();
+ Statement statement = mock(Statement.class);
+ Connection connection = mock(Connection.class);
+ DatabaseMetaData metaData = mock(DatabaseMetaData.class);
+ when(metaData.getURL()).thenReturn("mock_url");
+ when(connection.getMetaData()).thenReturn(metaData);
+ when(statement.getConnection()).thenReturn(connection);
+ executionUnit = new JDBCExecutionUnit(new ExecutionUnit("mock.db", new
SQLUnit("select 1", Lists.newArrayList())), null, statement);
+ JDBCExecutorCallback mock = mock(JDBCExecutorCallback.class,
invocation -> {
+ switch (invocation.getMethod().getName()) {
+ case "getAttachment":
+ return attachment;
+ case "setAttachment":
+ attachment = invocation.getArguments()[0];
+ return null;
+ default:
+ return invocation.callRealMethod();
+ }
+ });
+ Map<String, DataSourceMetaData> map = (Map<String,
DataSourceMetaData>) new FieldReader(mock,
JDBCExecutorCallback.class.getDeclaredField("CACHED_DATASOURCE_METADATA")).read();
+ map.put("mock_url", new MockDataSourceMetaData());
+ targetObject = (AdviceTargetObject) mock;
+ }
+}
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/advice/AbstractSQLParserEngineAdviceTest.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/advice/AbstractSQLParserEngineAdviceTest.java
new file mode 100644
index 0000000..b42c93c
--- /dev/null
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/advice/AbstractSQLParserEngineAdviceTest.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.agent.plugin.tracing.advice;
+
+import lombok.Getter;
+import org.apache.shardingsphere.agent.api.advice.AdviceTargetObject;
+import org.apache.shardingsphere.agent.plugin.tracing.AgentRunner;
+import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
+import org.junit.runner.RunWith;
+
+import static org.mockito.Mockito.mock;
+
+@RunWith(AgentRunner.class)
+public abstract class AbstractSQLParserEngineAdviceTest implements
AdviceTestBase {
+
+ @Getter
+ private AdviceTargetObject targetObject;
+
+ private Object attachment;
+
+ @SuppressWarnings("all")
+ @Override
+ public void prepare() {
+ Object parserEngine = mock(ShardingSphereSQLParserEngine.class,
invocation -> {
+ switch (invocation.getMethod().getName()) {
+ case "getAttachment":
+ return attachment;
+ case "setAttachment":
+ attachment = invocation.getArguments()[0];
+ return null;
+ default:
+ return invocation.callRealMethod();
+ }
+ });
+ targetObject = (AdviceTargetObject) parserEngine;
+ }
+}
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/MockAdviceTargetObject.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/advice/AdviceTestBase.java
similarity index 65%
rename from
shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/MockAdviceTargetObject.java
rename to
shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/advice/AdviceTestBase.java
index cd0e559..c1fd50e 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/MockAdviceTargetObject.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/advice/AdviceTestBase.java
@@ -15,21 +15,13 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.plugin.tracing.jaeger.advice;
+package org.apache.shardingsphere.agent.plugin.tracing.advice;
-import org.apache.shardingsphere.agent.api.advice.AdviceTargetObject;
-
-public final class MockAdviceTargetObject implements AdviceTargetObject {
-
- private Object object;
+public interface AdviceTestBase {
- @Override
- public Object getAttachment() {
- return object;
- }
+ /**
+ * Prepare env for testing.
+ */
+ void prepare();
- @Override
- public void setAttachment(final Object attachment) {
- this.object = attachment;
- }
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/constant/ErrorLogTagKeys.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/rule/CollectorRule.java
similarity index 63%
rename from
shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/constant/ErrorLogTagKeys.java
rename to
shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/rule/CollectorRule.java
index 78da346..3fda4b3 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/constant/ErrorLogTagKeys.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/rule/CollectorRule.java
@@ -15,22 +15,13 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.plugin.tracing.jaeger.constant;
+package org.apache.shardingsphere.agent.plugin.tracing.rule;
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-
-/**
- * Error log tag keys.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class ErrorLogTagKeys {
-
- public static final String EVENT = "event";
-
- public static final String EVENT_ERROR_TYPE = "error";
+public interface CollectorRule {
- public static final String ERROR_KIND = "error.kind";
+ /**
+ * Clean up the collector.
+ */
+ void cleanup();
- public static final String MESSAGE = "message";
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/rule/JaegerCollector.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/rule/JaegerCollector.java
new file mode 100644
index 0000000..962d20b
--- /dev/null
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/rule/JaegerCollector.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.agent.plugin.tracing.rule;
+
+import io.opentracing.mock.MockSpan;
+import io.opentracing.mock.MockTracer;
+import io.opentracing.util.GlobalTracer;
+import lombok.SneakyThrows;
+import org.junit.rules.ExternalResource;
+import org.mockito.internal.util.reflection.FieldReader;
+
+import java.util.List;
+
+public class JaegerCollector extends ExternalResource implements CollectorRule
{
+ private MockTracer tracer;
+
+ @Override
+ @SneakyThrows
+ protected void before() {
+ if (!GlobalTracer.isRegistered()) {
+ GlobalTracer.register(new MockTracer());
+ }
+ FieldReader fieldReader = new FieldReader(GlobalTracer.get(),
GlobalTracer.class.getDeclaredField("tracer"));
+ tracer = (MockTracer) fieldReader.read();
+ }
+
+ /**
+ * Get all spans.
+ * @return all spans.
+ */
+ public List<MockSpan> finishedSpans() {
+ return tracer.finishedSpans();
+ }
+
+ @Override
+ public void cleanup() {
+ tracer.reset();
+ }
+
+ @Override
+ @SneakyThrows
+ protected void after() {
+ super.after();
+ }
+}
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/rule/ZipkinCollector.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/rule/ZipkinCollector.java
new file mode 100644
index 0000000..e060308
--- /dev/null
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/rule/ZipkinCollector.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.agent.plugin.tracing.rule;
+
+import brave.Tracing;
+import brave.propagation.StrictCurrentTraceContext;
+import lombok.SneakyThrows;
+import org.junit.rules.ExternalResource;
+import zipkin2.Span;
+
+import java.util.concurrent.ConcurrentLinkedDeque;
+
+public class ZipkinCollector extends ExternalResource implements CollectorRule
{
+
+ private static final ConcurrentLinkedDeque<Span> SPANS = new
ConcurrentLinkedDeque<>();
+
+ @Override
+ @SneakyThrows
+ protected void before() {
+ Tracing.newBuilder()
+ .currentTraceContext(StrictCurrentTraceContext.create())
+ .spanReporter(SPANS::add)
+ .build();
+ }
+
+ @Override
+ @SneakyThrows
+ protected void after() {
+ Tracing.current().close();
+ }
+
+ /**
+ * Get the first Span.
+ *
+ * @return span
+ */
+ public Span pop() {
+ return SPANS.pollFirst();
+ }
+
+ @Override
+ public void cleanup() {
+ SPANS.clear();
+ }
+}
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/pom.xml
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/pom.xml
index 7c47eef..f6bd42b 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/pom.xml
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/pom.xml
@@ -28,11 +28,6 @@
<artifactId>shardingsphere-agent-tracing-zipkin</artifactId>
<name>${project.artifactId}</name>
- <properties>
- <zipkin-reporter.version>2.16.2</zipkin-reporter.version>
- <zipkin-brave.version>5.13.2</zipkin-brave.version>
- </properties>
-
<dependencies>
<dependency>
<groupId>io.zipkin.brave</groupId>
@@ -59,5 +54,9 @@
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-proxy-frontend-core</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.shardingsphere</groupId>
+ <artifactId>shardingsphere-agent-tracing-test</artifactId>
+ </dependency>
</dependencies>
</project>
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/CommandExecutorTaskAdvice.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/CommandExecutorTaskAdvice.java
index c6e393d..940432c 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/CommandExecutorTaskAdvice.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/CommandExecutorTaskAdvice.java
@@ -54,7 +54,7 @@ public final class CommandExecutorTaskAdvice implements
InstanceMethodAroundAdvi
BackendConnection connection = (BackendConnection) field.get(target);
Span span = (Span)
ExecutorDataMap.getValue().remove(ZipkinConstants.ROOT_SPAN);
span.tag(ZipkinConstants.Tags.CONNECTION_COUNT,
String.valueOf(connection.getConnectionSize()));
- span.flush();
+ span.finish();
}
@Override
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/SQLParserEngineAdvice.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/SQLParserEngineAdvice.java
index 2e96a71..9079e6d 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/SQLParserEngineAdvice.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/SQLParserEngineAdvice.java
@@ -41,6 +41,7 @@ public final class SQLParserEngineAdvice implements
InstanceMethodAroundAdvice {
Span span =
Tracing.currentTracer().newChild(parentContext).name(OPERATION_NAME);
span.tag(ZipkinConstants.Tags.COMPONENT,
ZipkinConstants.COMPONENT_NAME);
span.tag(ZipkinConstants.Tags.DB_TYPE, ZipkinConstants.DB_TYPE_VALUE);
+ span.tag(ZipkinConstants.Tags.DB_STATEMENT, String.valueOf(args[0]));
span.start();
target.setAttachment(span);
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/constant/ZipkinConstants.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/constant/ZipkinConstants.java
index 02563ec..81443d7 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/constant/ZipkinConstants.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/constant/ZipkinConstants.java
@@ -28,7 +28,7 @@ public final class ZipkinConstants {
public static final String COMPONENT_NAME = "shardingsphere";
- public static final String ROOT_SPAN = "_root_span_";
+ public static final String ROOT_SPAN = "zipkin_root_span";
public static final String DB_TYPE_VALUE = "shardingsphere-proxy";
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/AdviceBaseTest.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/AdviceBaseTest.java
deleted file mode 100644
index 03ef4d6..0000000
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/AdviceBaseTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.agent.plugin.tracing.zipkin.advice;
-
-import brave.Tracing;
-import brave.propagation.StrictCurrentTraceContext;
-import net.bytebuddy.ByteBuddy;
-import net.bytebuddy.agent.ByteBuddyAgent;
-import net.bytebuddy.agent.builder.AgentBuilder;
-import net.bytebuddy.dynamic.scaffold.TypeValidation;
-import net.bytebuddy.implementation.FieldAccessor;
-import net.bytebuddy.jar.asm.Opcodes;
-import net.bytebuddy.matcher.ElementMatchers;
-import org.apache.shardingsphere.agent.api.advice.AdviceTargetObject;
-import zipkin2.Span;
-
-import java.util.concurrent.ConcurrentLinkedDeque;
-
-public abstract class AdviceBaseTest {
-
- public static final ConcurrentLinkedDeque<Span> SPANS = new
ConcurrentLinkedDeque<>();
-
- private static final String EXTRA_DATA = "_$EXTRA_DATA$_";
-
- /**
- * Prepare env for testing.
- * @param klass class
- */
- public static void prepare(final String klass) {
- ByteBuddyAgent.install();
- new AgentBuilder.Default().with(new
ByteBuddy().with(TypeValidation.ENABLED))
- .with(new ByteBuddy())
- .type(ElementMatchers.named(klass))
- .transform((builder, typeDescription, classLoader, module) -> {
- if (klass.equals(typeDescription.getTypeName())) {
- return builder.defineField(EXTRA_DATA, Object.class,
Opcodes.ACC_PRIVATE | Opcodes.ACC_VOLATILE)
- .implement(AdviceTargetObject.class)
- .intercept(FieldAccessor.ofField(EXTRA_DATA));
- }
- return builder;
- }).installOnByteBuddyAgent();
- Tracing.newBuilder()
- .currentTraceContext(StrictCurrentTraceContext.create())
- .spanReporter(SPANS::add)
- .build();
- }
-}
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/CommandExecutorTaskAdviceTest.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/CommandExecutorTaskAdviceTest.java
index 18acf87..920a081 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/CommandExecutorTaskAdviceTest.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/CommandExecutorTaskAdviceTest.java
@@ -17,57 +17,39 @@
package org.apache.shardingsphere.agent.plugin.tracing.zipkin.advice;
-import io.netty.channel.ChannelHandlerContext;
-import lombok.SneakyThrows;
-import org.apache.shardingsphere.agent.api.advice.AdviceTargetObject;
import org.apache.shardingsphere.agent.api.result.MethodInvocationResult;
+import
org.apache.shardingsphere.agent.plugin.tracing.advice.AbstractCommandExecutorTaskAdviceTest;
+import org.apache.shardingsphere.agent.plugin.tracing.rule.ZipkinCollector;
import
org.apache.shardingsphere.agent.plugin.tracing.zipkin.constant.ZipkinConstants;
-import org.apache.shardingsphere.db.protocol.payload.PacketPayload;
-import
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
-import org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask;
-import org.apache.shardingsphere.transaction.core.TransactionType;
-import org.junit.After;
import org.junit.Before;
-import org.junit.BeforeClass;
+import org.junit.ClassRule;
import org.junit.Test;
import zipkin2.Span;
import java.io.IOException;
-import java.lang.reflect.Method;
import java.util.Map;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
-public final class CommandExecutorTaskAdviceTest extends AdviceBaseTest {
+public final class CommandExecutorTaskAdviceTest extends
AbstractCommandExecutorTaskAdviceTest {
- private static Method executeCommandMethod;
+ @ClassRule
+ public static ZipkinCollector collector = new ZipkinCollector();
private CommandExecutorTaskAdvice advice;
- private AdviceTargetObject targetObject;
-
- @BeforeClass
- public static void setup() throws NoSuchMethodException {
-
prepare("org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask");
- executeCommandMethod =
CommandExecutorTask.class.getDeclaredMethod("executeCommand",
ChannelHandlerContext.class, PacketPayload.class, BackendConnection.class);
- }
-
@Before
- @SneakyThrows
- @SuppressWarnings("all")
- public void before() {
+ public void setup() {
advice = new CommandExecutorTaskAdvice();
- Object executorTask = new CommandExecutorTask(null, new
BackendConnection(TransactionType.BASE), null, null);
- targetObject = (AdviceTargetObject) executorTask;
}
@Test
public void testMethod() {
- advice.beforeMethod(targetObject, executeCommandMethod, new
Object[]{}, new MethodInvocationResult());
- advice.afterMethod(targetObject, executeCommandMethod, new Object[]{},
new MethodInvocationResult());
- Span span = SPANS.poll();
+ advice.beforeMethod(getTargetObject(), null, new Object[]{}, new
MethodInvocationResult());
+ advice.afterMethod(getTargetObject(), null, new Object[]{}, new
MethodInvocationResult());
+ Span span = collector.pop();
assertNotNull(span);
Map<String, String> tags = span.tags();
assertThat(tags.get(ZipkinConstants.Tags.DB_TYPE),
is(ZipkinConstants.DB_TYPE_VALUE));
@@ -78,10 +60,10 @@ public final class CommandExecutorTaskAdviceTest extends
AdviceBaseTest {
@Test
public void testExceptionHandle() {
- advice.beforeMethod(targetObject, executeCommandMethod, new
Object[]{}, new MethodInvocationResult());
- advice.onThrowing(targetObject, executeCommandMethod, new Object[]{},
new IOException());
- advice.afterMethod(targetObject, executeCommandMethod, new Object[]{},
new MethodInvocationResult());
- Span span = SPANS.poll();
+ advice.beforeMethod(getTargetObject(), null, new Object[]{}, new
MethodInvocationResult());
+ advice.onThrowing(getTargetObject(), null, new Object[]{}, new
IOException());
+ advice.afterMethod(getTargetObject(), null, new Object[]{}, new
MethodInvocationResult());
+ Span span = collector.pop();
assertNotNull(span);
Map<String, String> tags = span.tags();
assertThat(tags.get("error"), is("IOException"));
@@ -91,8 +73,4 @@ public final class CommandExecutorTaskAdviceTest extends
AdviceBaseTest {
assertThat(span.name(),
is("/ShardingSphere/rootInvoke/".toLowerCase()));
}
- @After
- public void cleanup() {
- SPANS.clear();
- }
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/JDBCExecutorCallbackAdviceTest.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/JDBCExecutorCallbackAdviceTest.java
index 591ec3f..fe11221 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/JDBCExecutorCallbackAdviceTest.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/JDBCExecutorCallbackAdviceTest.java
@@ -17,94 +17,41 @@
package org.apache.shardingsphere.agent.plugin.tracing.zipkin.advice;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import lombok.SneakyThrows;
-import org.apache.shardingsphere.agent.api.advice.AdviceTargetObject;
import org.apache.shardingsphere.agent.api.result.MethodInvocationResult;
+import
org.apache.shardingsphere.agent.plugin.tracing.advice.AbstractJDBCExecutorCallbackAdviceTest;
+import org.apache.shardingsphere.agent.plugin.tracing.rule.ZipkinCollector;
import
org.apache.shardingsphere.agent.plugin.tracing.zipkin.constant.ZipkinConstants;
-import org.apache.shardingsphere.infra.database.metadata.DataSourceMetaData;
-import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
-import org.apache.shardingsphere.infra.executor.sql.context.SQLUnit;
-import
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
-import
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutorCallback;
-import org.junit.After;
import org.junit.Before;
-import org.junit.BeforeClass;
+import org.junit.ClassRule;
import org.junit.Test;
-import org.mockito.internal.util.reflection.FieldReader;
import zipkin2.Span;
import java.io.IOException;
-import java.lang.reflect.Method;
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.Statement;
import java.util.Map;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-public final class JDBCExecutorCallbackAdviceTest extends AdviceBaseTest {
+public final class JDBCExecutorCallbackAdviceTest extends
AbstractJDBCExecutorCallbackAdviceTest {
- private static Method executeMethod;
+ @ClassRule
+ public static ZipkinCollector collector = new ZipkinCollector();
private JDBCExecutorCallbackAdvice advice;
- private AdviceTargetObject targetObject;
-
- private Object attachment;
-
- private JDBCExecutionUnit executionUnit;
-
- private Map<String, Object> extraMap;
-
- @BeforeClass
- @SneakyThrows
- public static void setup() {
-
prepare("org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutorCallback");
- executeMethod =
JDBCExecutorCallback.class.getDeclaredMethod("execute",
JDBCExecutionUnit.class, boolean.class, Map.class);
- }
-
@Before
- @SneakyThrows
- @SuppressWarnings("all")
- public void before() {
- extraMap = Maps.newHashMap();
- extraMap.put(ZipkinConstants.ROOT_SPAN, null);
- Statement statement = mock(Statement.class);
- Connection connection = mock(Connection.class);
- DatabaseMetaData metaData = mock(DatabaseMetaData.class);
- when(metaData.getURL()).thenReturn("mock_url");
- when(connection.getMetaData()).thenReturn(metaData);
- when(statement.getConnection()).thenReturn(connection);
- executionUnit = new JDBCExecutionUnit(new ExecutionUnit("mock.db", new
SQLUnit("select 1", Lists.newArrayList())), null, statement);
- JDBCExecutorCallback mock = mock(JDBCExecutorCallback.class,
invocation -> {
- switch (invocation.getMethod().getName()) {
- case "getAttachment":
- return attachment;
- case "setAttachment":
- attachment = invocation.getArguments()[0];
- return null;
- default:
- return invocation.callRealMethod();
- }
- });
- Map<String, DataSourceMetaData> map = (Map<String,
DataSourceMetaData>) new FieldReader(mock,
JDBCExecutorCallback.class.getDeclaredField("CACHED_DATASOURCE_METADATA")).read();
- map.put("mock_url", new MockDataSourceMetaData());
- targetObject = (AdviceTargetObject) mock;
+ public void setup() {
+ getExtraMap().put(ZipkinConstants.ROOT_SPAN, null);
advice = new JDBCExecutorCallbackAdvice();
}
@Test
public void testMethod() {
- advice.beforeMethod(targetObject, executeMethod, new
Object[]{executionUnit, false, extraMap}, new MethodInvocationResult());
- advice.afterMethod(targetObject, executeMethod, new
Object[]{executionUnit, false, extraMap}, new MethodInvocationResult());
- Span span = SPANS.pollFirst();
+ advice.beforeMethod(getTargetObject(), null, new
Object[]{getExecutionUnit(), false, getExtraMap()}, new
MethodInvocationResult());
+ advice.afterMethod(getTargetObject(), null, new
Object[]{getExecutionUnit(), false, getExtraMap()}, new
MethodInvocationResult());
+ Span span = collector.pop();
assertNotNull(span);
assertThat(span.name(),
is("/ShardingSphere/executeSQL/".toLowerCase()));
Map<String, String> tags = span.tags();
@@ -119,10 +66,10 @@ public final class JDBCExecutorCallbackAdviceTest extends
AdviceBaseTest {
@Test
public void testExceptionHandle() {
- advice.beforeMethod(targetObject, executeMethod, new
Object[]{executionUnit, false, extraMap}, new MethodInvocationResult());
- advice.onThrowing(targetObject, executeMethod, new
Object[]{executionUnit, false, extraMap}, new IOException());
- advice.afterMethod(targetObject, executeMethod, new
Object[]{executionUnit, false, extraMap}, new MethodInvocationResult());
- Span span = SPANS.pollFirst();
+ advice.beforeMethod(getTargetObject(), null, new
Object[]{getExecutionUnit(), false, getExtraMap()}, new
MethodInvocationResult());
+ advice.onThrowing(getTargetObject(), null, new
Object[]{getExecutionUnit(), false, getExtraMap()}, new IOException());
+ advice.afterMethod(getTargetObject(), null, new
Object[]{getExecutionUnit(), false, getExtraMap()}, new
MethodInvocationResult());
+ Span span = collector.pop();
assertNotNull(span);
assertThat(span.name(),
is("/ShardingSphere/executeSQL/".toLowerCase()));
Map<String, String> tags = span.tags();
@@ -136,8 +83,4 @@ public final class JDBCExecutorCallbackAdviceTest extends
AdviceBaseTest {
assertThat(tags.get("error"), is("IOException"));
}
- @After
- public void cleanup() {
- SPANS.clear();
- }
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/SQLParserEngineAdviceTest.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/SQLParserEngineAdviceTest.java
index 3f81c8fe..ae5e84c 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/SQLParserEngineAdviceTest.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/SQLParserEngineAdviceTest.java
@@ -20,73 +20,47 @@ package
org.apache.shardingsphere.agent.plugin.tracing.zipkin.advice;
import brave.Span;
import brave.Tracing;
import lombok.SneakyThrows;
-import org.apache.shardingsphere.agent.api.advice.AdviceTargetObject;
import org.apache.shardingsphere.agent.api.result.MethodInvocationResult;
+import
org.apache.shardingsphere.agent.plugin.tracing.advice.AbstractSQLParserEngineAdviceTest;
+import org.apache.shardingsphere.agent.plugin.tracing.rule.ZipkinCollector;
import
org.apache.shardingsphere.agent.plugin.tracing.zipkin.constant.ZipkinConstants;
import org.apache.shardingsphere.infra.executor.kernel.model.ExecutorDataMap;
-import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
-import org.junit.After;
import org.junit.Before;
-import org.junit.BeforeClass;
+import org.junit.ClassRule;
import org.junit.Test;
import java.io.IOException;
-import java.lang.reflect.Method;
import java.util.Map;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
-import static org.mockito.Mockito.mock;
-public final class SQLParserEngineAdviceTest extends AdviceBaseTest {
+public final class SQLParserEngineAdviceTest extends
AbstractSQLParserEngineAdviceTest {
- private static final String SQL_STMT = "select 1";
+ @ClassRule
+ public static ZipkinCollector collector = new ZipkinCollector();
- private static Method parseMethod;
+ private static final String SQL_STMT = "select 1";
private SQLParserEngineAdvice advice;
- private AdviceTargetObject targetObject;
-
- private Object attachment;
-
private Span parentSpan;
- @BeforeClass
- @SneakyThrows
- public static void setup() {
-
prepare("org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine");
- parseMethod =
ShardingSphereSQLParserEngine.class.getDeclaredMethod("parse", String.class,
boolean.class);
- }
-
@Before
@SneakyThrows
- @SuppressWarnings("all")
- public void before() {
+ public void setup() {
parentSpan = Tracing.currentTracer().newTrace().name("parent").start();
ExecutorDataMap.getValue().put(ZipkinConstants.ROOT_SPAN, parentSpan);
- Object parserEngine = mock(ShardingSphereSQLParserEngine.class,
invocation -> {
- switch (invocation.getMethod().getName()) {
- case "getAttachment":
- return attachment;
- case "setAttachment":
- attachment = invocation.getArguments()[0];
- return null;
- default:
- return invocation.callRealMethod();
- }
- });
- targetObject = (AdviceTargetObject) parserEngine;
advice = new SQLParserEngineAdvice();
}
@Test
public void testMethod() {
- advice.beforeMethod(targetObject, parseMethod, new Object[]{SQL_STMT,
true}, new MethodInvocationResult());
- advice.afterMethod(targetObject, parseMethod, new Object[]{SQL_STMT,
true}, new MethodInvocationResult());
+ advice.beforeMethod(getTargetObject(), null, new Object[]{SQL_STMT,
true}, new MethodInvocationResult());
+ advice.afterMethod(getTargetObject(), null, new Object[]{SQL_STMT,
true}, new MethodInvocationResult());
parentSpan.finish();
- zipkin2.Span span = SPANS.pollFirst();
+ zipkin2.Span span = collector.pop();
assertNotNull(span);
assertNotNull(span.parentId());
Map<String, String> tags = span.tags();
@@ -97,12 +71,12 @@ public final class SQLParserEngineAdviceTest extends
AdviceBaseTest {
@Test
public void testExceptionHandle() {
- advice.beforeMethod(targetObject, parseMethod, new Object[]{SQL_STMT,
true}, new MethodInvocationResult());
- advice.onThrowing(targetObject, parseMethod, new Object[]{SQL_STMT,
true}, new IOException());
- advice.afterMethod(targetObject, parseMethod, new Object[]{SQL_STMT,
true}, new MethodInvocationResult());
+ advice.beforeMethod(getTargetObject(), null, new Object[]{SQL_STMT,
true}, new MethodInvocationResult());
+ advice.onThrowing(getTargetObject(), null, new Object[]{SQL_STMT,
true}, new IOException());
+ advice.afterMethod(getTargetObject(), null, new Object[]{SQL_STMT,
true}, new MethodInvocationResult());
// ensure the parent span(mock) finished
parentSpan.finish();
- zipkin2.Span span = SPANS.pollFirst();
+ zipkin2.Span span = collector.pop();
assertNotNull(span);
assertNotNull(span.parentId());
Map<String, String> tags = span.tags();
@@ -112,8 +86,4 @@ public final class SQLParserEngineAdviceTest extends
AdviceBaseTest {
assertThat(tags.get(ZipkinConstants.Tags.COMPONENT),
is(ZipkinConstants.COMPONENT_NAME));
}
- @After
- public void cleanup() {
- SPANS.clear();
- }
}