diff options
| author | Phil Harvey <philharveyonline@apache.org> | 2013-02-23 15:17:42 +0000 |
|---|---|---|
| committer | Phil Harvey <philharveyonline@apache.org> | 2013-02-23 15:17:42 +0000 |
| commit | ee8380c8f9089e396c0fcaa12ebc3d16aab8f25e (patch) | |
| tree | 9f5500f581373c914a707aeafb8cf0c823d70cbb /qpid/java/perftests/visualisation-jfc/src/test | |
| parent | 35a5dcbeab7bd020dad9ad22c893b799341c444c (diff) | |
| download | qpid-python-ee8380c8f9089e396c0fcaa12ebc3d16aab8f25e.tar.gz | |
QPID-4597: Java performance tests now support visualisation of timeseries data.
Refactored ChartBuilder hierarchy to reduce duplication, and renamed several classes to make them more intuitive.
Added timeseries chart definitions in perftests/etc/c/timeseries/.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1449342 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/perftests/visualisation-jfc/src/test')
6 files changed, 276 insertions, 48 deletions
diff --git a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/BaseChartBuilderTest.java b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/BaseChartBuilderTest.java new file mode 100644 index 0000000000..85ba84fd5e --- /dev/null +++ b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/BaseChartBuilderTest.java @@ -0,0 +1,125 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 org.apache.qpid.disttest.charting.chartbuilder; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.*; + +import java.util.List; + +import junit.framework.TestCase; + +import org.apache.qpid.disttest.charting.definition.ChartingDefinition; +import org.apache.qpid.disttest.charting.definition.SeriesDefinition; +import org.apache.qpid.disttest.charting.seriesbuilder.DatasetHolder; +import org.apache.qpid.disttest.charting.seriesbuilder.SeriesBuilder; +import org.jfree.chart.JFreeChart; +import org.jfree.chart.plot.CategoryPlot; +import org.jfree.chart.plot.Plot; +import org.jfree.chart.plot.PlotOrientation; +import org.jfree.chart.title.TextTitle; +import org.jfree.data.general.Dataset; + +public class BaseChartBuilderTest extends TestCase +{ + private static final String CHART_TITLE = "CHART_TITLE"; + private static final String CHART_SUB_TITLE = "CHART_SUB_TITLE"; + private static final String X_TITLE = "X_TITLE"; + private static final String Y_TITLE = "Y_TITLE"; + + @SuppressWarnings("unchecked") + private List<SeriesDefinition> _seriesDefinitions = mock(List.class); + + private ChartingDefinition _chartingDefinition = mock(ChartingDefinition.class); + private SeriesStrokeAndPaintApplier _strokeAndPaintApplier = mock(SeriesStrokeAndPaintApplier.class); + private DatasetHolder _datasetHolder = mock(DatasetHolder.class); + private SeriesPainter _seriesPainter = mock(SeriesPainter.class); + + private SeriesBuilder _seriesBuilder = mock(SeriesBuilder.class); + + private JFreeChart _jFreeChart; + + @Override + protected void setUp() throws Exception + { + super.setUp(); + + Plot plot = new CategoryPlot(); + _jFreeChart = new JFreeChart(plot); + + when(_chartingDefinition.getChartTitle()).thenReturn(CHART_TITLE); + when(_chartingDefinition.getChartSubtitle()).thenReturn(CHART_SUB_TITLE); + when(_chartingDefinition.getXAxisTitle()).thenReturn(X_TITLE); + when(_chartingDefinition.getYAxisTitle()).thenReturn(Y_TITLE); + when(_chartingDefinition.getSeriesDefinitions()).thenReturn(_seriesDefinitions ); + } + + public void testBuildChart() + { + BaseChartBuilder chartBuilder = new ChartBuilder(_seriesBuilder, _strokeAndPaintApplier, _datasetHolder) + { + @Override + protected JFreeChart createChartImpl(String title, String xAxisTitle, String yAxisTitle, Dataset dataset, PlotOrientation plotOrientation, boolean showLegend, boolean showToolTips, boolean showUrls) + { + assertEquals(CHART_TITLE, title); + assertEquals(X_TITLE, xAxisTitle); + assertEquals(Y_TITLE, yAxisTitle); + + return _jFreeChart; + } + }; + + JFreeChart chart = chartBuilder.buildChart(_chartingDefinition); + + assertEquals(BaseChartBuilder.BLUE_GRADIENT, chart.getBackgroundPaint()); + assertEquals("The *second* subtitle of the generated chart should have the text from the chart definition", + CHART_SUB_TITLE, ((TextTitle)chart.getSubtitle(1)).getText()); + verify(_seriesPainter).applySeriesAppearance(_jFreeChart, _seriesDefinitions, _strokeAndPaintApplier); + } + + /** + * Extends BaseChartBuilder to allow us to plug in in mock dependencies + */ + private abstract class ChartBuilder extends BaseChartBuilder + { + private SeriesStrokeAndPaintApplier _seriesStrokeAndPaintApplier; + private DatasetHolder _datasetHolder; + + private ChartBuilder(SeriesBuilder seriesBuilder, SeriesStrokeAndPaintApplier seriesStrokeAndPaintApplier, DatasetHolder datasetHolder) + { + super(seriesBuilder); + _seriesStrokeAndPaintApplier = seriesStrokeAndPaintApplier; + _datasetHolder = datasetHolder; + setSeriesPainter(_seriesPainter); + } + + @Override + protected SeriesStrokeAndPaintApplier newStrokeAndPaintApplier() + { + return _seriesStrokeAndPaintApplier; + } + + @Override + protected DatasetHolder newDatasetHolder() + { + return _datasetHolder; + } + } +} diff --git a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/ChartBuilderFactoryTest.java b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/ChartBuilderFactoryTest.java index e735fb58c6..dcd9f93830 100644 --- a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/ChartBuilderFactoryTest.java +++ b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/ChartBuilderFactoryTest.java @@ -59,4 +59,10 @@ public class ChartBuilderFactoryTest extends TestCase ChartBuilder builder = ChartBuilderFactory.createChartBuilder(ChartType.XYLINE, _seriesBuilder); assertTrue(builder instanceof XYLineChartBuilder); } + + public void testTimeSeriesLineChart() + { + ChartBuilder builder = ChartBuilderFactory.createChartBuilder(ChartType.TIMELINE, _seriesBuilder); + assertTrue(builder instanceof TimeSeriesLineChartBuilder); + } } diff --git a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/ChartProductionTest.java b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/ChartProductionTest.java index fe9cb2aefe..6d80a55770 100644 --- a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/ChartProductionTest.java +++ b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/ChartProductionTest.java @@ -19,17 +19,21 @@ */ package org.apache.qpid.disttest.charting.chartbuilder; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import java.io.File; import java.util.Collections; +import java.util.Date; import java.util.Iterator; import java.util.List; +import junit.framework.TestCase; + import org.apache.qpid.disttest.charting.ChartType; import org.apache.qpid.disttest.charting.definition.ChartingDefinition; import org.apache.qpid.disttest.charting.definition.SeriesDefinition; -import org.apache.qpid.disttest.charting.seriesbuilder.SeriesBuilderCallback; +import org.apache.qpid.disttest.charting.seriesbuilder.DatasetHolder; import org.apache.qpid.disttest.charting.seriesbuilder.SeriesBuilder; import org.apache.qpid.disttest.charting.seriesbuilder.SeriesRow; import org.apache.qpid.disttest.charting.writer.ChartWriter; @@ -37,14 +41,12 @@ import org.apache.qpid.test.utils.TestFileUtils; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.title.ShortTextTitle; - -import junit.framework.TestCase; +import org.jfree.data.general.Dataset; /** * Tests the production of the different chart types. To manually * verify the generated output, set the system property {@link #RETAIN_TEST_CHARTS} * to prevent the automatic deletion of the test chart directory. - * */ public class ChartProductionTest extends TestCase { @@ -55,6 +57,16 @@ public class ChartProductionTest extends TestCase private static final String TEST_SERIESLEGEND = "TEST_SERIESLEGEND"; + private static final SeriesRow[] SIMPLE_SERIES_ROWS = new SeriesRow[] + { + new SeriesRow(1d, 1d), + new SeriesRow(2d, 2d), + new SeriesRow(3d, 3d), + new SeriesRow(4d, 4d), + new SeriesRow(5d, 5d), + new SeriesRow(6d, 6d), + }; + private static final String RETAIN_TEST_CHARTS = "retainTestCharts"; private SeriesDefinition _seriesDefinition = mock(SeriesDefinition.class); @@ -75,7 +87,7 @@ public class ChartProductionTest extends TestCase when(_chartingDefinition.getChartSubtitle()).thenReturn(TEST_CHARTSUBTITLE); when(_chartingDefinition.getXAxisTitle()).thenReturn(TEST_XAXIS); when(_chartingDefinition.getYAxisTitle()).thenReturn(TEST_YAXIS); - when(_chartingDefinition.getSeries()).thenReturn(Collections.singletonList(_seriesDefinition)); + when(_chartingDefinition.getSeriesDefinitions()).thenReturn(Collections.singletonList(_seriesDefinition)); File chartDir = TestFileUtils.createTestDirectory("charts", false); if (!System.getProperties().containsKey(RETAIN_TEST_CHARTS)) @@ -92,7 +104,7 @@ public class ChartProductionTest extends TestCase public void testBarChart() throws Exception { - ChartBuilder builder = ChartBuilderFactory.createChartBuilder(ChartType.BAR, new SampleSeriesBuilder()); + ChartBuilder builder = ChartBuilderFactory.createChartBuilder(ChartType.BAR, new SampleSeriesBuilder(SIMPLE_SERIES_ROWS)); assertChartTitlesAndWriteToFile(builder); } @@ -129,36 +141,38 @@ public class ChartProductionTest extends TestCase assertChartTitlesAndWriteToFile(builder); } - public void testStatiscticalBarChart() throws Exception + public void testTimeSeriesLineChart() throws Exception + { + SeriesRow[] timelineSeriesRows = new SeriesRow[] + { + new SeriesRow(new Date(1), 1d), + new SeriesRow(new Date(2), 2d), + new SeriesRow(new Date(3), 3d), + new SeriesRow(new Date(4), 4d), + new SeriesRow(new Date(5), 5d), + new SeriesRow(new Date(6), 6d), + }; + ChartBuilder builder = ChartBuilderFactory.createChartBuilder( + ChartType.TIMELINE, + new SampleSeriesBuilder(timelineSeriesRows)); + + assertChartTitlesAndWriteToFile(builder); + } + + public void testStatisticalBarChart() throws Exception { + SeriesRow[] statisticalSeriesRows = new SeriesRow[] + { + new SeriesRow(1d, 1d, 0.5d), + new SeriesRow(2d, 2d, 0.4d), + new SeriesRow(4d, 4d, 0.3d), + new SeriesRow(5d, 5d, 0.2d), + new SeriesRow(6d, 6d, 0.1d) + }; + ChartBuilder builder = ChartBuilderFactory.createChartBuilder( ChartType.STATISTICAL_BAR, - new SeriesBuilder() - { - private SeriesBuilderCallback _dataPointCallback; - - @Override - public void build(List<SeriesDefinition> seriesDefinitions) - { - for (Iterator<SeriesDefinition> iterator = seriesDefinitions.iterator(); iterator.hasNext();) - { - SeriesDefinition seriesDefinition = iterator.next(); - _dataPointCallback.beginSeries(seriesDefinition); - _dataPointCallback.addDataPointToSeries(seriesDefinition, new SeriesRow(1d, 1d, 0.5d)); - _dataPointCallback.addDataPointToSeries(seriesDefinition, new SeriesRow(2d, 2d, 0.4d)); - _dataPointCallback.addDataPointToSeries(seriesDefinition, new SeriesRow(4d, 4d, 0.3d)); - _dataPointCallback.addDataPointToSeries(seriesDefinition, new SeriesRow(5d, 5d, 0.2d)); - _dataPointCallback.addDataPointToSeries(seriesDefinition, new SeriesRow(6d, 3d, 0.1d)); - _dataPointCallback.endSeries(seriesDefinition); - } - } - - @Override - public void setSeriesBuilderCallback(SeriesBuilderCallback dataPointCallback) - { - _dataPointCallback = dataPointCallback; - } - }); + new SampleSeriesBuilder(statisticalSeriesRows)); assertChartTitlesAndWriteToFile(builder); } @@ -184,28 +198,38 @@ public class ChartProductionTest extends TestCase private class SampleSeriesBuilder implements SeriesBuilder { - private SeriesBuilderCallback _dataPointCallback; + private DatasetHolder _datasetHolder; + private SeriesRow[] _sampleSeriesRows = SIMPLE_SERIES_ROWS; + + public SampleSeriesBuilder() + { + } + + public SampleSeriesBuilder(SeriesRow[] sampleSeriesRows) + { + _sampleSeriesRows = sampleSeriesRows; + } @Override - public void build(List<SeriesDefinition> seriesDefinitions) + public Dataset build(List<SeriesDefinition> seriesDefinitions) { for (Iterator<SeriesDefinition> iterator = seriesDefinitions.iterator(); iterator.hasNext();) { SeriesDefinition seriesDefinition = iterator.next(); - _dataPointCallback.beginSeries(seriesDefinition); - _dataPointCallback.addDataPointToSeries(seriesDefinition, new SeriesRow(1d, 1d)); - _dataPointCallback.addDataPointToSeries(seriesDefinition, new SeriesRow(2d, 2d)); - _dataPointCallback.addDataPointToSeries(seriesDefinition, new SeriesRow(4d, 4d)); - _dataPointCallback.addDataPointToSeries(seriesDefinition, new SeriesRow(5d, 5d)); - _dataPointCallback.addDataPointToSeries(seriesDefinition, new SeriesRow(6d, 3d)); - _dataPointCallback.endSeries(seriesDefinition); + _datasetHolder.beginSeries(seriesDefinition); + for(SeriesRow seriesRow : _sampleSeriesRows) + { + _datasetHolder.addDataPointToSeries(seriesDefinition, seriesRow); + } + _datasetHolder.endSeries(seriesDefinition); } + return _datasetHolder.getPopulatedDataset(); } @Override - public void setSeriesBuilderCallback(SeriesBuilderCallback dataPointCallback) + public void setDatasetHolder(DatasetHolder dataPointCallback) { - _dataPointCallback = dataPointCallback; + _datasetHolder = dataPointCallback; } } } diff --git a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/TimeSeriesBuilderCallbackTest.java b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/TimeSeriesBuilderCallbackTest.java new file mode 100644 index 0000000000..e1ee9510b4 --- /dev/null +++ b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/TimeSeriesBuilderCallbackTest.java @@ -0,0 +1,73 @@ +package org.apache.qpid.disttest.charting.chartbuilder; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.Calendar; +import java.util.Date; +import java.util.TimeZone; + +import junit.framework.TestCase; + +import org.apache.qpid.disttest.charting.definition.SeriesDefinition; +import org.apache.qpid.disttest.charting.seriesbuilder.SeriesRow; +import org.jfree.data.time.TimeSeries; +import org.jfree.data.time.TimeSeriesCollection; +import org.jfree.data.time.TimeSeriesDataItem; + +public class TimeSeriesBuilderCallbackTest extends TestCase +{ + private static final String SERIES_LEGEND = "mySeriesLegend"; + + private static final int NUMBER_OF_DATA_POINTS = 3; + + private Date[] _dates; + private double[] _values; + + @Override + protected void setUp() throws Exception + { + super.setUp(); + Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+00:00")); + + calendar.set(2013, Calendar.JANUARY, 1); + Date jan1 = calendar.getTime(); + + calendar.set(2013, Calendar.JANUARY, 2); + Date jan2 = calendar.getTime(); + + calendar.set(2013, Calendar.JANUARY, 3); + Date jan3 = calendar.getTime(); + + _dates = new Date[] {jan1, jan2, jan3}; + _values = new double[] {2.0, 4.0, 8.0}; + } + + + public void testAddPointToSeries() + { + TimeSeriesHolder timeSeriesHolder = new TimeSeriesHolder(); + + SeriesDefinition seriesDefinition = mock(SeriesDefinition.class); + when(seriesDefinition.getSeriesLegend()).thenReturn(SERIES_LEGEND); + + timeSeriesHolder.beginSeries(seriesDefinition); + + timeSeriesHolder.addDataPointToSeries(seriesDefinition, new SeriesRow(_dates[0], _values[0])); + timeSeriesHolder.addDataPointToSeries(seriesDefinition, new SeriesRow(_dates[1], _values[1])); + timeSeriesHolder.addDataPointToSeries(seriesDefinition, new SeriesRow(_dates[2], _values[2])); + + timeSeriesHolder.endSeries(seriesDefinition); + + TimeSeriesCollection timeSeriesCollection = (TimeSeriesCollection) timeSeriesHolder.getPopulatedDataset(); + + TimeSeries actualTimeSeries = timeSeriesCollection.getSeries(SERIES_LEGEND); + for(int i = 0; i < NUMBER_OF_DATA_POINTS; i++) + { + TimeSeriesDataItem dataItem0 = actualTimeSeries.getDataItem(i); + assertEquals(_dates[i].getTime(), dataItem0.getPeriod().getMiddleMillisecond()); + assertEquals(_values[i], dataItem0.getValue()); + } + } + +} diff --git a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/definition/ChartingDefinitionCreatorTest.java b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/definition/ChartingDefinitionCreatorTest.java index a626ad9466..e300e00478 100644 --- a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/definition/ChartingDefinitionCreatorTest.java +++ b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/definition/ChartingDefinitionCreatorTest.java @@ -96,7 +96,7 @@ public class ChartingDefinitionCreatorTest extends TestCase String stemOnly = testDefFile.getName().replaceFirst("\\.chartdef", ""); assertEquals(stemOnly, definition1.getChartStemName()); - final List<SeriesDefinition> seriesDefinitions = definition1.getSeries(); + final List<SeriesDefinition> seriesDefinitions = definition1.getSeriesDefinitions(); assertEquals(1, seriesDefinitions.size()); SeriesDefinition seriesDefinition = seriesDefinitions.get(0); assertEquals(TEST_SERIES_SELECT_STATEMENT, seriesDefinition.getSeriesStatement()); diff --git a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/seriesbuilder/JdbcSeriesBuilderTest.java b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/seriesbuilder/JdbcSeriesBuilderTest.java index 20d5082448..a5e697b3f4 100644 --- a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/seriesbuilder/JdbcSeriesBuilderTest.java +++ b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/seriesbuilder/JdbcSeriesBuilderTest.java @@ -41,7 +41,7 @@ public class JdbcSeriesBuilderTest extends TestCase private static final String TEST_SERIES1_COLOUR_NAME = "blue"; private static final Integer TEST_SERIES1_STROKE_WIDTH = 3; - private SeriesBuilderCallback _seriesWalkerCallback = mock(SeriesBuilderCallback.class); + private DatasetHolder _seriesWalkerCallback = mock(DatasetHolder.class); private File _testTempDir; @@ -60,7 +60,7 @@ public class JdbcSeriesBuilderTest extends TestCase JdbcSeriesBuilder seriesBuilder = new JdbcSeriesBuilder("org.relique.jdbc.csv.CsvDriver", null); - seriesBuilder.setSeriesBuilderCallback(_seriesWalkerCallback); + seriesBuilder.setDatasetHolder(_seriesWalkerCallback); seriesBuilder.build(Collections.singletonList(seriesDefinition)); |
