@Test public void getExclusiveDurationMustReturnZeroIfTheInvocationHasNotTimerDataNeitherSqlData() { InvocationSequenceData invocationData = new InvocationSequenceData(); double exclusiveDuration = DiagnosisHelper.getExclusiveDuration(invocationData); assertThat("Exclusive duration must be 0.", exclusiveDuration, is(0d)); }
@Test public void stopDiagnosis() throws DiagnosisEngineException { double baseline = 1000; InvocationSequenceData invocationSequenceData = new InvocationSequenceData(); when(diagnosisServiceExecutor.isShutdown()).thenReturn(true); diagnosisService.diagnose(invocationSequenceData, baseline); diagnosisService.run(); verify(engine, times(1)).analyze(invocationSequenceData, Collections.singletonMap(RuleConstants.DIAGNOSIS_VAR_BASELINE, baseline)); verify(diagnosisServiceExecutor, times(0)).execute(diagnosisService); } }
@Test(expectedExceptions = IllegalArgumentException.class) private void musteReturnAnExceptionIfThereIsNoTimerData() { InvocationSequenceData invocationSequenceData = new InvocationSequenceData(new Timestamp(10L), 10L, 20L, 108L); DiagnosisDataAggregator.getInstance().getAggregatedDiagnosisData(invocationSequenceData); }
@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 influxOffline() { InvocationSequenceData invocationData = new InvocationSequenceData(); when(influxDBDao.isConnected()).thenReturn(false); doReturn(Collections.singleton(InvocationSequenceData.class)).when(pointBuilder).getDataClasses(); processor = new InfluxProcessor(influxDBDao, Collections.<IPointBuilder<DefaultData>> singletonList(pointBuilder)); processor.process(invocationData, entityManager); verify(influxDBDao).isConnected(); verifyNoMoreInteractions(influxDBDao); verifyZeroInteractions(entityManager); }
@Test public void getExclusiveDurationMustReturnZeroIfTheExclusiveTimeIsNotAvailable() { InvocationSequenceData invocationData = new InvocationSequenceData(); TimerData timerData = new TimerData(new Timestamp(System.currentTimeMillis()), 10L, 20L, 30L); invocationData.setTimerData(timerData); double exclusiveDuration = DiagnosisHelper.getExclusiveDuration(invocationData); assertThat("Exclusive duration must be 0.", exclusiveDuration, is(timerData.getExclusiveDuration())); }
@Test private void musteReturnAnObjectWithALongStringIfTheTimerDataHasNotHttpTimerDataOrSqlData() { InvocationSequenceData invocationSequenceData = new InvocationSequenceData(new Timestamp(10L), 10L, 20L, 108L); TimerData timerData = new TimerData(); invocationSequenceData.setTimerData(timerData); long aggregationKey = (long) DiagnosisDataAggregator.getInstance().getAggregationKey(invocationSequenceData); assertThat("The returned object must be the method ident of the invocationsequencedata", aggregationKey, is(invocationSequenceData.getMethodIdent())); } }
@Test private void musteReturnAnInstanceWithHttpSourceTypeDataIfTheTimerDataIsHttpTimerData() { InvocationSequenceData invocationSequenceData = new InvocationSequenceData(new Timestamp(10L), 10L, 20L, 108L); HttpTimerData timerData = new HttpTimerData(); invocationSequenceData.setTimerData(timerData); AggregatedDiagnosisData aggregatedDiagnosisData = DiagnosisDataAggregator.getInstance().getAggregatedDiagnosisData(invocationSequenceData); assertThat("The object must have HTTP as source type", aggregatedDiagnosisData.getSourceType(), is(SourceType.HTTP)); }
@Test private void musteReturnAnInstanceWithTimerDataSourceTypeDataIfTheTimerDataIsTimerData() { InvocationSequenceData invocationSequenceData = new InvocationSequenceData(new Timestamp(10L), 10L, 20L, 108L); TimerData timerData = new TimerData(); invocationSequenceData.setTimerData(timerData); AggregatedDiagnosisData aggregatedDiagnosisData = DiagnosisDataAggregator.getInstance().getAggregatedDiagnosisData(invocationSequenceData); assertThat("The object must have TIMERDATA as source type", aggregatedDiagnosisData.getSourceType(), is(SourceType.TIMERDATA)); }
@Test public void initFailureWithRulesInPackageWithMultipleActionTag() { diagnosisService = new DiagnosisService(problemOccurrenceConsumer, new ArrayList<String>() { private static final long serialVersionUID = 1L; { add("rocks.inspectit.server.diagnosis.engine.testrules"); } }, 2, 50L, 2); InvocationSequenceData invocationSequenceData = new InvocationSequenceData(); invocationSequenceData.setDuration(5000d); assertThat(diagnosisService.init(), is(false)); }
@Test private void ifTheAggregatedObjectIsNotDefineInTheMapItMustBeAggregated() { InvocationSequenceData invocationSequenceData = new InvocationSequenceData(new Timestamp(10L), 10L, 20L, 2L); diagnosisDataAggregationPerformer = new DiagnosisDataAggregationPerformer(); TimerData timerData = new TimerData(new Timestamp(10), 10, 10, 108L); invocationSequenceData.setTimerData(timerData); diagnosisDataAggregationPerformer.aggregateInvocationSequenceData(invocationSequenceData); List<AggregatedDiagnosisData> resultList = diagnosisDataAggregationPerformer.getAggregationResultList(); assertThat("The aggregated object must have the same method ident that the invocationSequenceData", resultList.get(0).getMethodIdent(), equalTo(invocationSequenceData.getMethodIdent())); }
@Test public void initFailureWithoutRules() { diagnosisService = new DiagnosisService(problemOccurrenceConsumer, new ArrayList<String>() { private static final long serialVersionUID = 1L; { add("rocks.inspectit.shared.all"); } }, 2, 50L, 2); InvocationSequenceData invocationSequenceData = new InvocationSequenceData(); invocationSequenceData.setDuration(5000d); assertThat(diagnosisService.init(), is(false)); }
@Test(expectedExceptions = IllegalArgumentException.class) public void initFailureWithNegativeNumberOfSessionWorkers() { diagnosisService = new DiagnosisService(problemOccurrenceConsumer, new ArrayList<String>() { private static final long serialVersionUID = 1L; { add("rocks.inspectit.server.diagnosis.service.rules.testrules"); } }, -2, 50L, 2); InvocationSequenceData invocationSequenceData = new InvocationSequenceData(); invocationSequenceData.setDuration(5000d); assertThat(diagnosisService.init(), is(false)); }
@Test private void musteReturnAnInstanceWithDataBaseSourceTypeDataIfHasSqlData() { InvocationSequenceData invocationSequenceData = new InvocationSequenceData(new Timestamp(10L), 10L, 20L, 108L); SqlStatementData sqlStatementData = new SqlStatementData(new Timestamp(10), 10, 10, 108L); sqlStatementData.setCount(1); sqlStatementData.setSql("blahblahblah"); invocationSequenceData.setSqlStatementData(sqlStatementData); AggregatedDiagnosisData aggregatedDiagnosisData = DiagnosisDataAggregator.getInstance().getAggregatedDiagnosisData(invocationSequenceData); assertThat("The object must have DATABASE as source type", aggregatedDiagnosisData.getSourceType(), is(SourceType.DATABASE)); }
@Test public void getExclusiveDurationMustReturnTheExclusiveDurationOfTheTimerDataWhenItIsASqlData() { InvocationSequenceData invocationData = new InvocationSequenceData(); SqlStatementData timerData = new SqlStatementData(new Timestamp(System.currentTimeMillis()), 10L, 20L, 30L); timerData.calculateExclusiveMin(300d); timerData.setExclusiveDuration(300d); timerData.setCount(1); invocationData.setSqlStatementData(timerData); double exclusiveDuration = DiagnosisHelper.getExclusiveDuration(invocationData); assertThat("Exclusive duration must be 300.", exclusiveDuration, is(timerData.getExclusiveDuration())); } }
@Test(expectedExceptions = IllegalArgumentException.class) public void cannotBeDiagnosedWithBaselineNegative() { diagnosisService = new DiagnosisService(problemOccurrenceConsumer, new ArrayList<String>() { private static final long serialVersionUID = 1L; { add("rocks.inspectit.server.diagnosis.service.rules.testrules"); } }, 2, 50L, 2); InvocationSequenceData invocationSequenceData = new InvocationSequenceData(); invocationSequenceData.setDuration(5000d); diagnosisService.diagnose(invocationSequenceData, -1); }
@Test private void musteReturnAnObjectWithAPairLongStringIfTheTimerDataHasSqlData() { InvocationSequenceData invocationSequenceData = new InvocationSequenceData(new Timestamp(10L), 10L, 20L, 108L); SqlStatementData sqlStatementData = new SqlStatementData(new Timestamp(10), 10, 10, 108L); sqlStatementData.setCount(1); sqlStatementData.setSql("blahblahblah"); invocationSequenceData.setSqlStatementData(sqlStatementData); TimerData timerData = new TimerData(); invocationSequenceData.setTimerData(timerData); Pair<Long, String> aggregationKey = (Pair<Long, String>) DiagnosisDataAggregator.getInstance().getAggregationKey(invocationSequenceData); assertThat("The string of the pair must be the sql data", aggregationKey.getSecond(), is(sqlStatementData.getSql())); }
@Test public void dataIsProcessedWhenAllTheConditionsAreFulfilled() { InvocationSequenceData invocationSequenceRoot = new InvocationSequenceData(); invocationSequenceRoot.setId(1); invocationSequenceRoot.setDuration(1500d); cmrProcessor.setBaseline(1000); cmrProcessor.setDiagnosisEnabled(true); cmrProcessor.setInfluxActive(true); boolean canBeProcessed = cmrProcessor.canBeProcessed(invocationSequenceRoot); assertThat("Data must be processed when all the conditions are fulfilled. ", canBeProcessed, is(true)); } }
InvocationSequenceData createSequence(Span span) { InvocationSequenceData data = new InvocationSequenceData(); data.setId(idSequence++); if (span != null) { data.setSpanIdent(span.getSpanIdent()); } data.setTimeStamp(new Timestamp(timeSequence++)); return data; }
@Test public void dataIsNotProcessedWhenTheTimeLowerThanTheBaseline() { InvocationSequenceData invocationSequenceRoot = new InvocationSequenceData(); invocationSequenceRoot.setId(1); invocationSequenceRoot.setDuration(500d); cmrProcessor.setBaseline(1000); cmrProcessor.setDiagnosisEnabled(true); cmrProcessor.setInfluxActive(true); boolean canBeProcessed = cmrProcessor.canBeProcessed(invocationSequenceRoot); assertThat("Data cannot be processed when time is lower than the set in the baseline.", canBeProcessed, is(false)); }