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();
38 }
39 });
40 } catch (Exception e) {
41
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
54 verify(threadLocalContextManager, never()).clearThreadLocalContext();
55 }
56 }