/* * Copyright 2014 NAVER Corp. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.navercorp.pinpoint.plugin.cxf.interceptor; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import com.navercorp.pinpoint.bootstrap.config.ProfilerConfig; import com.navercorp.pinpoint.bootstrap.context.MethodDescriptor; import com.navercorp.pinpoint.bootstrap.context.SpanEventRecorder; import com.navercorp.pinpoint.bootstrap.context.Trace; import com.navercorp.pinpoint.bootstrap.context.TraceContext; import com.navercorp.pinpoint.bootstrap.context.TraceId; import com.navercorp.pinpoint.plugin.cxf.CxfPluginConstants; /** * @author barney * */ @RunWith(MockitoJUnitRunner.class) public class CxfClientInvokeSyncMethodInterceptorTest { @Mock private TraceContext traceContext; @Mock private MethodDescriptor descriptor; @Mock private ProfilerConfig profilerConfig; @Mock private Trace trace; @Mock private TraceId traceId; @Mock private TraceId nextId; @Mock private SpanEventRecorder recorder; @Test public void before() throws Exception { doReturn(profilerConfig).when(traceContext).getProfilerConfig(); doReturn(trace).when(traceContext).currentRawTraceObject(); doReturn(true).when(trace).canSampled(); doReturn(traceId).when(trace).getTraceId(); doReturn(nextId).when(traceId).getNextTraceId(); doReturn(recorder).when(trace).traceBlockBegin(); Object target = new Object(); Object operInfo = "[BindingOperationInfo: {http://foo.com/}getFoo]"; Object[] arg = new Object[] { "foo", "bar" }; Object[] args = new Object[] { "", operInfo, arg }; CxfClientInvokeSyncMethodInterceptor interceptor = new CxfClientInvokeSyncMethodInterceptor(traceContext, descriptor); interceptor.before(target, args); verify(recorder).recordServiceType(CxfPluginConstants.CXF_CLIENT_SERVICE_TYPE); verify(recorder).recordDestinationId("http://foo.com/"); verify(recorder).recordAttribute(CxfPluginConstants.CXF_OPERATION, "{http://foo.com/}getFoo"); verify(recorder).recordAttribute(CxfPluginConstants.CXF_ARGS, "[foo, bar]"); } @Test public void sampled_false() throws Exception { doReturn(profilerConfig).when(traceContext).getProfilerConfig(); doReturn(trace).when(traceContext).currentRawTraceObject(); doReturn(false).when(trace).canSampled(); Object target = new Object(); Object[] args = new Object[] {}; CxfClientInvokeSyncMethodInterceptor interceptor = new CxfClientInvokeSyncMethodInterceptor(traceContext, descriptor); interceptor.before(target, args); verify(trace, never()).traceBlockBegin(); } @Test public void hidden_all_params() throws Exception { doReturn(profilerConfig).when(traceContext).getProfilerConfig(); String hiddenParams = "{http://foo.com/}getFoo"; doReturn(hiddenParams).when(profilerConfig).readString("profiler.cxf.client.hiddenParams", ""); doReturn(trace).when(traceContext).currentRawTraceObject(); doReturn(true).when(trace).canSampled(); doReturn(traceId).when(trace).getTraceId(); doReturn(nextId).when(traceId).getNextTraceId(); doReturn(recorder).when(trace).traceBlockBegin(); Object target = new Object(); Object operInfo = "[BindingOperationInfo: {http://foo.com/}getFoo]"; Object[] arg = new Object[] { "foo", "bar" }; Object[] args = new Object[] { "", operInfo, arg }; CxfClientInvokeSyncMethodInterceptor interceptor = new CxfClientInvokeSyncMethodInterceptor(traceContext, descriptor); interceptor.before(target, args); verify(recorder).recordServiceType(CxfPluginConstants.CXF_CLIENT_SERVICE_TYPE); verify(recorder).recordDestinationId("http://foo.com/"); verify(recorder).recordAttribute(CxfPluginConstants.CXF_OPERATION, "{http://foo.com/}getFoo"); verify(recorder).recordAttribute(CxfPluginConstants.CXF_ARGS, "[HIDDEN 2 PARAM]"); } @Test public void hidden_param_index() throws Exception { doReturn(profilerConfig).when(traceContext).getProfilerConfig(); String hiddenParams = "{http://foo.com/}getFoo:1"; doReturn(hiddenParams).when(profilerConfig).readString("profiler.cxf.client.hiddenParams", ""); doReturn(trace).when(traceContext).currentRawTraceObject(); doReturn(true).when(trace).canSampled(); doReturn(traceId).when(trace).getTraceId(); doReturn(nextId).when(traceId).getNextTraceId(); doReturn(recorder).when(trace).traceBlockBegin(); Object target = new Object(); Object operInfo = "[BindingOperationInfo: {http://foo.com/}getFoo]"; Object[] arg = new Object[] { "foo", "bar" }; Object[] args = new Object[] { "", operInfo, arg }; CxfClientInvokeSyncMethodInterceptor interceptor = new CxfClientInvokeSyncMethodInterceptor(traceContext, descriptor); interceptor.before(target, args); verify(recorder).recordServiceType(CxfPluginConstants.CXF_CLIENT_SERVICE_TYPE); verify(recorder).recordDestinationId("http://foo.com/"); verify(recorder).recordAttribute(CxfPluginConstants.CXF_OPERATION, "{http://foo.com/}getFoo"); verify(recorder).recordAttribute(CxfPluginConstants.CXF_ARGS, "[foo, [HIDDEN PARAM]]"); } @Test public void hidden_param_incorrect_index() throws Exception { doReturn(profilerConfig).when(traceContext).getProfilerConfig(); String hiddenParams = "{http://foo.com/}getFoo:2"; doReturn(hiddenParams).when(profilerConfig).readString("profiler.cxf.client.hiddenParams", ""); doReturn(trace).when(traceContext).currentRawTraceObject(); doReturn(true).when(trace).canSampled(); doReturn(traceId).when(trace).getTraceId(); doReturn(nextId).when(traceId).getNextTraceId(); doReturn(recorder).when(trace).traceBlockBegin(); Object target = new Object(); Object operInfo = "[BindingOperationInfo: {http://foo.com/}getFoo]"; Object[] arg = new Object[] { "foo", "bar" }; Object[] args = new Object[] { "", operInfo, arg }; CxfClientInvokeSyncMethodInterceptor interceptor = new CxfClientInvokeSyncMethodInterceptor(traceContext, descriptor); interceptor.before(target, args); verify(recorder).recordServiceType(CxfPluginConstants.CXF_CLIENT_SERVICE_TYPE); verify(recorder).recordDestinationId("http://foo.com/"); verify(recorder).recordAttribute(CxfPluginConstants.CXF_OPERATION, "{http://foo.com/}getFoo"); verify(recorder).recordAttribute(CxfPluginConstants.CXF_ARGS, "[foo, bar]"); } }