diff --git a/pom.xml b/pom.xml
index f2db4f00..9297737c 100755
--- a/pom.xml
+++ b/pom.xml
@@ -72,6 +72,7 @@
spring-cloud-task-docs
spring-cloud-task-batch
spring-cloud-task-stream
+ spring-cloud-task-integration-tests
diff --git a/spring-cloud-task-integration-tests/pom.xml b/spring-cloud-task-integration-tests/pom.xml
new file mode 100644
index 00000000..629ebd09
--- /dev/null
+++ b/spring-cloud-task-integration-tests/pom.xml
@@ -0,0 +1,40 @@
+
+
+
+ spring-cloud-task-parent
+ org.springframework.cloud
+ 1.0.0.BUILD-SNAPSHOT
+
+ 4.0.0
+ spring-cloud-task-integration-tests
+ org.springframework.cloud
+ spring-cloud-task-integration-tests
+
+
+
+ org.springframework.cloud
+ spring-cloud-task-stream
+ 1.0.0.BUILD-SNAPSHOT
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.springframework.cloud
+ spring-cloud-stream-test-support-internal
+ 1.0.0.BUILD-SNAPSHOT
+ test
+
+
+ org.springframework.cloud
+ spring-cloud-stream-binder-redis
+ 1.0.0.BUILD-SNAPSHOT
+ test
+
+
+
diff --git a/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/listener/TaskEventTests.java b/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/listener/TaskEventTests.java
new file mode 100644
index 00000000..b1b3f0f5
--- /dev/null
+++ b/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/listener/TaskEventTests.java
@@ -0,0 +1,98 @@
+/*
+ * 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.listener;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.test.SpringApplicationConfiguration;
+import org.springframework.cloud.stream.annotation.EnableBinding;
+import org.springframework.cloud.stream.annotation.StreamListener;
+import org.springframework.cloud.stream.binder.redis.config.RedisServiceAutoConfiguration;
+import org.springframework.cloud.stream.messaging.Sink;
+import org.springframework.cloud.stream.test.junit.redis.RedisTestSupport;
+import org.springframework.cloud.task.configuration.EnableTask;
+import org.springframework.cloud.task.repository.TaskExecution;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+/**
+ * @author Michael Minella
+ * @author Ilayaperumal Gopinathan
+ */
+@RunWith(SpringJUnit4ClassRunner.class)
+@SpringApplicationConfiguration({TaskEventTests.ListenerBinding.class})
+public class TaskEventTests {
+
+ @ClassRule
+ public static RedisTestSupport redisTestSupport = new RedisTestSupport();
+
+ // Count for two task execution events per task
+ static CountDownLatch latch = new CountDownLatch(2);
+
+ private static final String TASK_NAME = "taskEventTest";
+
+ @Test
+ public void testTaskEventListener() throws Exception {
+ ConfigurableApplicationContext applicationContext = new SpringApplicationBuilder().sources(new Object[] {TaskEventsConfiguration.class,
+ TaskEventAutoConfiguration.class,
+ PropertyPlaceholderAutoConfiguration.class,
+ RedisServiceAutoConfiguration.class}).build().run(new String[] {"--spring.cloud.task.closecontext.enable=false",
+ "--spring.cloud.task.name=" + TASK_NAME,
+ "--spring.main.web-environment=false",
+ "--spring.cloud.stream.defaultBinder=redis",
+ "--spring.cloud.stream.bindings.task-events.destination=test"});
+ assertNotNull(applicationContext.getBean("taskEventListener"));
+ assertNotNull(applicationContext.getBean(TaskEventAutoConfiguration.TaskEventChannels.class));
+ assertTrue(latch.await(1, TimeUnit.SECONDS));
+ }
+
+ @Configuration
+ @EnableTask
+ public static class TaskEventsConfiguration {
+ }
+
+ @EnableBinding(Sink.class)
+ @PropertySource("classpath:/org/springframework/cloud/task/listener/sink-channel.properties")
+ @EnableAutoConfiguration
+ public static class ListenerBinding {
+
+ @StreamListener(Sink.INPUT)
+ public void receive(TaskExecution execution) {
+ assertTrue(String.format("Task name should be '%s'", TASK_NAME), execution.getTaskName().equals(TASK_NAME));
+ latch.countDown();
+ }
+
+ @Bean
+ public RedisConnectionFactory redisConnectionFactory() {
+ return redisTestSupport.getResource();
+ }
+ }
+}
diff --git a/spring-cloud-task-integration-tests/src/test/resources/org/springframework/cloud/task/listener/sink-channel.properties b/spring-cloud-task-integration-tests/src/test/resources/org/springframework/cloud/task/listener/sink-channel.properties
new file mode 100644
index 00000000..00ef15a7
--- /dev/null
+++ b/spring-cloud-task-integration-tests/src/test/resources/org/springframework/cloud/task/listener/sink-channel.properties
@@ -0,0 +1 @@
+spring.cloud.stream.bindings.input.destination=test
diff --git a/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/listener/TaskEventTests.java b/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/listener/TaskEventTests.java
index f09bba20..4d8ccd71 100644
--- a/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/listener/TaskEventTests.java
+++ b/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/listener/TaskEventTests.java
@@ -35,12 +35,12 @@ public class TaskEventTests {
public void testDefaultConfiguration() {
ConfigurableApplicationContext applicationContext =
SpringApplication.run(new Object[] {TaskEventsConfiguration.class,
- TaskEventAutoConfiguration.class,
- PropertyPlaceholderAutoConfiguration.class,
- TestSupportBinderAutoConfiguration.class},
- new String[] {"--spring.cloud.task.closecontext.enable=false",
- "--spring.main.web-environment=false",
- "--spring.cloud.stream.defaultBinder=test"});
+ TaskEventAutoConfiguration.class,
+ PropertyPlaceholderAutoConfiguration.class,
+ TestSupportBinderAutoConfiguration.class},
+ new String[] {"--spring.cloud.task.closecontext.enable=false",
+ "--spring.main.web-environment=false",
+ "--spring.cloud.stream.defaultBinder=test"});
assertNotNull(applicationContext.getBean("taskEventListener"));
assertNotNull(applicationContext.getBean(TaskEventAutoConfiguration.TaskEventChannels.class));