View Javadoc

1   package com.atlassian.vcache.internal.core.metrics;
2   
3   import com.atlassian.vcache.ExternalWriteOperationsUnbuffered;
4   import com.atlassian.vcache.PutPolicy;
5   import org.junit.Test;
6   import org.junit.runner.RunWith;
7   import org.mockito.runners.MockitoJUnitRunner;
8   
9   import java.util.concurrent.CompletableFuture;
10  import java.util.concurrent.CompletionStage;
11  
12  import static com.atlassian.vcache.internal.MetricLabel.NUMBER_OF_FAILED_PUT;
13  import static com.atlassian.vcache.internal.MetricLabel.NUMBER_OF_FAILED_REMOVE;
14  import static com.atlassian.vcache.internal.MetricLabel.NUMBER_OF_FAILED_REMOVE_ALL;
15  import static com.atlassian.vcache.internal.MetricLabel.TIMED_PUT_CALL;
16  import static com.atlassian.vcache.internal.MetricLabel.TIMED_REMOVE_ALL_CALL;
17  import static com.atlassian.vcache.internal.MetricLabel.TIMED_REMOVE_CALL;
18  import static com.atlassian.vcache.internal.core.metrics.CacheType.EXTERNAL;
19  import static java.util.Collections.singletonList;
20  import static org.hamcrest.Matchers.equalTo;
21  import static org.junit.Assert.assertThat;
22  import static org.mockito.Matchers.anyLong;
23  import static org.mockito.Matchers.eq;
24  import static org.mockito.Mockito.mock;
25  import static org.mockito.Mockito.verify;
26  import static org.mockito.Mockito.verifyNoMoreInteractions;
27  import static org.mockito.Mockito.when;
28  
29  @SuppressWarnings("unchecked")
30  @RunWith(MockitoJUnitRunner.class)
31  public abstract class TimedExternalWriteOperationsUnbufferedTest extends TimedExternalCacheTest {
32      protected abstract ExternalWriteOperationsUnbuffered<String> getDelegateOps();
33  
34      protected abstract TimedExternalWriteOperationsUnbuffered<String> getTimed();
35  
36      @Test
37      public void put_success() throws Exception {
38          final CompletableFuture<Boolean> result = mock(CompletableFuture.class);
39          when(result.isCompletedExceptionally()).thenReturn(false);
40  
41          when(getDelegateOps().put("foo", "value", PutPolicy.ADD_ONLY)).thenReturn(result);
42  
43          final CompletionStage<Boolean> passedResult = getTimed().put("foo", "value", PutPolicy.ADD_ONLY);
44  
45          assertThat(passedResult, equalTo(result));
46  
47          verify(metricsRecorder).record(eq(CACHE_NAME), eq(EXTERNAL), eq(TIMED_PUT_CALL), anyLong());
48          verifyNoMoreInteractions(metricsRecorder);
49      }
50  
51      @Test
52      public void put_fail() throws Exception {
53          final CompletableFuture<Boolean> result = mock(CompletableFuture.class);
54          when(result.isCompletedExceptionally()).thenReturn(true);
55          when(getDelegateOps().put("foo", "value", PutPolicy.ADD_ONLY)).thenReturn(result);
56  
57          final CompletionStage<Boolean> passedResult = getTimed().put("foo", "value", PutPolicy.ADD_ONLY);
58  
59          assertThat(passedResult, equalTo(result));
60  
61          verify(metricsRecorder).record(eq(CACHE_NAME), eq(EXTERNAL), eq(TIMED_PUT_CALL), anyLong());
62          verify(metricsRecorder).record(eq(CACHE_NAME), eq(EXTERNAL), eq(NUMBER_OF_FAILED_PUT), eq(1L));
63          verifyNoMoreInteractions(metricsRecorder);
64      }
65  
66      @Test
67      public void remove_success() throws Exception {
68          final CompletableFuture<Void> result = mock(CompletableFuture.class);
69          when(result.isCompletedExceptionally()).thenReturn(false);
70          when(getDelegateOps().remove(singletonList("foo"))).thenReturn(result);
71  
72          final CompletionStage<Void> passedResult = getTimed().remove("foo");
73  
74          assertThat(passedResult, equalTo(result));
75  
76          verify(metricsRecorder).record(eq(CACHE_NAME), eq(EXTERNAL), eq(TIMED_REMOVE_CALL), anyLong());
77          verifyNoMoreInteractions(metricsRecorder);
78      }
79  
80      @Test
81      public void remove_fail() throws Exception {
82          final CompletableFuture<Void> result = mock(CompletableFuture.class);
83          when(result.isCompletedExceptionally()).thenReturn(true);
84          when(getDelegateOps().remove(singletonList("foo"))).thenReturn(result);
85  
86          final CompletionStage<Void> passedResult = getTimed().remove("foo");
87  
88          assertThat(passedResult, equalTo(result));
89  
90          verify(metricsRecorder).record(eq(CACHE_NAME), eq(EXTERNAL), eq(TIMED_REMOVE_CALL), anyLong());
91          verify(metricsRecorder).record(eq(CACHE_NAME), eq(EXTERNAL), eq(NUMBER_OF_FAILED_REMOVE), eq(1L));
92          verifyNoMoreInteractions(metricsRecorder);
93      }
94  
95      @Test
96      public void removeAll_success() throws Exception {
97          final CompletableFuture<Void> result = mock(CompletableFuture.class);
98          when(result.isCompletedExceptionally()).thenReturn(false);
99          when(getDelegateOps().removeAll()).thenReturn(result);
100 
101         final CompletionStage<Void> passedResult = getTimed().removeAll();
102 
103         assertThat(passedResult, equalTo(result));
104 
105         verify(metricsRecorder).record(eq(CACHE_NAME), eq(EXTERNAL), eq(TIMED_REMOVE_ALL_CALL), anyLong());
106         verifyNoMoreInteractions(metricsRecorder);
107     }
108 
109     @Test
110     public void removeAll_fail() throws Exception {
111         final CompletableFuture<Void> result = mock(CompletableFuture.class);
112         when(result.isCompletedExceptionally()).thenReturn(true);
113         when(getDelegateOps().removeAll()).thenReturn(result);
114 
115         final CompletionStage<Void> passedResult = getTimed().removeAll();
116 
117         assertThat(passedResult, equalTo(result));
118 
119         verify(metricsRecorder).record(eq(CACHE_NAME), eq(EXTERNAL), eq(TIMED_REMOVE_ALL_CALL), anyLong());
120         verify(metricsRecorder).record(eq(CACHE_NAME), eq(EXTERNAL), eq(NUMBER_OF_FAILED_REMOVE_ALL), eq(1L));
121         verifyNoMoreInteractions(metricsRecorder);
122     }
123 }