/** * AnalyzerBeans * Copyright (C) 2014 Neopost - Customer Information Management * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ package org.eobjects.analyzer.job.runner; import junit.framework.TestCase; import org.eobjects.analyzer.beans.NumberAnalyzer; import org.eobjects.analyzer.beans.filter.EqualsFilter; import org.eobjects.analyzer.beans.filter.MaxRowsFilter; import org.eobjects.analyzer.beans.filter.NullCheckFilter; import org.eobjects.analyzer.beans.filter.ValidationCategory; import org.eobjects.analyzer.configuration.AnalyzerBeansConfiguration; import org.eobjects.analyzer.configuration.AnalyzerBeansConfigurationImpl; import org.eobjects.analyzer.connection.Datastore; import org.eobjects.analyzer.connection.DatastoreCatalogImpl; import org.eobjects.analyzer.job.AnalysisJob; import org.eobjects.analyzer.job.builder.AnalysisJobBuilder; import org.eobjects.analyzer.job.builder.FilterJobBuilder; import org.eobjects.analyzer.job.concurrent.TaskListener; import org.eobjects.analyzer.job.concurrent.TaskRunner; import org.eobjects.analyzer.job.tasks.Task; import org.eobjects.analyzer.lifecycle.LifeCycleHelper; import org.eobjects.analyzer.test.TestHelper; import org.eobjects.analyzer.util.SourceColumnFinder; import org.junit.Assert; public class RowProcessingMetricsImplTest extends TestCase { private Datastore datastore = TestHelper.createSampleDatabaseDatastore("orderdb"); private AnalyzerBeansConfiguration configuration = new AnalyzerBeansConfigurationImpl() .replace(new DatastoreCatalogImpl(datastore)); private AnalysisJob job; public void testGetExpectedRowCountNoFilter() throws Exception { AnalysisJobBuilder ajb = createAnalysisJobBuilder(); job = ajb.toAnalysisJob(); assertEquals(23, getExpectedRowCount()); } private AnalysisJobBuilder createAnalysisJobBuilder() { AnalysisJobBuilder ajb = new AnalysisJobBuilder(configuration); ajb.setDatastore(datastore); ajb.addSourceColumns("PUBLIC.EMPLOYEES.EMPLOYEENUMBER"); ajb.addAnalyzer(NumberAnalyzer.class).addInputColumns(ajb.getSourceColumns()); return ajb; } public void testGetExpectedRowCountMaxRows() throws Exception { AnalysisJobBuilder ajb = createAnalysisJobBuilder(); FilterJobBuilder<MaxRowsFilter, MaxRowsFilter.Category> filter = ajb.addFilter(MaxRowsFilter.class); filter.getComponentInstance().setMaxRows(10); ajb.setDefaultRequirement(filter.getFilterOutcome(MaxRowsFilter.Category.VALID)); job = ajb.toAnalysisJob(); assertEquals(10, getExpectedRowCount()); } public void testGetExpectedRowCountEquals() throws Exception { AnalysisJobBuilder ajb = createAnalysisJobBuilder(); FilterJobBuilder<EqualsFilter, ValidationCategory> filter = ajb.addFilter(EqualsFilter.class); filter.addInputColumns(ajb.getSourceColumns()); filter.getComponentInstance().setValues(new String[] { "1002", "1165" }); ajb.setDefaultRequirement(filter.getFilterOutcome(ValidationCategory.VALID)); job = ajb.toAnalysisJob(); assertEquals(2, getExpectedRowCount()); } public void testGetExpectedRowCountMultipleFilters() throws Exception { AnalysisJobBuilder ajb = createAnalysisJobBuilder(); // there's 21 records that are not 1056 or 1165 FilterJobBuilder<EqualsFilter, ValidationCategory> filter1 = ajb.addFilter(EqualsFilter.class); filter1.addInputColumns(ajb.getSourceColumns()); filter1.getComponentInstance().setValues(new String[] { "1056", "1165" }); // there's 1 record which has a reportsto value of null. FilterJobBuilder<NullCheckFilter, NullCheckFilter.NullCheckCategory> filter2 = ajb .addFilter(NullCheckFilter.class); ajb.addSourceColumns("PUBLIC.EMPLOYEES.REPORTSTO"); filter2.addInputColumn(ajb.getSourceColumnByName("reportsto")); filter2.getComponentInstance().setConsiderEmptyStringAsNull(true); filter2.setRequirement(filter1.getFilterOutcome(ValidationCategory.INVALID)); ajb.getAnalyzerJobBuilders().get(0) .setRequirement(filter2.getFilterOutcome(NullCheckFilter.NullCheckCategory.NOT_NULL)); job = ajb.toAnalysisJob(); assertEquals(21 - 1, getExpectedRowCount()); } private int getExpectedRowCount() { final AnalysisListener analysisListener = new InfoLoggingAnalysisListener(); final TaskRunner taskRunner = configuration.getTaskRunner(); final LifeCycleHelper lifeCycleHelper = new LifeCycleHelper(configuration.getInjectionManager(job), null, true); SourceColumnFinder sourceColumnFinder = new SourceColumnFinder(); sourceColumnFinder.addSources(job); final RowProcessingPublishers publishers = new RowProcessingPublishers(job, analysisListener, taskRunner, lifeCycleHelper, sourceColumnFinder); final RowProcessingPublisher publisher = publishers.getRowProcessingPublisher(publishers.getTables()[0]); publisher.initializeConsumers(new TaskListener() { @Override public void onError(Task arg0, Throwable t) { Assert.fail(t.getMessage()); } @Override public void onComplete(Task arg0) { } @Override public void onBegin(Task arg0) { } }); final RowProcessingMetricsImpl metrics = new RowProcessingMetricsImpl(publishers, publisher); return metrics.getExpectedRows(); } }