@Override public <T> Task<T> submit(TaskAdaptable<T> t) { return submit(new LinkedHashMap<Object,Object>(1), t); }
@Override public <T> Task<T> submit(Callable<T> c) { return submit(new LinkedHashMap<Object,Object>(1), c); } @Override public <T> Task<T> submit(Map<?,?> flags, Callable<T> c) { return submit(flags, new BasicTask<T>(flags, c)); }
@Override public Task<?> submit(Runnable r) { return submit(new LinkedHashMap<Object,Object>(1), r); } @Override public Task<?> submit(Map<?,?> flags, Runnable r) { return submit(flags, new BasicTask<Void>(flags, r)); }
@Override public void run() { executionManager.submit(work); }}) .completionLatch(completionLatch));
@Override public void run() { executionManager.submit(flags, work); }}) .completionLatch(completionLatch));
@Override public Task<?> submit(Map<?,?> flags, Runnable r) { return submit(flags, new BasicTask<Void>(flags, r)); }
@Override public Integer call() throws Exception { em.submit(MutableMap.of("tag", "B"), new Callable<Integer>() { @Override public Integer call() throws Exception { assertEquals(45, em.getTasksWithTag("A").iterator().next().get()); return 46; }}); return 45; }}); em.submit(MutableMap.of("tag", "A"), t);
@Override public void run() { while (submitCount.get() > counter.get() + 5000) { LOG.info("delaying because "+submitCount.get()+" submitted and only "+counter.get()+" run"); Time.sleep(500); } executionManager.submit(MutableMap.of("tags", ImmutableList.of("singlethreaded")), work); submitCount.incrementAndGet(); }}) .completionLatch(completionLatch));
@Test public void testGetResultOfQueuedTaskBeforeItExecutesWithTimeout() throws Exception { final CountDownLatch latch = new CountDownLatch(1); em.submit(MutableMap.of("tag", "category1"), newLatchAwaiter(latch)); BasicTask<Integer> t = new BasicTask<Integer>(Callables.returning(123)); Future<Integer> future = em.submit(MutableMap.of("tag", "category1"), t); try { assertEquals(future.get(10, TimeUnit.MILLISECONDS), (Integer)123); fail(); } catch (TimeoutException e) { // success } }
@Test public void runSimpleRunnable() throws Exception { data.put(1, "a"); Task<?> t = em.submit(MutableMap.of("tag", "A"), newPutRunnable(1, "b")); assertEquals(null, t.get()); assertEquals("b", data.get(1)); }
@Test public void runSimpleCallable() throws Exception { data.put(1, "a"); Task<?> t = em.submit(MutableMap.of("tag", "A"), newPutCallable(1, "b")); assertEquals("a", t.get()); assertEquals("b", data.get(1)); }
@Test public void testGetResultOfQueuedTaskAfterItExecutes() throws Exception { final CountDownLatch latch = new CountDownLatch(1); em.submit(MutableMap.of("tag", "category1"), newLatchAwaiter(latch)); BasicTask<Integer> t = new BasicTask<Integer>(Callables.returning(123)); Future<Integer> future = em.submit(MutableMap.of("tag", "category1"), t); latch.countDown(); assertEquals(future.get(), (Integer)123); }
@Test public void runSimpleBasicTask() throws Exception { BasicTask<Object> t = new BasicTask<Object>(newPutCallable(1, "b")); data.put(1, "a"); Task<Object> t2 = em.submit(MutableMap.of("tag", "A"), t); assertEquals("a", t.get()); assertEquals("a", t2.get()); assertEquals("b", data.get(1)); }
@Test public void testRetrievingTasksWithMultipleTags() throws Exception { Task<?> t = new BasicTask<Void>(newNoop()); em.submit(MutableMap.of("tags", ImmutableList.of("A", "B")), t); t.get(); assertEquals(em.getTasksWithTag("A"), ImmutableList.of(t)); assertEquals(em.getTasksWithTag("B"), ImmutableList.of(t)); assertEquals(em.getTasksWithAnyTag(ImmutableList.of("A")), ImmutableList.of(t)); assertEquals(em.getTasksWithAnyTag(ImmutableList.of("B")), ImmutableList.of(t)); assertEquals(em.getTasksWithAnyTag(ImmutableList.of("A", "B")), ImmutableList.of(t)); assertEquals(em.getTasksWithAllTags(ImmutableList.of("A", "B")), ImmutableList.of(t)); assertEquals(em.getTasksWithAllTags(ImmutableList.of("A")), ImmutableList.of(t)); assertEquals(em.getTasksWithAllTags(ImmutableList.of("B")), ImmutableList.of(t)); }
@Test public void testRetrievingTasksWithTagsExcludesNonMatchingTasks() throws Exception { Task<?> t = new BasicTask<Void>(newNoop()); em.submit(MutableMap.of("tag", "A"), t); t.get(); assertEquals(em.getTasksWithTag("B"), ImmutableSet.of()); assertEquals(em.getTasksWithAnyTag(ImmutableList.of("B")), ImmutableSet.of()); assertEquals(em.getTasksWithAllTags(ImmutableList.of("A", "B")), ImmutableSet.of()); }
@Test public void testRetrievingTasksWithAllTagsWhenFirstNotMatched() throws Exception { Task<?> t = new BasicTask<Void>(newNoop()); em.submit(MutableMap.of("tags", ImmutableList.of("A")), t); t.get(); assertEquals(em.getTasksWithAllTags(ImmutableList.of("not_there","A")), ImmutableSet.of()); }
@Test public void testRetrievingTasksWithTagsReturnsExpectedTask() throws Exception { Task<?> t = new BasicTask<Void>(newNoop()); em.submit(MutableMap.of("tag", "A"), t); t.get(); assertEquals(em.getTasksWithTag("A"), ImmutableList.of(t)); assertEquals(em.getTasksWithAnyTag(ImmutableList.of("A")), ImmutableList.of(t)); assertEquals(em.getTasksWithAnyTag(ImmutableList.of("A", "B")), ImmutableList.of(t)); assertEquals(em.getTasksWithAllTags(ImmutableList.of("A")), ImmutableList.of(t)); }
@Test public void runSimpleTask() throws Exception { TaskInternal<Object> t = new ConcreteForwardingTask<Object>(new BasicTask<Object>(new Callable<Object>() { @Override public Object call() { return data.put(1, "b"); }})); data.put(1, "a"); Task<?> t2 = em.submit(MutableMap.of("tag", "A"), t); assertEquals("a", t.get()); assertEquals("a", t2.get()); assertSame(t, t2, "t="+t+"; t2="+t2); assertEquals("b", data.get(1)); }
@Test public void testGetTaskById() throws Exception { Task<?> t = new BasicTask<Void>(newNoop()); em.submit(MutableMap.of("tag", "A"), t); assertEquals(em.getTask(t.getId()), t); }
@Test public void cancelAfterRun() throws Exception { BasicTask<Integer> t = new BasicTask<Integer>(Callables.returning(42)); em.submit(MutableMap.of("tag", "A"), t); assertEquals(t.get(), (Integer)42); t.cancel(true); assertFalse(t.isCancelled()); assertFalse(t.isError()); assertTrue(t.isDone()); }