package rocks.inspectit.shared.cs.ci.business.valuesource.impl; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.hasItemInArray; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.mockito.Matchers.anyInt; import java.util.HashSet; import java.util.Set; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.testng.annotations.Test; import rocks.inspectit.shared.all.cmr.model.MethodIdent; import rocks.inspectit.shared.all.communication.data.InvocationSequenceData; import rocks.inspectit.shared.all.communication.data.ParameterContentData; import rocks.inspectit.shared.all.testbase.TestBase; import rocks.inspectit.shared.cs.cmr.service.cache.CachedDataService; /** * @author Alexander Wert * */ @SuppressWarnings("PMD") public class MethodParameterValueSourceTest extends TestBase { @InjectMocks MethodParameterValueSource valueSource; @Mock CachedDataService cachedDataService; @Mock InvocationSequenceData invocationSeuence; MethodIdent methodIdent; @Mock ParameterContentData parameterContentData; /** * Test * {@link MethodParameterValueSource#getStringValues(InvocationSequenceData, rocks.inspectit.shared.all.cmr.service.ICachedDataService)} * . */ public static class GetStringVlaues extends MethodParameterValueSourceTest { private static final String PACKAGE = "package"; private static final String CLASS = "class"; private static final String METHOD = "method"; private static final String PARAMETER = "parameter"; private static final int INDEX = 2; @Test public void retrieveParameter() { methodIdent = new MethodIdent(); methodIdent.setPackageName(PACKAGE); methodIdent.setClassName(CLASS); methodIdent.setMethodName(METHOD); Set<ParameterContentData> pContentDataSet = new HashSet<>(); pContentDataSet.add(parameterContentData); Mockito.doReturn(PARAMETER).when(parameterContentData).getContent(); Mockito.doReturn(INDEX).when(parameterContentData).getSignaturePosition(); Mockito.doReturn(1L).when(invocationSeuence).getMethodIdent(); Mockito.doReturn(pContentDataSet).when(invocationSeuence).getParameterContentData(); Mockito.doReturn(methodIdent).when(cachedDataService).getMethodIdentForId(anyInt()); String methodSignature = PACKAGE + "." + CLASS + "." + METHOD + "()"; valueSource.setMethodSignature(methodSignature); valueSource.setParameterIndex(INDEX); String[] values = valueSource.getStringValues(invocationSeuence, cachedDataService); assertThat(values, hasItemInArray(PARAMETER)); } @Test public void methodIdentNull() { Mockito.doReturn(PARAMETER).when(parameterContentData).getContent(); Mockito.doReturn(INDEX).when(parameterContentData).getSignaturePosition(); Mockito.doReturn(1L).when(invocationSeuence).getMethodIdent(); Mockito.doReturn(null).when(cachedDataService).getMethodIdentForId(anyInt()); String methodSignature = PACKAGE + "." + CLASS + "." + METHOD + "()"; valueSource.setMethodSignature(methodSignature); valueSource.setParameterIndex(INDEX); String[] values = valueSource.getStringValues(invocationSeuence, cachedDataService); assertThat(values, is(notNullValue())); assertThat(values.length, is(equalTo(0))); } @Test public void wrongMethodIdent() { methodIdent = new MethodIdent(); methodIdent.setPackageName("someWrongPackage"); methodIdent.setClassName(CLASS); methodIdent.setMethodName(METHOD); Set<ParameterContentData> pContentDataSet = new HashSet<>(); pContentDataSet.add(parameterContentData); Mockito.doReturn(PARAMETER).when(parameterContentData).getContent(); Mockito.doReturn(INDEX).when(parameterContentData).getSignaturePosition(); Mockito.doReturn(1L).when(invocationSeuence).getMethodIdent(); Mockito.doReturn(pContentDataSet).when(invocationSeuence).getParameterContentData(); Mockito.doReturn(methodIdent).when(cachedDataService).getMethodIdentForId(anyInt()); String methodSignature = PACKAGE + "." + CLASS + "." + METHOD + "()"; valueSource.setMethodSignature(methodSignature); valueSource.setParameterIndex(INDEX); String[] values = valueSource.getStringValues(invocationSeuence, cachedDataService); assertThat(values, is(notNullValue())); assertThat(values.length, is(equalTo(0))); } @Test public void noCapturedParameters() { methodIdent = new MethodIdent(); methodIdent.setPackageName(PACKAGE); methodIdent.setClassName(CLASS); methodIdent.setMethodName(METHOD); Set<ParameterContentData> pContentDataSet = new HashSet<>(); Mockito.doReturn(PARAMETER).when(parameterContentData).getContent(); Mockito.doReturn(INDEX).when(parameterContentData).getSignaturePosition(); Mockito.doReturn(1L).when(invocationSeuence).getMethodIdent(); Mockito.doReturn(pContentDataSet).when(invocationSeuence).getParameterContentData(); Mockito.doReturn(methodIdent).when(cachedDataService).getMethodIdentForId(anyInt()); String methodSignature = PACKAGE + "." + CLASS + "." + METHOD + "()"; valueSource.setMethodSignature(methodSignature); valueSource.setParameterIndex(INDEX); String[] values = valueSource.getStringValues(invocationSeuence, cachedDataService); assertThat(values, is(notNullValue())); assertThat(values.length, is(equalTo(0))); } @Test public void wrongCapturedParameters() { methodIdent = new MethodIdent(); methodIdent.setPackageName(PACKAGE); methodIdent.setClassName(CLASS); methodIdent.setMethodName(METHOD); Set<ParameterContentData> pContentDataSet = new HashSet<>(); pContentDataSet.add(parameterContentData); Mockito.doReturn(PARAMETER).when(parameterContentData).getContent(); Mockito.doReturn(INDEX).when(parameterContentData).getSignaturePosition(); Mockito.doReturn(1L).when(invocationSeuence).getMethodIdent(); Mockito.doReturn(pContentDataSet).when(invocationSeuence).getParameterContentData(); Mockito.doReturn(methodIdent).when(cachedDataService).getMethodIdentForId(anyInt()); String methodSignature = PACKAGE + "." + CLASS + "." + METHOD + "()"; valueSource.setMethodSignature(methodSignature); valueSource.setParameterIndex(INDEX + 1); String[] values = valueSource.getStringValues(invocationSeuence, cachedDataService); assertThat(values, is(notNullValue())); assertThat(values.length, is(equalTo(0))); } } }