package com.navercorp.pinpoint.plugin.dubbo.consumer; import com.alibaba.dubbo.common.URL; import com.alibaba.dubbo.monitor.MonitorService; import com.alibaba.dubbo.rpc.Invocation; import com.alibaba.dubbo.rpc.RpcException; import com.alibaba.dubbo.rpc.RpcInvocation; import com.alibaba.dubbo.rpc.cluster.Directory; import com.alibaba.dubbo.rpc.cluster.support.AbstractClusterInvoker; import com.alibaba.dubbo.rpc.cluster.support.FailoverClusterInvoker; import com.navercorp.pinpoint.bootstrap.plugin.test.Expectations; import com.navercorp.pinpoint.bootstrap.plugin.test.PluginTestVerifier; import com.navercorp.pinpoint.bootstrap.plugin.test.PluginTestVerifierHolder; import com.navercorp.pinpoint.test.plugin.Dependency; import com.navercorp.pinpoint.test.plugin.PinpointPluginTestSuite; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.lang.reflect.Method; import static org.mockito.Mockito.when; /** * @author Jinkai.Ma */ @RunWith(PinpointPluginTestSuite.class) @Dependency({ "com.alibaba:dubbo:2.5.3", "org.mockito:mockito-all:1.8.4" }) public class DubboConsumerIT { @Mock private RpcInvocation rpcInvocation; private URL url; @Mock private Directory directory; private AbstractClusterInvoker abstractClusterInvoker; @Before public void setUp() { url = new URL("dubbo", "1.2.3.4", 5678); MockitoAnnotations.initMocks(this); when(directory.getUrl()).thenReturn(url); } @Test public void testConsumer() throws NoSuchMethodException { abstractClusterInvoker = new FailoverClusterInvoker(directory); when(abstractClusterInvoker.getInterface()).thenReturn(String.class); try { abstractClusterInvoker.invoke(rpcInvocation); } catch (RpcException ignore) { // ignore } PluginTestVerifier verifier = PluginTestVerifierHolder.getInstance(); verifier.printCache(); Method invoke = AbstractClusterInvoker.class.getMethod("invoke", Invocation.class); verifier.verifyTrace(Expectations.event("DUBBO_CONSUMER", invoke)); verifier.verifyTraceCount(0); } @Test public void testConsumerMonitor() { abstractClusterInvoker = new FailoverClusterInvoker(directory); when(abstractClusterInvoker.getInterface()).thenReturn(MonitorService.class); try { abstractClusterInvoker.invoke(rpcInvocation); } catch (RpcException ignore) { // ignore } PluginTestVerifier verifier = PluginTestVerifierHolder.getInstance(); verifier.printCache(); verifier.verifyTraceCount(0); } }