Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
山不在高_有仙则灵
SkyWalking
提交
ba108d92
S
SkyWalking
项目概览
山不在高_有仙则灵
/
SkyWalking
与 Fork 源项目一致
Fork自
apache / SkyWalking
通知
12
Star
0
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
SkyWalking
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ba108d92
编写于
7月 07, 2017
作者:
wu-sheng
提交者:
GitHub
7月 07, 2017
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #271 from ascrutae/zhangxin/feature/support-test-case
support test case
上级
be32ab22
18149b8b
变更
45
隐藏空白更改
内联
并排
Showing
45 changed file
with
620 addition
and
1467 deletion
+620
-1467
apm-sniffer/apm-agent-core/pom.xml
apm-sniffer/apm-agent-core/pom.xml
+6
-0
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/TracingContextListener.java
...alking/apm/agent/core/context/TracingContextListener.java
+0
-13
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/boot/ServiceManagerTest.java
...rg/skywalking/apm/agent/core/boot/ServiceManagerTest.java
+88
-7
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/conf/SnifferConfigInitializerTest.java
...ing/apm/agent/core/conf/SnifferConfigInitializerTest.java
+9
-14
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/ContextManagerTest.java
...skywalking/apm/agent/core/context/ContextManagerTest.java
+195
-0
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/ContextManagerTestCase.java
...alking/apm/agent/core/context/ContextManagerTestCase.java
+0
-71
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/IgnoredTracerContextTest.java
...king/apm/agent/core/context/IgnoredTracerContextTest.java
+85
-0
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/TestTracingContextListener.java
...ng/apm/agent/core/context/TestTracingContextListener.java
+0
-16
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/TracerContextTestCase.java
...walking/apm/agent/core/context/TracerContextTestCase.java
+0
-105
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/trace/SpanTestCase.java
...skywalking/apm/agent/core/context/trace/SpanTestCase.java
+0
-74
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/trace/TraceSegmentTestCase.java
...ng/apm/agent/core/context/trace/TraceSegmentTestCase.java
+0
-32
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/util/KeyValuePairReader.java
...lking/apm/agent/core/context/util/KeyValuePairReader.java
+0
-15
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/util/TraceSegmentRefHelper.java
...ng/apm/agent/core/context/util/TraceSegmentRefHelper.java
+0
-25
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/performance/comparetest/VsABQ.java
...agent/core/datacarrier/performance/comparetest/VsABQ.java
+0
-104
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/performance/comparetest/disruptor/Data.java
...e/datacarrier/performance/comparetest/disruptor/Data.java
+0
-17
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/performance/comparetest/disruptor/DataEventFactory.java
...r/performance/comparetest/disruptor/DataEventFactory.java
+0
-14
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/performance/comparetest/disruptor/DataEventHandler.java
...r/performance/comparetest/disruptor/DataEventHandler.java
+0
-21
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/performance/comparetest/disruptor/DataProducer.java
...rrier/performance/comparetest/disruptor/DataProducer.java
+0
-25
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/performance/comparetest/disruptor/TestDisruptor.java
...rier/performance/comparetest/disruptor/TestDisruptor.java
+0
-62
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/discovery/HTTPRestServiceTestApp.java
...king/apm/agent/core/discovery/HTTPRestServiceTestApp.java
+0
-81
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/AbstractClassEnhancePluginDefineTest.java
...ent/core/plugin/AbstractClassEnhancePluginDefineTest.java
+0
-116
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/MockAbstractClassEnhancePluginDefine.java
...ent/core/plugin/MockAbstractClassEnhancePluginDefine.java
+0
-20
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/MockPluginInstanceMethodInstrumentation.java
.../core/plugin/MockPluginInstanceMethodInstrumentation.java
+0
-70
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/MockPluginInterceptor.java
...ywalking/apm/agent/core/plugin/MockPluginInterceptor.java
+0
-48
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/MockPluginStaticMethodInstrumentation.java
...nt/core/plugin/MockPluginStaticMethodInstrumentation.java
+0
-36
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/PluginBootstrapTest.java
...skywalking/apm/agent/core/plugin/PluginBootstrapTest.java
+0
-20
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/PluginCfgTest.java
...a/org/skywalking/apm/agent/core/plugin/PluginCfgTest.java
+0
-45
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/PluginDefineTest.java
...rg/skywalking/apm/agent/core/plugin/PluginDefineTest.java
+0
-48
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/PluginFinderTest.java
...rg/skywalking/apm/agent/core/plugin/PluginFinderTest.java
+0
-59
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/PluginResourcesResolverTest.java
...ng/apm/agent/core/plugin/PluginResourcesResolverTest.java
+0
-17
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/TargetObject.java
...va/org/skywalking/apm/agent/core/plugin/TargetObject.java
+0
-22
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/bytebuddy/ArgumentTypeNameMatchTest.java
...gent/core/plugin/bytebuddy/ArgumentTypeNameMatchTest.java
+0
-39
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/loader/InterceptorInstanceLoaderTest.java
...ent/core/plugin/loader/InterceptorInstanceLoaderTest.java
+0
-35
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/loader/NeverUsedTestClass.java
...king/apm/agent/core/plugin/loader/NeverUsedTestClass.java
+0
-10
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/utility/ClassFileExtraction.java
...ng/apm/agent/core/plugin/utility/ClassFileExtraction.java
+0
-108
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/sampling/SamplingTracerContextTestCase.java
...pm/agent/core/sampling/SamplingTracerContextTestCase.java
+0
-78
apm-sniffer/apm-test-tools/pom.xml
apm-sniffer/apm-test-tools/pom.xml
+30
-0
apm-sniffer/apm-test-tools/src/main/java/org/skywalking/apm/agent/test/helper/AbstractTracingSpanHelper.java
...king/apm/agent/test/helper/AbstractTracingSpanHelper.java
+27
-0
apm-sniffer/apm-test-tools/src/main/java/org/skywalking/apm/agent/test/helper/FieldGetter.java
...ava/org/skywalking/apm/agent/test/helper/FieldGetter.java
+19
-0
apm-sniffer/apm-test-tools/src/main/java/org/skywalking/apm/agent/test/helper/SegmentHelper.java
...a/org/skywalking/apm/agent/test/helper/SegmentHelper.java
+17
-0
apm-sniffer/apm-test-tools/src/main/java/org/skywalking/apm/agent/test/helper/TraceSegmentRefHelper.java
...ywalking/apm/agent/test/helper/TraceSegmentRefHelper.java
+14
-0
apm-sniffer/apm-test-tools/src/main/java/org/skywalking/apm/agent/test/tools/SegmentStorage.java
...a/org/skywalking/apm/agent/test/tools/SegmentStorage.java
+32
-0
apm-sniffer/apm-test-tools/src/main/java/org/skywalking/apm/agent/test/tools/SegmentStoragePoint.java
.../skywalking/apm/agent/test/tools/SegmentStoragePoint.java
+11
-0
apm-sniffer/apm-test-tools/src/main/java/org/skywalking/apm/agent/test/tools/TracingSegmentRunner.java
...skywalking/apm/agent/test/tools/TracingSegmentRunner.java
+86
-0
apm-sniffer/pom.xml
apm-sniffer/pom.xml
+1
-0
未找到文件。
apm-sniffer/apm-agent-core/pom.xml
浏览文件 @
ba108d92
...
...
@@ -77,6 +77,12 @@
<version>
${jetty.version}
</version>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
org.skywalking
</groupId>
<artifactId>
apm-test-tools
</artifactId>
<version>
${project.version}
</version>
<scope>
test
</scope>
</dependency>
</dependencies>
<build>
<extensions>
...
...
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/TracingContextListener.java
浏览文件 @
ba108d92
...
...
@@ -2,19 +2,6 @@ package org.skywalking.apm.agent.core.context;
import
org.skywalking.apm.agent.core.context.trace.TraceSegment
;
/**
* {@link TracingContextListener} is a status change listener of {@link TracerContext}.
* Add a {@link TracingContextListener} implementation through {@link TracerContext}
* <p>
* All this class's methods will be called concurrently. Make sure all implementations are thread-safe.
* <p>
* Created by wusheng on 2017/2/17.
*/
public
interface
TracingContextListener
{
/**
* This method will be called, after the {@link TracerContext#finish()}
*
* @param traceSegment finished {@link TraceSegment}
*/
void
afterFinished
(
TraceSegment
traceSegment
);
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/boot/ServiceManagerTest.java
浏览文件 @
ba108d92
package
org.skywalking.apm.agent.core.boot
;
import
org.junit.Assert
;
import
java.lang.reflect.Field
;
import
java.util.HashMap
;
import
java.util.List
;
import
org.junit.Test
;
import
org.skywalking.apm.agent.core.context.ContextManager
;
import
org.skywalking.apm.agent.core.context.IgnoredTracerContext
;
import
org.skywalking.apm.agent.core.context.TracingContext
;
import
org.skywalking.apm.agent.core.context.TracingContextListener
;
import
org.skywalking.apm.agent.core.jvm.JVMService
;
import
org.skywalking.apm.agent.core.remote.CollectorDiscoveryService
;
import
org.skywalking.apm.agent.core.remote.GRPCChannelListener
;
import
org.skywalking.apm.agent.core.remote.GRPCChannelManager
;
import
org.skywalking.apm.agent.core.remote.TraceSegmentServiceClient
;
import
org.skywalking.apm.agent.core.sampling.SamplingService
;
import
static
org
.
hamcrest
.
CoreMatchers
.
is
;
import
static
org
.
hamcrest
.
MatcherAssert
.
assertThat
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertNotNull
;
/**
* @author wusheng
*/
public
class
ServiceManagerTest
{
@Test
public
void
test
Boot
()
{
public
void
test
ServiceDependencies
()
throws
Exception
{
ServiceManager
.
INSTANCE
.
boot
();
ContextManager
manager
=
ServiceManager
.
INSTANCE
.
findService
(
ContextManager
.
class
);
Assert
.
assertNotNull
(
manager
);
HashMap
<
Class
,
BootService
>
registryService
=
getFieldValue
(
ServiceManager
.
INSTANCE
,
"bootedServices"
);
assertThat
(
registryService
.
size
(),
is
(
6
));
assertTraceSegmentServiceClient
(
ServiceManager
.
INSTANCE
.
findService
(
TraceSegmentServiceClient
.
class
));
assertContextManager
(
ServiceManager
.
INSTANCE
.
findService
(
ContextManager
.
class
));
assertCollectorDiscoveryService
(
ServiceManager
.
INSTANCE
.
findService
(
CollectorDiscoveryService
.
class
));
assertGRPCChannelManager
(
ServiceManager
.
INSTANCE
.
findService
(
GRPCChannelManager
.
class
));
assertSamplingService
(
ServiceManager
.
INSTANCE
.
findService
(
SamplingService
.
class
));
assertJVMService
(
ServiceManager
.
INSTANCE
.
findService
(
JVMService
.
class
));
assertTracingContextListener
();
assertIgnoreTracingContextListener
();
}
private
void
assertIgnoreTracingContextListener
()
throws
Exception
{
List
<
TracingContextListener
>
LISTENERS
=
getFieldValue
(
IgnoredTracerContext
.
ListenerManager
.
class
,
"LISTENERS"
);
assertThat
(
LISTENERS
.
size
(),
is
(
1
));
assertThat
(
LISTENERS
.
contains
(
ServiceManager
.
INSTANCE
.
findService
(
ContextManager
.
class
)),
is
(
true
));
}
private
void
assertTracingContextListener
()
throws
Exception
{
List
<
TracingContextListener
>
LISTENERS
=
getFieldValue
(
TracingContext
.
ListenerManager
.
class
,
"LISTENERS"
);
assertThat
(
LISTENERS
.
size
(),
is
(
2
));
assertThat
(
LISTENERS
.
contains
(
ServiceManager
.
INSTANCE
.
findService
(
ContextManager
.
class
)),
is
(
true
));
assertThat
(
LISTENERS
.
contains
(
ServiceManager
.
INSTANCE
.
findService
(
TraceSegmentServiceClient
.
class
)),
is
(
true
));
}
private
void
assertJVMService
(
JVMService
service
)
{
assertNotNull
(
service
);
}
private
void
assertGRPCChannelManager
(
GRPCChannelManager
service
)
throws
Exception
{
assertNotNull
(
service
);
List
<
GRPCChannelListener
>
listeners
=
getFieldValue
(
service
,
"listeners"
);
assertEquals
(
listeners
.
size
(),
1
);
assertThat
(
listeners
.
get
(
0
),
is
((
GRPCChannelListener
)
ServiceManager
.
INSTANCE
.
findService
(
TraceSegmentServiceClient
.
class
)));
}
private
void
assertSamplingService
(
SamplingService
service
)
{
assertNotNull
(
service
);
}
private
void
assertCollectorDiscoveryService
(
CollectorDiscoveryService
service
)
{
assertNotNull
(
service
);
}
private
void
assertContextManager
(
ContextManager
service
)
{
assertNotNull
(
service
);
}
private
void
assertTraceSegmentServiceClient
(
TraceSegmentServiceClient
service
)
{
assertNotNull
(
service
);
}
private
<
T
>
T
getFieldValue
(
Object
instance
,
String
fieldName
)
throws
Exception
{
Field
field
=
instance
.
getClass
().
getDeclaredField
(
fieldName
);
field
.
setAccessible
(
true
);
return
(
T
)
field
.
get
(
instance
);
}
private
<
T
>
T
getFieldValue
(
Class
clazz
,
String
fieldName
)
throws
Exception
{
Field
field
=
clazz
.
getDeclaredField
(
fieldName
);
field
.
setAccessible
(
true
);
return
(
T
)
field
.
get
(
clazz
);
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/conf/SnifferConfigInitializerTest.java
浏览文件 @
ba108d92
package
org.skywalking.apm.agent.core.conf
;
import
org.junit.AfterClass
;
import
org.junit.Assert
;
import
org.junit.Test
;
import
org.skywalking.apm.agent.core.logging.LogLevel
;
/**
* @author wusheng
*/
import
static
org
.
hamcrest
.
CoreMatchers
.
is
;
import
static
org
.
hamcrest
.
MatcherAssert
.
assertThat
;
public
class
SnifferConfigInitializerTest
{
@Test
public
void
testInitialize
()
{
public
void
testLoadConfigFromJavaAgentDir
()
{
System
.
setProperty
(
"applicationCode"
,
"testApp"
);
System
.
setProperty
(
"servers"
,
"127.0.0.1:8090"
);
SnifferConfigInitializer
.
initialize
();
Assert
.
assertEquals
(
"crmApp"
,
Config
.
Agent
.
APPLICATION_CODE
);
Assert
.
assertEquals
(
"127.0.0.1:8080"
,
Config
.
Collector
.
SERVERS
);
Assert
.
assertNotNull
(
Config
.
Logging
.
DIR
);
Assert
.
assertNotNull
(
Config
.
Logging
.
FILE_NAME
);
Assert
.
assertNotNull
(
Config
.
Logging
.
MAX_FILE_SIZE
);
Assert
.
assertNotNull
(
Config
.
Logging
.
FILE_NAME
);
Assert
.
assertEquals
(
LogLevel
.
INFO
,
Config
.
Logging
.
LEVEL
);
assertThat
(
Config
.
Agent
.
APPLICATION_CODE
,
is
(
"testApp"
));
assertThat
(
Config
.
Collector
.
SERVERS
,
is
(
"127.0.0.1:8090"
));
assertThat
(
Config
.
Logging
.
LEVEL
,
is
(
LogLevel
.
INFO
));
}
@AfterClass
...
...
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/ContextManagerTest.java
0 → 100644
浏览文件 @
ba108d92
package
org.skywalking.apm.agent.core.context
;
import
java.lang.reflect.Field
;
import
java.util.List
;
import
java.util.Map
;
import
org.junit.After
;
import
org.junit.Before
;
import
org.junit.BeforeClass
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.skywalking.apm.agent.core.boot.ServiceManager
;
import
org.skywalking.apm.agent.core.conf.RemoteDownstreamConfig
;
import
org.skywalking.apm.agent.core.context.tag.Tags
;
import
org.skywalking.apm.agent.core.context.trace.AbstractSpan
;
import
org.skywalking.apm.agent.core.context.trace.AbstractTracingSpan
;
import
org.skywalking.apm.agent.core.context.trace.LogDataEntity
;
import
org.skywalking.apm.agent.core.context.trace.SpanLayer
;
import
org.skywalking.apm.agent.core.context.trace.TraceSegment
;
import
org.skywalking.apm.agent.core.context.trace.TraceSegmentRef
;
import
org.skywalking.apm.agent.core.dictionary.DictionaryUtil
;
import
org.skywalking.apm.agent.core.dictionary.OperationNameDictionary
;
import
org.skywalking.apm.agent.test.helper.AbstractTracingSpanHelper
;
import
org.skywalking.apm.agent.test.helper.SegmentHelper
;
import
org.skywalking.apm.agent.test.helper.TraceSegmentRefHelper
;
import
org.skywalking.apm.agent.test.tools.SegmentStorage
;
import
org.skywalking.apm.agent.test.tools.SegmentStoragePoint
;
import
org.skywalking.apm.agent.test.tools.TracingSegmentRunner
;
import
org.skywalking.apm.network.trace.component.ComponentsDefine
;
import
static
org
.
hamcrest
.
CoreMatchers
.
is
;
import
static
org
.
hamcrest
.
MatcherAssert
.
assertThat
;
import
static
org
.
junit
.
Assert
.
assertNull
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
@RunWith
(
TracingSegmentRunner
.
class
)
public
class
ContextManagerTest
{
@SegmentStoragePoint
private
SegmentStorage
tracingData
;
@BeforeClass
public
static
void
setUpBeforeClass
()
{
ServiceManager
.
INSTANCE
.
boot
();
}
@Before
public
void
setUp
()
throws
Exception
{
RemoteDownstreamConfig
.
Agent
.
APPLICATION_ID
=
1
;
RemoteDownstreamConfig
.
Agent
.
APPLICATION_INSTANCE_ID
=
1
;
}
@Test
public
void
createSpanWithInvalidateContextCarrier
()
{
ContextCarrier
contextCarrier
=
new
ContextCarrier
().
deserialize
(
"S.1499176688384.581928182.80935.69.1|3|1|#192.168.1.8 :18002|#/portal/"
);
AbstractSpan
firstEntrySpan
=
ContextManager
.
createEntrySpan
(
"/testEntrySpan"
,
contextCarrier
);
firstEntrySpan
.
setComponent
(
ComponentsDefine
.
TOMCAT
);
Tags
.
HTTP
.
METHOD
.
set
(
firstEntrySpan
,
"GET"
);
Tags
.
URL
.
set
(
firstEntrySpan
,
"127.0.0.1:8080"
);
SpanLayer
.
asHttp
(
firstEntrySpan
);
ContextManager
.
stopSpan
();
TraceSegment
actualSegment
=
tracingData
.
getTraceSegments
().
get
(
0
);
assertNull
(
actualSegment
.
getRefs
());
List
<
AbstractTracingSpan
>
spanList
=
SegmentHelper
.
getSpan
(
actualSegment
);
assertThat
(
spanList
.
size
(),
is
(
1
));
AbstractTracingSpan
actualEntrySpan
=
spanList
.
get
(
0
);
assertThat
(
actualEntrySpan
.
getOperationName
(),
is
(
"/testEntrySpan"
));
assertThat
(
actualEntrySpan
.
getSpanId
(),
is
(
0
));
assertThat
(
AbstractTracingSpanHelper
.
getParentSpanId
(
actualEntrySpan
),
is
(-
1
));
}
@Test
public
void
createMultipleEntrySpan
()
{
ContextCarrier
contextCarrier
=
new
ContextCarrier
().
deserialize
(
"S.1499176688384.581928182.80935.69.1|3|1|#192.168.1.8 :18002|#/portal/|T.1499176688386.581928182.80935.69.2"
);
assertTrue
(
contextCarrier
.
isValid
());
AbstractSpan
firstEntrySpan
=
ContextManager
.
createEntrySpan
(
"/testFirstEntry"
,
contextCarrier
);
firstEntrySpan
.
setComponent
(
ComponentsDefine
.
TOMCAT
);
Tags
.
HTTP
.
METHOD
.
set
(
firstEntrySpan
,
"GET"
);
Tags
.
URL
.
set
(
firstEntrySpan
,
"127.0.0.1:8080"
);
SpanLayer
.
asHttp
(
firstEntrySpan
);
AbstractSpan
secondEntrySpan
=
ContextManager
.
createEntrySpan
(
"/testSecondEntry"
,
contextCarrier
);
secondEntrySpan
.
setComponent
(
ComponentsDefine
.
DUBBO
);
Tags
.
URL
.
set
(
firstEntrySpan
,
"dubbo://127.0.0.1:8080"
);
SpanLayer
.
asRPCFramework
(
secondEntrySpan
);
ContextCarrier
injectContextCarrier
=
new
ContextCarrier
();
AbstractSpan
exitSpan
=
ContextManager
.
createExitSpan
(
"/textExitSpan"
,
injectContextCarrier
,
"127.0.0.1:12800"
);
exitSpan
.
errorOccurred
();
exitSpan
.
log
(
new
RuntimeException
(
"exception"
));
exitSpan
.
setComponent
(
ComponentsDefine
.
HTTPCLIENT
);
ContextManager
.
stopSpan
();
ContextManager
.
stopSpan
();
ContextManager
.
stopSpan
();
assertThat
(
tracingData
.
getTraceSegments
().
size
(),
is
(
1
));
TraceSegment
actualSegment
=
tracingData
.
getTraceSegments
().
get
(
0
);
assertThat
(
actualSegment
.
getRefs
().
size
(),
is
(
1
));
TraceSegmentRef
ref
=
actualSegment
.
getRefs
().
get
(
0
);
assertThat
(
TraceSegmentRefHelper
.
getPeerHost
(
ref
),
is
(
"192.168.1.8 :18002"
));
assertThat
(
ref
.
getOperationName
(),
is
(
"/portal/"
));
assertThat
(
ref
.
getOperationId
(),
is
(
0
));
List
<
AbstractTracingSpan
>
spanList
=
SegmentHelper
.
getSpan
(
actualSegment
);
assertThat
(
spanList
.
size
(),
is
(
2
));
AbstractTracingSpan
actualEntrySpan
=
spanList
.
get
(
1
);
assertThat
(
actualEntrySpan
.
getOperationName
(),
is
(
"/testSecondEntry"
));
assertThat
(
actualEntrySpan
.
getSpanId
(),
is
(
0
));
assertThat
(
AbstractTracingSpanHelper
.
getParentSpanId
(
actualEntrySpan
),
is
(-
1
));
AbstractTracingSpan
actualExitSpan
=
spanList
.
get
(
0
);
assertThat
(
actualExitSpan
.
getOperationName
(),
is
(
"/textExitSpan"
));
assertThat
(
actualExitSpan
.
getSpanId
(),
is
(
1
));
assertThat
(
AbstractTracingSpanHelper
.
getParentSpanId
(
actualExitSpan
),
is
(
0
));
List
<
LogDataEntity
>
logs
=
AbstractTracingSpanHelper
.
getLogs
(
actualExitSpan
);
assertThat
(
logs
.
size
(),
is
(
1
));
assertThat
(
logs
.
get
(
0
).
getLogs
().
size
(),
is
(
4
));
assertThat
(
injectContextCarrier
.
getSpanId
(),
is
(
1
));
assertThat
(
injectContextCarrier
.
getEntryOperationName
(),
is
(
"#/portal/"
));
assertThat
(
injectContextCarrier
.
getApplicationId
(),
is
(
1
));
assertThat
(
injectContextCarrier
.
getPeerHost
(),
is
(
"#127.0.0.1:12800"
));
}
@Test
public
void
createMultipleExitSpan
()
{
AbstractSpan
entrySpan
=
ContextManager
.
createEntrySpan
(
"/testEntrySpan"
,
null
);
entrySpan
.
setComponent
(
ComponentsDefine
.
TOMCAT
);
Tags
.
HTTP
.
METHOD
.
set
(
entrySpan
,
"GET"
);
Tags
.
URL
.
set
(
entrySpan
,
"127.0.0.1:8080"
);
SpanLayer
.
asHttp
(
entrySpan
);
ContextCarrier
firstExitSpanContextCarrier
=
new
ContextCarrier
();
AbstractSpan
firstExitSpan
=
ContextManager
.
createExitSpan
(
"/testFirstExit"
,
firstExitSpanContextCarrier
,
"127.0.0.1:8080"
);
firstExitSpan
.
setComponent
(
ComponentsDefine
.
DUBBO
);
Tags
.
URL
.
set
(
firstExitSpan
,
"dubbo://127.0.0.1:8080"
);
SpanLayer
.
asRPCFramework
(
firstExitSpan
);
ContextCarrier
secondExitSpanContextCarrier
=
new
ContextCarrier
();
AbstractSpan
secondExitSpan
=
ContextManager
.
createExitSpan
(
"/testSecondExit"
,
secondExitSpanContextCarrier
,
"127.0.0.1:9080"
);
secondExitSpan
.
setComponent
(
ComponentsDefine
.
TOMCAT
);
Tags
.
HTTP
.
METHOD
.
set
(
secondExitSpan
,
"GET"
);
Tags
.
URL
.
set
(
secondExitSpan
,
"127.0.0.1:8080"
);
SpanLayer
.
asHttp
(
secondExitSpan
);
ContextManager
.
stopSpan
();
ContextManager
.
stopSpan
();
ContextManager
.
stopSpan
();
assertThat
(
tracingData
.
getTraceSegments
().
size
(),
is
(
1
));
TraceSegment
actualSegment
=
tracingData
.
getTraceSegments
().
get
(
0
);
assertNull
(
actualSegment
.
getRefs
());
List
<
AbstractTracingSpan
>
spanList
=
SegmentHelper
.
getSpan
(
actualSegment
);
assertThat
(
spanList
.
size
(),
is
(
2
));
AbstractTracingSpan
actualFirstExitSpan
=
spanList
.
get
(
0
);
assertThat
(
actualFirstExitSpan
.
getOperationName
(),
is
(
"/testFirstExit"
));
assertThat
(
actualFirstExitSpan
.
getSpanId
(),
is
(
1
));
assertThat
(
AbstractTracingSpanHelper
.
getParentSpanId
(
actualFirstExitSpan
),
is
(
0
));
AbstractTracingSpan
actualEntrySpan
=
spanList
.
get
(
1
);
assertThat
(
actualEntrySpan
.
getOperationName
(),
is
(
"/testEntrySpan"
));
assertThat
(
actualEntrySpan
.
getSpanId
(),
is
(
0
));
assertThat
(
AbstractTracingSpanHelper
.
getParentSpanId
(
actualEntrySpan
),
is
(-
1
));
assertThat
(
firstExitSpanContextCarrier
.
getPeerHost
(),
is
(
"#127.0.0.1:8080"
));
assertThat
(
firstExitSpanContextCarrier
.
getApplicationId
(),
is
(
1
));
assertThat
(
firstExitSpanContextCarrier
.
getSpanId
(),
is
(
1
));
assertThat
(
firstExitSpanContextCarrier
.
getEntryOperationName
(),
is
(
"#/testEntrySpan"
));
assertThat
(
secondExitSpanContextCarrier
.
getPeerHost
(),
is
(
"#127.0.0.1:8080"
));
assertThat
(
secondExitSpanContextCarrier
.
getApplicationId
(),
is
(
1
));
assertThat
(
secondExitSpanContextCarrier
.
getSpanId
(),
is
(
1
));
assertThat
(
secondExitSpanContextCarrier
.
getEntryOperationName
(),
is
(
"#/testEntrySpan"
));
}
@After
public
void
tearDown
()
throws
Exception
{
RemoteDownstreamConfig
.
Agent
.
APPLICATION_ID
=
DictionaryUtil
.
nullValue
();
RemoteDownstreamConfig
.
Agent
.
APPLICATION_INSTANCE_ID
=
DictionaryUtil
.
nullValue
();
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/ContextManagerTestCase.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.context
;
import
java.lang.reflect.Field
;
import
org.junit.After
;
import
org.junit.Assert
;
import
org.junit.BeforeClass
;
import
org.junit.Test
;
import
org.skywalking.apm.agent.core.boot.ServiceManager
;
import
org.skywalking.apm.agent.core.context.trace.AbstractSpan
;
import
org.skywalking.apm.agent.core.context.trace.NoopSpan
;
import
org.skywalking.apm.agent.core.context.trace.TraceSegment
;
import
org.skywalking.apm.agent.core.context.util.TraceSegmentHelper
;
/**
* Created by wusheng on 2017/2/19.
*/
public
class
ContextManagerTestCase
{
@BeforeClass
public
static
void
setup
()
{
ServiceManager
.
INSTANCE
.
boot
();
}
@Test
public
void
testDelegateToTracerContext
()
{
AbstractSpan
span
=
ContextManager
.
createLocalSpan
(
"serviceA"
);
span
.
setComponent
(
"test"
);
Assert
.
assertEquals
(
span
,
ContextManager
.
activeSpan
());
TracingContext
.
ListenerManager
.
add
(
TestTracingContextListener
.
INSTANCE
);
ContextManager
.
stopSpan
();
TraceSegment
segment
=
TestTracingContextListener
.
INSTANCE
.
finishedSegmentCarrier
[
0
];
Assert
.
assertEquals
(
span
,
TraceSegmentHelper
.
getSpans
(
segment
).
get
(
0
));
}
@Test
public
void
testSwitchToIgnoredTracerContext
()
throws
NoSuchFieldException
,
IllegalAccessException
{
AbstractSpan
span
=
ContextManager
.
createLocalSpan
(
"/webresource/jquery.js"
);
span
.
setComponent
(
"test"
);
Assert
.
assertTrue
(
span
instanceof
NoopSpan
);
Assert
.
assertTrue
(
ContextManager
.
activeSpan
()
instanceof
NoopSpan
);
Field
context
=
ContextManager
.
class
.
getDeclaredField
(
"CONTEXT"
);
context
.
setAccessible
(
true
);
AbstractTracerContext
tracerContext
=
((
ThreadLocal
<
AbstractTracerContext
>)
context
.
get
(
null
)).
get
();
Assert
.
assertTrue
(
tracerContext
instanceof
IgnoredTracerContext
);
ContextManager
.
stopSpan
();
tracerContext
=
((
ThreadLocal
<
AbstractTracerContext
>)
context
.
get
(
null
)).
get
();
Assert
.
assertNull
(
tracerContext
);
// check normal trace again
span
=
ContextManager
.
createLocalSpan
(
"serviceA"
);
span
.
setComponent
(
"test"
);
tracerContext
=
((
ThreadLocal
<
AbstractTracerContext
>)
context
.
get
(
null
)).
get
();
Assert
.
assertTrue
(
tracerContext
instanceof
TracingContext
);
ContextManager
.
stopSpan
();
tracerContext
=
((
ThreadLocal
<
AbstractTracerContext
>)
context
.
get
(
null
)).
get
();
Assert
.
assertNull
(
tracerContext
);
}
@After
public
void
reset
()
{
TracingContext
.
ListenerManager
.
remove
(
TestTracingContextListener
.
INSTANCE
);
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/IgnoredTracerContextTest.java
0 → 100644
浏览文件 @
ba108d92
package
org.skywalking.apm.agent.core.context
;
import
java.util.LinkedList
;
import
org.junit.After
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.skywalking.apm.agent.core.boot.ServiceManager
;
import
org.skywalking.apm.agent.core.conf.Config
;
import
org.skywalking.apm.agent.core.conf.RemoteDownstreamConfig
;
import
org.skywalking.apm.agent.core.context.trace.AbstractSpan
;
import
org.skywalking.apm.agent.core.context.trace.NoopSpan
;
import
org.skywalking.apm.agent.test.tools.SegmentStorage
;
import
org.skywalking.apm.agent.test.tools.SegmentStoragePoint
;
import
org.skywalking.apm.agent.test.tools.TracingSegmentRunner
;
import
static
junit
.
framework
.
TestCase
.
assertNull
;
import
static
org
.
hamcrest
.
CoreMatchers
.
is
;
import
static
org
.
hamcrest
.
MatcherAssert
.
assertThat
;
@RunWith
(
TracingSegmentRunner
.
class
)
public
class
IgnoredTracerContextTest
{
@SegmentStoragePoint
private
SegmentStorage
storage
;
@Before
public
void
setUp
()
throws
Exception
{
RemoteDownstreamConfig
.
Agent
.
APPLICATION_ID
=
1
;
RemoteDownstreamConfig
.
Agent
.
APPLICATION_INSTANCE_ID
=
1
;
}
@After
public
void
tearDown
()
throws
Exception
{
}
@Test
public
void
ignoredTraceContextWithSampling
()
{
Config
.
Agent
.
SAMPLE_N_PER_3_SECS
=
1
;
ServiceManager
.
INSTANCE
.
boot
();
ContextManager
.
createLocalSpan
(
"/test1"
);
ContextManager
.
stopSpan
();
ContextManager
.
createLocalSpan
(
"/test2"
);
ContextManager
.
stopSpan
();
ContextManager
.
createLocalSpan
(
"/test3"
);
ContextManager
.
stopSpan
();
ContextManager
.
createLocalSpan
(
"/test4"
);
ContextManager
.
stopSpan
();
assertThat
(
storage
.
getIgnoredTracerContexts
().
size
(),
is
(
3
));
assertThat
(
storage
.
getTraceSegments
().
size
(),
is
(
1
));
}
@Test
public
void
ignoredTraceContextWithExcludeOperationName
()
{
ServiceManager
.
INSTANCE
.
boot
();
AbstractSpan
abstractSpan
=
ContextManager
.
createEntrySpan
(
"test.js"
,
null
);
ContextManager
.
stopSpan
();
assertThat
(
abstractSpan
.
getClass
().
getName
(),
is
(
NoopSpan
.
class
.
getName
()));
LinkedList
<
IgnoredTracerContext
>
ignoredTracerContexts
=
storage
.
getIgnoredTracerContexts
();
assertThat
(
ignoredTracerContexts
.
size
(),
is
(
1
));
}
@Test
public
void
ignoredTraceContextWithEmptyOperationName
()
{
ServiceManager
.
INSTANCE
.
boot
();
ContextCarrier
contextCarrier
=
new
ContextCarrier
();
AbstractSpan
abstractSpan
=
ContextManager
.
createExitSpan
(
""
,
contextCarrier
,
"127.0.0.1:2181"
);
ContextManager
.
stopSpan
();
assertThat
(
abstractSpan
.
getClass
().
getName
(),
is
(
NoopSpan
.
class
.
getName
()));
assertNull
(
contextCarrier
.
getEntryOperationName
());
assertThat
(
contextCarrier
.
getSpanId
(),
is
(-
1
));
assertNull
(
contextCarrier
.
getPeerHost
());
LinkedList
<
IgnoredTracerContext
>
ignoredTracerContexts
=
storage
.
getIgnoredTracerContexts
();
assertThat
(
ignoredTracerContexts
.
size
(),
is
(
1
));
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/TestTracingContextListener.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.context
;
import
org.skywalking.apm.agent.core.context.trace.TraceSegment
;
/**
* Created by wusheng on 2017/2/19.
*/
public
enum
TestTracingContextListener
implements
TracingContextListener
{
INSTANCE
;
final
TraceSegment
[]
finishedSegmentCarrier
=
{
null
};
@Override
public
void
afterFinished
(
TraceSegment
traceSegment
)
{
finishedSegmentCarrier
[
0
]
=
traceSegment
;
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/TracerContextTestCase.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.context
;
import
java.util.LinkedList
;
import
java.util.List
;
import
org.junit.After
;
import
org.junit.Assert
;
import
org.junit.Test
;
import
org.skywalking.apm.agent.core.context.ids.DistributedTraceId
;
import
org.skywalking.apm.agent.core.context.ids.PropagatedTraceId
;
import
org.skywalking.apm.agent.core.context.trace.AbstractSpan
;
import
org.skywalking.apm.agent.core.context.trace.TraceSegment
;
import
org.skywalking.apm.agent.core.context.util.TraceSegmentHelper
;
import
org.skywalking.apm.agent.core.context.util.TraceSegmentRefHelper
;
/**
* Created by wusheng on 2017/2/19.
*/
public
class
TracerContextTestCase
{
@Test
public
void
testSpanLifeCycle
()
{
TracingContext
context
=
new
TracingContext
();
AbstractSpan
span
=
context
.
createLocalSpan
(
"/serviceA"
);
Assert
.
assertEquals
(
span
,
context
.
activeSpan
());
TracingContext
.
ListenerManager
.
add
(
TestTracingContextListener
.
INSTANCE
);
final
TraceSegment
[]
finishedSegmentCarrier
=
TestTracingContextListener
.
INSTANCE
.
finishedSegmentCarrier
;
context
.
stopSpan
(
span
);
TraceSegment
traceSegment
=
finishedSegmentCarrier
[
0
];
Assert
.
assertNotNull
(
traceSegment
);
Assert
.
assertEquals
(
1
,
TraceSegmentHelper
.
getSpans
(
traceSegment
).
size
());
Assert
.
assertEquals
(
span
,
TraceSegmentHelper
.
getSpans
(
traceSegment
).
get
(
0
));
}
@Test
public
void
testChildOfSpan
()
{
TracingContext
context
=
new
TracingContext
();
AbstractSpan
serviceSpan
=
context
.
createLocalSpan
(
"/serviceA"
);
AbstractSpan
dbSpan
=
context
.
createExitSpan
(
"db/preparedStatement/execute"
,
"127.0.0.1:3306"
);
Assert
.
assertEquals
(
dbSpan
,
context
.
activeSpan
());
TracingContext
.
ListenerManager
.
add
(
TestTracingContextListener
.
INSTANCE
);
final
TraceSegment
[]
finishedSegmentCarrier
=
TestTracingContextListener
.
INSTANCE
.
finishedSegmentCarrier
;
try
{
context
.
stopSpan
(
serviceSpan
);
}
catch
(
Throwable
t
)
{
Assert
.
assertTrue
(
t
instanceof
IllegalStateException
);
}
context
.
stopSpan
(
dbSpan
);
context
.
stopSpan
(
serviceSpan
);
TraceSegment
traceSegment
=
finishedSegmentCarrier
[
0
];
Assert
.
assertNotNull
(
traceSegment
);
Assert
.
assertEquals
(
2
,
TraceSegmentHelper
.
getSpans
(
traceSegment
).
size
());
Assert
.
assertEquals
(
dbSpan
,
TraceSegmentHelper
.
getSpans
(
traceSegment
).
get
(
0
));
}
@Test
public
void
testInject
()
{
TracingContext
context
=
new
TracingContext
();
AbstractSpan
serviceSpan
=
context
.
createLocalSpan
(
"/serviceA"
);
AbstractSpan
dbSpan
=
context
.
createExitSpan
(
"db/preparedStatement/execute"
,
"127.0.0.1:3306"
);
ContextCarrier
carrier
=
new
ContextCarrier
();
context
.
inject
(
carrier
);
Assert
.
assertEquals
(
"127.0.0.1:3306"
,
carrier
.
getPeerHost
());
Assert
.
assertEquals
(
1
,
carrier
.
getSpanId
());
}
@Test
public
void
testExtract
()
{
ContextCarrier
carrier
=
new
ContextCarrier
();
carrier
.
setTraceSegmentId
(
"trace_id_1"
);
carrier
.
setSpanId
(
5
);
carrier
.
setPeerHost
(
"10.2.3.16:8080"
);
List
<
DistributedTraceId
>
ids
=
new
LinkedList
<
DistributedTraceId
>();
ids
.
add
(
new
PropagatedTraceId
(
"Trace.global.id.123"
));
carrier
.
setDistributedTraceIds
(
ids
);
Assert
.
assertTrue
(
carrier
.
isValid
());
TracingContext
context
=
new
TracingContext
();
context
.
extract
(
carrier
);
AbstractSpan
span
=
context
.
createLocalSpan
(
"/serviceC"
);
TracingContext
.
ListenerManager
.
add
(
TestTracingContextListener
.
INSTANCE
);
final
TraceSegment
[]
finishedSegmentCarrier
=
TestTracingContextListener
.
INSTANCE
.
finishedSegmentCarrier
;
context
.
stopSpan
(
span
);
TraceSegment
segment
=
finishedSegmentCarrier
[
0
];
Assert
.
assertEquals
(
"trace_id_1"
,
TraceSegmentRefHelper
.
getTraceSegmentId
(
segment
.
getRefs
().
get
(
0
)));
Assert
.
assertEquals
(
5
,
TraceSegmentRefHelper
.
getSpanId
(
segment
.
getRefs
().
get
(
0
)));
}
@After
public
void
reset
()
{
TracingContext
.
ListenerManager
.
remove
(
TestTracingContextListener
.
INSTANCE
);
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/trace/SpanTestCase.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.context.trace
;
import
java.util.List
;
import
org.junit.Assert
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.powermock.core.classloader.annotations.PrepareForTest
;
import
org.powermock.modules.junit4.PowerMockRunner
;
import
org.skywalking.apm.agent.core.context.tag.Tags
;
import
org.skywalking.apm.agent.core.context.util.KeyValuePair
;
import
org.skywalking.apm.agent.core.context.util.KeyValuePairReader
;
import
org.skywalking.apm.agent.core.context.util.TraceSegmentHelper
;
import
org.skywalking.apm.agent.core.dictionary.ApplicationDictionary
;
@RunWith
(
PowerMockRunner
.
class
)
@PrepareForTest
(
ApplicationDictionary
.
class
)
public
class
SpanTestCase
{
@Test
public
void
testConstructors
()
{
AbstractTracingSpan
span1
=
new
LocalSpan
(
0
,
-
1
,
"serviceA"
);
AbstractTracingSpan
span2
=
new
LocalSpan
(
1
,
0
,
"serviceA"
);
span2
.
setOperationName
(
"serviceA-2"
);
span1
.
start
();
span2
.
start
();
Assert
.
assertEquals
(
"serviceA-2"
,
span2
.
getOperationName
());
Assert
.
assertEquals
(-
1
,
span1
.
parentSpanId
);
Assert
.
assertEquals
(
0
,
span2
.
parentSpanId
);
Assert
.
assertTrue
(
span1
.
startTime
>
0
);
Assert
.
assertTrue
(
span2
.
startTime
>
0
);
}
@Test
public
void
testFinish
()
{
TraceSegment
owner
=
new
TraceSegment
();
AbstractTracingSpan
span1
=
new
LocalSpan
(
0
,
-
1
,
"serviceA"
);
Assert
.
assertTrue
(
span1
.
endTime
==
0
);
span1
.
finish
(
owner
);
Assert
.
assertEquals
(
span1
,
TraceSegmentHelper
.
getSpans
(
owner
).
get
(
0
));
Assert
.
assertTrue
(
span1
.
endTime
>
0
);
}
@Test
public
void
testSetTag
()
{
AbstractTracingSpan
span1
=
new
LocalSpan
(
0
,
-
1
,
"serviceA"
);
SpanLayer
.
asHttp
(
span1
);
span1
.
setComponent
(
"Spring"
);
span1
.
errorOccurred
();
Tags
.
STATUS_CODE
.
set
(
span1
,
"505"
);
Tags
.
URL
.
set
(
span1
,
"http://127.0.0.1/serviceA"
);
Tags
.
DB_STATEMENT
.
set
(
span1
,
"select * from users"
);
Assert
.
assertEquals
(
SpanLayer
.
HTTP
,
span1
.
layer
);
Assert
.
assertTrue
(
span1
.
errorOccurred
);
}
@Test
public
void
testLogException
()
throws
NoSuchFieldException
,
IllegalAccessException
{
AbstractTracingSpan
span1
=
new
LocalSpan
(
0
,
-
1
,
"serviceA"
);
Exception
exp
=
new
Exception
(
"exception msg"
);
span1
.
log
(
exp
);
LogDataEntity
logs
=
span1
.
logs
.
get
(
0
);
List
<
KeyValuePair
>
keyValuePairs
=
logs
.
getLogs
();
Assert
.
assertEquals
(
"java.lang.Exception"
,
KeyValuePairReader
.
get
(
keyValuePairs
,
"error.kind"
));
Assert
.
assertEquals
(
"exception msg"
,
KeyValuePairReader
.
get
(
keyValuePairs
,
"message"
));
Assert
.
assertNotNull
(
KeyValuePairReader
.
get
(
keyValuePairs
,
"stack"
));
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/trace/TraceSegmentTestCase.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.context.trace
;
import
org.junit.Assert
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.skywalking.apm.agent.core.context.util.TraceSegmentHelper
;
public
class
TraceSegmentTestCase
{
@Before
public
void
setUp
()
{
}
@Test
public
void
testRef
()
{
}
@Test
public
void
testArchiveSpan
()
{
TraceSegment
segment
=
new
TraceSegment
();
AbstractTracingSpan
span1
=
new
LocalSpan
(
1
,
0
,
"/serviceA"
);
segment
.
archive
(
span1
);
AbstractTracingSpan
span2
=
new
LocalSpan
(
2
,
1
,
"/db/sql"
);
segment
.
archive
(
span2
);
Assert
.
assertEquals
(
span1
,
TraceSegmentHelper
.
getSpans
(
segment
).
get
(
0
));
Assert
.
assertEquals
(
span2
,
TraceSegmentHelper
.
getSpans
(
segment
).
get
(
1
));
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/util/KeyValuePairReader.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.context.util
;
import
java.util.List
;
public
class
KeyValuePairReader
{
public
static
String
get
(
List
<
KeyValuePair
>
pairs
,
String
key
)
{
for
(
KeyValuePair
pair
:
pairs
)
{
if
(
pair
.
getKey
().
equals
(
key
))
{
return
pair
.
getValue
();
}
}
return
null
;
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/util/TraceSegmentRefHelper.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.context.util
;
import
java.lang.reflect.Field
;
import
org.skywalking.apm.agent.core.context.trace.TraceSegmentRef
;
public
class
TraceSegmentRefHelper
{
public
static
int
getSpanId
(
TraceSegmentRef
ref
)
{
try
{
Field
field
=
TraceSegmentRef
.
class
.
getDeclaredField
(
"spanId"
);
return
Integer
.
valueOf
(
field
.
get
(
ref
).
toString
());
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
"Failed to get span id"
,
e
);
}
}
public
static
String
getTraceSegmentId
(
TraceSegmentRef
ref
)
{
try
{
Field
field
=
TraceSegmentRef
.
class
.
getDeclaredField
(
"traceSegmentId"
);
return
field
.
get
(
ref
).
toString
();
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
"Failed to get span id"
,
e
);
}
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/performance/comparetest/VsABQ.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.datacarrier.performance.comparetest
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.concurrent.ArrayBlockingQueue
;
import
org.junit.Test
;
import
org.skywalking.apm.agent.core.datacarrier.DataCarrier
;
import
org.skywalking.apm.agent.core.datacarrier.consumer.IConsumer
;
/**
* Created by wusheng on 2016/11/24.
*/
public
class
VsABQ
{
private
static
int
totalSize
=
100000000
;
/**
* 39469
*
* @throws InterruptedException
*/
@Test
public
void
testABQ
()
throws
InterruptedException
{
final
ArrayBlockingQueue
queue
=
new
ArrayBlockingQueue
(
5000
);
Thread
consumer
=
new
Thread
(
new
Runnable
()
{
@Override
public
void
run
()
{
long
startTime
=
-
1
;
int
dataCounter
=
0
;
while
(
true
)
{
ArrayList
data
=
new
ArrayList
();
queue
.
drainTo
(
data
);
if
(
startTime
==
-
1
&&
data
.
size
()
>
0
)
{
startTime
=
System
.
currentTimeMillis
();
}
dataCounter
+=
data
.
size
();
if
(
dataCounter
==
totalSize
)
{
break
;
}
}
System
.
out
.
println
(
"time cost:"
+
(
System
.
currentTimeMillis
()
-
startTime
));
}
});
consumer
.
start
();
for
(
int
i
=
0
;
i
<
totalSize
;
i
++)
{
boolean
status
=
false
;
while
(!
status
)
{
try
{
queue
.
add
(
i
);
status
=
true
;
}
catch
(
Exception
e
)
{
}
}
}
consumer
.
join
();
}
public
static
void
main
(
String
[]
args
)
throws
InterruptedException
{
final
DataCarrier
<
Integer
>
dataCarrier
=
new
DataCarrier
<
Integer
>(
5
,
1000
);
dataCarrier
.
consume
(
new
IConsumer
<
Integer
>()
{
long
startTime
=
-
1
;
int
dataCounter
=
0
;
@Override
public
void
init
()
{
}
@Override
public
void
consume
(
List
<
Integer
>
data
)
{
if
(
startTime
==
-
1
&&
data
.
size
()
>
0
)
{
startTime
=
System
.
currentTimeMillis
();
}
dataCounter
+=
data
.
size
();
if
(
dataCounter
==
totalSize
)
{
System
.
out
.
println
(
"cost:"
+
(
System
.
currentTimeMillis
()
-
startTime
));
}
}
@Override
public
void
onError
(
List
<
Integer
>
data
,
Throwable
t
)
{
}
@Override
public
void
onExit
()
{
}
},
1
);
for
(
int
i
=
0
;
i
<
totalSize
;
i
++)
{
dataCarrier
.
produce
(
i
);
}
Thread
.
sleep
(
10
*
1000L
);
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/performance/comparetest/disruptor/Data.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.datacarrier.performance.comparetest.disruptor
;
/**
* Created by wusheng on 2016/11/24.
*/
public
class
Data
{
private
long
value1
;
public
long
getValue1
()
{
return
value1
;
}
public
void
setValue1
(
long
value1
)
{
this
.
value1
=
value1
;
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/performance/comparetest/disruptor/DataEventFactory.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.datacarrier.performance.comparetest.disruptor
;
import
com.lmax.disruptor.EventFactory
;
/**
* Created by wusheng on 2016/11/24.
*/
public
class
DataEventFactory
implements
EventFactory
<
Data
>
{
@Override
public
Data
newInstance
()
{
return
new
Data
();
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/performance/comparetest/disruptor/DataEventHandler.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.datacarrier.performance.comparetest.disruptor
;
import
com.lmax.disruptor.EventHandler
;
/**
* Created by wusheng on 2016/11/24.
*/
public
class
DataEventHandler
implements
EventHandler
<
Data
>
{
public
long
counter
=
0
;
@Override
public
void
onEvent
(
Data
data
,
long
sequence
,
boolean
endOfBatch
)
throws
Exception
{
counter
++;
System
.
out
.
println
(
"handler:"
+
data
.
getValue1
());
if
(
counter
==
TestDisruptor
.
totalSize
)
{
System
.
out
.
println
(
"time cost:"
+
(
System
.
currentTimeMillis
()
-
TestDisruptor
.
startTime
));
TestDisruptor
.
isEnd
=
true
;
}
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/performance/comparetest/disruptor/DataProducer.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.datacarrier.performance.comparetest.disruptor
;
import
com.lmax.disruptor.RingBuffer
;
/**
* Created by wusheng on 2016/11/24.
*/
public
class
DataProducer
{
private
final
RingBuffer
<
Data
>
ringBuffer
;
public
DataProducer
(
RingBuffer
<
Data
>
ringBuffer
)
{
this
.
ringBuffer
=
ringBuffer
;
}
public
void
onData
(
Data
bb
)
{
long
sequence
=
ringBuffer
.
next
();
// Grab the next sequence
try
{
Data
event
=
ringBuffer
.
get
(
sequence
);
// Get the entry in the Disruptor
// for the sequence
event
.
setValue1
(
bb
.
getValue1
());
// Fill with data
}
finally
{
ringBuffer
.
publish
(
sequence
);
}
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/performance/comparetest/disruptor/TestDisruptor.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.datacarrier.performance.comparetest.disruptor
;
import
com.lmax.disruptor.RingBuffer
;
import
com.lmax.disruptor.WorkHandler
;
import
com.lmax.disruptor.dsl.Disruptor
;
import
com.lmax.disruptor.util.DaemonThreadFactory
;
/**
* Created by wusheng on 2016/11/24.
*/
public
class
TestDisruptor
{
public
static
int
totalSize
=
100000000
;
public
static
long
startTime
;
public
static
volatile
boolean
isEnd
=
false
;
public
static
void
main
(
String
[]
args
)
throws
InterruptedException
{
// The factory for the event
DataEventFactory
factory
=
new
DataEventFactory
();
// Specify the size of the ring buffer, must be power of 2.
int
bufferSize
=
1024
;
// Construct the Disruptor
Disruptor
<
Data
>
disruptor
=
new
Disruptor
<
Data
>(
factory
,
bufferSize
,
DaemonThreadFactory
.
INSTANCE
);
disruptor
.
handleEventsWithWorkerPool
(
new
WorkHandler
<
Data
>(){
@Override
public
void
onEvent
(
Data
event
)
throws
Exception
{
System
.
out
.
println
(
"work1:"
+
event
.
getValue1
());
}
},
new
WorkHandler
<
Data
>(){
@Override
public
void
onEvent
(
Data
event
)
throws
Exception
{
System
.
out
.
println
(
"work2:"
+
event
.
getValue1
());
}
});
// Connect the handler
disruptor
.
handleEventsWith
(
new
DataEventHandler
());
// Start the Disruptor, starts all threads running
disruptor
.
start
();
RingBuffer
<
Data
>
ringBuffer
=
disruptor
.
getRingBuffer
();
DataProducer
producer
=
new
DataProducer
(
ringBuffer
);
startTime
=
System
.
currentTimeMillis
();
for
(
int
i
=
0
;
i
<
totalSize
;
i
++)
{
Data
data
=
new
Data
();
data
.
setValue1
(
i
);
producer
.
onData
(
data
);
Thread
.
sleep
(
1000L
);
}
disruptor
.
shutdown
();
while
(!
TestDisruptor
.
isEnd
){
Thread
.
sleep
(
100L
);
}
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/discovery/HTTPRestServiceTestApp.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.discovery
;
import
org.apache.http.client.methods.CloseableHttpResponse
;
import
org.apache.http.client.methods.HttpPost
;
import
org.apache.http.entity.ContentType
;
import
org.apache.http.entity.StringEntity
;
import
org.apache.http.impl.client.CloseableHttpClient
;
import
org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy
;
import
org.apache.http.impl.client.HttpClients
;
import
org.eclipse.jetty.server.Request
;
import
org.eclipse.jetty.server.Server
;
import
org.eclipse.jetty.server.handler.AbstractHandler
;
import
javax.servlet.ServletException
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.BufferedReader
;
import
java.io.IOException
;
/**
* This is a small application, test for http restful service.
* Use APACHE HttpClient as discovery, nanohttpd as server.
*
* @author wusheng
*/
public
class
HTTPRestServiceTestApp
{
public
static
void
main
(
String
[]
args
)
throws
Exception
{
CloseableHttpClient
client
=
null
;
Server
server
=
null
;
try
{
HTTPRestServiceTestApp
test
=
new
HTTPRestServiceTestApp
();
server
=
test
.
startServer
();
client
=
test
.
send
();
}
finally
{
if
(
client
!=
null
)
{
client
.
close
();
}
if
(
server
!=
null
)
{
server
.
stop
();
}
}
}
private
CloseableHttpClient
send
()
{
CloseableHttpClient
httpclient
=
HttpClients
.
custom
()
.
setKeepAliveStrategy
(
new
DefaultConnectionKeepAliveStrategy
())
.
build
();
HttpPost
post
=
new
HttpPost
(
"http://localhost:7000/segments"
);
StringEntity
entity
=
new
StringEntity
(
"[{'abc'}]"
,
ContentType
.
APPLICATION_JSON
);
post
.
setEntity
(
entity
);
try
{
CloseableHttpResponse
httpResponse
=
httpclient
.
execute
(
post
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
return
httpclient
;
}
private
Server
startServer
()
throws
Exception
{
Server
server
=
new
Server
(
7000
);
server
.
setHandler
(
new
AbstractHandler
()
{
@Override
public
void
handle
(
String
target
,
Request
baseRequest
,
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
IOException
,
ServletException
{
BufferedReader
br
=
request
.
getReader
();
String
str
,
wholeStr
=
""
;
while
((
str
=
br
.
readLine
())
!=
null
)
{
wholeStr
+=
str
;
}
response
.
setContentType
(
"text/html; charset=utf-8"
);
response
.
setStatus
(
HttpServletResponse
.
SC_OK
);
baseRequest
.
setHandled
(
true
);
}
});
server
.
start
();
return
server
;
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/AbstractClassEnhancePluginDefineTest.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.plugin
;
import
java.lang.instrument.ClassFileTransformer
;
import
java.lang.instrument.Instrumentation
;
import
net.bytebuddy.agent.ByteBuddyAgent
;
import
net.bytebuddy.agent.builder.AgentBuilder
;
import
net.bytebuddy.description.type.TypeDescription
;
import
net.bytebuddy.dynamic.DynamicType
;
import
net.bytebuddy.dynamic.loading.ByteArrayClassLoader
;
import
net.bytebuddy.dynamic.loading.PackageDefinitionStrategy
;
import
net.bytebuddy.matcher.ElementMatchers
;
import
net.bytebuddy.utility.JavaModule
;
import
org.hamcrest.CoreMatchers
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.powermock.modules.junit4.PowerMockRunner
;
import
org.skywalking.apm.agent.core.plugin.utility.ClassFileExtraction
;
import
static
net
.
bytebuddy
.
matcher
.
ElementMatchers
.
none
;
import
static
org
.
hamcrest
.
CoreMatchers
.
instanceOf
;
import
static
org
.
hamcrest
.
MatcherAssert
.
assertThat
;
@RunWith
(
PowerMockRunner
.
class
)
public
class
AbstractClassEnhancePluginDefineTest
{
static
final
String
WEAVE_CLASS
=
"org.skywalking.apm.agent.core.plugin.pluginTargetObject"
;
static
final
String
INTERCEPTOR_CLASS
=
"org.skywalking.apm.agent.core.plugin.MockPluginInterceptor"
;
static
final
String
WEAVE_INSTANCE_METHOD_NAME
=
"instanceMethod"
;
static
final
String
WEAVE_INSTANCE_WITH_EXCEPTION_METHOD_NAME
=
"instanceMethodWithException"
;
static
final
String
WEAVE_STATIC_METHOD_NAME
=
"staticMethod"
;
private
ClassLoader
classLoader
;
@Before
public
void
setUp
()
throws
Exception
{
classLoader
=
new
ByteArrayClassLoader
.
ChildFirst
(
getClass
().
getClassLoader
(),
ClassFileExtraction
.
of
(
TargetObject
.
class
),
ByteArrayClassLoader
.
PersistenceHandler
.
MANIFEST
);
}
@Test
public
void
weaveInstanceMethod
()
throws
Exception
{
ByteBuddyAgent
.
install
();
ClassFileTransformer
classFileTransformer
=
new
AgentBuilder
.
Default
()
.
with
(
AgentBuilder
.
PoolStrategy
.
Default
.
FAST
)
.
ignore
(
none
())
.
type
(
ElementMatchers
.
is
(
TargetObject
.
class
),
ElementMatchers
.
is
(
classLoader
)).
transform
(
new
MockTargetObjectTransformer
())
.
installOnByteBuddyAgent
();
try
{
Class
<?>
type
=
classLoader
.
loadClass
(
TargetObject
.
class
.
getName
());
assertThat
(
type
.
getDeclaredMethod
(
WEAVE_INSTANCE_METHOD_NAME
).
invoke
(
type
.
getDeclaredConstructor
(
String
.
class
).
newInstance
(
"a"
))
,
CoreMatchers
.<
Object
>
is
(
WEAVE_INSTANCE_METHOD_NAME
+
"a"
));
}
finally
{
ByteBuddyAgent
.
getInstrumentation
().
removeTransformer
(
classFileTransformer
);
}
}
@Test
(
expected
=
RuntimeException
.
class
)
public
void
weaveInstanceMethodWITEXCEPTION
()
throws
Exception
{
ByteBuddyAgent
.
install
();
ClassFileTransformer
classFileTransformer
=
new
AgentBuilder
.
Default
()
.
with
(
AgentBuilder
.
PoolStrategy
.
Default
.
FAST
)
.
ignore
(
none
())
.
type
(
ElementMatchers
.
is
(
TargetObject
.
class
),
ElementMatchers
.
is
(
classLoader
)).
transform
(
new
MockTargetObjectTransformer
())
.
installOnByteBuddyAgent
();
try
{
Class
<?>
type
=
classLoader
.
loadClass
(
TargetObject
.
class
.
getName
());
type
.
getDeclaredMethod
(
WEAVE_INSTANCE_WITH_EXCEPTION_METHOD_NAME
).
invoke
(
type
.
getDeclaredConstructor
(
String
.
class
).
newInstance
(
"a"
));
}
finally
{
ByteBuddyAgent
.
getInstrumentation
().
removeTransformer
(
classFileTransformer
);
}
}
@Test
public
void
weaveStaticMethod
()
throws
Exception
{
ByteBuddyAgent
.
install
();
ClassFileTransformer
classFileTransformer
=
new
AgentBuilder
.
Default
()
.
with
(
AgentBuilder
.
PoolStrategy
.
Default
.
FAST
)
.
ignore
(
none
())
.
type
(
ElementMatchers
.
is
(
TargetObject
.
class
),
ElementMatchers
.
is
(
classLoader
)).
transform
(
new
MockTargetObjectTransformer
())
.
installOnByteBuddyAgent
();
try
{
Class
<?>
type
=
classLoader
.
loadClass
(
TargetObject
.
class
.
getName
());
assertThat
(
type
.
getDeclaredMethod
(
WEAVE_STATIC_METHOD_NAME
).
invoke
(
type
),
CoreMatchers
.<
Object
>
is
(
WEAVE_STATIC_METHOD_NAME
+
"_STATIC"
));
}
finally
{
ByteBuddyAgent
.
getInstrumentation
().
removeTransformer
(
classFileTransformer
);
}
}
public
static
class
MockTargetObjectTransformer
implements
AgentBuilder
.
Transformer
{
private
DynamicType
.
Builder
<?>
transformStaticMethod
(
DynamicType
.
Builder
newBuilder
)
{
MockPluginStaticMethodInstrumentation
staticMethodInstrumentation
=
new
MockPluginStaticMethodInstrumentation
();
return
staticMethodInstrumentation
.
define
(
WEAVE_CLASS
,
newBuilder
,
AbstractClassEnhancePluginDefineTest
.
class
.
getClassLoader
());
}
private
DynamicType
.
Builder
transformInstanceMethod
(
DynamicType
.
Builder
<?>
builder
)
{
MockPluginInstanceMethodInstrumentation
instrumentation
=
new
MockPluginInstanceMethodInstrumentation
();
return
instrumentation
.
define
(
WEAVE_CLASS
,
builder
,
AbstractClassEnhancePluginDefineTest
.
class
.
getClassLoader
());
}
@Override
public
DynamicType
.
Builder
<?>
transform
(
DynamicType
.
Builder
<?>
builder
,
TypeDescription
typeDescription
,
ClassLoader
classLoader
,
JavaModule
module
)
{
try
{
DynamicType
.
Builder
newBuilder
=
transformInstanceMethod
(
builder
);
return
transformStaticMethod
(
newBuilder
);
}
catch
(
Exception
exception
)
{
throw
new
AssertionError
(
exception
);
}
}
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/MockAbstractClassEnhancePluginDefine.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.plugin
;
import
net.bytebuddy.dynamic.DynamicType
;
/**
* Created by wusheng on 2017/2/27.
*/
public
class
MockAbstractClassEnhancePluginDefine
extends
AbstractClassEnhancePluginDefine
{
@Override
protected
DynamicType
.
Builder
<?>
enhance
(
String
enhanceOriginClassName
,
DynamicType
.
Builder
<?>
newClassBuilder
,
ClassLoader
classLoader
)
throws
PluginException
{
return
newClassBuilder
;
}
@Override
protected
String
enhanceClassName
()
{
return
"NotExistClass"
;
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/MockPluginInstanceMethodInstrumentation.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.plugin
;
import
net.bytebuddy.description.method.MethodDescription
;
import
net.bytebuddy.matcher.ElementMatcher
;
import
org.skywalking.apm.agent.core.plugin.bytebuddy.AllObjectDefaultMethodsMatch
;
import
org.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint
;
import
org.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine
;
import
org.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint
;
import
static
net
.
bytebuddy
.
matcher
.
ElementMatchers
.*;
public
class
MockPluginInstanceMethodInstrumentation
extends
ClassInstanceMethodsEnhancePluginDefine
{
@Override
protected
String
enhanceClassName
()
{
return
AbstractClassEnhancePluginDefineTest
.
WEAVE_CLASS
;
}
@Override
protected
ConstructorInterceptPoint
[]
getConstructorsInterceptPoints
()
{
return
new
ConstructorInterceptPoint
[]
{
new
ConstructorInterceptPoint
()
{
@Override
public
ElementMatcher
<
MethodDescription
>
getConstructorMatcher
()
{
return
takesArgument
(
0
,
String
.
class
);
}
@Override
public
String
getConstructorInterceptor
()
{
return
AbstractClassEnhancePluginDefineTest
.
INTERCEPTOR_CLASS
;
}
}
};
}
@Override
protected
InstanceMethodsInterceptPoint
[]
getInstanceMethodsInterceptPoints
()
{
return
new
InstanceMethodsInterceptPoint
[]
{
new
InstanceMethodsInterceptPoint
()
{
@Override
public
ElementMatcher
<
MethodDescription
>
getMethodsMatcher
()
{
return
named
(
AbstractClassEnhancePluginDefineTest
.
WEAVE_INSTANCE_METHOD_NAME
).
and
(
not
(
AllObjectDefaultMethodsMatch
.
INSTANCE
));
}
@Override
public
String
getMethodsInterceptor
()
{
return
AbstractClassEnhancePluginDefineTest
.
INTERCEPTOR_CLASS
;
}
@Override
public
boolean
isOverrideArgs
()
{
return
false
;
}
},
new
InstanceMethodsInterceptPoint
()
{
@Override
public
ElementMatcher
<
MethodDescription
>
getMethodsMatcher
()
{
return
named
(
AbstractClassEnhancePluginDefineTest
.
WEAVE_INSTANCE_WITH_EXCEPTION_METHOD_NAME
);
}
@Override
public
String
getMethodsInterceptor
()
{
return
AbstractClassEnhancePluginDefineTest
.
INTERCEPTOR_CLASS
;
}
@Override
public
boolean
isOverrideArgs
()
{
return
false
;
}
}
};
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/MockPluginInterceptor.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.plugin
;
import
org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance
;
import
org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor
;
import
org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor
;
import
org.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult
;
import
org.skywalking.apm.agent.core.plugin.interceptor.enhance.StaticMethodsAroundInterceptor
;
public
class
MockPluginInterceptor
implements
InstanceMethodsAroundInterceptor
,
StaticMethodsAroundInterceptor
,
InstanceConstructorInterceptor
{
@Override
public
void
onConstruct
(
EnhancedInstance
objInst
,
Object
[]
allArguments
)
{
objInst
.
setSkyWalkingDynamicField
(
allArguments
[
0
]);
}
@Override
public
void
beforeMethod
(
Class
clazz
,
String
methodName
,
Object
[]
allArguments
,
Class
<?>[]
parameterTypes
,
MethodInterceptResult
result
)
{
}
@Override
public
Object
afterMethod
(
Class
clazz
,
String
methodName
,
Object
[]
allArguments
,
Class
<?>[]
parameterTypes
,
Object
ret
)
{
return
ret
+
"_STATIC"
;
}
@Override
public
void
handleMethodException
(
Class
clazz
,
String
methodName
,
Object
[]
allArguments
,
Class
<?>[]
parameterTypes
,
Throwable
t
)
{
}
@Override
public
void
beforeMethod
(
EnhancedInstance
objInst
,
String
methodName
,
Object
[]
allArguments
,
Class
<?>[]
argumentsTypes
,
MethodInterceptResult
result
)
throws
Throwable
{
}
@Override
public
Object
afterMethod
(
EnhancedInstance
objInst
,
String
methodName
,
Object
[]
allArguments
,
Class
<?>[]
argumentsTypes
,
Object
ret
)
throws
Throwable
{
return
ret
+
String
.
valueOf
(
objInst
.
getSkyWalkingDynamicField
());
}
@Override
public
void
handleMethodException
(
EnhancedInstance
objInst
,
String
methodName
,
Object
[]
allArguments
,
Class
<?>[]
argumentsTypes
,
Throwable
t
)
{
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/MockPluginStaticMethodInstrumentation.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.plugin
;
import
net.bytebuddy.description.method.MethodDescription
;
import
net.bytebuddy.matcher.ElementMatcher
;
import
org.skywalking.apm.agent.core.plugin.interceptor.StaticMethodsInterceptPoint
;
import
org.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassStaticMethodsEnhancePluginDefine
;
import
static
net
.
bytebuddy
.
matcher
.
ElementMatchers
.
named
;
public
class
MockPluginStaticMethodInstrumentation
extends
ClassStaticMethodsEnhancePluginDefine
{
@Override
protected
String
enhanceClassName
()
{
return
AbstractClassEnhancePluginDefineTest
.
WEAVE_CLASS
;
}
@Override
protected
StaticMethodsInterceptPoint
[]
getStaticMethodsInterceptPoints
()
{
return
new
StaticMethodsInterceptPoint
[]
{
new
StaticMethodsInterceptPoint
()
{
@Override
public
ElementMatcher
<
MethodDescription
>
getMethodsMatcher
()
{
return
named
(
AbstractClassEnhancePluginDefineTest
.
WEAVE_STATIC_METHOD_NAME
);
}
@Override
public
String
getMethodsInterceptor
()
{
return
AbstractClassEnhancePluginDefineTest
.
INTERCEPTOR_CLASS
;
}
@Override
public
boolean
isOverrideArgs
()
{
return
false
;
}
}
};
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/PluginBootstrapTest.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.plugin
;
import
org.junit.Assert
;
import
org.junit.Test
;
import
java.util.List
;
/**
* @author wusheng
*/
public
class
PluginBootstrapTest
{
@Test
public
void
testLoadPlugins
()
{
PluginBootstrap
bootstrap
=
new
PluginBootstrap
();
List
<
AbstractClassEnhancePluginDefine
>
defines
=
bootstrap
.
loadPlugins
();
Assert
.
assertEquals
(
1
,
defines
.
size
());
Assert
.
assertEquals
(
MockAbstractClassEnhancePluginDefine
.
class
,
defines
.
get
(
0
).
getClass
());
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/PluginCfgTest.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.plugin
;
import
org.junit.After
;
import
org.junit.Assert
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.powermock.api.support.membermodification.MemberModifier
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* Created by wusheng on 2017/2/27.
*/
public
class
PluginCfgTest
{
@Test
public
void
testLoad
()
throws
IOException
{
String
data
=
"TestA=com.test.classA\r\nTestB=com.test.ClassB"
;
final
byte
[]
dataBytes
=
data
.
getBytes
();
PluginCfg
.
INSTANCE
.
load
(
new
InputStream
()
{
int
index
=
0
;
@Override
public
int
read
()
throws
IOException
{
if
(
index
==
dataBytes
.
length
)
{
return
-
1
;
}
return
dataBytes
[
index
++];
}
});
List
<
PluginDefine
>
list
=
PluginCfg
.
INSTANCE
.
getPluginClassList
();
Assert
.
assertEquals
(
2
,
list
.
size
());
Assert
.
assertEquals
(
"com.test.classA"
,
list
.
get
(
0
).
getDefineClass
());
Assert
.
assertEquals
(
"com.test.ClassB"
,
list
.
get
(
1
).
getDefineClass
());
}
@Before
@After
public
void
clear
()
throws
IllegalAccessException
{
MemberModifier
.
field
(
PluginCfg
.
class
,
"pluginClassList"
).
set
(
PluginCfg
.
INSTANCE
,
new
ArrayList
<
String
>());
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/PluginDefineTest.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.plugin
;
import
org.junit.Test
;
import
org.skywalking.apm.agent.core.conf.Config
;
import
org.skywalking.apm.agent.core.plugin.exception.IllegalPluginDefineException
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertFalse
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
public
class
PluginDefineTest
{
private
static
final
String
TEST_PLUGIN
=
"test_plugin"
;
private
static
final
String
TEST_DEFINE_CLASS
=
"test_define_class"
;
@Test
(
expected
=
IllegalPluginDefineException
.
class
)
public
void
testIllegalPluginDefine
()
throws
IllegalPluginDefineException
{
PluginDefine
.
build
(
"illegal_plugin_define"
);
}
@Test
(
expected
=
IllegalPluginDefineException
.
class
)
public
void
testEmptyPluginDefine
()
throws
IllegalPluginDefineException
{
PluginDefine
.
build
(
""
);
}
@Test
public
void
testOffStatePlugin
()
throws
IllegalPluginDefineException
{
PluginDefine
pluginDefine
=
PluginDefine
.
build
(
PluginDefine
.
PLUGIN_OFF_PREFIX
+
TEST_PLUGIN
+
"="
+
TEST_DEFINE_CLASS
);
assertFalse
(
pluginDefine
.
enable
());
assertEquals
(
TEST_DEFINE_CLASS
,
pluginDefine
.
getDefineClass
());
}
@Test
public
void
testDefaultStatePlugin
()
throws
IllegalPluginDefineException
{
PluginDefine
pluginDefine
=
PluginDefine
.
build
(
TEST_PLUGIN
+
"="
+
TEST_DEFINE_CLASS
);
assertTrue
(
pluginDefine
.
enable
());
assertEquals
(
TEST_DEFINE_CLASS
,
pluginDefine
.
getDefineClass
());
}
@Test
public
void
testForceEnablePlugin
()
throws
IllegalPluginDefineException
{
Config
.
Plugin
.
FORCE_ENABLE_PLUGINS
.
add
(
TEST_PLUGIN
);
PluginDefine
pluginDefine
=
PluginDefine
.
build
(
PluginDefine
.
PLUGIN_OFF_PREFIX
+
TEST_PLUGIN
+
"="
+
TEST_DEFINE_CLASS
);
assertTrue
(
pluginDefine
.
enable
());
assertEquals
(
TEST_DEFINE_CLASS
,
pluginDefine
.
getDefineClass
());
Config
.
Plugin
.
FORCE_ENABLE_PLUGINS
.
clear
();
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/PluginFinderTest.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.plugin
;
import
java.util.ArrayList
;
import
net.bytebuddy.dynamic.DynamicType
;
import
org.junit.Assert
;
import
org.junit.Test
;
/**
* Created by wusheng on 2017/2/27.
*/
public
class
PluginFinderTest
{
@Test
public
void
testFind
()
{
ArrayList
<
AbstractClassEnhancePluginDefine
>
defines
=
new
ArrayList
<
AbstractClassEnhancePluginDefine
>();
defines
.
add
(
new
NewTestPlugin
());
defines
.
add
(
new
NewTestPlugin2
());
PluginFinder
finder
=
new
PluginFinder
(
defines
);
Assert
.
assertNotNull
(
finder
.
find
(
"test.NewClass"
));
Assert
.
assertTrue
(
finder
.
exist
(
"test.NewClass"
));
}
@Test
(
expected
=
PluginException
.
class
)
public
void
testCanNotFind
()
{
ArrayList
<
AbstractClassEnhancePluginDefine
>
defines
=
new
ArrayList
<
AbstractClassEnhancePluginDefine
>();
defines
.
add
(
new
NewTestPlugin
());
PluginFinder
finder
=
new
PluginFinder
(
defines
);
finder
.
find
(
"test.NewClass2"
);
}
public
class
NewTestPlugin
extends
AbstractClassEnhancePluginDefine
{
@Override
protected
DynamicType
.
Builder
<?>
enhance
(
String
enhanceOriginClassName
,
DynamicType
.
Builder
<?>
newClassBuilder
,
ClassLoader
classLoader
)
throws
PluginException
{
return
newClassBuilder
;
}
@Override
protected
String
enhanceClassName
()
{
return
"test.NewClass"
;
}
}
public
class
NewTestPlugin2
extends
AbstractClassEnhancePluginDefine
{
@Override
protected
DynamicType
.
Builder
<?>
enhance
(
String
enhanceOriginClassName
,
DynamicType
.
Builder
<?>
newClassBuilder
,
ClassLoader
classLoader
)
throws
PluginException
{
return
newClassBuilder
;
}
@Override
protected
String
enhanceClassName
()
{
return
null
;
}
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/PluginResourcesResolverTest.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.plugin
;
import
org.junit.Assert
;
import
org.junit.Test
;
/**
* @author wusheng
*/
public
class
PluginResourcesResolverTest
{
@Test
public
void
testGetResources
()
{
PluginResourcesResolver
resolver
=
new
PluginResourcesResolver
();
Assert
.
assertTrue
(
resolver
.
getResources
().
size
()
>
0
);
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/TargetObject.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.plugin
;
public
class
TargetObject
{
private
String
value
;
public
TargetObject
(
String
value
)
{
this
.
value
=
value
;
}
public
String
instanceMethod
()
{
return
"instanceMethod"
;
}
public
String
instanceMethodWithException
()
{
throw
new
RuntimeException
(
"test exception"
);
}
public
static
String
staticMethod
()
{
return
"staticMethod"
;
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/bytebuddy/ArgumentTypeNameMatchTest.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.plugin.bytebuddy
;
import
net.bytebuddy.description.method.MethodDescription
;
import
net.bytebuddy.description.method.ParameterDescription
;
import
org.junit.Assert
;
import
org.junit.Test
;
import
org.mockito.Mockito
;
import
static
org
.
mockito
.
Mockito
.
when
;
/**
* @author wusheng
*/
public
class
ArgumentTypeNameMatchTest
{
@Test
public
void
testMatches
()
throws
IllegalAccessException
{
MethodDescription
methodDescription
=
Mockito
.
mock
(
MethodDescription
.
class
,
Mockito
.
RETURNS_DEEP_STUBS
);
ParameterDescription
parameterDescription
=
Mockito
.
mock
(
ParameterDescription
.
class
,
Mockito
.
RETURNS_DEEP_STUBS
);
when
(
methodDescription
.
getParameters
().
get
(
0
)).
thenReturn
(
parameterDescription
);
when
(
methodDescription
.
getParameters
().
size
()).
thenReturn
(
1
);
when
(
parameterDescription
.
getType
().
asErasure
().
getName
()).
thenReturn
(
"org.skywalking.TestClass"
);
ArgumentTypeNameMatch
matcher
=
((
ArgumentTypeNameMatch
)
ArgumentTypeNameMatch
.
takesArgumentWithType
(
0
,
"org.skywalking.TestClass"
));
Assert
.
assertTrue
(
matcher
.
matches
(
methodDescription
));
ArgumentTypeNameMatch
matcher2
=
((
ArgumentTypeNameMatch
)
ArgumentTypeNameMatch
.
takesArgumentWithType
(
0
,
"org.skywalking.TestClass2"
));
Assert
.
assertFalse
(
matcher2
.
matches
(
methodDescription
));
}
@Test
public
void
testMatchesWithNoParameters
()
{
MethodDescription
methodDescription
=
Mockito
.
mock
(
MethodDescription
.
class
,
Mockito
.
RETURNS_DEEP_STUBS
);
ParameterDescription
parameterDescription
=
Mockito
.
mock
(
ParameterDescription
.
class
,
Mockito
.
RETURNS_DEEP_STUBS
);
when
(
methodDescription
.
getParameters
().
size
()).
thenReturn
(
0
);
ArgumentTypeNameMatch
matcher2
=
((
ArgumentTypeNameMatch
)
ArgumentTypeNameMatch
.
takesArgumentWithType
(
0
,
"org.skywalking.TestClass"
));
Assert
.
assertFalse
(
matcher2
.
matches
(
methodDescription
));
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/loader/InterceptorInstanceLoaderTest.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.plugin.loader
;
import
org.junit.Assert
;
import
org.junit.Test
;
import
org.skywalking.apm.agent.core.plugin.interceptor.loader.InterceptorInstanceLoader
;
import
java.lang.reflect.InvocationTargetException
;
/**
* @author wusheng
*/
public
class
InterceptorInstanceLoaderTest
{
@Test
public
void
load
()
throws
ClassNotFoundException
,
InstantiationException
,
IllegalAccessException
,
InvocationTargetException
{
ClassLoader
mockClassLoader
=
new
ClassLoader
()
{
@Override
public
Class
<?>
loadClass
(
String
name
)
throws
ClassNotFoundException
{
return
super
.
loadClass
(
name
);
}
};
Object
obj
=
InterceptorInstanceLoader
.
load
(
"org.skywalking.apm.agent.core.plugin.loader.NeverUsedTestClass"
,
mockClassLoader
);
Assert
.
assertTrue
(
obj
!=
null
);
Object
obj2
=
InterceptorInstanceLoader
.
load
(
"org.skywalking.apm.agent.core.plugin.loader.NeverUsedTestClass"
,
mockClassLoader
);
Assert
.
assertTrue
(
obj
!=
null
);
Assert
.
assertEquals
(
obj
,
obj2
);
Object
obj3
=
InterceptorInstanceLoader
.
load
(
"org.skywalking.apm.agent.core.plugin.loader.NeverUsedTestClass"
,
InterceptorInstanceLoaderTest
.
class
.
getClassLoader
());
Assert
.
assertTrue
(
obj3
!=
null
);
Object
obj4
=
InterceptorInstanceLoader
.
load
(
"org.skywalking.apm.agent.core.plugin.loader.NeverUsedTestClass"
,
InterceptorInstanceLoaderTest
.
class
.
getClassLoader
());
Assert
.
assertTrue
(
obj4
!=
null
);
Assert
.
assertEquals
(
obj3
,
obj4
);
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/loader/NeverUsedTestClass.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.plugin.loader
;
/**
* This class is only used in {@link InterceptorInstanceLoaderTest},
* never be created manually.
*
* @author wusheng
*/
public
class
NeverUsedTestClass
{
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/utility/ClassFileExtraction.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.plugin.utility
;
import
java.io.IOException
;
import
java.util.HashMap
;
import
java.util.Map
;
import
net.bytebuddy.ClassFileVersion
;
import
net.bytebuddy.asm.AsmVisitorWrapper
;
import
net.bytebuddy.description.field.FieldDescription
;
import
net.bytebuddy.description.field.FieldList
;
import
net.bytebuddy.description.method.MethodDescription
;
import
net.bytebuddy.description.method.MethodList
;
import
net.bytebuddy.description.type.TypeDescription
;
import
net.bytebuddy.implementation.Implementation
;
import
net.bytebuddy.implementation.auxiliary.AuxiliaryType
;
import
net.bytebuddy.implementation.bytecode.StackManipulation
;
import
net.bytebuddy.jar.asm.ClassReader
;
import
net.bytebuddy.jar.asm.ClassWriter
;
import
net.bytebuddy.pool.TypePool
;
import
org.junit.Test
;
import
static
org
.
hamcrest
.
CoreMatchers
.
is
;
import
static
org
.
hamcrest
.
MatcherAssert
.
assertThat
;
public
class
ClassFileExtraction
{
private
static
final
int
CA
=
0xCA
,
FE
=
0xFE
,
BA
=
0xBA
,
BE
=
0xBE
;
public
static
Map
<
String
,
byte
[]>
of
(
Class
<?>...
type
)
throws
IOException
{
Map
<
String
,
byte
[]>
result
=
new
HashMap
<
String
,
byte
[]>();
for
(
Class
<?>
aType
:
type
)
{
result
.
put
(
aType
.
getName
(),
extract
(
aType
));
}
return
result
;
}
public
static
byte
[]
extract
(
Class
<?>
type
,
AsmVisitorWrapper
asmVisitorWrapper
)
throws
IOException
{
ClassReader
classReader
=
new
ClassReader
(
type
.
getName
());
ClassWriter
classWriter
=
new
ClassWriter
(
classReader
,
AsmVisitorWrapper
.
NO_FLAGS
);
classReader
.
accept
(
asmVisitorWrapper
.
wrap
(
new
TypeDescription
.
ForLoadedType
(
type
),
classWriter
,
new
IllegalContext
(),
TypePool
.
Empty
.
INSTANCE
,
new
FieldList
.
Empty
<
FieldDescription
.
InDefinedShape
>(),
new
MethodList
.
Empty
<
MethodDescription
>(),
AsmVisitorWrapper
.
NO_FLAGS
,
AsmVisitorWrapper
.
NO_FLAGS
),
AsmVisitorWrapper
.
NO_FLAGS
);
return
classWriter
.
toByteArray
();
}
public
static
byte
[]
extract
(
Class
<?>
type
)
throws
IOException
{
return
extract
(
type
,
new
AsmVisitorWrapper
.
Compound
());
}
@Test
public
void
testClassFileExtraction
()
throws
Exception
{
byte
[]
binaryFoo
=
extract
(
Foo
.
class
);
assertThat
(
binaryFoo
.
length
>
4
,
is
(
true
));
assertThat
(
binaryFoo
[
0
],
is
(
new
Integer
(
CA
).
byteValue
()));
assertThat
(
binaryFoo
[
1
],
is
(
new
Integer
(
FE
).
byteValue
()));
assertThat
(
binaryFoo
[
2
],
is
(
new
Integer
(
BA
).
byteValue
()));
assertThat
(
binaryFoo
[
3
],
is
(
new
Integer
(
BE
).
byteValue
()));
}
private
static
class
Foo
{
/* empty */
}
private
static
class
IllegalContext
implements
Implementation
.
Context
{
@Override
public
TypeDescription
register
(
AuxiliaryType
auxiliaryType
)
{
throw
new
AssertionError
(
"Did not expect method call"
);
}
@Override
public
FieldDescription
.
InDefinedShape
cache
(
StackManipulation
fieldValue
,
TypeDescription
fieldType
)
{
throw
new
AssertionError
(
"Did not expect method call"
);
}
@Override
public
TypeDescription
getInstrumentedType
()
{
throw
new
AssertionError
(
"Did not expect method call"
);
}
@Override
public
ClassFileVersion
getClassFileVersion
()
{
throw
new
AssertionError
(
"Did not expect method call"
);
}
@Override
public
MethodDescription
.
InDefinedShape
registerAccessorFor
(
Implementation
.
SpecialMethodInvocation
specialMethodInvocation
,
AccessType
accessType
)
{
throw
new
AssertionError
(
"Did not expect method call"
);
}
@Override
public
MethodDescription
.
InDefinedShape
registerGetterFor
(
FieldDescription
fieldDescription
,
AccessType
accessType
)
{
throw
new
AssertionError
(
"Did not expect method call"
);
}
@Override
public
MethodDescription
.
InDefinedShape
registerSetterFor
(
FieldDescription
fieldDescription
,
AccessType
accessType
)
{
throw
new
AssertionError
(
"Did not expect method call"
);
}
}
}
apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/sampling/SamplingTracerContextTestCase.java
已删除
100644 → 0
浏览文件 @
be32ab22
package
org.skywalking.apm.agent.core.sampling
;
import
org.junit.After
;
import
org.junit.Assert
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.skywalking.apm.agent.core.boot.ServiceManager
;
import
org.skywalking.apm.agent.core.conf.Config
;
import
org.skywalking.apm.agent.core.context.ContextManager
;
import
org.skywalking.apm.agent.core.context.TracingContext
;
import
org.skywalking.apm.agent.core.context.TracingContextListener
;
import
org.skywalking.apm.agent.core.context.trace.AbstractSpan
;
import
org.skywalking.apm.agent.core.context.trace.AbstractTracingSpan
;
import
org.skywalking.apm.agent.core.context.trace.TraceSegment
;
/**
* @author wusheng
*/
public
class
SamplingTracerContextTestCase
{
private
int
finishedTracerCounter
=
0
;
private
TracingContextListener
listener
=
new
TracingContextListener
()
{
@Override
public
void
afterFinished
(
TraceSegment
traceSegment
)
{
if
(!
traceSegment
.
isIgnore
())
{
finishedTracerCounter
++;
}
}
};
@Before
public
void
setUp
()
throws
Exception
{
Config
.
Agent
.
SAMPLE_N_PER_3_SECS
=
5
;
ServiceManager
.
INSTANCE
.
boot
();
TracingContext
.
ListenerManager
.
add
(
listener
);
}
@Test
public
void
testSample5InALoop
()
throws
InterruptedException
{
for
(
int
i
=
0
;
i
<
11
;
i
++)
{
AbstractSpan
span
=
ContextManager
.
createLocalSpan
(
"serviceA"
);
span
.
setComponent
(
"test"
);
ContextManager
.
stopSpan
();
}
/**
* Considering the reset cycle, in ci-env, may sample 5-7 trace through 1 or 2 cycle.
*/
Assert
.
assertTrue
(
finishedTracerCounter
>=
2
);
Assert
.
assertTrue
(
finishedTracerCounter
<=
3
);
Thread
.
sleep
(
10
*
1000L
);
}
@Test
public
void
testSample5InLoopWithMultiSpans
()
{
finishedTracerCounter
=
0
;
for
(
int
i
=
0
;
i
<
11
;
i
++)
{
AbstractSpan
span
=
ContextManager
.
createLocalSpan
(
"serviceA"
);
span
.
setComponent
(
"test"
);
AbstractSpan
span2
=
ContextManager
.
createLocalSpan
(
"serviceB"
);
span
.
setComponent
(
"test2"
);
ContextManager
.
stopSpan
();
ContextManager
.
stopSpan
();
}
/**
* Considering the reset cycle, in ci-env, may sample 5-7 trace through 1 or 2 cycle.
*/
Assert
.
assertTrue
(
finishedTracerCounter
>=
5
);
Assert
.
assertTrue
(
finishedTracerCounter
<=
7
);
}
@After
public
void
tearDown
()
throws
Exception
{
Config
.
Agent
.
SAMPLE_N_PER_3_SECS
=
-
1
;
TracingContext
.
ListenerManager
.
remove
(
listener
);
}
}
apm-sniffer/apm-test-tools/pom.xml
0 → 100644
浏览文件 @
ba108d92
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<parent>
<groupId>
org.skywalking
</groupId>
<artifactId>
apm-sniffer
</artifactId>
<version>
3.2-2017
</version>
</parent>
<artifactId>
apm-test-tools
</artifactId>
<packaging>
jar
</packaging>
<name>
apm-test-tools
</name>
<url>
http://maven.apache.org
</url>
<dependencies>
<dependency>
<groupId>
junit
</groupId>
<artifactId>
junit
</artifactId>
<version>
4.12
</version>
<scope>
provided
</scope>
</dependency>
<dependency>
<groupId>
org.skywalking
</groupId>
<artifactId>
apm-agent-core
</artifactId>
<version>
${project.version}
</version>
<scope>
provided
</scope>
</dependency>
</dependencies>
</project>
apm-sniffer/apm-test-tools/src/main/java/org/skywalking/apm/agent/test/helper/AbstractTracingSpanHelper.java
0 → 100644
浏览文件 @
ba108d92
package
org.skywalking.apm.agent.test.helper
;
import
java.util.Collections
;
import
java.util.List
;
import
org.skywalking.apm.agent.core.context.trace.AbstractTracingSpan
;
import
org.skywalking.apm.agent.core.context.trace.LogDataEntity
;
import
org.skywalking.apm.agent.core.context.util.KeyValuePair
;
public
class
AbstractTracingSpanHelper
{
public
static
int
getParentSpanId
(
AbstractTracingSpan
tracingSpan
)
{
try
{
return
FieldGetter
.
getParentFieldValue
(
tracingSpan
,
"parentSpanId"
);
}
catch
(
Exception
e
)
{
}
return
-
9999
;
}
public
static
List
<
LogDataEntity
>
getLogs
(
AbstractTracingSpan
tracingSpan
)
{
try
{
return
FieldGetter
.
getParentFieldValue
(
tracingSpan
,
"logs"
);
}
catch
(
Exception
e
)
{
}
return
Collections
.
emptyList
();
}
}
apm-sniffer/apm-test-tools/src/main/java/org/skywalking/apm/agent/test/helper/FieldGetter.java
0 → 100644
浏览文件 @
ba108d92
package
org.skywalking.apm.agent.test.helper
;
import
java.lang.reflect.Field
;
public
class
FieldGetter
{
public
static
<
T
>
T
getValue
(
Object
instance
,
String
fieldName
)
throws
IllegalAccessException
,
NoSuchFieldException
{
Field
field
=
instance
.
getClass
().
getDeclaredField
(
fieldName
);
field
.
setAccessible
(
true
);
return
(
T
)
field
.
get
(
instance
);
}
public
static
<
T
>
T
getParentFieldValue
(
Object
instance
,
String
fieldName
)
throws
IllegalAccessException
,
NoSuchFieldException
{
Field
field
=
instance
.
getClass
().
getSuperclass
().
getDeclaredField
(
fieldName
);
field
.
setAccessible
(
true
);
return
(
T
)
field
.
get
(
instance
);
}
}
apm-sniffer/apm-
agent-core/src/test/java/org/skywalking/apm/agent/core/context/util/Trace
SegmentHelper.java
→
apm-sniffer/apm-
test-tools/src/main/java/org/skywalking/apm/agent/test/helper/
SegmentHelper.java
浏览文件 @
ba108d92
package
org.skywalking.apm.agent.
core.context.util
;
package
org.skywalking.apm.agent.
test.helper
;
import
java.lang.reflect.Field
;
import
java.util.List
;
import
org.skywalking.apm.agent.core.context.trace.AbstractTracingSpan
;
import
org.skywalking.apm.agent.core.context.trace.TraceSegment
;
public
class
Trace
SegmentHelper
{
public
class
SegmentHelper
{
public
static
List
<
AbstractTracingSpan
>
getSpan
s
(
TraceSegment
traceSegment
)
{
public
static
List
<
AbstractTracingSpan
>
getSpan
(
TraceSegment
traceSegment
)
{
try
{
Field
field
=
AbstractTracingSpan
.
class
.
getDeclaredField
(
"spans"
);
return
(
List
<
AbstractTracingSpan
>)
field
.
get
(
traceSegment
);
return
FieldGetter
.
getValue
(
traceSegment
,
"spans"
);
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
"Failed to get spans"
,
e
);
}
}
return
null
;
}
}
apm-sniffer/apm-test-tools/src/main/java/org/skywalking/apm/agent/test/helper/TraceSegmentRefHelper.java
0 → 100644
浏览文件 @
ba108d92
package
org.skywalking.apm.agent.test.helper
;
import
org.skywalking.apm.agent.core.context.trace.TraceSegmentRef
;
public
class
TraceSegmentRefHelper
{
public
static
String
getPeerHost
(
TraceSegmentRef
ref
)
{
try
{
return
FieldGetter
.
getValue
(
ref
,
"peerHost"
);
}
catch
(
Exception
e
)
{
}
return
null
;
}
}
apm-sniffer/apm-test-tools/src/main/java/org/skywalking/apm/agent/test/tools/SegmentStorage.java
0 → 100644
浏览文件 @
ba108d92
package
org.skywalking.apm.agent.test.tools
;
import
java.util.LinkedList
;
import
java.util.List
;
import
org.skywalking.apm.agent.core.context.IgnoredTracerContext
;
import
org.skywalking.apm.agent.core.context.trace.TraceSegment
;
public
class
SegmentStorage
{
private
LinkedList
<
TraceSegment
>
traceSegments
;
private
LinkedList
<
IgnoredTracerContext
>
ignoredTracerContexts
;
SegmentStorage
()
{
traceSegments
=
new
LinkedList
<
TraceSegment
>();
ignoredTracerContexts
=
new
LinkedList
<
IgnoredTracerContext
>();
}
void
addTraceSegment
(
TraceSegment
segment
)
{
traceSegments
.
add
(
segment
);
}
public
List
<
TraceSegment
>
getTraceSegments
()
{
return
traceSegments
;
}
void
addIgnoreTraceContext
(
IgnoredTracerContext
context
)
{
this
.
ignoredTracerContexts
.
add
(
context
);
}
public
LinkedList
<
IgnoredTracerContext
>
getIgnoredTracerContexts
()
{
return
ignoredTracerContexts
;
}
}
apm-sniffer/apm-test-tools/src/main/java/org/skywalking/apm/agent/test/tools/SegmentStoragePoint.java
0 → 100644
浏览文件 @
ba108d92
package
org.skywalking.apm.agent.test.tools
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Target
(
ElementType
.
FIELD
)
public
@interface
SegmentStoragePoint
{
}
apm-sniffer/apm-test-tools/src/main/java/org/skywalking/apm/agent/test/tools/TracingSegmentRunner.java
0 → 100644
浏览文件 @
ba108d92
package
org.skywalking.apm.agent.test.tools
;
import
java.lang.reflect.Field
;
import
org.junit.runner.Description
;
import
org.junit.runner.notification.Failure
;
import
org.junit.runner.notification.RunNotifier
;
import
org.junit.runners.BlockJUnit4ClassRunner
;
import
org.junit.runners.model.InitializationError
;
import
org.skywalking.apm.agent.core.context.IgnoreTracerContextListener
;
import
org.skywalking.apm.agent.core.context.IgnoredTracerContext
;
import
org.skywalking.apm.agent.core.context.TracingContext
;
import
org.skywalking.apm.agent.core.context.TracingContextListener
;
import
org.skywalking.apm.agent.core.context.trace.TraceSegment
;
public
class
TracingSegmentRunner
extends
BlockJUnit4ClassRunner
{
private
TracingContextListener
tracingContextListener
;
private
IgnoreTracerContextListener
ignoreTracerContextListener
;
private
Field
field
;
private
Object
targetObject
;
private
SegmentStorage
tracingData
;
public
TracingSegmentRunner
(
Class
<?>
klass
)
throws
InitializationError
{
super
(
klass
);
for
(
Field
field
:
klass
.
getDeclaredFields
())
{
if
(
field
.
isAnnotationPresent
(
SegmentStoragePoint
.
class
)
&&
field
.
getType
().
equals
(
SegmentStorage
.
class
))
{
this
.
field
=
field
;
this
.
field
.
setAccessible
(
true
);
break
;
}
}
}
@Override
protected
Object
createTest
()
throws
Exception
{
targetObject
=
super
.
createTest
();
return
targetObject
;
}
@Override
public
void
run
(
RunNotifier
notifier
)
{
notifier
.
addListener
(
new
RunListener
());
super
.
run
(
notifier
);
}
class
RunListener
extends
org
.
junit
.
runner
.
notification
.
RunListener
{
@Override
public
void
testStarted
(
Description
description
)
throws
Exception
{
if
(
field
!=
null
)
{
try
{
tracingData
=
new
SegmentStorage
();
field
.
set
(
targetObject
,
tracingData
);
}
catch
(
IllegalAccessException
e
)
{
}
}
tracingContextListener
=
new
TracingContextListener
()
{
@Override
public
void
afterFinished
(
TraceSegment
traceSegment
)
{
tracingData
.
addTraceSegment
(
traceSegment
);
}
};
ignoreTracerContextListener
=
new
IgnoreTracerContextListener
()
{
@Override
public
void
afterFinished
(
IgnoredTracerContext
tracerContext
)
{
tracingData
.
addIgnoreTraceContext
(
tracerContext
);
}
};
TracingContext
.
ListenerManager
.
add
(
tracingContextListener
);
IgnoredTracerContext
.
ListenerManager
.
add
(
ignoreTracerContextListener
);
super
.
testStarted
(
description
);
}
@Override
public
void
testFinished
(
Description
description
)
throws
Exception
{
super
.
testFinished
(
description
);
TracingContext
.
ListenerManager
.
remove
(
tracingContextListener
);
IgnoredTracerContext
.
ListenerManager
.
remove
(
ignoreTracerContextListener
);
}
@Override
public
void
testFailure
(
Failure
failure
)
throws
Exception
{
super
.
testFailure
(
failure
);
TracingContext
.
ListenerManager
.
remove
(
tracingContextListener
);
}
}
}
apm-sniffer/pom.xml
浏览文件 @
ba108d92
...
...
@@ -17,6 +17,7 @@
<module>
apm-agent-core
</module>
<module>
apm-sdk-plugin
</module>
<module>
apm-toolkit-activation
</module>
<module>
apm-test-tools
</module>
</modules>
<properties>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录