package org.javaee7.concurrency.managedexecutor;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.enterprise.concurrent.ManagedExecutorService;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Test;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.runner.RunWith;
/**
* @author Arun Gupta
*/
@RunWith(Arquillian.class)
public class ExecutorJNDITest {
ManagedExecutorService defaultExecutor;
ManagedExecutorService executorFromWebXml;
Runnable runnableTask;
Callable<Product> callableTask;
Collection<Callable<Product>> callableTasks = new ArrayList<>();
@Deployment
public static WebArchive createDeployment() {
return ShrinkWrap.create(WebArchive.class).
addClasses(MyRunnableTask.class,
MyCallableTask.class,
Product.class,
TestStatus.class);
}
@Before
public void setup() throws NamingException {
InitialContext ctx = new InitialContext();
defaultExecutor = (ManagedExecutorService) ctx.lookup("java:comp/DefaultManagedExecutorService");
// executorFromWebXml = (ManagedExecutorService) ctx.lookup("java:comp/env/concurrent/myExecutor");
runnableTask = new MyRunnableTask();
callableTask = new MyCallableTask(1);
for (int i = 0; i < 5; i++) {
callableTasks.add(new MyCallableTask(i));
}
}
@Test
public void testSubmitWithRunnableDefault() throws Exception {
TestStatus.latch = new CountDownLatch(1);
defaultExecutor.submit(runnableTask);
assertTrue(TestStatus.latch.await(2000, TimeUnit.MILLISECONDS));
}
@Test
public void testSubmitWithCallableDefault() throws Exception {
TestStatus.latch = new CountDownLatch(1);
Future<Product> future = defaultExecutor.submit(callableTask);
assertTrue(TestStatus.latch.await(2000, TimeUnit.MILLISECONDS));
assertEquals(1, future.get().getId());
}
@Test
public void testInvokeAllWithCallableDefault() throws Exception {
List<Future<Product>> results = defaultExecutor.invokeAll(callableTasks);
int count = 0;
for (Future<Product> f : results) {
assertEquals(count++, f.get().getId());
}
}
@Test
public void testInvokeAnyWithCallableDefault() throws Exception {
Product results = defaultExecutor.invokeAny(callableTasks);
assertTrue(results.getId() >= 0);
assertTrue(results.getId() <= 5);
}
// @Test
// public void testSubmitWithRunnableFromWebXML() throws Exception {
// executorFromWebXml.submit(new MyRunnableTask(1));
// Thread.sleep(2000);
// assertTrue(TestStatus.invokedRunnable);
// }
//
// @Test
// public void testSubmitWithCallableFromWebXML() throws Exception {
// Future<Product> future = executorFromWebXml.submit(callableTask);
// assertEquals(1, future.get().getId());
// }
//
// @Test
// public void testInvokeAllWithCallableFromWebXML() throws Exception {
// List<Future<Product>> results = executorFromWebXml.invokeAll(callableTasks);
// int count = 0;
// for (Future<Product> f : results) {
// assertEquals(count++, f.get().getId());
// }
// }
//
// @Test
// public void testInvokeAnyWithCallableFromWebXML() throws Exception {
// Product results = executorFromWebXml.invokeAny(callableTasks);
// assertTrue(results.getId() >= 0);
// assertTrue(results.getId() <= 5);
// }
}