From 1194f0a8fdee1ed4c2135956864a9dbd4df0c912 Mon Sep 17 00:00:00 2001 From: wendal chen Date: Fri, 22 Sep 2017 20:57:18 +0800 Subject: [PATCH] add: testcase for nutz http 1.x plugin --- .../nutz/http/sync/SenderInterceptorTest.java | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 apm-sniffer/apm-sdk-plugin/nutz-plugins/http-1.x-plugin/src/test/java/org/skywalking/apm/plugin/nutz/http/sync/SenderInterceptorTest.java diff --git a/apm-sniffer/apm-sdk-plugin/nutz-plugins/http-1.x-plugin/src/test/java/org/skywalking/apm/plugin/nutz/http/sync/SenderInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/nutz-plugins/http-1.x-plugin/src/test/java/org/skywalking/apm/plugin/nutz/http/sync/SenderInterceptorTest.java new file mode 100644 index 000000000..61bc40f1d --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/nutz-plugins/http-1.x-plugin/src/test/java/org/skywalking/apm/plugin/nutz/http/sync/SenderInterceptorTest.java @@ -0,0 +1,114 @@ +package org.skywalking.apm.plugin.nutz.http.sync; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Method; +import java.util.List; + +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.nutz.http.Request; +import org.nutz.http.Request.METHOD; +import org.nutz.http.Response; +import org.nutz.http.Sender; +import org.nutz.http.sender.FilePostSender; +import org.nutz.http.sender.GetSender; +import org.nutz.http.sender.PostSender; +import org.powermock.modules.junit4.PowerMockRunnerDelegate; +import org.skywalking.apm.agent.core.boot.ServiceManager; +import org.skywalking.apm.agent.core.context.trace.AbstractTracingSpan; +import org.skywalking.apm.agent.core.context.trace.TraceSegment; +import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.skywalking.apm.agent.test.helper.SegmentHelper; +import org.skywalking.apm.agent.test.tools.AgentServiceRule; +import org.skywalking.apm.agent.test.tools.SegmentStorage; +import org.skywalking.apm.agent.test.tools.SegmentStoragePoint; +import org.skywalking.apm.agent.test.tools.TracingSegmentRunner; + +@RunWith(org.powermock.modules.junit4.PowerMockRunner.class) +@PowerMockRunnerDelegate(TracingSegmentRunner.class) +public class SenderInterceptorTest { + + @SegmentStoragePoint + public SegmentStorage segmentStorage; + + @Rule + public AgentServiceRule serviceRule = new AgentServiceRule(); + + @Mock + private EnhancedInstance enhancedInstance; + + @Mock + Response resp; + + SenderConstructorInterceptor constructorInterceptPoint; + + SenderSendInterceptor senderSendInterceptor; + + Method sendMethod; + Object[] allArguments; + Class[] argumentsTypes; + + @Before + public void setUp() throws Exception { + ServiceManager.INSTANCE.boot(); + constructorInterceptPoint = new SenderConstructorInterceptor(); + senderSendInterceptor = new SenderSendInterceptor(); + } + + public void setupSender(Class klass) throws NoSuchMethodException, SecurityException { + sendMethod = klass.getMethod("send"); + allArguments = new Object[0]; + argumentsTypes = new Class[0]; + } + + @Test + public void test_constructor() { + Request request = Request.create("https://nutz.cn/yvr/list", METHOD.GET); + constructorInterceptPoint.onConstruct(enhancedInstance, new Object[]{request}); + verify(enhancedInstance, times(1)).setSkyWalkingDynamicField(request); + } + + @Test + public void test_getsender_send() throws NoSuchMethodException, SecurityException, Throwable { + setupSender(GetSender.class); + _sender_sender_test(); + } + + @Test + public void test_postsender_send() throws NoSuchMethodException, SecurityException, Throwable { + setupSender(PostSender.class); + _sender_sender_test(); + } + + @Test + public void test_filepostsender_send() throws NoSuchMethodException, SecurityException, Throwable { + setupSender(FilePostSender.class); + _sender_sender_test(); + } + + protected void _sender_sender_test() throws Throwable { + Request request = Request.create("https://nutz.cn/yvr/list", METHOD.GET); + constructorInterceptPoint.onConstruct(enhancedInstance, new Object[]{request}); + verify(enhancedInstance, times(1)).setSkyWalkingDynamicField(request); + + when(enhancedInstance.getSkyWalkingDynamicField()).thenReturn(request); + when(resp.getStatus()).thenReturn(200); + + senderSendInterceptor.beforeMethod(enhancedInstance, sendMethod, allArguments, argumentsTypes, null); + senderSendInterceptor.afterMethod(enhancedInstance, sendMethod, allArguments, argumentsTypes, resp); + + TraceSegment traceSegment = segmentStorage.getTraceSegments().get(0); + List spans = SegmentHelper.getSpans(traceSegment); + assertThat(spans.size(), is(1)); + assertThat(spans.get(0).getOperationName(), is("/yvr/list")); + } +} -- GitLab