Support getNextJobParameters from JobParametersBuilder.

resolves BATCH-2640

Cleanup and added tests to JobParametersBuilder.
This commit is contained in:
Glenn Renfro
2017-10-19 16:55:45 -04:00
committed by Michael Minella
parent 96a317c52f
commit a35784dbd6
2 changed files with 252 additions and 46 deletions

View File

@@ -15,76 +15,114 @@
*/
package org.springframework.batch.core;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import org.junit.Before;
import org.junit.Test;
import org.springframework.batch.core.explore.JobExplorer;
import org.springframework.batch.core.job.SimpleJob;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
/**
* @author Lucas Ward
* @author Michael Minella
* @author Glenn Renfro
*
*/
public class JobParametersBuilderTests {
JobParametersBuilder parametersBuilder = new JobParametersBuilder();
private JobParametersBuilder parametersBuilder;
Date date = new Date(System.currentTimeMillis());
private SimpleJob job;
private JobExplorer jobExplorer;
private List<JobInstance> jobInstanceList;
private List<JobExecution> jobExecutionList;
private Date date = new Date(System.currentTimeMillis());
@Before
public void initialize() {
this.parametersBuilder = new JobParametersBuilder();
this.job = new SimpleJob("simpleJob");
this.jobExplorer = mock(JobExplorer.class);
this.jobInstanceList = new ArrayList<>(1);
this.jobExecutionList = new ArrayList<>(1);
}
@Test
public void testNonIdentifyingParameters() {
parametersBuilder.addDate("SCHEDULE_DATE", date, false);
parametersBuilder.addLong("LONG", new Long(1), false);
parametersBuilder.addString("STRING", "string value", false);
JobParameters parameters = parametersBuilder.toJobParameters();
this.parametersBuilder.addDate("SCHEDULE_DATE", date, false);
this.parametersBuilder.addLong("LONG", new Long(1), false);
this.parametersBuilder.addString("STRING", "string value", false);
this.parametersBuilder.addDouble("DOUBLE", new Double(1), false);
JobParameters parameters = this.parametersBuilder.toJobParameters();
assertEquals(date, parameters.getDate("SCHEDULE_DATE"));
assertEquals(1L, parameters.getLong("LONG").longValue());
assertEquals("string value", parameters.getString("STRING"));
assertEquals(1, parameters.getDouble("DOUBLE").doubleValue(), 1e-15);
assertFalse(parameters.getParameters().get("SCHEDULE_DATE").isIdentifying());
assertFalse(parameters.getParameters().get("LONG").isIdentifying());
assertFalse(parameters.getParameters().get("STRING").isIdentifying());
assertFalse(parameters.getParameters().get("DOUBLE").isIdentifying());
}
@Test
public void testToJobRuntimeParamters(){
parametersBuilder.addDate("SCHEDULE_DATE", date);
parametersBuilder.addLong("LONG", new Long(1));
parametersBuilder.addString("STRING", "string value");
JobParameters parameters = parametersBuilder.toJobParameters();
public void testToJobRuntimeParameters(){
this.parametersBuilder.addDate("SCHEDULE_DATE", date);
this.parametersBuilder.addLong("LONG", new Long(1));
this.parametersBuilder.addString("STRING", "string value");
this.parametersBuilder.addDouble("DOUBLE", new Double(1));
JobParameters parameters = this.parametersBuilder.toJobParameters();
assertEquals(date, parameters.getDate("SCHEDULE_DATE"));
assertEquals(1L, parameters.getLong("LONG").longValue());
assertEquals(1, parameters.getDouble("DOUBLE").doubleValue(), 1e-15);
assertEquals("string value", parameters.getString("STRING"));
}
@Test
public void testNullRuntimeParamters(){
parametersBuilder.addDate("SCHEDULE_DATE", null);
parametersBuilder.addLong("LONG", null);
parametersBuilder.addString("STRING", null);
JobParameters parameters = parametersBuilder.toJobParameters();
public void testNullRuntimeParameters(){
this.parametersBuilder.addDate("SCHEDULE_DATE", null);
this.parametersBuilder.addLong("LONG", null);
this.parametersBuilder.addString("STRING", null);
this.parametersBuilder.addDouble("DOUBLE", null);
JobParameters parameters = this.parametersBuilder.toJobParameters();
assertEquals(null, parameters.getDate("SCHEDULE_DATE"));
assertEquals(0L, parameters.getLong("LONG").longValue());
assertEquals(null, parameters.getString("STRING"));
assertEquals(0, parameters.getLong("DOUBLE").doubleValue(), 1e-15);
}
@Test
public void testCopy(){
parametersBuilder.addString("STRING", "string value");
parametersBuilder = new JobParametersBuilder(parametersBuilder.toJobParameters());
Iterator<String> parameters = parametersBuilder.toJobParameters().getParameters().keySet().iterator();
this.parametersBuilder.addString("STRING", "string value");
this.parametersBuilder = new JobParametersBuilder(this.parametersBuilder.toJobParameters());
Iterator<String> parameters = this.parametersBuilder.toJobParameters().getParameters().keySet().iterator();
assertEquals("STRING", parameters.next());
}
@Test
public void testOrderedTypes(){
parametersBuilder.addDate("SCHEDULE_DATE", date);
parametersBuilder.addLong("LONG", new Long(1));
parametersBuilder.addString("STRING", "string value");
Iterator<String> parameters = parametersBuilder.toJobParameters().getParameters().keySet().iterator();
this.parametersBuilder.addDate("SCHEDULE_DATE", date);
this.parametersBuilder.addLong("LONG", new Long(1));
this.parametersBuilder.addString("STRING", "string value");
Iterator<String> parameters = this.parametersBuilder.toJobParameters().getParameters().keySet().iterator();
assertEquals("SCHEDULE_DATE", parameters.next());
assertEquals("LONG", parameters.next());
assertEquals("STRING", parameters.next());
@@ -92,10 +130,10 @@ public class JobParametersBuilderTests {
@Test
public void testOrderedStrings(){
parametersBuilder.addString("foo", "value foo");
parametersBuilder.addString("bar", "value bar");
parametersBuilder.addString("spam", "value spam");
Iterator<String> parameters = parametersBuilder.toJobParameters().getParameters().keySet().iterator();
this.parametersBuilder.addString("foo", "value foo");
this.parametersBuilder.addString("bar", "value bar");
this.parametersBuilder.addString("spam", "value spam");
Iterator<String> parameters = this.parametersBuilder.toJobParameters().getParameters().keySet().iterator();
assertEquals("foo", parameters.next());
assertEquals("bar", parameters.next());
assertEquals("spam", parameters.next());
@@ -104,9 +142,105 @@ public class JobParametersBuilderTests {
@Test
public void testAddJobParameter(){
JobParameter jobParameter = new JobParameter("bar");
parametersBuilder.addParameter("foo", jobParameter);
Map<String,JobParameter> parameters = parametersBuilder.toJobParameters().getParameters();
this.parametersBuilder.addParameter("foo", jobParameter);
Map<String,JobParameter> parameters = this.parametersBuilder.toJobParameters().getParameters();
assertEquals(1, parameters.size());
assertEquals("bar", parameters.get("foo").getValue());
}
@Test
public void testPropreties() {
Properties props = new Properties();
props.setProperty("SCHEDULE_DATE", "A DATE");
props.setProperty("LONG", "1");
props.setProperty("STRING", "string value");
this.parametersBuilder = new JobParametersBuilder(props);
JobParameters parameters = this.parametersBuilder.toJobParameters();
assertEquals("A DATE", parameters.getString("SCHEDULE_DATE"));
assertEquals("1", parameters.getString("LONG"));
assertEquals("string value", parameters.getString("STRING"));
assertFalse(parameters.getParameters().get("SCHEDULE_DATE").isIdentifying());
assertFalse(parameters.getParameters().get("LONG").isIdentifying());
assertFalse(parameters.getParameters().get("STRING").isIdentifying());
}
@Test
public void testGetNextJobParametersFirstRun(){
job.setJobParametersIncrementer(new RunIdIncrementer());
initializeForNextJobParameters();
this.parametersBuilder.getNextJobParameters(this.job, this.jobExplorer);
defaultNextJobParametersVerify(this.parametersBuilder.toJobParameters(), 4);
}
@Test
public void testGetNextJobParametersNoIncrementer(){
initializeForNextJobParameters();
this.parametersBuilder.getNextJobParameters(this.job, this.jobExplorer);
baseJobParametersVerify(this.parametersBuilder.toJobParameters(), 3);
}
@Test
public void testGetNextJobParameters(){
this.job.setJobParametersIncrementer(new RunIdIncrementer());
this.jobInstanceList.add(new JobInstance(1L, "simpleJobInstance"));
this.jobExecutionList.add(getJobExecution(this.jobInstanceList.get(0), null));
when(this.jobExplorer.getJobInstances("simpleJob",0,1)).thenReturn(this.jobInstanceList);
when(this.jobExplorer.getJobExecutions(any())).thenReturn(this.jobExecutionList);
initializeForNextJobParameters();
this.parametersBuilder.getNextJobParameters(this.job, this.jobExplorer);
defaultNextJobParametersVerify(this.parametersBuilder.toJobParameters(), 4);
}
@Test
public void testGetNextJobParametersRestartable(){
this.job.setRestartable(true);
this.job.setJobParametersIncrementer(new RunIdIncrementer());
this.jobInstanceList.add(new JobInstance(1L, "simpleJobInstance"));
this.jobExecutionList.add(getJobExecution(this.jobInstanceList.get(0), BatchStatus.FAILED));
when(this.jobExplorer.getJobInstances("simpleJob",0,1)).thenReturn(this.jobInstanceList);
when(this.jobExplorer.getJobExecutions(any())).thenReturn(this.jobExecutionList);
initializeForNextJobParameters();
this.parametersBuilder.addLong("NON_IDENTIFYING_LONG", new Long(1), false);
this.parametersBuilder.getNextJobParameters(this.job, this.jobExplorer);
baseJobParametersVerify(this.parametersBuilder.toJobParameters(), 3);
}
@Test
public void testGetNextJobParametersNoPreviousExecution(){
this.job.setJobParametersIncrementer(new RunIdIncrementer());
this.jobInstanceList.add(new JobInstance(1L, "simpleJobInstance"));
this.jobExecutionList.add(null);
when(this.jobExplorer.getJobInstances("simpleJob",0,1)).thenReturn(this.jobInstanceList);
when(this.jobExplorer.getJobExecutions(any())).thenReturn(this.jobExecutionList);
initializeForNextJobParameters();
this.parametersBuilder.getNextJobParameters(this.job, this.jobExplorer);
baseJobParametersVerify(this.parametersBuilder.toJobParameters(), 4);
}
private void initializeForNextJobParameters() {
this.parametersBuilder.addDate("SCHEDULE_DATE", date);
this.parametersBuilder.addLong("LONG", new Long(1));
this.parametersBuilder.addString("STRING", "string value");
}
private void defaultNextJobParametersVerify(JobParameters parameters, int paramCount) {
baseJobParametersVerify(parameters, paramCount);
assertEquals("1", parameters.getString("run.id"));
}
private void baseJobParametersVerify(JobParameters parameters, int paramCount) {
assertEquals(date, parameters.getDate("SCHEDULE_DATE"));
assertEquals(1L, parameters.getLong("LONG").longValue());
assertEquals("string value", parameters.getString("STRING"));
assertEquals(paramCount, parameters.getParameters().size());
}
private JobExecution getJobExecution(JobInstance jobInstance, BatchStatus batchStatus) {
JobExecution jobExecution = new JobExecution(jobInstance, 1L, null, "TestConfig");
if(batchStatus != null) {
jobExecution.setStatus(batchStatus);
}
return jobExecution;
}
}