Skip to content

Commit 4bb8359

Browse files
committed
Add tests for JobOperator.recover
Signed-off-by: Yejeong, Ham <[email protected]>
1 parent b2b6f8b commit 4bb8359

File tree

2 files changed

+65
-1
lines changed

2 files changed

+65
-1
lines changed

spring-batch-core/src/test/java/org/springframework/batch/core/launch/support/CommandLineJobOperatorTests.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
* Tests for {@link CommandLineJobOperator}.
3636
*
3737
* @author Mahmoud Ben Hassine
38+
* @author Yejeong Ham
3839
*/
3940
class CommandLineJobOperatorTests {
4041

@@ -133,4 +134,18 @@ void abandon() throws Exception {
133134
Mockito.verify(jobOperator).abandon(jobExecution);
134135
}
135136

137+
@Test
138+
void recover() {
139+
// given
140+
long jobExecutionId = 1;
141+
JobExecution jobExecution = mock();
142+
143+
// when
144+
Mockito.when(jobRepository.getJobExecution(jobExecutionId)).thenReturn(jobExecution);
145+
this.commandLineJobOperator.recover(jobExecutionId);
146+
147+
// then
148+
Mockito.verify(jobOperator).recover(jobExecution);
149+
}
150+
136151
}

spring-batch-core/src/test/java/org/springframework/batch/core/launch/support/TaskExecutorJobOperatorTests.java

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.springframework.batch.core.job.JobExecution;
3333
import org.springframework.batch.core.job.JobExecutionException;
3434
import org.springframework.batch.core.job.JobInstance;
35+
import org.springframework.batch.core.job.UnexpectedJobExecutionException;
3536
import org.springframework.batch.core.job.parameters.JobParameters;
3637
import org.springframework.batch.core.job.parameters.JobParametersIncrementer;
3738
import org.springframework.batch.core.step.Step;
@@ -69,7 +70,7 @@
6970
* @author Will Schipp
7071
* @author Mahmoud Ben Hassine
7172
* @author Jinwoo Bae
72-
*
73+
* @author Yejeong Ham
7374
*/
7475
@SuppressWarnings("removal")
7576
class TaskExecutorJobOperatorTests {
@@ -427,6 +428,54 @@ void testAbortNonStopping() {
427428
assertThrows(JobExecutionAlreadyRunningException.class, () -> jobOperator.abandon(123L));
428429
}
429430

431+
@Test
432+
void testRecover() {
433+
JobInstance jobInstance = new JobInstance(123L, job.getName());
434+
JobExecution jobExecution = new JobExecution(jobInstance, 111L, jobParameters);
435+
jobExecution.setStatus(BatchStatus.STARTED);
436+
jobExecution.createStepExecution("step1").setStatus(BatchStatus.STARTED);
437+
when(jobRepository.getJobExecution(111L)).thenReturn(jobExecution);
438+
when(jobRepository.getLastJobExecution(jobInstance)).thenReturn(jobExecution);
439+
JobExecution recover = jobOperator.recover(jobExecution);
440+
assertEquals(BatchStatus.FAILED, recover.getStatus());
441+
assertTrue(recover.getExecutionContext().containsKey("recovered"));
442+
}
443+
444+
@Test
445+
void testRecoverStepStopping() {
446+
JobInstance jobInstance = new JobInstance(123L, job.getName());
447+
JobExecution jobExecution = new JobExecution(jobInstance, 111L, jobParameters);
448+
jobExecution.setStatus(BatchStatus.STARTED);
449+
jobExecution.createStepExecution("step1").setStatus(BatchStatus.STOPPING);
450+
when(jobRepository.getJobExecution(111L)).thenReturn(jobExecution);
451+
when(jobRepository.getLastJobExecution(jobInstance)).thenReturn(jobExecution);
452+
JobExecution recover = jobOperator.recover(jobExecution);
453+
assertEquals(BatchStatus.FAILED, recover.getStatus());
454+
assertTrue(recover.getExecutionContext().containsKey("recovered"));
455+
}
456+
457+
@Test
458+
void testRecoverJobAbandon() {
459+
jobParameters = new JobParameters();
460+
JobInstance jobInstance = new JobInstance(123L, job.getName());
461+
JobExecution jobExecution = new JobExecution(jobInstance, 111L, jobParameters);
462+
jobExecution.setStatus(BatchStatus.ABANDONED);
463+
when(jobRepository.getJobExecution(111L)).thenReturn(jobExecution);
464+
when(jobRepository.getLastJobExecution(jobInstance)).thenReturn(jobExecution);
465+
assertThrows(UnexpectedJobExecutionException.class, () -> jobOperator.recover(jobExecution));
466+
}
467+
468+
@Test
469+
void testRecoverJobCompleted() {
470+
jobParameters = new JobParameters();
471+
JobInstance jobInstance = new JobInstance(123L, job.getName());
472+
JobExecution jobExecution = new JobExecution(jobInstance, 111L, jobParameters);
473+
jobExecution.setStatus(BatchStatus.COMPLETED);
474+
when(jobRepository.getJobExecution(111L)).thenReturn(jobExecution);
475+
when(jobRepository.getLastJobExecution(jobInstance)).thenReturn(jobExecution);
476+
assertThrows(UnexpectedJobExecutionException.class, () -> jobOperator.recover(jobExecution));
477+
}
478+
430479
static class MockJob extends AbstractJob {
431480

432481
private TaskletStep taskletStep;

0 commit comments

Comments
 (0)