[jboss-svn-commits] JBL Code SVN: r35597 - in labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src: main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Oct 20 10:21:42 EDT 2010
Author: velias
Date: 2010-10-20 10:21:42 -0400 (Wed, 20 Oct 2010)
New Revision: 35597
Added:
labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/ValueSourceBase.java
labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/ReportGeneratorTest.java
Modified:
labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/ReportGenerator.java
labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/Aggregator.java
labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/AggregatorUtils.java
labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/FISHEYEValueSource.java
labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/JIRAValueSource.java
labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/SBSValueSource.java
labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/ValueSource.java
labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/AggregatorUtilsTest.java
Log:
ReportGenerator implemented incl. unit tets
Modified: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/ReportGenerator.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/ReportGenerator.java 2010-10-20 12:05:21 UTC (rev 35596)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/ReportGenerator.java 2010-10-20 14:21:42 UTC (rev 35597)
@@ -1,14 +1,25 @@
package org.jboss.community.sbs.plugin.reports.monthly;
import java.io.InputStream;
+import java.io.StringWriter;
+import java.io.Writer;
import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
import org.jboss.community.sbs.plugin.reports.monthly.aggregator.Aggregator;
+import org.jboss.community.sbs.plugin.reports.monthly.aggregator.AggregatorUtils;
+import org.jboss.community.sbs.plugin.reports.monthly.aggregator.FISHEYEAggregator;
+import org.jboss.community.sbs.plugin.reports.monthly.aggregator.JIRAAggregator;
+import org.jboss.community.sbs.plugin.reports.monthly.aggregator.SBSAggregator;
+import org.jboss.community.sbs.plugin.reports.monthly.config.ProjectConfig;
+import org.jboss.community.sbs.plugin.reports.monthly.config.ReportConfig;
import org.jboss.community.sbs.plugin.reports.monthly.config.ReportConfigParser;
import org.jboss.community.sbs.plugin.reports.monthly.config.SystemId;
+import org.jboss.community.sbs.plugin.reports.monthly.valuesource.FISHEYEValueSource;
+import org.jboss.community.sbs.plugin.reports.monthly.valuesource.JIRAValueSource;
+import org.jboss.community.sbs.plugin.reports.monthly.valuesource.SBSValueSource;
+import au.com.bytecode.opencsv.CSVWriter;
+
/**
* JBoss.org monthly report generator.
*
@@ -16,25 +27,100 @@
*/
public class ReportGenerator {
+ public static final char CSV_FILE_SEPARATOR = ',';
+
/**
+ * Generate JBoss.org monthly report. This method is reentrant and thread safe.
*
+ * @param configFile input stream with report content configuration file. See {@link ReportConfigParser}.
+ * @param dateFrom lower time bound to generate report for
+ * @param dateTo upper time bound to generate report for
+ * @return String containing csv file with generated report data
*
- * @param configFile input stream with report content configuration file. See {@link ReportConfigParser}.
- * @param dateFrom
- * @param DateTo
- * @return
+ * @throws Exception if something goes wrong
*/
- public String generateReport(InputStream configFile, Date dateFrom, Date DateTo) {
+ public String generateReport(InputStream configFile, Date dateFrom, Date dateTo) throws Exception {
- // TODO RG parse config file
- // TODO RG prepare value sources
- // TODO RG prepare aggregators
- // TODO RG generate report
+ ReportConfig config = new ReportConfigParser().parseConfigFile(configFile);
- Map<SystemId, Aggregator> agregators = new HashMap<SystemId, Aggregator>();
+ SBSAggregator as = new SBSAggregator(new SBSValueSource(dateFrom, dateTo));
+ JIRAAggregator aj = new JIRAAggregator(new JIRAValueSource(dateFrom, dateTo));
+ FISHEYEAggregator af = new FISHEYEAggregator(new FISHEYEValueSource(dateFrom, dateTo));
- return null;
+ StringWriter writer = new StringWriter();
+ CSVWriter csvwriter = getCSVWriter(writer);
+ generateHeader(csvwriter, as, aj, af);
+
+ generateValues(csvwriter, config, as, aj, af);
+
+ return writer.toString();
}
+ /**
+ * Get CSV writer used to create result CSV file.
+ *
+ * @param writer to be filled by CSV.
+ * @return CSV writer.
+ */
+ protected CSVWriter getCSVWriter(Writer writer) {
+ return new CSVWriter(writer, CSV_FILE_SEPARATOR, CSVWriter.NO_QUOTE_CHARACTER, CSVWriter.NO_ESCAPE_CHARACTER);
+ }
+
+ /**
+ * Generate report value rows.
+ *
+ * @param csvwriter to write rows to
+ * @param config report content configuration
+ * @param aSbs SBS aggregator to use
+ * @param aJira JIRA aggregator to use
+ * @param aFisheye FihEye aggregator to use
+ * @param return number of generated rows
+ *
+ */
+ @SuppressWarnings("unchecked")
+ protected int generateValues(CSVWriter csvwriter, ReportConfig config, Aggregator aSbs, Aggregator aJira,
+ Aggregator aFisheye) {
+
+ int rowcount = 0;
+ if (config != null && !AggregatorUtils.isEmptyList(config.getProjects())) {
+
+ for (ProjectConfig pc : config.getProjects()) {
+ String[] valsbs = aSbs.getReportValues(pc.getSystemDataConfigFor(SystemId.SBS));
+ String[] valjira = aJira.getReportValues(pc.getSystemDataConfigFor(SystemId.JIRA));
+ String[] valfisheye = aFisheye.getReportValues(pc.getSystemDataConfigFor(SystemId.FISHEYE));
+
+ String[] vals = new String[1 + valsbs.length + valjira.length + valfisheye.length];
+ vals[0] = pc.getName();
+ int i = 1;
+ i = AggregatorUtils.fillArray(vals, valsbs, i);
+ i = AggregatorUtils.fillArray(vals, valjira, i);
+ i = AggregatorUtils.fillArray(vals, valfisheye, i);
+ csvwriter.writeNext(vals);
+ rowcount++;
+ }
+ }
+ return rowcount;
+ }
+
+ /**
+ * Generate report header row.
+ *
+ * @param csvwriter to write header row to
+ * @param aSbs SBS aggregator to use
+ * @param aJira JIRA aggregator to use
+ * @param aFisheye FihEye aggregator to use
+ */
+ protected void generateHeader(CSVWriter csvwriter, Aggregator<?> aSbs, Aggregator<?> aJira, Aggregator<?> aFisheye) {
+ String[] hsbs = aSbs.getHeaderValues();
+ String[] hjira = aJira.getHeaderValues();
+ String[] hfisheye = aFisheye.getHeaderValues();
+ String[] header = new String[1 + hsbs.length + hjira.length + hfisheye.length];
+ header[0] = "Project";
+ int i = 1;
+ i = AggregatorUtils.fillArray(header, hsbs, i);
+ i = AggregatorUtils.fillArray(header, hjira, i);
+ i = AggregatorUtils.fillArray(header, hfisheye, i);
+ csvwriter.writeNext(header);
+ }
}
Modified: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/Aggregator.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/Aggregator.java 2010-10-20 12:05:21 UTC (rev 35596)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/Aggregator.java 2010-10-20 14:21:42 UTC (rev 35597)
@@ -6,6 +6,9 @@
/**
* Interface for data aggregator. Aggregator is used to aggregate report values from {@link ValueSource} for one
* configuration element ({@link SystemDataConfig}) for distinct project and system.
+ * <p>
+ * New instance of {@link Aggregator} implementation is created for every report generation, so you may use instance
+ * variables if necessary, and initialize it in constructor.
*
* @author Vlastimil Elias (velias at redhat dot com)
*/
Modified: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/AggregatorUtils.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/AggregatorUtils.java 2010-10-20 12:05:21 UTC (rev 35596)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/AggregatorUtils.java 2010-10-20 14:21:42 UTC (rev 35597)
@@ -124,4 +124,22 @@
return list == null || list.isEmpty();
}
+ /**
+ * Fill data from one array to another array starting on specified position.
+ *
+ * @param master array which is filled with values
+ * @param values to fill into master
+ * @param beginIndex start index of filling in master array
+ * @return end index of filling in master array, points to first not filled item after filling
+ *
+ * @throws ArrayIndexOutOfBoundsException if master array is too small
+ */
+ public static int fillArray(String[] master, String[] values, int beginIndex) {
+ int i = beginIndex;
+ for (int j = 0; j < values.length; i++, j++) {
+ master[i] = values[j];
+ }
+ return i;
+ }
+
}
Modified: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/FISHEYEValueSource.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/FISHEYEValueSource.java 2010-10-20 12:05:21 UTC (rev 35596)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/FISHEYEValueSource.java 2010-10-20 14:21:42 UTC (rev 35597)
@@ -1,5 +1,7 @@
package org.jboss.community.sbs.plugin.reports.monthly.valuesource;
+import java.util.Date;
+
import org.jboss.community.sbs.plugin.reports.monthly.config.FishEyeRepositoryConfig;
/**
@@ -7,8 +9,18 @@
*
* @author Vlastimil Elias (velias at redhat dot com)
*/
-public class FISHEYEValueSource implements ValueSource<FishEyeRepositoryConfig> {
+public class FISHEYEValueSource extends ValueSourceBase<FishEyeRepositoryConfig> {
+ /**
+ * Constructor.
+ *
+ * @param dateFrom lower time bound to generate report for
+ * @param dateTo upper time bound to generate report for
+ */
+ public FISHEYEValueSource(Date dateFrom, Date dateTo) {
+ super(dateFrom, dateTo);
+ }
+
@Override
public String[] getValues(FishEyeRepositoryConfig id) {
// TODO implement me
Modified: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/JIRAValueSource.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/JIRAValueSource.java 2010-10-20 12:05:21 UTC (rev 35596)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/JIRAValueSource.java 2010-10-20 14:21:42 UTC (rev 35597)
@@ -1,13 +1,24 @@
package org.jboss.community.sbs.plugin.reports.monthly.valuesource;
+import java.util.Date;
/**
* Data source to obtain report value for one project in JIRA.
*
* @author Vlastimil Elias (velias at redhat dot com)
*/
-public class JIRAValueSource implements ValueSource<String> {
+public class JIRAValueSource extends ValueSourceBase<String> {
+ /**
+ * Constructor.
+ *
+ * @param dateFrom lower time bound to generate report for
+ * @param dateTo upper time bound to generate report for
+ */
+ public JIRAValueSource(Date dateFrom, Date dateTo) {
+ super(dateFrom, dateTo);
+ }
+
@Override
public String[] getValues(String projectKey) {
// TODO implement me
Modified: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/SBSValueSource.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/SBSValueSource.java 2010-10-20 12:05:21 UTC (rev 35596)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/SBSValueSource.java 2010-10-20 14:21:42 UTC (rev 35597)
@@ -1,12 +1,24 @@
package org.jboss.community.sbs.plugin.reports.monthly.valuesource;
+import java.util.Date;
+
/**
* Data source to obtain report value for one Space from SBS.
*
* @author Vlastimil Elias (velias at redhat dot com)
*/
-public class SBSValueSource implements ValueSource<SBSValueKey> {
+public class SBSValueSource extends ValueSourceBase<SBSValueKey> {
+ /**
+ * Constructor.
+ *
+ * @param dateFrom lower time bound to generate report for
+ * @param dateTo upper time bound to generate report for
+ */
+ public SBSValueSource(Date dateFrom, Date dateTo) {
+ super(dateFrom, dateTo);
+ }
+
@Override
public String[] getValues(SBSValueKey id) {
// TODO LIBOR implement SBSDataSource, return single value array!
Modified: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/ValueSource.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/ValueSource.java 2010-10-20 12:05:21 UTC (rev 35596)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/ValueSource.java 2010-10-20 14:21:42 UTC (rev 35597)
@@ -3,16 +3,20 @@
import org.jboss.community.sbs.plugin.reports.monthly.aggregator.Aggregator;
/**
- * Interface for DataSource. Data sources are used in {@link Aggregator} instances to obtain data from underlying
- * system.
+ * Interface for Report Value Source. Value sources are used in {@link Aggregator} instances to obtain report values
+ * from underlying system based on identifier appropriate for given system.
+ * <p>
+ * New instance of {@link ValueSource} implementation is created for every report generation, so you may use instance
+ * variables if necessary, and initialize it in constructor.
*
* @author Vlastimil Elias (velias at redhat dot com)
+ *
* @param T data type of identifier used to identify row of data in this data source.
*/
public interface ValueSource<T> {
/**
- * Get values from underlying system for given config element.
+ * Get values from underlying system for one config element, one key.
*
* @param id identifier to read data for
* @return values for given id
Added: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/ValueSourceBase.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/ValueSourceBase.java (rev 0)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/ValueSourceBase.java 2010-10-20 14:21:42 UTC (rev 35597)
@@ -0,0 +1,28 @@
+package org.jboss.community.sbs.plugin.reports.monthly.valuesource;
+
+import java.util.Date;
+
+/**
+ * Base class for {@link ValueSource} implementations.
+ *
+ * @author Vlastimil Elias (velias at redhat dot com)
+ *
+ * @param T data type of identifier used to identify row of data in this data source.
+ */
+public abstract class ValueSourceBase<T> implements ValueSource<T> {
+
+ protected Date dateFrom;
+ protected Date dateTo;
+
+ /**
+ * Constructor.
+ *
+ * @param dateFrom lower time bound to generate report for
+ * @param dateTo upper time bound to generate report for
+ */
+ public ValueSourceBase(Date dateFrom, Date dateTo) {
+ this.dateFrom = dateFrom;
+ this.dateTo = dateTo;
+ }
+
+}
Added: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/ReportGeneratorTest.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/ReportGeneratorTest.java (rev 0)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/ReportGeneratorTest.java 2010-10-20 14:21:42 UTC (rev 35597)
@@ -0,0 +1,140 @@
+package org.jboss.community.sbs.plugin.reports.monthly;
+
+import java.io.StringWriter;
+
+import org.jboss.community.sbs.plugin.reports.monthly.aggregator.Aggregator;
+import org.jboss.community.sbs.plugin.reports.monthly.config.ProjectConfig;
+import org.jboss.community.sbs.plugin.reports.monthly.config.ReportConfig;
+import org.jboss.community.sbs.plugin.reports.monthly.config.SystemDataConfig;
+import org.jboss.community.sbs.plugin.reports.monthly.config.SystemId;
+import org.junit.Assert;
+import org.junit.Test;
+
+import au.com.bytecode.opencsv.CSVWriter;
+
+/**
+ * Unit test for {@link ReportGenerator}.
+ *
+ * @author Vlastimil Elias (velias at redhat dot com)
+ */
+public class ReportGeneratorTest {
+
+ @Test
+ public void generateHeader() {
+
+ ReportGenerator tested = new ReportGenerator();
+
+ StringWriter writer = new StringWriter();
+ CSVWriter csvwriter = tested.getCSVWriter(writer);
+
+ Aggregator<SystemDataConfig> asbs = new MockAggregator("sbs", SystemId.SBS);
+ Aggregator<SystemDataConfig> ajira = new MockAggregator("jira", SystemId.JIRA);
+ Aggregator<SystemDataConfig> afe = new MockAggregator("fe", SystemId.FISHEYE);
+
+ tested.generateHeader(csvwriter, asbs, ajira, afe);
+ Assert.assertEquals("Project,sbs-h1,sbs-h2,jira-h1,jira-h2,fe-h1,fe-h2\n", writer.toString());
+
+ }
+
+ @Test
+ public void generateValues() {
+ ReportGenerator tested = new ReportGenerator();
+
+ MockAggregator asbs = new MockAggregator("sbs", SystemId.SBS);
+ MockAggregator ajira = new MockAggregator("jira", SystemId.JIRA);
+ MockAggregator afe = new MockAggregator("fe", SystemId.FISHEYE);
+
+ // no config
+ StringWriter writer = new StringWriter();
+ CSVWriter csvwriter = tested.getCSVWriter(writer);
+ Assert.assertEquals(0, tested.generateValues(csvwriter, null, asbs, ajira, afe));
+ Assert.assertEquals("", writer.toString());
+
+ // no project
+ writer = new StringWriter();
+ csvwriter = tested.getCSVWriter(writer);
+ ReportConfig config = new ReportConfig();
+ Assert.assertEquals(0, tested.generateValues(csvwriter, config, asbs, ajira, afe));
+ Assert.assertEquals("", writer.toString());
+
+ // single project
+ writer = new StringWriter();
+ csvwriter = tested.getCSVWriter(writer);
+ ProjectConfig pc = new ProjectConfig();
+ pc.setName("P1");
+ pc.addSystemDataConfig(new MockSystemDataConfig(SystemId.SBS));
+ pc.addSystemDataConfig(new MockSystemDataConfig(SystemId.JIRA));
+ pc.addSystemDataConfig(new MockSystemDataConfig(SystemId.FISHEYE));
+ config.addProjectConfig(pc);
+ Assert.assertEquals(1, tested.generateValues(csvwriter, config, asbs, ajira, afe));
+ Assert.assertEquals(1, asbs.checkCallCount());
+ Assert.assertEquals(1, ajira.checkCallCount());
+ Assert.assertEquals(1, afe.checkCallCount());
+ Assert.assertEquals("P1,sbs-1,sbs-2,jira-1,jira-2,fe-1,fe-2\n", writer.toString());
+
+ // multiple projects
+ writer = new StringWriter();
+ csvwriter = tested.getCSVWriter(writer);
+ pc = new ProjectConfig();
+ pc.setName("P2");
+ pc.addSystemDataConfig(new MockSystemDataConfig(SystemId.SBS));
+ pc.addSystemDataConfig(new MockSystemDataConfig(SystemId.JIRA));
+ pc.addSystemDataConfig(new MockSystemDataConfig(SystemId.FISHEYE));
+ config.addProjectConfig(pc);
+ Assert.assertEquals(2, tested.generateValues(csvwriter, config, asbs, ajira, afe));
+ Assert.assertEquals(2, asbs.checkCallCount());
+ Assert.assertEquals(2, ajira.checkCallCount());
+ Assert.assertEquals(2, afe.checkCallCount());
+ Assert.assertEquals("P1,sbs-1,sbs-2,jira-1,jira-2,fe-1,fe-2\nP2,sbs-1,sbs-2,jira-1,jira-2,fe-1,fe-2\n", writer
+ .toString());
+
+ }
+
+ /**
+ * Mock system data config used for {@link MockAggregator}.
+ */
+ protected static class MockSystemDataConfig extends SystemDataConfig {
+
+ protected MockSystemDataConfig(SystemId sid) {
+ super(sid);
+ }
+
+ }
+
+ /**
+ * Mock aggregator used on tests.
+ */
+ protected static class MockAggregator implements Aggregator<SystemDataConfig> {
+
+ public SystemId system;
+
+ public String prefix;
+
+ public int callcount = 0;
+
+ public MockAggregator(String prefix, SystemId system) {
+ this.prefix = prefix;
+ this.system = system;
+ }
+
+ public int checkCallCount() {
+ int ret = callcount;
+ callcount = 0;
+ return ret;
+ }
+
+ @Override
+ public String[] getHeaderValues() {
+ return new String[] { prefix + "-h1", prefix + "-h2" };
+ }
+
+ @Override
+ public String[] getReportValues(SystemDataConfig config) {
+ callcount++;
+ Assert.assertNotNull("config can't be null, probably bad passing of config", config);
+ Assert.assertEquals(system, config.getSystem());
+ return new String[] { prefix + "-1", prefix + "-2" };
+ }
+ };
+
+}
Modified: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/AggregatorUtilsTest.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/AggregatorUtilsTest.java 2010-10-20 12:05:21 UTC (rev 35596)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/AggregatorUtilsTest.java 2010-10-20 14:21:42 UTC (rev 35597)
@@ -118,4 +118,35 @@
}
+ @Test
+ public void fillArray() {
+
+ String[] master = new String[5];
+ String[] values = new String[] { "a", "b" };
+
+ int endIndex = AggregatorUtils.fillArray(master, values, 0);
+ Assert.assertEquals(2, endIndex);
+ Assert.assertEquals("a", master[0]);
+ Assert.assertEquals("b", master[1]);
+ Assert.assertNull(master[2]);
+ Assert.assertNull(master[3]);
+ Assert.assertNull(master[4]);
+
+ endIndex = AggregatorUtils.fillArray(master, values, 3);
+ Assert.assertEquals(5, endIndex);
+ Assert.assertEquals("a", master[0]);
+ Assert.assertEquals("b", master[1]);
+ Assert.assertNull(master[2]);
+ Assert.assertEquals("a", master[3]);
+ Assert.assertEquals("b", master[4]);
+
+ try {
+ endIndex = AggregatorUtils.fillArray(master, values, 4);
+ Assert.fail("ArrayIndexOutOfBoundsException not thrown");
+ } catch (ArrayIndexOutOfBoundsException e) {
+
+ }
+
+ }
+
}
More information about the jboss-svn-commits
mailing list