View Javadoc

1   package com.atlassian.sal.core.executor;
2   
3   import com.atlassian.sal.api.executor.ThreadLocalContext;
4   import com.atlassian.sal.api.executor.ThreadLocalContextManager;
5   import junit.framework.TestCase;
6   
7   import java.util.concurrent.CountDownLatch;
8   import java.util.concurrent.Executor;
9   import java.util.concurrent.Executors;
10  import java.util.concurrent.TimeUnit;
11  
12  import static com.google.common.base.Preconditions.checkNotNull;
13  
14  public final class TestThreadLocalDelegateExecutor extends TestCase
15  {
16      public void testRun() throws InterruptedException
17      {
18          final ThreadLocalContextManager<ThreadLocalContext> manager = new StubThreadLocalContextManager();
19          Runnable delegate = new Runnable()
20          {
21              public void run()
22              {
23                  assertNotNull(manager.getThreadLocalContext());
24              }
25          };
26  
27          manager.setThreadLocalContext(new StubThreadLocalContextManager.Context());
28          final Executor executor = new ThreadLocalDelegateExecutor<ThreadLocalContext>(manager, Executors.newSingleThreadExecutor());
29  
30          final CountDownLatch latch = new CountDownLatch(1);
31  
32          executor.execute(new CountingDownRunnable(latch, delegate));
33  
34          latch.await(2, TimeUnit.SECONDS);
35          assertNotNull(manager.getThreadLocalContext());
36      }
37  
38      private static final class CountingDownRunnable implements Runnable
39      {
40          private final CountDownLatch latch;
41          private final Runnable delegate;
42  
43          private CountingDownRunnable(CountDownLatch latch, Runnable delegate)
44          {
45              this.latch = checkNotNull(latch);
46              this.delegate = checkNotNull(delegate);
47          }
48  
49          @Override
50          public void run()
51          {
52              try
53              {
54                  delegate.run();
55              }
56              finally
57              {
58                  latch.countDown();
59              }
60          }
61      }
62  }