View Javadoc

1   package com.atlassian.vcache.internal.core;
2   
3   import com.atlassian.vcache.internal.BegunTransactionalActivityHandler;
4   import com.atlassian.vcache.internal.core.metrics.NoopMetricsCollector;
5   import org.junit.Before;
6   import org.junit.Test;
7   import org.junit.runner.RunWith;
8   import org.mockito.InjectMocks;
9   import org.mockito.Mock;
10  import org.mockito.runners.MockitoJUnitRunner;
11  
12  import java.util.Set;
13  
14  import static org.hamcrest.Matchers.contains;
15  import static org.hamcrest.Matchers.empty;
16  import static org.junit.Assert.assertThat;
17  import static org.mockito.Matchers.anyString;
18  import static org.mockito.Matchers.eq;
19  import static org.mockito.Mockito.times;
20  import static org.mockito.Mockito.verify;
21  import static org.mockito.Mockito.when;
22  
23  @RunWith(MockitoJUnitRunner.class)
24  public class DefaultTransactionControlManagerTest {
25      @InjectMocks
26      private DefaultTransactionControlManager transactionControlManager;
27  
28      @Mock
29      private Instrumentor instrumentor = new NoopMetricsCollector();
30  
31      @Mock
32      private BegunTransactionalActivityHandler activityHandler;
33  
34      @Mock
35      private TransactionControl transactionControl;
36  
37      @Mock
38      private TransactionControl wrappedTransactionControl;
39  
40      private final DefaultRequestContext requestContext = new DefaultRequestContext("pid");
41  
42      @Before
43      public void setUp() {
44          when(instrumentor.wrap(eq(transactionControl), anyString())).thenReturn(wrappedTransactionControl);
45          when(wrappedTransactionControl.transactionDiscard()).thenReturn(true);
46      }
47  
48      @Test
49      public void repeatedRegistrationOfSameCacheOnlyInvokesCallbackOnce() {
50          transactionControlManager.registerTransactionalExternalCache(requestContext, "mycache", transactionControl);
51          transactionControlManager.registerTransactionalExternalCache(requestContext, "mycache", transactionControl);
52  
53          verify(activityHandler, times(1)).onRequest(requestContext);
54      }
55  
56      @Test
57      public void repeatedRegistrationOfDifferentCachesOnlyInvokesCallbackOnce() {
58          transactionControlManager.registerTransactionalExternalCache(requestContext, "cache1", transactionControl);
59          transactionControlManager.registerTransactionalExternalCache(requestContext, "cache2", transactionControl);
60  
61          verify(activityHandler, times(1)).onRequest(requestContext);
62      }
63  
64      @Test
65      public void syncAllWithNoRegistrationsDoesNothing() {
66          transactionControlManager.syncAll(requestContext);
67      }
68  
69      @Test
70      public void syncAllInvokesTransactionControlOncePerCacheAndClearsCallbackFlag() {
71          transactionControlManager.registerTransactionalExternalCache(requestContext, "mycache", transactionControl);
72          transactionControlManager.registerTransactionalExternalCache(requestContext, "mycache", transactionControl);
73  
74          verify(activityHandler, times(1)).onRequest(requestContext);
75  
76          // sync should reset the callback flag
77          transactionControlManager.syncAll(requestContext);
78  
79          // now re-register the same cache and make sure the callback is invoked once more
80          transactionControlManager.registerTransactionalExternalCache(requestContext, "mycache", transactionControl);
81  
82          verify(activityHandler, times(2)).onRequest(requestContext);
83      }
84  
85      @Test
86      public void discardAllWithNoRegistrationsDoesNothing() {
87          final Set<String> discardedCaches = transactionControlManager.discardAll(requestContext);
88  
89          assertThat(discardedCaches, empty());
90      }
91  
92      @Test
93      public void discardAllInvokesTransactionControlOncePerCacheAndClearsCallbackFlag() {
94          transactionControlManager.registerTransactionalExternalCache(requestContext, "mycache", transactionControl);
95          transactionControlManager.registerTransactionalExternalCache(requestContext, "mycache", transactionControl);
96  
97          verify(activityHandler, times(1)).onRequest(requestContext);
98  
99          // discard should reset the callback flag
100         final Set<String> discardedCaches = transactionControlManager.discardAll(requestContext);
101 
102         assertThat(discardedCaches, contains("mycache"));
103 
104         // now re-register the same cache and make sure the callback is invoked once more
105         transactionControlManager.registerTransactionalExternalCache(requestContext, "mycache", transactionControl);
106 
107         verify(activityHandler, times(2)).onRequest(requestContext);
108     }
109 
110     @Test
111     public void discardAllReturnsNoCachenamesIfAllCacheshaveBeenSynchronized() {
112         transactionControlManager.registerTransactionalExternalCache(requestContext, "mycache", transactionControl);
113 
114         transactionControlManager.syncAll(requestContext);
115 
116         when(wrappedTransactionControl.transactionDiscard()).thenReturn(false);
117 
118         final Set<String> discardedCaches = transactionControlManager.discardAll(requestContext);
119 
120         assertThat(discardedCaches, empty());
121     }
122 
123     @Test
124     public void discardAllReturnsNoCachenamesIfAlreadyDiscarded() {
125         transactionControlManager.registerTransactionalExternalCache(requestContext, "mycache", transactionControl);
126 
127         final Set<String> discardedCaches = transactionControlManager.discardAll(requestContext);
128 
129         assertThat(discardedCaches, contains("mycache"));
130 
131         when(wrappedTransactionControl.transactionDiscard()).thenReturn(false);
132 
133         final Set<String> discardedCaches2 = transactionControlManager.discardAll(requestContext);
134 
135         assertThat(discardedCaches2, empty());
136     }
137 }