package rocks.inspectit.shared.cs.ci.business.impl; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.mockito.Matchers.any; import static org.mockito.Mockito.when; import org.mockito.InjectMocks; import org.mockito.Mock; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import rocks.inspectit.shared.all.communication.data.InvocationSequenceData; import rocks.inspectit.shared.all.testbase.TestBase; import rocks.inspectit.shared.cs.ci.business.expression.impl.NameExtractionExpression; import rocks.inspectit.shared.cs.cmr.service.cache.CachedDataService; /** * @author Alexander Wert * */ @SuppressWarnings("PMD") public class BusinessTransactionDefinitionTest extends TestBase { @InjectMocks BusinessTransactionDefinition businessTxDefinition; /** * Test * {@link BusinessTransactionDefinition#determineBusinessTransactionName(InvocationSequenceData, rocks.inspectit.shared.all.cmr.service.ICachedDataService)} * method. */ public static class DetermineBusinessTransactionName extends BusinessTransactionDefinitionTest { private static final String BUSINESS_TX_DEF_NAME = "bTxName"; private static final String DYNAMIC_NAME = "dynamicName"; @Mock CachedDataService cachedDataService; @Mock NameExtractionExpression extractionExpression; InvocationSequenceData isd1; InvocationSequenceData isd2; @BeforeMethod public void init() { businessTxDefinition.setBusinessTransactionDefinitionName(BUSINESS_TX_DEF_NAME); isd1 = new InvocationSequenceData(); isd1.setId(1); isd2 = new InvocationSequenceData(); isd2.setId(2); isd1.getNestedSequences().add(isd2); } @Test public void definitionName() { businessTxDefinition.setNameExtractionExpression(null); String businessTransactionName = businessTxDefinition.determineBusinessTransactionName(isd1, cachedDataService); assertThat(businessTransactionName, equalTo(BUSINESS_TX_DEF_NAME)); } @Test public void dynamicNameOnFirstLevel() { when(extractionExpression.isSearchNodeInTrace()).thenReturn(false); when(extractionExpression.extractName(any(InvocationSequenceData.class), any(CachedDataService.class))).thenReturn(DYNAMIC_NAME); String businessTransactionName = businessTxDefinition.determineBusinessTransactionName(isd1, cachedDataService); assertThat(businessTransactionName, equalTo(DYNAMIC_NAME)); } @Test public void dynamicNameOnSecondLevel() { when(extractionExpression.isSearchNodeInTrace()).thenReturn(true); when(extractionExpression.getMaxSearchDepth()).thenReturn(1); when(extractionExpression.extractName(isd1, cachedDataService)).thenReturn(null); when(extractionExpression.extractName(isd2, cachedDataService)).thenReturn(DYNAMIC_NAME); String businessTransactionName = businessTxDefinition.determineBusinessTransactionName(isd1, cachedDataService); assertThat(businessTransactionName, equalTo(DYNAMIC_NAME)); } @Test public void dynamicNameNotMapped() { when(extractionExpression.isSearchNodeInTrace()).thenReturn(true); when(extractionExpression.getMaxSearchDepth()).thenReturn(1); when(extractionExpression.extractName(isd1, cachedDataService)).thenReturn(null); when(extractionExpression.extractName(isd2, cachedDataService)).thenReturn(null); String businessTransactionName = businessTxDefinition.determineBusinessTransactionName(isd1, cachedDataService); assertThat(businessTransactionName, equalTo(BUSINESS_TX_DEF_NAME + NameExtractionExpression.UNKNOWN_DYNAMIC_BUSINESS_TRANSACTION_POSTFIX)); } @Test public void dynamicNameNotMappedWithUnlimitedSearchDepth() { when(extractionExpression.isSearchNodeInTrace()).thenReturn(true); when(extractionExpression.getMaxSearchDepth()).thenReturn(-1); when(extractionExpression.extractName(isd1, cachedDataService)).thenReturn(null); when(extractionExpression.extractName(isd2, cachedDataService)).thenReturn(null); String businessTransactionName = businessTxDefinition.determineBusinessTransactionName(isd1, cachedDataService); assertThat(businessTransactionName, equalTo(BUSINESS_TX_DEF_NAME + NameExtractionExpression.UNKNOWN_DYNAMIC_BUSINESS_TRANSACTION_POSTFIX)); } } }