1 package com.atlassian.sal.core.executor;
2
3 import com.atlassian.sal.api.executor.ThreadLocalContextManager;
4 import com.google.common.base.Throwables;
5 import junit.framework.TestCase;
6
7 import java.util.concurrent.Callable;
8
9 public class TestThreadLocalDelegateCallable extends TestCase
10 {
11 public void testRun() throws InterruptedException
12 {
13 final ThreadLocalContextManager<Object> manager = new StubThreadLocalContextManager();
14 Callable<Void> delegate = new Callable<Void>()
15 {
16 public Void call()
17 {
18 assertNotNull(manager.getThreadLocalContext());
19 return null;
20 }
21 };
22
23 manager.setThreadLocalContext(new Object());
24 final Callable callable = new ThreadLocalDelegateCallable<Object, Void>(manager, delegate);
25 Thread t = new Thread(new Runnable()
26 {
27
28 public void run()
29 {
30 try
31 {
32 callable.call();
33 }
34 catch (Exception e)
35 {
36 throw Throwables.propagate(e);
37 }
38 }
39 });
40 t.start();
41 t.join(10000);
42 assertNotNull(manager.getThreadLocalContext());
43 }
44 }