View Javadoc

1   package com.atlassian.vcache.internal.core.metrics;
2   
3   import com.atlassian.marshalling.api.Marshaller;
4   import com.atlassian.marshalling.api.MarshallingException;
5   import org.junit.Before;
6   import org.junit.Test;
7   import org.junit.runner.RunWith;
8   import org.mockito.Mock;
9   import org.mockito.runners.MockitoJUnitRunner;
10  
11  import static com.atlassian.vcache.internal.MetricLabel.NUMBER_OF_BYTES_MARSHALLED;
12  import static com.atlassian.vcache.internal.MetricLabel.NUMBER_OF_FAILED_MARSHALL;
13  import static com.atlassian.vcache.internal.MetricLabel.TIMED_MARSHALL_CALL;
14  import static com.atlassian.vcache.internal.core.metrics.CacheType.EXTERNAL;
15  import static org.junit.Assert.fail;
16  import static org.mockito.Matchers.anyLong;
17  import static org.mockito.Matchers.eq;
18  import static org.mockito.Mockito.verify;
19  import static org.mockito.Mockito.verifyNoMoreInteractions;
20  import static org.mockito.Mockito.when;
21  
22  @RunWith(MockitoJUnitRunner.class)
23  public class TimedMarshallerTest {
24      private static final String CACHE_NAME = "bigKev";
25  
26      @Mock
27      private Marshaller<String> delegate;
28  
29      @Mock
30      private MetricsRecorder metricsRecorder;
31  
32      private TimedMarshaller<String> timed;
33  
34      @Before
35      public void init() {
36          timed = new TimedMarshaller<>(delegate, metricsRecorder, CACHE_NAME);
37      }
38  
39      @Test
40      public void marshall_success() throws Exception {
41          when(delegate.marshallToBytes("fruit")).thenReturn(new byte[42]);
42  
43          timed.marshallToBytes("fruit");
44  
45          verify(metricsRecorder).record(CACHE_NAME, EXTERNAL, NUMBER_OF_BYTES_MARSHALLED, 42);
46          verify(metricsRecorder).record(eq(CACHE_NAME), eq(EXTERNAL), eq(TIMED_MARSHALL_CALL), anyLong());
47          verifyNoMoreInteractions(metricsRecorder);
48      }
49  
50      @Test
51      public void marshall_failure() {
52          when(delegate.marshallToBytes("fruit")).thenThrow(new MarshallingException("blondie"));
53  
54          try {
55              timed.marshallToBytes("fruit");
56              fail("Exception should have been thrown");
57          } catch (MarshallingException e) {
58              verify(metricsRecorder).record(eq(CACHE_NAME), eq(EXTERNAL), eq(TIMED_MARSHALL_CALL), anyLong());
59              verify(metricsRecorder).record(CACHE_NAME, EXTERNAL, NUMBER_OF_FAILED_MARSHALL, 1);
60              verifyNoMoreInteractions(metricsRecorder);
61          }
62      }
63  }