BATCH-1011: Refactor BatchStatus again so that FAILED has the same meaning as before (1.1.x etc.) and ABANDONED is introduced to signify a step that failed but does not need to be replayed on restart (formerly known as INCOMPLETE).

This commit is contained in:
dsyer
2009-02-15 10:59:44 +00:00
parent fa56955f8d
commit 7533f90480
70 changed files with 696 additions and 427 deletions

View File

@@ -40,22 +40,22 @@ public class BatchStatusTests {
*/
@Test
public void testToString() {
assertEquals("FAILED", BatchStatus.FAILED.toString());
assertEquals("ABANDONED", BatchStatus.ABANDONED.toString());
}
@Test
public void testMaxStatus() {
assertEquals(BatchStatus.INCOMPLETE, BatchStatus.max(BatchStatus.INCOMPLETE,BatchStatus.COMPLETED));
assertEquals(BatchStatus.INCOMPLETE, BatchStatus.max(BatchStatus.COMPLETED, BatchStatus.INCOMPLETE));
assertEquals(BatchStatus.INCOMPLETE, BatchStatus.max(BatchStatus.INCOMPLETE, BatchStatus.INCOMPLETE));
assertEquals(BatchStatus.FAILED, BatchStatus.max(BatchStatus.FAILED,BatchStatus.COMPLETED));
assertEquals(BatchStatus.FAILED, BatchStatus.max(BatchStatus.COMPLETED, BatchStatus.FAILED));
assertEquals(BatchStatus.FAILED, BatchStatus.max(BatchStatus.FAILED, BatchStatus.FAILED));
assertEquals(BatchStatus.STARTED, BatchStatus.max(BatchStatus.STARTED, BatchStatus.STARTING));
assertEquals(BatchStatus.STARTED, BatchStatus.max(BatchStatus.COMPLETED, BatchStatus.STARTED));
}
@Test
public void testUpgradeStatusFinished() {
assertEquals(BatchStatus.INCOMPLETE, BatchStatus.INCOMPLETE.upgradeTo(BatchStatus.COMPLETED));
assertEquals(BatchStatus.INCOMPLETE, BatchStatus.COMPLETED.upgradeTo(BatchStatus.INCOMPLETE));
assertEquals(BatchStatus.FAILED, BatchStatus.FAILED.upgradeTo(BatchStatus.COMPLETED));
assertEquals(BatchStatus.FAILED, BatchStatus.COMPLETED.upgradeTo(BatchStatus.FAILED));
}
@Test
@@ -68,7 +68,7 @@ public class BatchStatusTests {
@Test
public void testIsRunning() {
assertFalse(BatchStatus.INCOMPLETE.isRunning());
assertFalse(BatchStatus.FAILED.isRunning());
assertFalse(BatchStatus.COMPLETED.isRunning());
assertTrue(BatchStatus.STARTED.isRunning());
assertTrue(BatchStatus.STARTING.isRunning());
@@ -76,7 +76,7 @@ public class BatchStatusTests {
@Test
public void testIsUnsuccessful() {
assertTrue(BatchStatus.INCOMPLETE.isUnsuccessful());
assertTrue(BatchStatus.FAILED.isUnsuccessful());
assertFalse(BatchStatus.COMPLETED.isUnsuccessful());
assertFalse(BatchStatus.STARTED.isUnsuccessful());
assertFalse(BatchStatus.STARTING.isUnsuccessful());
@@ -84,7 +84,7 @@ public class BatchStatusTests {
@Test
public void testGetStatus() {
assertEquals(BatchStatus.INCOMPLETE, BatchStatus.valueOf(BatchStatus.INCOMPLETE.toString()));
assertEquals(BatchStatus.FAILED, BatchStatus.valueOf(BatchStatus.FAILED.toString()));
}
@Test

View File

@@ -113,9 +113,9 @@ public class JobExecutionTests {
*/
@Test
public void testDowngradeStatus() {
execution.setStatus(BatchStatus.INCOMPLETE);
execution.setStatus(BatchStatus.FAILED);
execution.upgradeStatus(BatchStatus.COMPLETED);
assertEquals(BatchStatus.INCOMPLETE, execution.getStatus());
assertEquals(BatchStatus.FAILED, execution.getStatus());
}
/**

View File

@@ -286,9 +286,9 @@ public class StepExecutionTests {
*/
@Test
public void testDowngradeStatus() {
execution.setStatus(BatchStatus.INCOMPLETE);
execution.setStatus(BatchStatus.FAILED);
execution.upgradeStatus(BatchStatus.COMPLETED);
assertEquals(BatchStatus.INCOMPLETE, execution.getStatus());
assertEquals(BatchStatus.FAILED, execution.getStatus());
}
private StepExecution newStepExecution(Step step, Long long2) {

View File

@@ -46,7 +46,7 @@ public class OsgiBundleXmlApplicationContextFactoryTests {
expect(bundleContext.getBundle()).andReturn(bundle).anyTimes();
replay(bundleContext, bundle);
factory.setBundleContext(bundleContext);
// TODO: finish this...
// TODO: mock out the OSGi bundle resource...
// factory.createApplicationContext();
verify(bundleContext, bundle);
}

View File

@@ -44,7 +44,7 @@ public class DefaultFailureJobParserTests extends AbstractJobParserTests {
assertTrue(stepNamesList.contains("s1"));
assertTrue(stepNamesList.contains("fail"));
assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus());
assertEquals(BatchStatus.FAILED, jobExecution.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), jobExecution.getExitStatus().getExitCode());
StepExecution stepExecution1 = getStepExecution(jobExecution, "s1");
@@ -52,7 +52,7 @@ public class DefaultFailureJobParserTests extends AbstractJobParserTests {
assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus());
StepExecution stepExecution2 = getStepExecution(jobExecution, "fail");
assertEquals(BatchStatus.INCOMPLETE, stepExecution2.getStatus());
assertEquals(BatchStatus.FAILED, stepExecution2.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2.getExitStatus().getExitCode());
}

View File

@@ -47,7 +47,7 @@ public class EndTransitionDefaultStatusJobParserTests extends AbstractJobParserT
assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus());
StepExecution stepExecution1 = getStepExecution(jobExecution, "fail");
assertEquals(BatchStatus.INCOMPLETE, stepExecution1.getStatus());
assertEquals(BatchStatus.FAILED, stepExecution1.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution1.getExitStatus().getExitCode());
}

View File

@@ -57,7 +57,7 @@ public class EndTransitionJobParserTests extends AbstractJobParserTests {
assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus());
StepExecution stepExecution2 = getStepExecution(jobExecution, "fail");
assertEquals(BatchStatus.INCOMPLETE, stepExecution2.getStatus());
assertEquals(BatchStatus.FAILED, stepExecution2.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2.getExitStatus().getExitCode());
//

View File

@@ -17,7 +17,6 @@ package org.springframework.batch.core.configuration.xml;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -25,7 +24,6 @@ import org.springframework.batch.core.BatchStatus;
import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@@ -50,28 +48,27 @@ public class FailTransitionJobParserTests extends AbstractJobParserTests {
assertTrue(stepNamesList.contains("fail"));
assertEquals(BatchStatus.FAILED, jobExecution.getStatus());
assertEquals("EARLY TERMINATION (FAIL)", jobExecution.getExitStatus().getExitCode());
assertEquals("EARLY TERMINATION (FAIL)", jobExecution.getExitStatus()
.getExitCode());
StepExecution stepExecution1 = getStepExecution(jobExecution, "s1");
assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus());
assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus());
StepExecution stepExecution2 = getStepExecution(jobExecution, "fail");
assertEquals(BatchStatus.INCOMPLETE, stepExecution2.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2.getExitStatus().getExitCode());
assertEquals(BatchStatus.FAILED, stepExecution2.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2
.getExitStatus().getExitCode());
//
// Second Launch
//
stepNamesList.clear();
try {
jobExecution = createJobExecution();
fail("JobInstanceAlreadyCompleteException expected");
} catch (JobInstanceAlreadyCompleteException e) {
//
// Expected
//
}
jobExecution = createJobExecution();
job.execute(jobExecution);
assertEquals(1, stepNamesList.size());
assertTrue(stepNamesList.contains("fail"));
assertEquals(BatchStatus.FAILED, jobExecution.getStatus());
}

View File

@@ -45,7 +45,7 @@ public class NextAttributeJobParserTests extends AbstractJobParserTests {
assertTrue(stepNamesList.contains("s1"));
assertTrue(stepNamesList.contains("fail"));
assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus());
assertEquals(BatchStatus.FAILED, jobExecution.getStatus());
assertEquals("FAILED", jobExecution.getExitStatus().getExitCode());
StepExecution stepExecution1 = getStepExecution(jobExecution, "s1");
@@ -53,7 +53,7 @@ public class NextAttributeJobParserTests extends AbstractJobParserTests {
assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus());
StepExecution stepExecution2 = getStepExecution(jobExecution, "fail");
assertEquals(BatchStatus.INCOMPLETE, stepExecution2.getStatus());
assertEquals(BatchStatus.FAILED, stepExecution2.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2.getExitStatus().getExitCode());
}

View File

@@ -44,7 +44,7 @@ public class SplitDifferentResultsFailFirstJobParserTests extends AbstractJobPar
assertTrue(stepNamesList.contains("s1"));
assertTrue(stepNamesList.contains("fail"));
assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus());
assertEquals(BatchStatus.FAILED, jobExecution.getStatus());
assertEquals(ExitStatus.FAILED, jobExecution.getExitStatus());
StepExecution stepExecution1 = getStepExecution(jobExecution, "s1");
@@ -52,7 +52,7 @@ public class SplitDifferentResultsFailFirstJobParserTests extends AbstractJobPar
assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus());
StepExecution stepExecution2 = getStepExecution(jobExecution, "fail");
assertEquals(BatchStatus.INCOMPLETE, stepExecution2.getStatus());
assertEquals(BatchStatus.FAILED, stepExecution2.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2.getExitStatus().getExitCode());
}

View File

@@ -40,7 +40,7 @@ public class SplitDifferentResultsFailSecondJobParserTests extends AbstractJobPa
JobExecution jobExecution = createJobExecution();
job.execute(jobExecution);
assertEquals(3, stepNamesList.size());
assertEquals("Wrong step anmes: "+stepNamesList, 3, stepNamesList.size());
assertTrue(stepNamesList.contains("s1"));
assertTrue(stepNamesList.contains("fail"));
assertTrue(stepNamesList.contains("s3"));
@@ -53,7 +53,7 @@ public class SplitDifferentResultsFailSecondJobParserTests extends AbstractJobPa
assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus());
StepExecution stepExecution2 = getStepExecution(jobExecution, "fail");
assertEquals(BatchStatus.INCOMPLETE, stepExecution2.getStatus());
assertEquals(BatchStatus.FAILED, stepExecution2.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2.getExitStatus().getExitCode());
StepExecution stepExecution3 = getStepExecution(jobExecution, "s3");

View File

@@ -0,0 +1,74 @@
/*
* Copyright 2006-2007 the original author or authors.
*
* Licensed 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.springframework.batch.core.configuration.xml;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.batch.core.BatchStatus;
import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.StepExecution;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* @author Dave Syer
*
*/
@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public class StopAndRestartJobParserTests extends AbstractJobParserTests {
@Test
public void testStopIncomplete() throws Exception {
//
// First Launch
//
JobExecution jobExecution = createJobExecution();
job.execute(jobExecution);
assertEquals(1, stepNamesList.size());
assertTrue(stepNamesList.contains("s1"));
assertEquals(BatchStatus.STOPPED, jobExecution.getStatus());
assertEquals(ExitStatus.STOPPED.getExitCode(), jobExecution.getExitStatus().getExitCode());
StepExecution stepExecution1 = getStepExecution(jobExecution, "s1");
assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus());
assertEquals(ExitStatus.COMPLETED.getExitCode(), stepExecution1.getExitStatus().getExitCode());
//
// Second Launch
//
stepNamesList.clear();
jobExecution = createJobExecution();
job.execute(jobExecution);
assertEquals(1, stepNamesList.size()); // step1 is not executed
assertTrue(stepNamesList.contains("s2"));
assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus());
assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus());
StepExecution stepExecution2 = getStepExecution(jobExecution, "s2");
assertEquals(BatchStatus.COMPLETED, stepExecution2.getStatus());
assertEquals(ExitStatus.COMPLETED, stepExecution2.getExitStatus());
}
}

View File

@@ -24,7 +24,6 @@ import org.springframework.batch.core.BatchStatus;
import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.job.flow.JobExecutionDecider;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@@ -44,14 +43,14 @@ public class StopIncompleteJobParserTests extends AbstractJobParserTests {
//
JobExecution jobExecution = createJobExecution();
job.execute(jobExecution);
assertTrue("Wrong steps executed: "+stepNamesList, stepNamesList.contains("fail"));
assertEquals(1, stepNamesList.size());
assertTrue(stepNamesList.contains("fail"));
assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), jobExecution.getExitStatus().getExitCode());
assertEquals(BatchStatus.STOPPED, jobExecution.getStatus());
assertEquals(ExitStatus.STOPPED.getExitCode(), jobExecution.getExitStatus().getExitCode());
StepExecution stepExecution1 = getStepExecution(jobExecution, "fail");
assertEquals(BatchStatus.FAILED, stepExecution1.getStatus());
assertEquals(BatchStatus.ABANDONED, stepExecution1.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution1.getExitStatus().getExitCode());
//
@@ -60,8 +59,8 @@ public class StopIncompleteJobParserTests extends AbstractJobParserTests {
stepNamesList.clear();
jobExecution = createJobExecution();
job.execute(jobExecution);
assertTrue("Wrong steps executed: "+stepNamesList, stepNamesList.contains("s2"));
assertEquals(1, stepNamesList.size()); // step1 is not executed
assertTrue(stepNamesList.contains("s2"));
assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus());
assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus());
@@ -72,10 +71,4 @@ public class StopIncompleteJobParserTests extends AbstractJobParserTests {
}
public static class TestDecider implements JobExecutionDecider {
public String decide(JobExecution jobExecution, StepExecution stepExecution) {
return "FOO";
}
}
}

View File

@@ -47,8 +47,8 @@ public class StopJobParserTests extends AbstractJobParserTests {
assertEquals(1, stepNamesList.size());
assertTrue(stepNamesList.contains("s1"));
assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), jobExecution.getExitStatus().getExitCode());
assertEquals(BatchStatus.STOPPED, jobExecution.getStatus());
assertEquals(ExitStatus.STOPPED.getExitCode(), jobExecution.getExitStatus().getExitCode());
StepExecution stepExecution1 = getStepExecution(jobExecution, "s1");
assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus());

View File

@@ -61,8 +61,8 @@ public class StopRestartOnCompletedStepJobParserTests extends AbstractJobParserT
assertEquals(1, stepNamesList.size());
assertTrue(stepNamesList.contains("s1"));
assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), jobExecution.getExitStatus().getExitCode());
assertEquals(BatchStatus.STOPPED, jobExecution.getStatus());
assertEquals(ExitStatus.STOPPED.getExitCode(), jobExecution.getExitStatus().getExitCode());
StepExecution stepExecution1 = getStepExecution(jobExecution, "s1");
assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus());

View File

@@ -140,7 +140,7 @@ public class AbstractJobTests {
// simulate restart and check the job execution context's content survives
execution.setEndTime(new Date());
execution.setStatus(BatchStatus.INCOMPLETE);
execution.setStatus(BatchStatus.FAILED);
repository.update(execution);
JobExecution restarted = repository.createJobExecution("testHandleStepJob", new JobParameters());

View File

@@ -248,10 +248,10 @@ public class SimpleJobTests {
final JobInterruptedException exception = new JobInterruptedException("Interrupt!");
step1.setProcessException(exception);
job.execute(jobExecution);
assertEquals(2, jobExecution.getAllFailureExceptions().size());
assertEquals(1, jobExecution.getAllFailureExceptions().size());
assertEquals(exception, jobExecution.getStepExecutions().iterator().next().getFailureExceptions().get(0));
assertEquals(0, list.size());
checkRepository(BatchStatus.INCOMPLETE, ExitStatus.FAILED);
checkRepository(BatchStatus.STOPPED, ExitStatus.STOPPED);
}
@Test
@@ -265,8 +265,8 @@ public class SimpleJobTests {
assertEquals(1, jobExecution.getAllFailureExceptions().size());
assertEquals(exception, jobExecution.getAllFailureExceptions().get(0));
assertEquals(0, list.size());
assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus());
checkRepository(BatchStatus.INCOMPLETE, ExitStatus.FAILED);
assertEquals(BatchStatus.FAILED, jobExecution.getStatus());
checkRepository(BatchStatus.FAILED, ExitStatus.FAILED);
}
@Test
@@ -283,7 +283,7 @@ public class SimpleJobTests {
assertEquals(1, jobExecution.getAllFailureExceptions().size());
assertEquals(exception, jobExecution.getAllFailureExceptions().get(0));
assertEquals(1, list.size());
checkRepository(BatchStatus.INCOMPLETE, ExitStatus.FAILED);
checkRepository(BatchStatus.FAILED, ExitStatus.FAILED);
}
@Test
@@ -297,7 +297,7 @@ public class SimpleJobTests {
assertEquals(1, jobExecution.getAllFailureExceptions().size());
assertEquals(exception, jobExecution.getAllFailureExceptions().get(0));
assertEquals(0, list.size());
checkRepository(BatchStatus.INCOMPLETE, ExitStatus.FAILED);
checkRepository(BatchStatus.FAILED, ExitStatus.FAILED);
}
@Test
@@ -352,7 +352,7 @@ public class SimpleJobTests {
job.execute(jobExecution);
assertEquals(0, list.size());
checkRepository(BatchStatus.INCOMPLETE, ExitStatus.NOOP);
checkRepository(BatchStatus.FAILED, ExitStatus.NOOP);
ExitStatus exitStatus = jobExecution.getExitStatus();
assertEquals(ExitStatus.NOOP.getExitCode(), exitStatus.getExitCode());
}
@@ -386,7 +386,7 @@ public class SimpleJobTests {
job.setJobExecutionListeners(new JobExecutionListener[] { listener });
job.execute(jobExecution);
assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus());
assertEquals(BatchStatus.STOPPED, jobExecution.getStatus());
verify(listener);
}
@@ -438,7 +438,7 @@ public class SimpleJobTests {
job.setSteps(Arrays.asList(new Step[] { step1, step2 }));
job.execute(jobExecution);
assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus());
assertEquals(BatchStatus.STOPPED, jobExecution.getStatus());
assertEquals(1, jobExecution.getAllFailureExceptions().size());
Throwable expected = jobExecution.getAllFailureExceptions().get(0);
assertTrue("Wrong exception " + expected, expected instanceof JobInterruptedException);
@@ -534,21 +534,27 @@ public class SimpleJobTests {
jobRepository.update(stepExecution);
jobRepository.updateExecutionContext(stepExecution);
if (exception instanceof JobInterruptedException) {
stepExecution.setExitStatus(ExitStatus.FAILED);
stepExecution.setStatus(BatchStatus.FAILED);
stepExecution.addFailureException(exception);
throw (JobInterruptedException)exception;
}
if (exception instanceof RuntimeException) {
stepExecution.setExitStatus(ExitStatus.FAILED);
stepExecution.setStatus(BatchStatus.INCOMPLETE);
stepExecution.setStatus(BatchStatus.FAILED);
stepExecution.addFailureException(exception);
return;
}
if (exception instanceof Error) {
stepExecution.setExitStatus(ExitStatus.FAILED);
stepExecution.setStatus(BatchStatus.INCOMPLETE);
stepExecution.setStatus(BatchStatus.FAILED);
stepExecution.addFailureException(exception);
return;
}
if (exception instanceof JobInterruptedException) {
stepExecution.setExitStatus(ExitStatus.FAILED);
stepExecution.setStatus(BatchStatus.STOPPING);
stepExecution.setStatus(BatchStatus.FAILED);
stepExecution.addFailureException(exception);
return;
}

View File

@@ -31,7 +31,7 @@ public class FlowExecutionTests {
public void testBasicProperties() throws Exception {
FlowExecution execution = new FlowExecution("foo", new FlowExecutionStatus("BAR"));
assertEquals("foo",execution.getName());
assertEquals("BAR",execution.getStatus().getExitStatus().getExitCode());
assertEquals("BAR",execution.getStatus().getStatus());
}
@Test
@@ -45,7 +45,7 @@ public class FlowExecutionTests {
@Test
public void testEnumOrdering() throws Exception {
FlowExecution first = new FlowExecution("foo", FlowExecutionStatus.COMPLETED);
FlowExecution second = new FlowExecution("foo", FlowExecutionStatus.INCOMPLETE);
FlowExecution second = new FlowExecution("foo", FlowExecutionStatus.FAILED);
assertTrue("Should be negative",first.compareTo(second)<0);
assertTrue("Should be positive",second.compareTo(first)>0);
}

View File

@@ -53,7 +53,7 @@ public class FlowJobTests {
private JobExecution jobExecution;
private JobRepository jobRepository;
private boolean fail = false;
@Before
@@ -64,18 +64,26 @@ public class FlowJobTests {
factory.afterPropertiesSet();
jobRepository = (JobRepository) factory.getObject();
job.setJobRepository(jobRepository);
jobExecution = jobRepository.createJobExecution("job", new JobParameters());
jobExecution = jobRepository.createJobExecution("job",
new JobParameters());
}
@Test
public void testTwoSteps() throws Exception {
SimpleFlow flow = new SimpleFlow("job");
List<StateTransition> transitions = new ArrayList<StateTransition>();
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "step2"));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.FAILED.getExitCode(), "end0"));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.COMPLETED.getExitCode(), "end1"));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end0")));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end1")));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step1")), "step2"));
transitions.add(StateTransition
.createStateTransition(new StepState(new StubStep("step2")),
ExitStatus.FAILED.getExitCode(), "end0"));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step2")), ExitStatus.COMPLETED.getExitCode(),
"end1"));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.FAILED, ExitStatus.FAILED, "end0")));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.COMPLETED, ExitStatus.COMPLETED, "end1")));
flow.setStateTransitions(transitions);
job.setFlow(flow);
job.afterPropertiesSet();
@@ -89,11 +97,18 @@ public class FlowJobTests {
public void testFailedStep() throws Exception {
SimpleFlow flow = new SimpleFlow("job");
List<StateTransition> transitions = new ArrayList<StateTransition>();
transitions.add(StateTransition.createStateTransition(new StateSupport("step1", FlowExecutionStatus.INCOMPLETE), "step2"));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.FAILED.getExitCode(), "end0"));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.COMPLETED.getExitCode(), "end1"));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end0")));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end1")));
transitions.add(StateTransition.createStateTransition(new StateSupport(
"step1", FlowExecutionStatus.FAILED), "step2"));
transitions.add(StateTransition
.createStateTransition(new StepState(new StubStep("step2")),
ExitStatus.FAILED.getExitCode(), "end0"));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step2")), ExitStatus.COMPLETED.getExitCode(),
"end1"));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.FAILED, ExitStatus.FAILED, "end0")));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.COMPLETED, ExitStatus.COMPLETED, "end1")));
flow.setStateTransitions(transitions);
job.setFlow(flow);
job.afterPropertiesSet();
@@ -108,24 +123,30 @@ public class FlowJobTests {
public void testFailedStepRestarted() throws Exception {
SimpleFlow flow = new SimpleFlow("job");
List<StateTransition> transitions = new ArrayList<StateTransition>();
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "step2"));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step1")), "step2"));
State step2State = new StateSupport("step2") {
@Override
public FlowExecutionStatus handle(FlowExecutor executor) throws Exception {
public FlowExecutionStatus handle(FlowExecutor executor)
throws Exception {
JobExecution jobExecution = executor.getJobExecution();
jobExecution.getStepExecutions().add(new StepExecution(getName(), jobExecution));
jobExecution.getStepExecutions().add(
new StepExecution(getName(), jobExecution));
if (fail) {
return FlowExecutionStatus.INCOMPLETE;
}
else {
return FlowExecutionStatus.FAILED;
} else {
return FlowExecutionStatus.COMPLETED;
}
}
};
transitions.add(StateTransition.createStateTransition(step2State, ExitStatus.COMPLETED.getExitCode(), "end0"));
transitions.add(StateTransition.createStateTransition(step2State, ExitStatus.FAILED.getExitCode(), "end1"));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end0")));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end1")));
transitions.add(StateTransition.createStateTransition(step2State,
ExitStatus.COMPLETED.getExitCode(), "end0"));
transitions.add(StateTransition.createStateTransition(step2State,
ExitStatus.FAILED.getExitCode(), "end1"));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.COMPLETED, ExitStatus.COMPLETED, "end0")));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.FAILED, ExitStatus.FAILED, "end1")));
flow.setStateTransitions(transitions);
job.setFlow(flow);
job.afterPropertiesSet();
@@ -134,7 +155,8 @@ public class FlowJobTests {
assertEquals(ExitStatus.FAILED, jobExecution.getExitStatus());
assertEquals(2, jobExecution.getStepExecutions().size());
jobRepository.update(jobExecution);
jobExecution = jobRepository.createJobExecution("job", new JobParameters());
jobExecution = jobRepository.createJobExecution("job",
new JobParameters());
fail = false;
job.execute(jobExecution);
assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus());
@@ -145,64 +167,77 @@ public class FlowJobTests {
public void testStoppingStep() throws Exception {
SimpleFlow flow = new SimpleFlow("job");
List<StateTransition> transitions = new ArrayList<StateTransition>();
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "step2"));
State state2 = new StateSupport("step2", FlowExecutionStatus.INCOMPLETE);
transitions.add(StateTransition.createStateTransition(state2, ExitStatus.FAILED.getExitCode(), "end0"));
transitions.add(StateTransition.createStateTransition(state2, ExitStatus.COMPLETED.getExitCode(), "end1"));
transitions.add(StateTransition.createStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end0"), "step3"));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end1")));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step3")), "end2"));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end2")));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step1")), "step2"));
State state2 = new StateSupport("step2", FlowExecutionStatus.FAILED);
transitions.add(StateTransition.createStateTransition(state2,
ExitStatus.FAILED.getExitCode(), "end0"));
transitions.add(StateTransition.createStateTransition(state2,
ExitStatus.COMPLETED.getExitCode(), "end1"));
transitions.add(StateTransition.createStateTransition(new EndState(
BatchStatus.STOPPED, ExitStatus.STOPPED, "end0"), "step3"));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.COMPLETED, ExitStatus.COMPLETED, "end1")));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step3")), "end2"));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.COMPLETED, ExitStatus.COMPLETED, "end2")));
flow.setStateTransitions(transitions);
job.setFlow(flow);
job.afterPropertiesSet();
try {
job.doExecute(jobExecution);
fail("Expected JobInterruptedException");
}
catch (JobInterruptedException e) {
// expected
}
job.doExecute(jobExecution);
assertEquals(2, jobExecution.getStepExecutions().size());
assertEquals(BatchStatus.STOPPED, jobExecution.getStatus());
}
@Test
public void testEndStateStopped() throws Exception {
SimpleFlow flow = new SimpleFlow("job");
List<StateTransition> transitions = new ArrayList<StateTransition>();
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "end"));
transitions.add(StateTransition.createStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end"), "step2"));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.FAILED.getExitCode(), "end0"));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.COMPLETED.getExitCode(), "end1"));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end0")));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end1")));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step1")), "end"));
transitions.add(StateTransition.createStateTransition(new EndState(
BatchStatus.STOPPED, ExitStatus.STOPPED, "end"), "step2"));
transitions.add(StateTransition
.createStateTransition(new StepState(new StubStep("step2")),
ExitStatus.FAILED.getExitCode(), "end0"));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step2")), ExitStatus.COMPLETED.getExitCode(),
"end1"));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.FAILED, ExitStatus.FAILED, "end0")));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.COMPLETED, ExitStatus.COMPLETED, "end1")));
flow.setStateTransitions(transitions);
job.setFlow(flow);
job.afterPropertiesSet();
try {
job.doExecute(jobExecution);
fail("Expected JobInterruptedException");
}
catch (JobInterruptedException e) {
// expected
}
job.doExecute(jobExecution);
assertEquals(1, jobExecution.getStepExecutions().size());
assertEquals(BatchStatus.STOPPED, jobExecution.getStatus());
}
public void testEndStateFailed() throws Exception {
SimpleFlow flow = new SimpleFlow("job");
List<StateTransition> transitions = new ArrayList<StateTransition>();
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "end"));
transitions.add(StateTransition.createStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end"), "step2"));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.FAILED.getExitCode(), "end0"));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.COMPLETED.getExitCode(), "end1"));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end0")));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end1")));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step1")), "end"));
transitions.add(StateTransition.createStateTransition(new EndState(
BatchStatus.FAILED, ExitStatus.FAILED, "end"), "step2"));
transitions.add(StateTransition
.createStateTransition(new StepState(new StubStep("step2")),
ExitStatus.FAILED.getExitCode(), "end0"));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step2")), ExitStatus.COMPLETED.getExitCode(),
"end1"));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.FAILED, ExitStatus.FAILED, "end0")));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.COMPLETED, ExitStatus.COMPLETED, "end1")));
flow.setStateTransitions(transitions);
job.setFlow(flow);
job.afterPropertiesSet();
job.doExecute(jobExecution);
assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus());
assertEquals(BatchStatus.FAILED, jobExecution.getStatus());
assertEquals(1, jobExecution.getStepExecutions().size());
}
@@ -210,22 +245,31 @@ public class FlowJobTests {
public void testEndStateStoppedWithRestart() throws Exception {
SimpleFlow flow = new SimpleFlow("job");
List<StateTransition> transitions = new ArrayList<StateTransition>();
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "end"));
transitions.add(StateTransition.createStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end"), "step2"));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.COMPLETED.getExitCode(), "end0"));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.FAILED.getExitCode(), "end1"));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end0")));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end1")));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step1")), "end"));
transitions.add(StateTransition.createStateTransition(new EndState(
BatchStatus.STOPPED, ExitStatus.STOPPED, "end"), "step2"));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step2")), ExitStatus.COMPLETED.getExitCode(),
"end0"));
transitions.add(StateTransition
.createStateTransition(new StepState(new StubStep("step2")),
ExitStatus.FAILED.getExitCode(), "end1"));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.COMPLETED, ExitStatus.COMPLETED, "end0")));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.FAILED, ExitStatus.FAILED, "end1")));
flow.setStateTransitions(transitions);
job.setFlow(flow);
job.afterPropertiesSet();
// To test a restart we have to use the AbstractJob.execute()...
job.execute(jobExecution);
assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus());
assertEquals(BatchStatus.STOPPED, jobExecution.getStatus());
assertEquals(1, jobExecution.getStepExecutions().size());
jobExecution = jobRepository.createJobExecution("job", new JobParameters());
jobExecution = jobRepository.createJobExecution("job",
new JobParameters());
job.execute(jobExecution);
assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus());
assertEquals(1, jobExecution.getStepExecutions().size());
@@ -236,16 +280,30 @@ public class FlowJobTests {
public void testBranching() throws Exception {
SimpleFlow flow = new SimpleFlow("job");
List<StateTransition> transitions = new ArrayList<StateTransition>();
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "step2"));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "COMPLETED", "step3"));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.COMPLETED.getExitCode(), "end0"));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.FAILED.getExitCode(), "end1"));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end0")));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end1")));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step3")), ExitStatus.FAILED.getExitCode(), "end2"));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step3")), ExitStatus.COMPLETED.getExitCode(), "end3"));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end2")));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end3")));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step1")), "step2"));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step1")), "COMPLETED", "step3"));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step2")), ExitStatus.COMPLETED.getExitCode(),
"end0"));
transitions.add(StateTransition
.createStateTransition(new StepState(new StubStep("step2")),
ExitStatus.FAILED.getExitCode(), "end1"));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.COMPLETED, ExitStatus.COMPLETED, "end0")));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.FAILED, ExitStatus.FAILED, "end1")));
transitions.add(StateTransition
.createStateTransition(new StepState(new StubStep("step3")),
ExitStatus.FAILED.getExitCode(), "end2"));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step3")), ExitStatus.COMPLETED.getExitCode(),
"end3"));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.FAILED, ExitStatus.FAILED, "end2")));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.COMPLETED, ExitStatus.COMPLETED, "end3")));
flow.setStateTransitions(transitions);
job.setFlow(flow);
job.afterPropertiesSet();
@@ -259,8 +317,10 @@ public class FlowJobTests {
public void testBasicFlow() throws Throwable {
SimpleFlow flow = new SimpleFlow("job");
List<StateTransition> transitions = new ArrayList<StateTransition>();
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step")), "end0"));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end0")));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step")), "end0"));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.COMPLETED, ExitStatus.COMPLETED, "end0")));
flow.setStateTransitions(transitions);
job.setFlow(flow);
job.execute(jobExecution);
@@ -275,24 +335,40 @@ public class FlowJobTests {
SimpleFlow flow = new SimpleFlow("job");
JobExecutionDecider decider = new JobExecutionDecider() {
public String decide(JobExecution jobExecution, StepExecution stepExecution) {
public String decide(JobExecution jobExecution,
StepExecution stepExecution) {
assertNotNull(stepExecution);
return "SWITCH";
}
};
List<StateTransition> transitions = new ArrayList<StateTransition>();
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "decision"));
transitions.add(StateTransition.createStateTransition(new DecisionState(decider, "decision"), "step2"));
transitions.add(StateTransition.createStateTransition(new DecisionState(decider, "decision"), "SWITCH", "step3"));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.COMPLETED.getExitCode(), "end0"));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.FAILED.getExitCode(), "end1"));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end0")));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end1")));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step3")), ExitStatus.FAILED.getExitCode(), "end2"));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step3")), ExitStatus.COMPLETED.getExitCode(), "end3"));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end2")));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end3")));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step1")), "decision"));
transitions.add(StateTransition.createStateTransition(
new DecisionState(decider, "decision"), "step2"));
transitions.add(StateTransition.createStateTransition(
new DecisionState(decider, "decision"), "SWITCH", "step3"));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step2")), ExitStatus.COMPLETED.getExitCode(),
"end0"));
transitions.add(StateTransition
.createStateTransition(new StepState(new StubStep("step2")),
ExitStatus.FAILED.getExitCode(), "end1"));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.COMPLETED, ExitStatus.COMPLETED, "end0")));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.FAILED, ExitStatus.FAILED, "end1")));
transitions.add(StateTransition
.createStateTransition(new StepState(new StubStep("step3")),
ExitStatus.FAILED.getExitCode(), "end2"));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step3")), ExitStatus.COMPLETED.getExitCode(),
"end3"));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.FAILED, ExitStatus.FAILED, "end2")));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.COMPLETED, ExitStatus.COMPLETED, "end3")));
flow.setStateTransitions(transitions);
job.setFlow(flow);
@@ -311,14 +387,17 @@ public class FlowJobTests {
public void testGetStepExists() throws Exception {
SimpleFlow flow = new SimpleFlow("job");
List<StateTransition> transitions = new ArrayList<StateTransition>();
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "step2"));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), "end0"));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end0")));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step1")), "step2"));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step2")), "end0"));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.COMPLETED, ExitStatus.COMPLETED, "end0")));
flow.setStateTransitions(transitions);
flow.afterPropertiesSet();
job.setFlow(flow);
job.afterPropertiesSet();
Step step = job.getStep("step2");
assertNotNull(step);
assertEquals("step2", step.getName());
@@ -328,9 +407,12 @@ public class FlowJobTests {
public void testGetStepNotExists() throws Exception {
SimpleFlow flow = new SimpleFlow("job");
List<StateTransition> transitions = new ArrayList<StateTransition>();
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "step2"));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), "end0"));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end0")));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step1")), "step2"));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step2")), "end0"));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.COMPLETED, ExitStatus.COMPLETED, "end0")));
flow.setStateTransitions(transitions);
flow.afterPropertiesSet();
job.setFlow(flow);
@@ -339,14 +421,17 @@ public class FlowJobTests {
Step step = job.getStep("foo");
assertNull(step);
}
@Test
public void testGetStepNotStepState() throws Exception {
SimpleFlow flow = new SimpleFlow("job");
List<StateTransition> transitions = new ArrayList<StateTransition>();
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "step2"));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), "end0"));
transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end0")));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step1")), "step2"));
transitions.add(StateTransition.createStateTransition(new StepState(
new StubStep("step2")), "end0"));
transitions.add(StateTransition.createEndStateTransition(new EndState(
BatchStatus.COMPLETED, ExitStatus.COMPLETED, "end0")));
flow.setStateTransitions(transitions);
flow.afterPropertiesSet();
job.setFlow(flow);
@@ -355,7 +440,7 @@ public class FlowJobTests {
Step step = job.getStep("end0");
assertNull(step);
}
/**
* @author Dave Syer
*
@@ -366,7 +451,8 @@ public class FlowJobTests {
super(name);
}
public void execute(StepExecution stepExecution) throws JobInterruptedException {
public void execute(StepExecution stepExecution)
throws JobInterruptedException {
stepExecution.setStatus(BatchStatus.COMPLETED);
stepExecution.setExitStatus(ExitStatus.COMPLETED);
jobRepository.update(stepExecution);
@@ -379,15 +465,15 @@ public class FlowJobTests {
* @param stepName
* @return the StepExecution corresponding to the specified step
*/
private StepExecution getStepExecution(JobExecution jobExecution, String stepName)
{
for(StepExecution stepExecution : jobExecution.getStepExecutions()) {
if(stepExecution.getStepName().equals(stepName)) {
private StepExecution getStepExecution(JobExecution jobExecution,
String stepName) {
for (StepExecution stepExecution : jobExecution.getStepExecutions()) {
if (stepExecution.getStepName().equals(stepName)) {
return stepExecution;
}
}
fail("No stepExecution found with name: [" + stepName + "]");
return null;
}
}

View File

@@ -47,4 +47,7 @@ public class JobFlowExecutorSupport implements FlowExecutor {
public void close(FlowExecution result) {
}
public void updateStepExecutionStatus() {
}
}

View File

@@ -163,7 +163,7 @@ public class SimpleFlowTests {
flow.setStateTransitions(collect(StateTransition.createStateTransition(new StubState("step1") {
@Override
public FlowExecutionStatus handle(FlowExecutor executor) {
return FlowExecutionStatus.INCOMPLETE;
return FlowExecutionStatus.FAILED;
}
}, "step2"), StateTransition.createEndStateTransition(new StubState("step2"))));
flow.afterPropertiesSet();

View File

@@ -20,6 +20,7 @@ import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
import org.springframework.batch.core.BatchStatus;
import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.job.flow.FlowExecutor;
import org.springframework.batch.core.job.flow.support.JobFlowExecutorSupport;
@@ -47,7 +48,7 @@ public class EndStateTests {
BatchStatus status = jobExecution.getStatus();
EndState state = new EndState(BatchStatus.UNKNOWN, "end");
EndState state = new EndState(BatchStatus.UNKNOWN, ExitStatus.UNKNOWN, "end");
state.handle(new JobFlowExecutorSupport() {
@Override
public JobExecution getJobExecution() {
@@ -68,7 +69,7 @@ public class EndStateTests {
jobExecution.createStepExecution("foo");
EndState state = new EndState(BatchStatus.UNKNOWN, "end");
EndState state = new EndState(BatchStatus.UNKNOWN, ExitStatus.UNKNOWN, "end");
state.handle(new JobFlowExecutorSupport() {
@Override
public JobExecution getJobExecution() {
@@ -76,7 +77,7 @@ public class EndStateTests {
}
});
assertEquals(BatchStatus.STARTING, jobExecution.getStatus());
assertEquals(BatchStatus.UNKNOWN, jobExecution.getStatus());
}
@@ -87,10 +88,10 @@ public class EndStateTests {
@Test
public void testHandleOngoingAttemptedDowngrade() throws Exception {
jobExecution.setStatus(BatchStatus.INCOMPLETE);
jobExecution.setStatus(BatchStatus.FAILED);
jobExecution.createStepExecution("foo");
EndState state = new EndState(BatchStatus.COMPLETED, "end");
EndState state = new EndState(BatchStatus.COMPLETED, ExitStatus.COMPLETED, "end");
state.handle(new JobFlowExecutorSupport() {
@Override
public JobExecution getJobExecution() {
@@ -98,8 +99,8 @@ public class EndStateTests {
}
});
// Can't downgrade a status - if it failed then it failed
assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus());
// An EndState can downgrade a status - if it failed then it can be unfailed
assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus());
}

View File

@@ -36,10 +36,10 @@ public class SimpleFlowExecutionAggregatorTests {
@Test
public void testFailed() throws Exception {
FlowExecution first = new FlowExecution("foo", FlowExecutionStatus.COMPLETED);
FlowExecution second = new FlowExecution("foo", FlowExecutionStatus.INCOMPLETE);
FlowExecution second = new FlowExecution("foo", FlowExecutionStatus.FAILED);
assertTrue("Should be negative", first.compareTo(second)<0);
assertTrue("Should be positive", second.compareTo(first)>0);
assertEquals(FlowExecutionStatus.INCOMPLETE, aggregator.aggregate(Arrays.asList(first, second)));
assertEquals(FlowExecutionStatus.FAILED, aggregator.aggregate(Arrays.asList(first, second)));
}
@Test

View File

@@ -78,7 +78,7 @@ public class RestartIntegrationTests {
int beforePartition = jdbcTemplate.queryForInt("SELECT COUNT(*) from BATCH_STEP_EXECUTION where STEP_NAME like 'step1:partition%'");
JobExecution execution = jobLauncher.run(job, jobParameters);
assertEquals(BatchStatus.INCOMPLETE,execution.getStatus());
assertEquals(BatchStatus.FAILED,execution.getStatus());
assertNotNull(jobLauncher.run(job, jobParameters));
int afterMaster = jdbcTemplate.queryForInt("SELECT COUNT(*) from BATCH_STEP_EXECUTION where STEP_NAME='step1:master'");

View File

@@ -88,7 +88,7 @@ public class PartitionStepTests {
throws Exception {
Set<StepExecution> executions = stepSplitter.split(stepExecution, 2);
for (StepExecution execution : executions) {
execution.setStatus(BatchStatus.INCOMPLETE);
execution.setStatus(BatchStatus.FAILED);
execution.setExitStatus(ExitStatus.FAILED);
}
return executions;
@@ -101,7 +101,7 @@ public class PartitionStepTests {
step.execute(stepExecution);
// one master and two workers
assertEquals(3, stepExecution.getJobExecution().getStepExecutions().size());
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
assertEquals(BatchStatus.FAILED, stepExecution.getStatus());
}
}

View File

@@ -45,21 +45,21 @@ public class StepExecutionAggregatorTests {
@Test
public void testAggregateStatusFromFailure() {
result.setStatus(BatchStatus.INCOMPLETE);
result.setStatus(BatchStatus.FAILED);
stepExecution1.setStatus(BatchStatus.COMPLETED);
stepExecution2.setStatus(BatchStatus.COMPLETED);
aggregator.aggregate(result, Arrays.<StepExecution> asList(stepExecution1, stepExecution2));
assertNotNull(result);
assertEquals(BatchStatus.INCOMPLETE, result.getStatus());
assertEquals(BatchStatus.FAILED, result.getStatus());
}
@Test
public void testAggregateStatusIncomplete() {
stepExecution1.setStatus(BatchStatus.COMPLETED);
stepExecution2.setStatus(BatchStatus.INCOMPLETE);
stepExecution2.setStatus(BatchStatus.FAILED);
aggregator.aggregate(result, Arrays.<StepExecution> asList(stepExecution1, stepExecution2));
assertNotNull(result);
assertEquals(BatchStatus.INCOMPLETE, result.getStatus());
assertEquals(BatchStatus.FAILED, result.getStatus());
}
@Test

View File

@@ -184,7 +184,7 @@ public abstract class AbstractStepExecutionDaoTests extends AbstractTransactiona
dao.saveStepExecution(stepExecution);
Integer versionAfterSave = stepExecution.getVersion();
stepExecution.setStatus(BatchStatus.FAILED);
stepExecution.setStatus(BatchStatus.ABANDONED);
stepExecution.setLastUpdated(new Date(System.currentTimeMillis()));
dao.updateStepExecution(stepExecution);
assertEquals(versionAfterSave + 1, stepExecution.getVersion().intValue());
@@ -192,7 +192,7 @@ public abstract class AbstractStepExecutionDaoTests extends AbstractTransactiona
StepExecution retrieved = dao.getStepExecution(jobExecution, stepExecution.getId());
assertEquals(stepExecution, retrieved);
assertEquals(stepExecution.getLastUpdated(), retrieved.getLastUpdated());
assertEquals(BatchStatus.FAILED, retrieved.getStatus());
assertEquals(BatchStatus.ABANDONED, retrieved.getStatus());
}
/**

View File

@@ -113,10 +113,10 @@ public class SimpleJobRepositoryIntegrationTests {
// first execution failed
firstJobExec.setStartTime(new Date(4));
firstStepExec.setStartTime(new Date(5));
firstStepExec.setStatus(BatchStatus.INCOMPLETE);
firstStepExec.setStatus(BatchStatus.FAILED);
firstStepExec.setEndTime(new Date(6));
jobRepository.update(firstStepExec);
firstJobExec.setStatus(BatchStatus.INCOMPLETE);
firstJobExec.setStatus(BatchStatus.FAILED);
firstJobExec.setEndTime(new Date(7));
jobRepository.update(firstJobExec);
@@ -182,7 +182,7 @@ public class SimpleJobRepositoryIntegrationTests {
@Test
public void testGetLastJobExecution() throws Exception {
JobExecution jobExecution = jobRepository.createJobExecution(job.getName(), jobParameters);
jobExecution.setStatus(BatchStatus.INCOMPLETE);
jobExecution.setStatus(BatchStatus.FAILED);
jobExecution.setEndTime(new Date());
jobRepository.update(jobExecution);
Thread.sleep(10);

View File

@@ -204,7 +204,7 @@ public class AbstractStepTests {
tested.setStepExecutionListeners(new StepExecutionListener[] { listener1, listener2 });
tested.execute(execution);
assertEquals(BatchStatus.INCOMPLETE, execution.getStatus());
assertEquals(BatchStatus.FAILED, execution.getStatus());
Throwable expected = execution.getFailureExceptions().get(0);
assertEquals("crash!", expected.getMessage());
@@ -242,7 +242,7 @@ public class AbstractStepTests {
tested.setStepExecutionListeners(new StepExecutionListener[] { listener1, listener2 });
tested.execute(execution);
assertEquals(BatchStatus.INCOMPLETE, execution.getStatus());
assertEquals(BatchStatus.STOPPED, execution.getStatus());
Throwable expected = execution.getFailureExceptions().get(0);
assertEquals("JobExecution interrupted.", expected.getMessage());
@@ -256,7 +256,7 @@ public class AbstractStepTests {
assertEquals("close", events.get(i++));
assertEquals(7, events.size());
assertEquals("INTERRUPTED", execution.getExitStatus().getExitCode());
assertEquals("STOPPED", execution.getExitStatus().getExitCode());
assertTrue("Execution context modifications made by listener should be persisted", repository.saved
.containsKey("afterStep"));

View File

@@ -343,7 +343,7 @@ public class FaultTolerantStepFactoryBeanRetryTests {
StepExecution stepExecution = new StepExecution(step.getName(), jobExecution);
repository.add(stepExecution);
step.execute(stepExecution);
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
assertEquals(BatchStatus.FAILED, stepExecution.getStatus());
List<String> expectedOutput = Arrays.asList(StringUtils.commaDelimitedListToStringArray(""));
assertEquals(expectedOutput, written);
@@ -439,7 +439,7 @@ public class FaultTolerantStepFactoryBeanRetryTests {
StepExecution stepExecution = new StepExecution(step.getName(), jobExecution);
repository.add(stepExecution);
step.execute(stepExecution);
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
assertEquals(BatchStatus.FAILED, stepExecution.getStatus());
List<String> expectedOutput = Arrays.asList(StringUtils.commaDelimitedListToStringArray(""));
assertEquals(expectedOutput, written);
@@ -488,7 +488,7 @@ public class FaultTolerantStepFactoryBeanRetryTests {
StepExecution stepExecution = new StepExecution(step.getName(), jobExecution);
repository.add(stepExecution);
step.execute(stepExecution);
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
assertEquals(BatchStatus.FAILED, stepExecution.getStatus());
// We added a bogus cache so no items are actually skipped
// because they aren't recognised as eligible

View File

@@ -112,7 +112,7 @@ public class FaultTolerantStepFactoryBeanTests {
Step step = (Step) factory.getObject();
step.execute(stepExecution);
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
assertEquals(BatchStatus.FAILED, stepExecution.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution.getExitStatus().getExitCode());
assertTrue(stepExecution.getExitStatus().getExitDescription().contains("Non-skippable exception during read"));
@@ -141,7 +141,7 @@ public class FaultTolerantStepFactoryBeanTests {
Step step = (Step) factory.getObject();
step.execute(stepExecution);
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
assertEquals(BatchStatus.FAILED, stepExecution.getStatus());
assertEquals(1, reader.processed.size());
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution.getExitStatus().getExitCode());
assertTrue(stepExecution.getExitStatus().getExitDescription().contains("non-skippable exception"));
@@ -335,7 +335,7 @@ public class FaultTolerantStepFactoryBeanTests {
Step step = (Step) factory.getObject();
step.execute(stepExecution);
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
assertEquals(BatchStatus.FAILED, stepExecution.getStatus());
assertEquals(3, stepExecution.getSkipCount());
assertEquals(2, stepExecution.getReadSkipCount());
@@ -374,7 +374,7 @@ public class FaultTolerantStepFactoryBeanTests {
Step step = (Step) factory.getObject();
step.execute(stepExecution);
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
assertEquals(BatchStatus.FAILED, stepExecution.getStatus());
assertEquals("oops", stepExecution.getFailureExceptions().get(0).getCause().getMessage());
// listeners are called only once chunk is about to commit, so
@@ -408,7 +408,7 @@ public class FaultTolerantStepFactoryBeanTests {
Step step = (Step) factory.getObject();
step.execute(stepExecution);
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
assertEquals(BatchStatus.FAILED, stepExecution.getStatus());
assertEquals("oops", stepExecution.getFailureExceptions().get(0).getCause().getMessage());
assertEquals(1, stepExecution.getSkipCount());
assertEquals(0, stepExecution.getReadSkipCount());
@@ -521,7 +521,7 @@ public class FaultTolerantStepFactoryBeanTests {
Step step = (Step) factory.getObject();
step.execute(stepExecution);
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
assertEquals(BatchStatus.FAILED, stepExecution.getStatus());
assertEquals("bad skip count", 3, stepExecution.getSkipCount());
assertEquals("bad read skip count", 2, stepExecution.getReadSkipCount());
assertEquals("bad write skip count", 1, stepExecution.getWriteSkipCount());

View File

@@ -159,7 +159,7 @@ public class SimpleStepFactoryBeanTests {
job.execute(jobExecution);
assertEquals("Error!", jobExecution.getAllFailureExceptions().get(0).getMessage());
assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus());
assertEquals(BatchStatus.FAILED, jobExecution.getStatus());
assertEquals(0, written.size());
// provider should be at second item
assertEquals("bar", reader.read());
@@ -182,7 +182,7 @@ public class SimpleStepFactoryBeanTests {
job.execute(jobExecution);
assertEquals("Foo", jobExecution.getAllFailureExceptions().get(0).getMessage());
assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus());
assertEquals(BatchStatus.FAILED, jobExecution.getStatus());
}
@Test

View File

@@ -7,8 +7,8 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.springframework.batch.core.BatchStatus.COMPLETED;
import static org.springframework.batch.core.BatchStatus.INCOMPLETE;
import static org.springframework.batch.core.BatchStatus.FAILED;
import static org.springframework.batch.core.BatchStatus.STOPPED;
import static org.springframework.batch.core.BatchStatus.UNKNOWN;
import org.junit.Before;
@@ -73,14 +73,14 @@ public class TaskletStepExceptionTests {
public void testApplicationException() throws Exception {
taskletStep.execute(stepExecution);
assertEquals(INCOMPLETE, stepExecution.getStatus());
assertEquals(FAILED, stepExecution.getStatus());
}
@Test
public void testInterrupted() throws Exception {
taskletStep.setStepExecutionListeners(new StepExecutionListener[] { new InterruptionListener() });
taskletStep.execute(stepExecution);
assertEquals(INCOMPLETE, stepExecution.getStatus());
assertEquals(STOPPED, stepExecution.getStatus());
}
@Test
@@ -94,7 +94,7 @@ public class TaskletStepExceptionTests {
} });
taskletStep.execute(stepExecution);
assertEquals(INCOMPLETE, stepExecution.getStatus());
assertEquals(FAILED, stepExecution.getStatus());
assertTrue(stepExecution.getFailureExceptions().contains(exception));
assertEquals(2, jobRepository.getUpdateCount());
}
@@ -110,7 +110,7 @@ public class TaskletStepExceptionTests {
}
} });
taskletStep.execute(stepExecution);
assertEquals(INCOMPLETE, stepExecution.getStatus());
assertEquals(FAILED, stepExecution.getStatus());
assertTrue(stepExecution.getFailureExceptions().contains(exception));
assertEquals(2, jobRepository.getUpdateCount());
}
@@ -152,7 +152,7 @@ public class TaskletStepExceptionTests {
}
} });
taskletStep.execute(stepExecution);
assertEquals(INCOMPLETE, stepExecution.getStatus());
assertEquals(FAILED, stepExecution.getStatus());
assertTrue(stepExecution.getFailureExceptions().contains(taskletException));
assertFalse(stepExecution.getFailureExceptions().contains(exception));
assertEquals(2, jobRepository.getUpdateCount());
@@ -170,7 +170,7 @@ public class TaskletStepExceptionTests {
} });
taskletStep.execute(stepExecution);
assertEquals(INCOMPLETE, stepExecution.getStatus());
assertEquals(FAILED, stepExecution.getStatus());
assertTrue(stepExecution.getFailureExceptions().contains(taskletException));
assertTrue(stepExecution.getFailureExceptions().contains(exception));
assertEquals(2, jobRepository.getUpdateCount());

View File

@@ -114,7 +114,7 @@ public class StepExecutorInterruptionTests extends TestCase {
assertTrue("Timed out waiting for step to be interrupted.", count < 1000);
assertFalse(processingThread.isAlive());
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
assertEquals(BatchStatus.STOPPED, stepExecution.getStatus());
}
@@ -170,7 +170,7 @@ public class StepExecutorInterruptionTests extends TestCase {
assertTrue("Timed out waiting for step to be interrupted.", count < 1000);
assertFalse(processingThread.isAlive());
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
assertEquals(BatchStatus.STOPPED, stepExecution.getStatus());
}
@@ -201,7 +201,7 @@ public class StepExecutorInterruptionTests extends TestCase {
step.execute(stepExecution);
assertEquals("Planned!", stepExecution.getFailureExceptions().get(0).getMessage());
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
assertEquals(BatchStatus.FAILED, stepExecution.getStatus());
}
/**

View File

@@ -541,7 +541,7 @@ public class TaskletStepTests {
stepExecution.setExecutionContext(foobarEc);
step.execute(stepExecution);
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
assertEquals(BatchStatus.STOPPED, stepExecution.getStatus());
String msg = stepExecution.getExitStatus().getExitDescription();
assertTrue("Message does not contain 'JobInterruptedException': " + msg, contains(msg,
"JobInterruptedException"));
@@ -565,7 +565,7 @@ public class TaskletStepTests {
// step.setLastExecution(stepExecution);
step.execute(stepExecution);
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
assertEquals(BatchStatus.FAILED, stepExecution.getStatus());
// The original rollback was caused by this one:
assertEquals("Foo", stepExecution.getFailureExceptions().get(0).getMessage());
}
@@ -588,7 +588,7 @@ public class TaskletStepTests {
// step.setLastExecution(stepExecution);
step.execute(stepExecution);
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
assertEquals(BatchStatus.FAILED, stepExecution.getStatus());
// The original rollback was caused by this one:
assertEquals("Foo", stepExecution.getFailureExceptions().get(0).getMessage());
}
@@ -723,7 +723,7 @@ public class TaskletStepTests {
StepExecution stepExecution = new StepExecution(step.getName(), new JobExecution(jobInstance));
step.execute(stepExecution);
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
assertEquals(BatchStatus.FAILED, stepExecution.getStatus());
Throwable expected = stepExecution.getFailureExceptions().get(0);
assertEquals("CRASH!", expected.getMessage());
assertFalse(stepExecution.getExecutionContext().isEmpty());