From f7d3415976823ae74b390fbcc7ae9b06e972f9d1 Mon Sep 17 00:00:00 2001 From: Nils Christian Ehmke <nie@informatik.uni-kiel.de> Date: Tue, 16 Dec 2014 17:00:01 +0100 Subject: [PATCH] Added some tests --- build.gradle | 8 +- .../stages/RecordSimplificatorTest.java | 50 +++++++ .../stages/TraceReconstructorTest.java | 136 ++++++++++++++++++ 3 files changed, 191 insertions(+), 3 deletions(-) create mode 100644 src/test/java/kieker/gui/model/importer/stages/RecordSimplificatorTest.java create mode 100644 src/test/java/kieker/gui/model/importer/stages/TraceReconstructorTest.java diff --git a/build.gradle b/build.gradle index d82708b1..762d7fe2 100644 --- a/build.gradle +++ b/build.gradle @@ -32,9 +32,11 @@ dependencies { linuxX64Runtime 'org.eclipse.swt:org.eclipse.swt.gtk.linux.x86_64:4.4' compile 'net.sourceforge.teetime:teetime:1.0-SNAPSHOT' - compile 'net.sourceforge.teetime-stages:teetime-stages:1.0-SNAPSHOT' - compile 'net.kieker-monitoring:kieker:1.11-SNAPSHOT' - compile 'org.eclipse:jface:3.2.1-M20060908-1000' + compile 'net.sourceforge.teetime-stages:teetime-stages:1.0-SNAPSHOT' + compile 'net.kieker-monitoring:kieker:1.11-SNAPSHOT' + compile 'org.eclipse:jface:3.2.1-M20060908-1000' + + testCompile 'org.hamcrest:hamcrest-core:1.3' } // Add the provided-scoped dependencies to the classpaths diff --git a/src/test/java/kieker/gui/model/importer/stages/RecordSimplificatorTest.java b/src/test/java/kieker/gui/model/importer/stages/RecordSimplificatorTest.java new file mode 100644 index 00000000..8277b753 --- /dev/null +++ b/src/test/java/kieker/gui/model/importer/stages/RecordSimplificatorTest.java @@ -0,0 +1,50 @@ +package kieker.gui.model.importer.stages; + +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +import java.util.ArrayList; +import java.util.List; + +import kieker.common.record.flow.trace.operation.BeforeOperationEvent; +import kieker.gui.model.domain.Record; + +import org.junit.Before; +import org.junit.Test; + +import teetime.framework.pipe.IPipeFactory; +import teetime.framework.pipe.SingleElementPipeFactory; +import teetime.stage.CollectorSink; + +public class RecordSimplificatorTest { + + private List<Record> recordCollectorList; + private RecordSimplificator simplificatorUnderTest; + private CollectorSink<Record> recordCollector; + + @Before + public void initializeRecordSimplificator() { + this.recordCollectorList = new ArrayList<>(); + + this.simplificatorUnderTest = new RecordSimplificator(); + this.recordCollector = new CollectorSink<>(this.recordCollectorList); + + final IPipeFactory pipeFactory = new SingleElementPipeFactory(); + pipeFactory.create(this.simplificatorUnderTest.getOutputPort(), this.recordCollector.getInputPort()); + } + + @Test + public void simplificationShouldPreserveContent() { + final BeforeOperationEvent record = new BeforeOperationEvent(1, 2, 3, "Bookstore()", "Bookstore"); + this.simplificatorUnderTest.execute(record); + + assertThat(this.recordCollectorList, hasSize(1)); + + final Record simplifiedRecord = this.recordCollectorList.get(0); + assertThat(simplifiedRecord.getType(), is(record.getClass().getCanonicalName())); + assertThat(simplifiedRecord.getRepresentation(), is(record.toString())); + assertThat(simplifiedRecord.getTimestamp(), is(record.getLoggingTimestamp())); + } + +} diff --git a/src/test/java/kieker/gui/model/importer/stages/TraceReconstructorTest.java b/src/test/java/kieker/gui/model/importer/stages/TraceReconstructorTest.java new file mode 100644 index 00000000..a008e929 --- /dev/null +++ b/src/test/java/kieker/gui/model/importer/stages/TraceReconstructorTest.java @@ -0,0 +1,136 @@ +package kieker.gui.model.importer.stages; + +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +import java.util.ArrayList; +import java.util.List; + +import kieker.common.record.flow.IFlowRecord; +import kieker.common.record.flow.trace.TraceMetadata; +import kieker.common.record.flow.trace.operation.AfterOperationEvent; +import kieker.common.record.flow.trace.operation.AfterOperationFailedEvent; +import kieker.common.record.flow.trace.operation.BeforeOperationEvent; +import kieker.gui.model.domain.Execution; + +import org.junit.Before; +import org.junit.Test; + +import teetime.framework.pipe.IPipeFactory; +import teetime.framework.pipe.SingleElementPipeFactory; +import teetime.stage.CollectorSink; + +public class TraceReconstructorTest { + + private List<Execution> traceCollectorList; + private TraceReconstructor reconstructorUnderTest; + private CollectorSink<Execution> traceCollector; + + @Before + public void initializeTraceReconstructor() { + this.traceCollectorList = new ArrayList<>(); + + this.reconstructorUnderTest = new TraceReconstructor(); + this.traceCollector = new CollectorSink<>(this.traceCollectorList); + + final IPipeFactory pipeFactory = new SingleElementPipeFactory(); + pipeFactory.create(this.reconstructorUnderTest.getOutputPort(), this.traceCollector.getInputPort()); + } + + @Test + public void reconstructionOfSingleTraceShouldWork() { + final IFlowRecord[] records = new IFlowRecord[9]; + + records[0] = new TraceMetadata(1, 1, TraceMetadata.NO_SESSION_ID, TraceMetadata.NO_HOSTNAME, TraceMetadata.NO_PARENT_TRACEID, TraceMetadata.NO_PARENT_ORDER_INDEX); + records[1] = new BeforeOperationEvent(1, 1, 1, "main()", "Main"); + records[2] = new BeforeOperationEvent(1, 1, 1, "Bookstore()", "Bookstore"); + records[3] = new AfterOperationEvent(1, 1, 1, "Bookstore()", "Bookstore"); + records[4] = new BeforeOperationEvent(1, 1, 1, "Catalog()", "Catalog"); + records[5] = new BeforeOperationEvent(1, 1, 1, "CRM()", "CRM"); + records[6] = new AfterOperationEvent(1, 1, 1, "CRM()", "CRM"); + records[7] = new AfterOperationEvent(1, 1, 1, "Catalog()", "Catalog"); + records[8] = new AfterOperationEvent(1, 1, 1, "main()", "Main"); + + for (final IFlowRecord record : records) { + this.reconstructorUnderTest.execute(record); + } + assertThat(this.traceCollectorList, hasSize(1)); + + final Execution trace = this.traceCollectorList.get(0); + assertThat(trace.getOperation(), is("main()")); + assertThat(trace.getChildren(), hasSize(2)); + assertThat(trace.getChildren().get(0).getOperation(), is("Bookstore()")); + assertThat(trace.getChildren().get(1).getOperation(), is("Catalog()")); + assertThat(trace.getChildren().get(1).getChildren(), hasSize(1)); + assertThat(trace.getChildren().get(1).getChildren().get(0).getOperation(), is("CRM()")); + } + + @Test + public void reconstructionOfInterleavedTracesShouldWork() { + final IFlowRecord[] records = new IFlowRecord[9]; + + records[0] = new TraceMetadata(1, 1, TraceMetadata.NO_SESSION_ID, TraceMetadata.NO_HOSTNAME, TraceMetadata.NO_PARENT_TRACEID, TraceMetadata.NO_PARENT_ORDER_INDEX); + records[1] = new BeforeOperationEvent(1, 1, 1, "main()", "Main"); + records[2] = new TraceMetadata(2, 1, TraceMetadata.NO_SESSION_ID, TraceMetadata.NO_HOSTNAME, TraceMetadata.NO_PARENT_TRACEID, TraceMetadata.NO_PARENT_ORDER_INDEX); + records[3] = new BeforeOperationEvent(1, 2, 1, "Bookstore()", "Bookstore"); + records[4] = new AfterOperationEvent(1, 1, 1, "main()", "Main"); + records[5] = new AfterOperationEvent(1, 2, 1, "Bookstore()", "Bookstore"); + + for (final IFlowRecord record : records) { + this.reconstructorUnderTest.execute(record); + } + assertThat(this.traceCollectorList, hasSize(2)); + + final Execution fstTrace = this.traceCollectorList.get(0); + final Execution sndTrace = this.traceCollectorList.get(1); + + assertThat(fstTrace.getOperation(), is("main()")); + assertThat(sndTrace.getOperation(), is("Bookstore()")); + } + + @Test + public void reconstructionOfCompleteFailedTraceShouldWork() { + final IFlowRecord[] records = new IFlowRecord[9]; + + records[0] = new TraceMetadata(1, 1, TraceMetadata.NO_SESSION_ID, TraceMetadata.NO_HOSTNAME, TraceMetadata.NO_PARENT_TRACEID, TraceMetadata.NO_PARENT_ORDER_INDEX); + records[1] = new BeforeOperationEvent(1, 1, 1, "main()", "Main"); + records[2] = new BeforeOperationEvent(1, 1, 1, "Bookstore()", "Bookstore"); + records[3] = new AfterOperationFailedEvent(1, 1, 1, "Bookstore()", "Bookstore", "NullPointerException"); + records[8] = new AfterOperationFailedEvent(1, 1, 1, "main()", "Main", "IllegalArgumentException"); + + for (final IFlowRecord record : records) { + this.reconstructorUnderTest.execute(record); + } + assertThat(this.traceCollectorList, hasSize(1)); + + final Execution trace = this.traceCollectorList.get(0); + assertThat(trace.isFailed(), is(true)); + assertThat(trace.getFailedCause(), is("IllegalArgumentException")); + assertThat(trace.getChildren().get(0).isFailed(), is(true)); + assertThat(trace.getChildren().get(0).getFailedCause(), is("NullPointerException")); + } + + @Test + public void reconstructionOfPartialFailedTraceShouldWork() { + final IFlowRecord[] records = new IFlowRecord[9]; + + records[0] = new TraceMetadata(1, 1, TraceMetadata.NO_SESSION_ID, TraceMetadata.NO_HOSTNAME, TraceMetadata.NO_PARENT_TRACEID, TraceMetadata.NO_PARENT_ORDER_INDEX); + records[1] = new BeforeOperationEvent(1, 1, 1, "main()", "Main"); + records[2] = new BeforeOperationEvent(1, 1, 1, "Bookstore()", "Bookstore"); + records[3] = new AfterOperationFailedEvent(1, 1, 1, "Bookstore()", "Bookstore", "NullPointerException"); + records[8] = new AfterOperationEvent(1, 1, 1, "main()", "Main"); + + for (final IFlowRecord record : records) { + this.reconstructorUnderTest.execute(record); + } + assertThat(this.traceCollectorList, hasSize(1)); + + final Execution trace = this.traceCollectorList.get(0); + assertThat(trace.isFailed(), is(false)); + assertThat(trace.containsFailure(), is(true)); + assertThat(trace.getChildren().get(0).isFailed(), is(true)); + assertThat(trace.getChildren().get(0).getFailedCause(), is("NullPointerException")); + } + +} -- GitLab