From 2bfc4780c787552d5b389f8ae067100c448db359 Mon Sep 17 00:00:00 2001 From: Glenn Renfro Date: Mon, 19 Sep 2016 14:55:52 -0400 Subject: [PATCH] Updating BatchListener Unit Tests resolves #211 Please enter the commit message for your changes. Lines starting --- spring-cloud-task-stream/pom.xml | 5 + .../listener/support/JobExecutionEvent.java | 9 - .../listener/support/StepExecutionEvent.java | 9 - .../batch/listener/EventListenerTests.java | 236 ++++++++++++++++++ .../listener/EventStepExecutionTests.java | 63 ----- ...Tests.java => JobExecutionEventTests.java} | 99 +++++++- .../batch/listener/JobInstanceEventTests.java | 39 +++ .../listener/JobParameterEventTests.java | 94 +++++++ .../listener/JobParametersEventTests.java | 130 ++++++++++ .../listener/StepExecutionEventTests.java | 215 ++++++++++++++++ ...chEventListenerBeanPostProcessorTests.java | 123 +++++++++ .../src/test/resources/application.properties | 1 + 12 files changed, 941 insertions(+), 82 deletions(-) create mode 100644 spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/EventListenerTests.java delete mode 100644 spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/EventStepExecutionTests.java rename spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/{EventJobExecutionTests.java => JobExecutionEventTests.java} (69%) create mode 100644 spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/JobInstanceEventTests.java create mode 100644 spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/JobParameterEventTests.java create mode 100644 spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/JobParametersEventTests.java create mode 100644 spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/StepExecutionEventTests.java create mode 100644 spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/TaskBatchEventListenerBeanPostProcessorTests.java diff --git a/spring-cloud-task-stream/pom.xml b/spring-cloud-task-stream/pom.xml index 912bf34b..96639ea0 100644 --- a/spring-cloud-task-stream/pom.xml +++ b/spring-cloud-task-stream/pom.xml @@ -73,5 +73,10 @@ spring-cloud-deployer-resource-support true + + com.h2database + h2 + test + diff --git a/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/batch/listener/support/JobExecutionEvent.java b/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/batch/listener/support/JobExecutionEvent.java index f8c4b764..cd3117e4 100644 --- a/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/batch/listener/support/JobExecutionEvent.java +++ b/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/batch/listener/support/JobExecutionEvent.java @@ -270,15 +270,6 @@ public class JobExecutionEvent extends Entity { return new ArrayList<>(allExceptions); } - /** - * Deserialize and ensure transient fields are re-instantiated when read - * back - */ - private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { - stream.defaultReadObject(); - this.failureExceptions = new ArrayList<>(); - } - /* * (non-Javadoc) * diff --git a/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/batch/listener/support/StepExecutionEvent.java b/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/batch/listener/support/StepExecutionEvent.java index 40a95fc9..f0281060 100644 --- a/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/batch/listener/support/StepExecutionEvent.java +++ b/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/batch/listener/support/StepExecutionEvent.java @@ -417,15 +417,6 @@ public class StepExecutionEvent extends Entity { && getId().equals(other.getId()); } - /** - * Deserialize and ensure transient fields are re-instantiated when read - * back - */ - private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { - stream.defaultReadObject(); - this.failureExceptions = new ArrayList<>(); - } - /* * (non-Javadoc) * diff --git a/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/EventListenerTests.java b/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/EventListenerTests.java new file mode 100644 index 00000000..25f274a5 --- /dev/null +++ b/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/EventListenerTests.java @@ -0,0 +1,236 @@ +/* + * Copyright 2016 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.cloud.task.batch.listener; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import org.junit.Before; +import org.junit.Test; + +import org.springframework.batch.core.JobExecution; +import org.springframework.batch.core.JobInstance; +import org.springframework.batch.core.JobParameters; +import org.springframework.batch.core.StepExecution; +import org.springframework.cloud.task.batch.listener.support.JobExecutionEvent; +import org.springframework.cloud.task.batch.listener.support.StepExecutionEvent; +import org.springframework.integration.channel.QueueChannel; +import org.springframework.messaging.Message; + +import static org.junit.Assert.assertEquals; + +/** + * @author Glenn Renfro + */ +public class EventListenerTests { + + private QueueChannel queueChannel; + + private EventEmittingSkipListener eventEmittingSkipListener; + private EventEmittingItemProcessListener eventEmittingItemProcessListener; + private EventEmittingItemReadListener eventEmittingItemReadListener; + private EventEmittingItemWriteListener eventEmittingItemWriteListener; + private EventEmittingJobExecutionListener eventEmittingJobExecutionListener; + private EventEmittingStepExecutionListener eventEmittingStepExecutionListener; + + + @Before + public void beforeTests() { + queueChannel = new QueueChannel(1); + eventEmittingSkipListener = new EventEmittingSkipListener(queueChannel); + eventEmittingItemProcessListener = new EventEmittingItemProcessListener(queueChannel); + eventEmittingItemReadListener = new EventEmittingItemReadListener(queueChannel); + eventEmittingItemWriteListener = new EventEmittingItemWriteListener(queueChannel); + eventEmittingJobExecutionListener = new EventEmittingJobExecutionListener(queueChannel); + eventEmittingStepExecutionListener = new EventEmittingStepExecutionListener(queueChannel); + } + + @Test + public void testItemProcessListenerOnProcessorError() { + RuntimeException exeption = new RuntimeException("Test Exception"); + eventEmittingItemProcessListener.onProcessError("HELLO", exeption); + assertEquals(1, queueChannel.getQueueSize()); + + Message msg = queueChannel.receive(); + assertEquals("Exception while item was being processed", msg.getPayload()); + } + + @Test + public void testItemProcessListenerAfterProcess() { + eventEmittingItemProcessListener.afterProcess("HELLO_AFTER_PROCESS_EQUAL", + "HELLO_AFTER_PROCESS_EQUAL"); + assertEquals(1, queueChannel.getQueueSize()); + Message msg = queueChannel.receive(); + assertEquals("item equaled result after processing", msg.getPayload()); + + eventEmittingItemProcessListener.afterProcess("HELLO_NOT_EQUAL", "WORLD"); + assertEquals(1, queueChannel.getQueueSize()); + msg = queueChannel.receive(); + assertEquals("item did not equal result after processing", msg.getPayload()); + + eventEmittingItemProcessListener.afterProcess("HELLO_AFTER_PROCESS", null); + assertEquals(1, queueChannel.getQueueSize()); + msg = queueChannel.receive(); + assertEquals("1 item was filtered", msg.getPayload()); + } + + @Test + public void testItemProcessBeforeProcessor() { + eventEmittingItemProcessListener.beforeProcess("HELLO_BEFORE_PROCESS"); + assertEquals(0, queueChannel.getQueueSize()); + } + + @Test + public void EventEmittingSkipListenerSkipRead() { + RuntimeException exeption = new RuntimeException("Text Exception"); + eventEmittingSkipListener.onSkipInRead(exeption); + assertEquals(1, queueChannel.getQueueSize()); + Message msg = queueChannel.receive(); + assertEquals("Skipped when reading.", msg.getPayload()); + } + + @Test + public void EventEmittingSkipListenerSkipWrite() { + final String MESSAGE = "HELLO_SKIP_WRITE"; + RuntimeException exeption = new RuntimeException("Text Exception"); + eventEmittingSkipListener.onSkipInWrite(MESSAGE, exeption); + assertEquals(1, queueChannel.getQueueSize()); + Message msg = queueChannel.receive(); + assertEquals(MESSAGE, msg.getPayload()); + } + + @Test + public void EventEmittingSkipListenerSkipProcess() { + final String MESSAGE = "HELLO_SKIP_PROCESS"; + RuntimeException exeption = new RuntimeException("Text Exception"); + eventEmittingSkipListener.onSkipInProcess(MESSAGE, exeption); + assertEquals(1, queueChannel.getQueueSize()); + Message msg = queueChannel.receive(); + assertEquals(MESSAGE, msg.getPayload()); + } + + @Test + public void EventEmittingItemReadListener() { + RuntimeException exeption = new RuntimeException("Text Exception"); + eventEmittingItemReadListener.onReadError(exeption); + assertEquals(1, queueChannel.getQueueSize()); + Message msg = queueChannel.receive(); + assertEquals("Exception while item was being read", msg.getPayload()); + } + + @Test + public void EventEmittingItemReadListenerBeforeRead() { + eventEmittingItemReadListener.beforeRead(); + assertEquals(0, queueChannel.getQueueSize()); + } + + @Test + public void EventEmittingItemReadListenerAfterRead() { + eventEmittingItemReadListener.afterRead("HELLO_AFTER_READ"); + assertEquals(0, queueChannel.getQueueSize()); + } + + @Test + public void EventEmittingItemWriteListenerBeforeWrite() { + eventEmittingItemWriteListener.beforeWrite(getSampleList()); + assertEquals(1, queueChannel.getQueueSize()); + Message msg = queueChannel.receive(); + assertEquals("3 items to be written.", msg.getPayload()); + } + + @Test + public void EventEmittingItemWriteListenerAfterWrite() { + eventEmittingItemWriteListener.afterWrite(getSampleList()); + assertEquals(1, queueChannel.getQueueSize()); + Message msg = queueChannel.receive(); + assertEquals("3 items have been written.", msg.getPayload()); + } + + @Test + public void EventEmittingItemWriteListenerWriteError() { + RuntimeException exeption = new RuntimeException("Text Exception"); + eventEmittingItemWriteListener.onWriteError(exeption, getSampleList()); + assertEquals(1, queueChannel.getQueueSize()); + Message msg = queueChannel.receive(); + assertEquals("Exception while 3 items are attempted to be written.", msg.getPayload()); + } + + + @Test + public void EventEmittingJobExecutionListenerBeforeJob() { + JobExecution jobExecution = getJobExecution(); + eventEmittingJobExecutionListener.beforeJob(jobExecution); + assertEquals(1, queueChannel.getQueueSize()); + Message msg = queueChannel.receive(); + JobExecutionEvent jobEvent = (JobExecutionEvent) msg.getPayload(); + assertEquals(jobExecution.getJobInstance().getJobName(), + jobEvent.getJobInstance().getJobName()); + } + + @Test + public void EventEmittingJobExecutionListenerAfterJob() { + JobExecution jobExecution = getJobExecution(); + eventEmittingJobExecutionListener.afterJob(jobExecution); + assertEquals(1, queueChannel.getQueueSize()); + Message msg = queueChannel.receive(); + JobExecutionEvent jobEvent = (JobExecutionEvent) msg.getPayload(); + assertEquals(jobExecution.getJobInstance().getJobName(), + jobEvent.getJobInstance().getJobName()); + } + + @Test + public void EventEmittingStepExecutionListenerBeforeStep() { + final String STEP_MESSAGE = "BEFORE_STEP_MESSAGE"; + JobExecution jobExecution = getJobExecution(); + StepExecution stepExecution = new StepExecution(STEP_MESSAGE,jobExecution); + eventEmittingStepExecutionListener.beforeStep(stepExecution); + assertEquals(1, queueChannel.getQueueSize()); + Message msg = queueChannel.receive(); + StepExecutionEvent stepExecutionEvent = (StepExecutionEvent) msg.getPayload(); + assertEquals(STEP_MESSAGE, + stepExecutionEvent.getStepName()); + } + + @Test + public void EventEmittingStepExecutionListenerAfterStep() { + final String STEP_MESSAGE = "AFTER_STEP_MESSAGE"; + JobExecution jobExecution = getJobExecution(); + StepExecution stepExecution = new StepExecution(STEP_MESSAGE,jobExecution); + eventEmittingStepExecutionListener.afterStep(stepExecution); + assertEquals(1, queueChannel.getQueueSize()); + Message msg = queueChannel.receive(); + StepExecutionEvent stepExecutionEvent = (StepExecutionEvent) msg.getPayload(); + assertEquals(STEP_MESSAGE, + stepExecutionEvent.getStepName()); + } + + private JobExecution getJobExecution() { + final String JOB_NAME = UUID.randomUUID().toString(); + JobInstance jobInstance = new JobInstance(1L, JOB_NAME); + return new JobExecution(jobInstance, 1L, + new JobParameters(), UUID.randomUUID().toString()); + } + private List getSampleList() { + List testList = new ArrayList<>(3); + testList.add("Hello"); + testList.add("World"); + testList.add("foo"); + return testList; + } + +} diff --git a/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/EventStepExecutionTests.java b/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/EventStepExecutionTests.java deleted file mode 100644 index 0efb1d00..00000000 --- a/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/EventStepExecutionTests.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2016 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.cloud.task.batch.listener; - -import org.junit.Test; -import org.springframework.batch.core.JobExecution; -import org.springframework.batch.core.JobInstance; -import org.springframework.batch.core.JobParameters; -import org.springframework.batch.core.StepExecution; -import org.springframework.cloud.task.batch.listener.support.StepExecutionEvent; - -import static org.junit.Assert.assertEquals; - -/** - * @author Glenn Renfro - */ -public class EventStepExecutionTests { - private static final String JOB_NAME = "FOO_JOB"; - private static final String STEP_NAME = "STEP_NAME"; - private static final Long JOB_INSTANCE_ID = 1l; - private static final Long JOB_EXECUTION_ID = 2l; - private static final String JOB_CONFIGURATION_NAME = "FOO_JOB_CONFIG"; - - @Test - public void testBasic(){ - JobInstance jobInstance = new JobInstance(JOB_INSTANCE_ID, JOB_NAME); - JobParameters jobParameters = new JobParameters(); - JobExecution jobExecution = new JobExecution(jobInstance, JOB_EXECUTION_ID, jobParameters, JOB_CONFIGURATION_NAME); - - StepExecution stepExecution = new StepExecution(STEP_NAME, jobExecution); - stepExecution.setCommitCount(1); - stepExecution.setReadCount(2); - stepExecution.setWriteCount(3); - stepExecution.setReadSkipCount(4); - stepExecution.setWriteSkipCount(5); - - StepExecutionEvent stepExecutionEvent = new StepExecutionEvent(stepExecution); - assertEquals("stepName result was not as expected", STEP_NAME, stepExecutionEvent.getStepName()); - assertEquals("startTime result was not as expected", stepExecution.getStartTime(), stepExecutionEvent.getStartTime()); - assertEquals("endTime result was not as expected", stepExecution.getEndTime(), stepExecutionEvent.getEndTime()); - assertEquals("lastUpdated result was not as expected", stepExecution.getLastUpdated(), stepExecutionEvent.getLastUpdated()); - assertEquals("commitCount result was not as expected", stepExecution.getCommitCount(), stepExecutionEvent.getCommitCount()); - assertEquals("readCount result was not as expected", stepExecution.getReadCount(), stepExecutionEvent.getReadCount()); - assertEquals("readSkipCount result was not as expected", stepExecution.getReadSkipCount(), stepExecutionEvent.getReadSkipCount()); - assertEquals("writeCount result was not as expected", stepExecution.getWriteCount(), stepExecutionEvent.getWriteCount()); - assertEquals("writeSkipCount result was not as expected", stepExecution.getWriteSkipCount(), stepExecutionEvent.getWriteSkipCount()); - assertEquals("skipCount result was not as expected", stepExecution.getSkipCount(), stepExecutionEvent.getSkipCount()); - } -} diff --git a/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/EventJobExecutionTests.java b/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/JobExecutionEventTests.java similarity index 69% rename from spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/EventJobExecutionTests.java rename to spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/JobExecutionEventTests.java index b9724fc3..d7e77745 100644 --- a/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/EventJobExecutionTests.java +++ b/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/JobExecutionEventTests.java @@ -26,16 +26,19 @@ import java.util.Map; import org.junit.Before; import org.junit.Test; +import org.springframework.batch.core.BatchStatus; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.JobInstance; import org.springframework.batch.core.JobParameter; import org.springframework.batch.core.JobParameters; import org.springframework.batch.core.StepExecution; +import org.springframework.batch.item.ExecutionContext; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; import org.springframework.cloud.stream.test.binder.TestSupportBinderAutoConfiguration; import org.springframework.cloud.task.batch.listener.support.JobExecutionEvent; +import org.springframework.cloud.task.batch.listener.support.JobInstanceEvent; import org.springframework.cloud.task.batch.listener.support.StepExecutionEvent; import org.springframework.cloud.task.configuration.EnableTask; import org.springframework.context.ConfigurableApplicationContext; @@ -43,12 +46,13 @@ import org.springframework.context.annotation.Configuration; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; /** * @author Glenn Renfro. */ -public class EventJobExecutionTests { +public class JobExecutionEventTests { private static final String JOB_NAME = "FOODJOB"; private static final Long JOB_INSTANCE_ID = 1l; @@ -173,6 +177,99 @@ public class EventJobExecutionTests { BatchEventAutoConfiguration.SKIP_EVENTS_LISTENER); } + @Test + public void testDefaultConstructor() { + JobExecutionEvent jobExecutionEvent = new JobExecutionEvent(); + assertEquals("UNKNOWN", jobExecutionEvent.getExitStatus().getExitCode()); + } + + @Test + public void testFailureExceptions() { + final String EXCEPTION_MESSAGE = "TEST EXCEPTION"; + JobExecutionEvent jobExecutionEvent = new JobExecutionEvent(); + assertEquals(0, jobExecutionEvent.getFailureExceptions().size()); + jobExecutionEvent.addFailureException(new IllegalStateException(EXCEPTION_MESSAGE)); + assertEquals(1, jobExecutionEvent.getFailureExceptions().size()); + assertEquals(1, jobExecutionEvent.getAllFailureExceptions().size()); + assertEquals(jobExecutionEvent.getFailureExceptions().get(0).getMessage(), EXCEPTION_MESSAGE); + assertEquals(jobExecutionEvent.getAllFailureExceptions().get(0).getMessage(), EXCEPTION_MESSAGE); + } + + @Test + public void testToString() { + JobExecutionEvent jobExecutionEvent = new JobExecutionEvent(); + assertTrue(jobExecutionEvent.toString().startsWith("JobExecutionEvent:")); + } + + @Test + public void testGetterSetters() { + Date date = new Date(); + JobExecutionEvent jobExecutionEvent = new JobExecutionEvent(); + jobExecutionEvent.setLastUpdated(date); + assertEquals(date, jobExecutionEvent.getLastUpdated()); + jobExecutionEvent.setCreateTime(date); + assertEquals(date, jobExecutionEvent.getCreateTime()); + jobExecutionEvent.setEndTime(date); + assertEquals(date, jobExecutionEvent.getEndTime()); + jobExecutionEvent.setStartTime(date); + assertEquals(date, jobExecutionEvent.getStartTime()); + } + + @Test + public void testExitStatus() { + final String EXIT_CODE = "KNOWN"; + JobExecutionEvent jobExecutionEvent = new JobExecutionEvent(); + assertEquals("UNKNOWN", jobExecutionEvent.getExitStatus().getExitCode()); + org.springframework.cloud.task.batch.listener.support.ExitStatus expectedExitStatus = + new org.springframework.cloud.task.batch.listener.support.ExitStatus(); + expectedExitStatus.setExitCode(EXIT_CODE); + jobExecutionEvent.setExitStatus(expectedExitStatus); + assertEquals(EXIT_CODE, jobExecutionEvent.getExitStatus().getExitCode()); + } + + @Test + public void testJobInstance() { + final String JOB_NAME = "KNOWN"; + JobExecutionEvent jobExecutionEvent = new JobExecutionEvent(); + assertNull(jobExecutionEvent.getJobInstance()); + assertNull(jobExecutionEvent.getJobId()); + JobInstanceEvent expectedJobInstanceEvent = new JobInstanceEvent(1L, + JOB_NAME); + jobExecutionEvent.setJobInstance(expectedJobInstanceEvent); + assertEquals(expectedJobInstanceEvent.getJobName(), + jobExecutionEvent.getJobInstance().getJobName()); + assertEquals(expectedJobInstanceEvent.getId(), + jobExecutionEvent.getJobId()); + } + + @Test + public void testExecutionContext() { + ExecutionContext executionContext = new ExecutionContext(); + executionContext.put("hello", "world"); + JobExecutionEvent jobExecutionEvent = new JobExecutionEvent(); + assertNotNull(jobExecutionEvent.getExecutionContext()); + jobExecutionEvent.setExecutionContext(executionContext); + assertEquals("world", jobExecutionEvent.getExecutionContext().getString("hello")); + } + + @Test + public void testBatchStatus() { + JobExecutionEvent jobExecutionEvent = new JobExecutionEvent(); + assertEquals(BatchStatus.STARTING, jobExecutionEvent.getStatus()); + jobExecutionEvent.setStatus(BatchStatus.ABANDONED); + assertEquals(BatchStatus.ABANDONED, jobExecutionEvent.getStatus()); + } + + @Test + public void testUpgradeBatchStatus() { + JobExecutionEvent jobExecutionEvent = new JobExecutionEvent(); + assertEquals(BatchStatus.STARTING, jobExecutionEvent.getStatus()); + jobExecutionEvent.upgradeStatus(BatchStatus.FAILED); + assertEquals(BatchStatus.FAILED, jobExecutionEvent.getStatus()); + jobExecutionEvent.upgradeStatus(BatchStatus.COMPLETED); + assertEquals(BatchStatus.FAILED, jobExecutionEvent.getStatus()); + } + public void testDisabledConfiguration(String property, String disabledListener) { boolean exceptionThrown = false; String disabledPropertyArg = (property != null) ? "--" + property + "=false" : ""; diff --git a/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/JobInstanceEventTests.java b/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/JobInstanceEventTests.java new file mode 100644 index 00000000..1ea4cabb --- /dev/null +++ b/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/JobInstanceEventTests.java @@ -0,0 +1,39 @@ +/* + * Copyright 2016 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.cloud.task.batch.listener; + +import org.junit.Test; + +import org.springframework.cloud.task.batch.listener.support.JobInstanceEvent; + +import static org.junit.Assert.assertEquals; + +/** + * @author Glenn Renfro + */ +public class JobInstanceEventTests { + + public static final long INSTANCE_ID = 1; + public static final String JOB_NAME = "FOOBAR"; + + @Test + public void testConstructor() { + JobInstanceEvent jobInstanceEvent = new JobInstanceEvent(INSTANCE_ID, JOB_NAME); + assertEquals(INSTANCE_ID, jobInstanceEvent.getInstanceId()); + assertEquals(JOB_NAME, jobInstanceEvent.getJobName()); + } +} diff --git a/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/JobParameterEventTests.java b/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/JobParameterEventTests.java new file mode 100644 index 00000000..b94d2c61 --- /dev/null +++ b/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/JobParameterEventTests.java @@ -0,0 +1,94 @@ +/* + * Copyright 2016 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.cloud.task.batch.listener; + +import java.util.Date; + +import org.junit.Test; + +import org.springframework.batch.core.JobParameter; +import org.springframework.cloud.task.batch.listener.support.JobParameterEvent; + +import static junit.framework.TestCase.assertFalse; +import static junit.framework.TestCase.assertTrue; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +/** + * @author Glenn Renfro + */ +public class JobParameterEventTests { + + @Test + public void testDefaultConstructor() { + JobParameterEvent jobParameterEvent = new JobParameterEvent(); + assertNull(jobParameterEvent.getValue()); + assertNull(jobParameterEvent.getType()); + assertFalse(jobParameterEvent.isIdentifying()); + assertEquals(new JobParameterEvent(), jobParameterEvent); + } + + @Test + public void testConstructor() { + final String EXPECTED_VALUE = "FOO"; + final Date EXPECTED_DATE_VALUE = new Date(); + JobParameter jobParameter = new JobParameter(EXPECTED_VALUE, true); + JobParameterEvent jobParameterEvent = new JobParameterEvent(jobParameter); + assertEquals(EXPECTED_VALUE, jobParameterEvent.getValue()); + assertEquals(JobParameterEvent.ParameterType.STRING, jobParameterEvent.getType()); + assertTrue(jobParameterEvent.isIdentifying()); + + jobParameter = new JobParameter(EXPECTED_DATE_VALUE, true); + jobParameterEvent = new JobParameterEvent(jobParameter); + assertEquals(EXPECTED_DATE_VALUE, jobParameterEvent.getValue()); + assertEquals(JobParameterEvent.ParameterType.DATE, jobParameterEvent.getType()); + assertTrue(jobParameterEvent.isIdentifying()); + assertTrue(new JobParameterEvent(jobParameter).equals(jobParameterEvent)); + } + + @Test + public void testEquals() { + final String EXPECTED_VALUE = "FOO"; + JobParameter jobParameter = new JobParameter(EXPECTED_VALUE, true); + JobParameterEvent jobParameterEvent = new JobParameterEvent(jobParameter); + JobParameterEvent anotherJobParameterEvent = new JobParameterEvent(jobParameter); + + assertTrue(jobParameterEvent.equals(jobParameterEvent)); + assertFalse(jobParameterEvent.equals("nope")); + assertTrue(jobParameterEvent.equals(anotherJobParameterEvent)); + } + + @Test(expected = NullPointerException.class) + public void testInvalidHashCode() { + JobParameterEvent jobParameterEvent = new JobParameterEvent(); + assertNull(jobParameterEvent.hashCode()); + final String EXPECTED_VALUE = "FOO"; + JobParameter jobParameter = new JobParameter(EXPECTED_VALUE, true); + jobParameterEvent = new JobParameterEvent(jobParameter); + assertNotNull(jobParameterEvent.hashCode()); + } + + @Test + public void testValidHashCode() { + final String EXPECTED_VALUE = "FOO"; + JobParameter jobParameter = new JobParameter(EXPECTED_VALUE, true); + JobParameterEvent jobParameterEvent = new JobParameterEvent(jobParameter); + assertNotNull(jobParameterEvent.hashCode()); + } + +} diff --git a/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/JobParametersEventTests.java b/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/JobParametersEventTests.java new file mode 100644 index 00000000..1793850b --- /dev/null +++ b/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/JobParametersEventTests.java @@ -0,0 +1,130 @@ +/* + * Copyright 2016 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.cloud.task.batch.listener; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +import org.junit.Test; + +import org.springframework.batch.core.JobParameter; +import org.springframework.cloud.task.batch.listener.support.JobParametersEvent; + +import static junit.framework.TestCase.assertFalse; +import static junit.framework.TestCase.assertTrue; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; + +/** + * @author Glenn Renfro + */ +public class JobParametersEventTests { + + private final static JobParameter STRING_PARAM = new JobParameter("FOO", true); + private final static JobParameter DATE_PARAM = new JobParameter(new Date(), true); + private final static JobParameter LONG_PARAM = new JobParameter(1L, true); + private final static JobParameter DOUBLE_PARAM = new JobParameter(2D, true); + private final static String DATE_KEY = "DATE_KEY"; + private final static String STRING_KEY = "STRING_KEY"; + private final static String LONG_KEY = "LONG_KEY"; + private final static String DOUBLE_KEY = "DOUBLE_KEY"; + + @Test + public void testDefaultConstructor() { + JobParametersEvent jobParametersEvent = new JobParametersEvent(); + assertEquals(0, jobParametersEvent.getParameters().size()); + assertTrue(jobParametersEvent.isEmpty()); + } + + @Test + public void testConstructor() { + JobParametersEvent jobParametersEvent = getPopulatedParametersEvent(); + assertEquals(STRING_PARAM.getValue(), jobParametersEvent.getString(STRING_KEY)); + assertEquals(LONG_PARAM.getValue(), jobParametersEvent.getLong(LONG_KEY)); + assertEquals(DATE_PARAM.getValue(), jobParametersEvent.getDate(DATE_KEY)); + assertEquals(DOUBLE_PARAM.getValue(), jobParametersEvent.getDouble(DOUBLE_KEY)); + + JobParametersEvent jobParametersEventNew = getPopulatedParametersEvent(); + assertEquals(jobParametersEventNew, jobParametersEvent); + } + + @Test + public void testEquals() { + assertTrue(getPopulatedParametersEvent().equals(getPopulatedParametersEvent())); + JobParametersEvent jobParametersEvent = getPopulatedParametersEvent(); + assertFalse(jobParametersEvent.equals("FOO")); + assertTrue(jobParametersEvent.equals(jobParametersEvent)); + } + + @Test + public void testHashCode() { + JobParametersEvent jobParametersEvent = new JobParametersEvent(); + assertNotNull(jobParametersEvent.hashCode()); + JobParametersEvent jobParametersEventPopulated = getPopulatedParametersEvent(); + assertNotNull(jobParametersEvent); + assertNotEquals(jobParametersEvent.hashCode(), jobParametersEventPopulated.hashCode()); + } + + @Test + public void testToProperties() { + JobParametersEvent jobParametersEvent = getPopulatedParametersEvent(); + Properties properties = jobParametersEvent.toProperties(); + assertEquals(properties.getProperty(DATE_KEY), jobParametersEvent.getString(DATE_KEY)); + assertEquals(properties.getProperty(STRING_KEY), jobParametersEvent.getString(STRING_KEY)); + assertEquals(properties.getProperty(LONG_KEY), jobParametersEvent.getString(LONG_KEY)); + assertEquals(properties.getProperty(DOUBLE_KEY), jobParametersEvent.getString(DOUBLE_KEY)); + } + + @Test + public void testToString() { + JobParametersEvent jobParametersEvent = getPopulatedParametersEvent(); + assertNotNull(toString()); + } + + @Test + public void testGetterSetterDefaults() { + JobParametersEvent jobParametersEvent = getPopulatedParametersEvent(); + assertEquals(new Double(0), jobParametersEvent.getDouble("FOOBAR")); + assertEquals(new Long(0), jobParametersEvent.getLong("FOOBAR")); + assertEquals(new Double(5), jobParametersEvent.getDouble("FOOBAR", 5)); + assertEquals(DOUBLE_PARAM.getValue(), jobParametersEvent.getDouble(DOUBLE_KEY, 0)); + assertEquals(new Long(5), jobParametersEvent.getLong("FOOBAR", 5)); + assertEquals(LONG_PARAM.getValue(), jobParametersEvent.getLong(LONG_KEY, 5)); + assertEquals("TESTVAL", jobParametersEvent.getString("FOOBAR","TESTVAL")); + assertEquals(STRING_PARAM.getValue(), + jobParametersEvent.getString(STRING_KEY,"TESTVAL")); + + Date date = new Date(); + assertEquals(date, jobParametersEvent.getDate("FOOBAR", date)); + assertEquals(DATE_PARAM.getValue(), + jobParametersEvent.getDate(DATE_KEY, date)); + + } + + public JobParametersEvent getPopulatedParametersEvent() { + Map jobParameters = new HashMap<>(); + jobParameters.put(DATE_KEY, DATE_PARAM); + jobParameters.put(STRING_KEY,STRING_PARAM); + jobParameters.put(LONG_KEY,LONG_PARAM); + jobParameters.put(DOUBLE_KEY,DOUBLE_PARAM); + return new JobParametersEvent(jobParameters); + } + +} diff --git a/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/StepExecutionEventTests.java b/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/StepExecutionEventTests.java new file mode 100644 index 00000000..6a9da17d --- /dev/null +++ b/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/StepExecutionEventTests.java @@ -0,0 +1,215 @@ +/* + * Copyright 2016 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.cloud.task.batch.listener; + +import java.util.Date; + +import org.junit.Test; + +import org.springframework.batch.core.BatchStatus; +import org.springframework.batch.core.JobExecution; +import org.springframework.batch.core.JobInstance; +import org.springframework.batch.core.JobParameters; +import org.springframework.batch.core.StepExecution; +import org.springframework.batch.item.ExecutionContext; +import org.springframework.cloud.task.batch.listener.support.ExitStatus; +import org.springframework.cloud.task.batch.listener.support.StepExecutionEvent; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +/** + * @author Glenn Renfro + */ +public class StepExecutionEventTests { + private static final String JOB_NAME = "FOO_JOB"; + private static final String STEP_NAME = "STEP_NAME"; + private static final Long JOB_INSTANCE_ID = 1l; + private static final Long JOB_EXECUTION_ID = 2l; + private static final String JOB_CONFIGURATION_NAME = "FOO_JOB_CONFIG"; + + @Test + public void testBasic(){ + StepExecution stepExecution = getBasicStepExecution(); + stepExecution.setCommitCount(1); + stepExecution.setReadCount(2); + stepExecution.setWriteCount(3); + stepExecution.setReadSkipCount(4); + stepExecution.setWriteSkipCount(5); + + StepExecutionEvent stepExecutionEvent = new StepExecutionEvent(stepExecution); + assertEquals("stepName result was not as expected", STEP_NAME, stepExecutionEvent.getStepName()); + assertEquals("startTime result was not as expected", stepExecution.getStartTime(), stepExecutionEvent.getStartTime()); + assertEquals("endTime result was not as expected", stepExecution.getEndTime(), stepExecutionEvent.getEndTime()); + assertEquals("lastUpdated result was not as expected", stepExecution.getLastUpdated(), stepExecutionEvent.getLastUpdated()); + assertEquals("commitCount result was not as expected", stepExecution.getCommitCount(), stepExecutionEvent.getCommitCount()); + assertEquals("readCount result was not as expected", stepExecution.getReadCount(), stepExecutionEvent.getReadCount()); + assertEquals("readSkipCount result was not as expected", stepExecution.getReadSkipCount(), stepExecutionEvent.getReadSkipCount()); + assertEquals("writeCount result was not as expected", stepExecution.getWriteCount(), stepExecutionEvent.getWriteCount()); + assertEquals("writeSkipCount result was not as expected", stepExecution.getWriteSkipCount(), stepExecutionEvent.getWriteSkipCount()); + assertEquals("skipCount result was not as expected", stepExecution.getSkipCount(), stepExecutionEvent.getSkipCount()); + } + + @Test + public void testException() { + RuntimeException exception = new RuntimeException("EXPECTED EXCEPTION"); + StepExecution stepExecution = getBasicStepExecution(); + stepExecution.addFailureException(exception); + StepExecutionEvent stepExecutionEvent = new StepExecutionEvent(stepExecution); + assertEquals(1, stepExecutionEvent.getFailureExceptions().size()); + assertEquals(exception, stepExecution.getFailureExceptions().get(0)); + } + + @Test + public void testGetSummary() { + StepExecution stepExecution = getBasicStepExecution(); + StepExecutionEvent stepExecutionEvent = new StepExecutionEvent(stepExecution); + assertEquals("StepExecutionEvent: id=null, version=null, name=STEP_NAME, status=STARTING," + + " exitStatus=EXECUTING, readCount=0, filterCount=0, writeCount=0 readSkipCount=0," + + " writeSkipCount=0, processSkipCount=0, commitCount=0, rollbackCount=0", + stepExecutionEvent.getSummary()); + } + + @Test + public void testHashCode() { + StepExecution stepExecution = getBasicStepExecution(); + StepExecutionEvent stepExecutionEvent = + new StepExecutionEvent(stepExecution); + assertEquals("StepExecutionEvent: id=null, version=null, " + + "name=STEP_NAME, status=STARTING, exitStatus=EXECUTING, " + + "readCount=0, filterCount=0, writeCount=0 readSkipCount=0, " + + "writeSkipCount=0, processSkipCount=0, commitCount=0, " + + "rollbackCount=0, exitDescription=", stepExecutionEvent.toString()); + } + + @Test + public void testToString() { + StepExecution stepExecution = getBasicStepExecution(); + StepExecutionEvent stepExecutionEvent = new StepExecutionEvent(stepExecution); + assertNotNull(stepExecutionEvent.hashCode()); + } + + @Test + public void testEquals() { + StepExecution stepExecution = getBasicStepExecution(); + stepExecution.setId(1L); + StepExecutionEvent stepExecutionEvent = new StepExecutionEvent(stepExecution); + assertFalse(stepExecutionEvent.equals(getBasicStepExecution())); + assertTrue(stepExecutionEvent.equals(stepExecution)); + } + + @Test + public void testSettersGetters() { + StepExecutionEvent stepExecutionEvent = new StepExecutionEvent(getBasicStepExecution()); + Date date = new Date(); + stepExecutionEvent.setLastUpdated(date); + assertEquals(date, stepExecutionEvent.getLastUpdated()); + + stepExecutionEvent.setProcessSkipCount(55); + assertEquals(55, stepExecutionEvent.getProcessSkipCount()); + + stepExecutionEvent.setWriteSkipCount(47); + assertEquals(47, stepExecutionEvent.getWriteSkipCount()); + + stepExecutionEvent.setReadSkipCount(49); + assertEquals(49, stepExecutionEvent.getReadSkipCount()); + + assertEquals(0, stepExecutionEvent.getCommitCount()); + stepExecutionEvent.incrementCommitCount(); + assertEquals(1, stepExecutionEvent.getCommitCount()); + + assertFalse(stepExecutionEvent.isTerminateOnly()); + stepExecutionEvent.setTerminateOnly(); + assertTrue(stepExecutionEvent.isTerminateOnly()); + + stepExecutionEvent.setStepName("FOOBAR"); + assertEquals("FOOBAR", stepExecutionEvent.getStepName()); + + stepExecutionEvent.setStartTime(date); + assertEquals(date, stepExecutionEvent.getStartTime()); + + assertEquals(0, stepExecutionEvent.getRollbackCount()); + stepExecutionEvent.setRollbackCount(33); + assertEquals(33, stepExecutionEvent.getRollbackCount()); + + stepExecutionEvent.setFilterCount(23); + assertEquals(23, stepExecutionEvent.getFilterCount()); + + stepExecutionEvent.setWriteCount(11); + assertEquals(11,stepExecutionEvent.getWriteCount()); + + stepExecutionEvent.setReadCount(12); + assertEquals(12, stepExecutionEvent.getReadCount()); + + stepExecutionEvent.setEndTime(date); + assertEquals(date, stepExecutionEvent.getEndTime()); + + stepExecutionEvent.setCommitCount(29); + assertEquals(29, stepExecutionEvent.getCommitCount()); + } + + @Test + public void testExitStatus() { + StepExecutionEvent stepExecutionEvent = new StepExecutionEvent(getBasicStepExecution()); + final String EXIT_CODE = "1"; + final String EXIT_DESCRIPTION = "EXPECTED FAILURE"; + ExitStatus exitStatus = new ExitStatus(); + exitStatus.setExitCode(EXIT_CODE); + exitStatus.setExitDescription(EXIT_DESCRIPTION); + + stepExecutionEvent.setExitStatus(exitStatus); + ExitStatus actualExitStatus = stepExecutionEvent.getExitStatus(); + assertNotNull(actualExitStatus); + assertEquals(exitStatus.getExitCode(), actualExitStatus.getExitCode()); + assertEquals(exitStatus.getExitDescription(), actualExitStatus.getExitDescription()); + } + + @Test + public void testBatchStatus() { + StepExecutionEvent stepExecutionEvent = new StepExecutionEvent(getBasicStepExecution()); + assertEquals(BatchStatus.STARTING, stepExecutionEvent.getStatus()); + stepExecutionEvent.setStatus(BatchStatus.ABANDONED); + assertEquals(BatchStatus.ABANDONED, stepExecutionEvent.getStatus()); + } + + @Test + public void testDefaultConstructor() { + StepExecutionEvent stepExecutionEvent = new StepExecutionEvent(); + assertEquals(BatchStatus.STARTING, stepExecutionEvent.getStatus()); + assertNotNull(stepExecutionEvent.getExitStatus()); + assertEquals("EXECUTING", stepExecutionEvent.getExitStatus().getExitCode()); + } + + @Test + public void testExecutionContext() { + ExecutionContext executionContext = new ExecutionContext(); + executionContext.put("hello", "world"); + StepExecutionEvent stepExecutionEvent = new StepExecutionEvent(getBasicStepExecution()); + assertNotNull(stepExecutionEvent.getExecutionContext()); + stepExecutionEvent.setExecutionContext(executionContext); + assertEquals("world", stepExecutionEvent.getExecutionContext().getString("hello")); + } + + private StepExecution getBasicStepExecution() { + JobInstance jobInstance = new JobInstance(JOB_INSTANCE_ID, JOB_NAME); + JobParameters jobParameters = new JobParameters(); + JobExecution jobExecution = new JobExecution(jobInstance, JOB_EXECUTION_ID, jobParameters, JOB_CONFIGURATION_NAME); + return new StepExecution(STEP_NAME, jobExecution); + } +} diff --git a/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/TaskBatchEventListenerBeanPostProcessorTests.java b/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/TaskBatchEventListenerBeanPostProcessorTests.java new file mode 100644 index 00000000..6633a8de --- /dev/null +++ b/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/batch/listener/TaskBatchEventListenerBeanPostProcessorTests.java @@ -0,0 +1,123 @@ +/* + * Copyright 2016 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.cloud.task.batch.listener; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.batch.core.ChunkListener; +import org.springframework.batch.core.ItemProcessListener; +import org.springframework.batch.core.ItemReadListener; +import org.springframework.batch.core.ItemWriteListener; +import org.springframework.batch.core.SkipListener; +import org.springframework.batch.core.StepExecutionListener; +import org.springframework.batch.core.step.item.ChunkOrientedTasklet; +import org.springframework.batch.core.step.item.SimpleChunkProcessor; +import org.springframework.batch.core.step.item.SimpleChunkProvider; +import org.springframework.batch.core.step.tasklet.TaskletStep; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.cloud.task.batch.listener.support.TaskBatchEventListenerBeanPostProcessor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.support.GenericApplicationContext; +import org.springframework.test.context.junit4.SpringRunner; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Mockito.when; + +/** + * @author Glenn Renfro + */ +@RunWith(SpringRunner.class) +@SpringBootTest +public class TaskBatchEventListenerBeanPostProcessorTests { + + @MockBean + private TaskletStep taskletStep; + + @MockBean + private SimpleChunkProvider chunkProvider; + + @MockBean + private SimpleChunkProcessor chunkProcessor; + + @MockBean + ItemProcessListener itemProcessListener; + + @MockBean + StepExecutionListener stepExecutionListener; + + @MockBean + ChunkListener chunkListener; + + @MockBean + ItemReadListener itemReadListener; + + @MockBean + ItemWriteListener itemWriteListener; + + @MockBean + SkipListener skipListener; + + @Autowired + private GenericApplicationContext context; + + + @Before + public void setupMock() { + when(taskletStep.getTasklet()).thenReturn( + new ChunkOrientedTasklet(chunkProvider, chunkProcessor)); + when(taskletStep.getName()).thenReturn("FOOOBAR"); + + registerAlias(ItemProcessListener.class, BatchEventAutoConfiguration.ITEM_PROCESS_EVENTS_LISTENER); + registerAlias(StepExecutionListener.class, BatchEventAutoConfiguration.STEP_EXECUTION_EVENTS_LISTENER); + registerAlias(ChunkListener.class, BatchEventAutoConfiguration.CHUNK_EVENTS_LISTENER); + registerAlias(ItemReadListener.class, BatchEventAutoConfiguration.ITEM_READ_EVENTS_LISTENER); + registerAlias(ItemWriteListener.class, BatchEventAutoConfiguration.ITEM_WRITE_EVENTS_LISTENER); + registerAlias(SkipListener.class, BatchEventAutoConfiguration.SKIP_EVENTS_LISTENER); + } + + @Test + public void testPostProcessor() { + TaskBatchEventListenerBeanPostProcessor postProcessor = + context.getBean(TaskBatchEventListenerBeanPostProcessor.class); + assertNotNull(postProcessor); + TaskletStep updatedTaskletStep = (TaskletStep) + postProcessor.postProcessBeforeInitialization(taskletStep, "FOO"); + assertEquals(taskletStep, updatedTaskletStep); + } + + @Configuration + @EnableAutoConfiguration + public static class TestConfiguration { + @Bean + public TaskBatchEventListenerBeanPostProcessor taskBatchEventListenerBeanPostProcessor() { + return new TaskBatchEventListenerBeanPostProcessor(); + } + } + + private void registerAlias(Class clazz, String name) { + assertEquals(1, context.getBeanNamesForType(clazz).length); + context.registerAlias(context.getBeanNamesForType(clazz)[0],name); + + } +} diff --git a/spring-cloud-task-stream/src/test/resources/application.properties b/spring-cloud-task-stream/src/test/resources/application.properties index a2e7d812..fce9ea93 100644 --- a/spring-cloud-task-stream/src/test/resources/application.properties +++ b/spring-cloud-task-stream/src/test/resources/application.properties @@ -1 +1,2 @@ maven.remoteRepositories.springRepo.url=https://repo.spring.io/libs-snapshot +logging.level.org.springframework.cloud.task.batch.listener=DEBUG