View Javadoc

1   package com.atlassian.httpclient.apache.httpcomponents;
2   
3   import com.atlassian.sal.api.executor.ThreadLocalContextManager;
4   import org.junit.Test;
5   import org.junit.runner.RunWith;
6   import org.mockito.InOrder;
7   import org.mockito.Mock;
8   import org.mockito.runners.MockitoJUnitRunner;
9   
10  import java.util.concurrent.atomic.AtomicBoolean;
11  
12  import static com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient.runInContext;
13  import static org.junit.Assert.assertTrue;
14  import static org.mockito.Mockito.inOrder;
15  import static org.mockito.Mockito.never;
16  import static org.mockito.Mockito.verify;
17  import static org.mockito.Mockito.when;
18  
19  @RunWith(MockitoJUnitRunner.class)
20  public final class SettableFuturePromiseHttpPromiseAsyncClientTest {
21      @Mock
22      private ThreadLocalContextManager<Object> threadLocalContextManager;
23  
24      @Test
25      public void testRunInContext() {
26          final AtomicBoolean run = new AtomicBoolean(false);
27  
28          final Object currentThreadLocalContext = new Object();
29          when(threadLocalContextManager.getThreadLocalContext()).thenReturn(currentThreadLocalContext);
30  
31          final Object newThreadLocalContext = new Object();
32          try {
33              runInContext(threadLocalContextManager, newThreadLocalContext, this.getClass().getClassLoader(), new Runnable() {
34                  @Override
35                  public void run() {
36                      run.set(true);
37                      throw new RuntimeException(); // this shouldn't affect things
38                  }
39              });
40          } catch (Exception e) {
41              // ignore
42          }
43  
44          assertTrue(run.get());
45  
46  
47          final InOrder inOrder = inOrder(threadLocalContextManager);
48  
49          inOrder.verify(threadLocalContextManager).getThreadLocalContext();
50          inOrder.verify(threadLocalContextManager).setThreadLocalContext(newThreadLocalContext);
51          inOrder.verify(threadLocalContextManager).setThreadLocalContext(currentThreadLocalContext);
52  
53          // never reset
54          verify(threadLocalContextManager, never()).clearThreadLocalContext();
55      }
56  }