View Javadoc

1   package com.atlassian.vcache.internal.core.metrics;
2   
3   import java.util.concurrent.CompletableFuture;
4   
5   import com.atlassian.vcache.ExternalWriteOperationsUnbuffered;
6   import com.atlassian.vcache.PutPolicy;
7   
8   import org.junit.Test;
9   import org.junit.runner.RunWith;
10  import org.mockito.runners.MockitoJUnitRunner;
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  @RunWith(MockitoJUnitRunner.class)
30  public abstract class TimedExternalWriteOperationsUnbufferedTest extends TimedExternalCacheTest
31  {
32      protected abstract ExternalWriteOperationsUnbuffered<String> getDelegateOps();
33      protected abstract TimedExternalWriteOperationsUnbuffered<String> getTimed();
34  
35      @Test
36      public void put_success() throws Exception
37      {
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 CompletableFuture<Boolean> passedResult = getTimed().put("foo", "value", PutPolicy.ADD_ONLY);
44  
45          assertThat(passedResult, equalTo(result));
46  
47          verify(metricsCollector).record(eq(EXTERNAL), eq(CACHE_NAME), eq(TIMED_PUT_CALL), anyLong());
48          verifyNoMoreInteractions(metricsCollector);
49      }
50  
51      @Test
52      public void put_fail() throws Exception
53      {
54          final CompletableFuture<Boolean> result = mock(CompletableFuture.class);
55          when(result.isCompletedExceptionally()).thenReturn(true);
56          when(getDelegateOps().put("foo", "value", PutPolicy.ADD_ONLY)).thenReturn(result);
57  
58          final CompletableFuture<Boolean> passedResult = getTimed().put("foo", "value", PutPolicy.ADD_ONLY);
59  
60          assertThat(passedResult, equalTo(result));
61  
62          verify(metricsCollector).record(eq(EXTERNAL), eq(CACHE_NAME), eq(TIMED_PUT_CALL), anyLong());
63          verify(metricsCollector).record(eq(EXTERNAL), eq(CACHE_NAME), eq(NUMBER_OF_FAILED_PUT), eq(1L));
64          verifyNoMoreInteractions(metricsCollector);
65      }
66  
67      @Test
68      public void remove_success() throws Exception
69      {
70          final CompletableFuture<Void> result = mock(CompletableFuture.class);
71          when(result.isCompletedExceptionally()).thenReturn(false);
72          when(getDelegateOps().remove(singletonList("foo"))).thenReturn(result);
73  
74          final CompletableFuture<Void> passedResult = getTimed().remove("foo");
75  
76          assertThat(passedResult, equalTo(result));
77  
78          verify(metricsCollector).record(eq(EXTERNAL), eq(CACHE_NAME), eq(TIMED_REMOVE_CALL), anyLong());
79          verifyNoMoreInteractions(metricsCollector);
80      }
81  
82      @Test
83      public void remove_fail() throws Exception
84      {
85          final CompletableFuture<Void> result = mock(CompletableFuture.class);
86          when(result.isCompletedExceptionally()).thenReturn(true);
87          when(getDelegateOps().remove(singletonList("foo"))).thenReturn(result);
88  
89          final CompletableFuture<Void> passedResult = getTimed().remove("foo");
90  
91          assertThat(passedResult, equalTo(result));
92  
93          verify(metricsCollector).record(eq(EXTERNAL), eq(CACHE_NAME), eq(TIMED_REMOVE_CALL), anyLong());
94          verify(metricsCollector).record(eq(EXTERNAL), eq(CACHE_NAME), eq(NUMBER_OF_FAILED_REMOVE), eq(1L));
95          verifyNoMoreInteractions(metricsCollector);
96      }
97  
98      @Test
99      public void removeAll_success() throws Exception
100     {
101         final CompletableFuture<Void> result = mock(CompletableFuture.class);
102         when(result.isCompletedExceptionally()).thenReturn(false);
103         when(getDelegateOps().removeAll()).thenReturn(result);
104 
105         final CompletableFuture<Void> passedResult = getTimed().removeAll();
106 
107         assertThat(passedResult, equalTo(result));
108 
109         verify(metricsCollector).record(eq(EXTERNAL), eq(CACHE_NAME), eq(TIMED_REMOVE_ALL_CALL), anyLong());
110         verifyNoMoreInteractions(metricsCollector);
111     }
112 
113     @Test
114     public void removeAll_fail() throws Exception
115     {
116         final CompletableFuture<Void> result = mock(CompletableFuture.class);
117         when(result.isCompletedExceptionally()).thenReturn(true);
118         when(getDelegateOps().removeAll()).thenReturn(result);
119 
120         final CompletableFuture<Void> passedResult = getTimed().removeAll();
121 
122         assertThat(passedResult, equalTo(result));
123 
124         verify(metricsCollector).record(eq(EXTERNAL), eq(CACHE_NAME), eq(TIMED_REMOVE_ALL_CALL), anyLong());
125         verify(metricsCollector).record(eq(EXTERNAL), eq(CACHE_NAME), eq(NUMBER_OF_FAILED_REMOVE_ALL), eq(1L));
126         verifyNoMoreInteractions(metricsCollector);
127     }
128 }