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 }