1 package com.atlassian.vcache.internal.core.metrics;
2
3 import com.atlassian.json.marshal.Jsonable;
4 import com.atlassian.vcache.internal.JsonableFactory;
5 import com.atlassian.vcache.internal.MetricLabel;
6 import com.atlassian.vcache.internal.RequestMetrics;
7 import org.junit.Test;
8
9 import java.io.IOException;
10 import java.io.StringWriter;
11
12 import static org.hamcrest.Matchers.is;
13 import static org.hamcrest.Matchers.notNullValue;
14 import static org.junit.Assert.assertThat;
15
16 public class JsonableFactoryTest {
17 private static final String EXPECTED_JSON =
18 "{\"allMetricsMap\":{\"JVM\":{\"cache-JVM\":{\"NUMBER_OF_BYTES_MARSHALLED\":{\"sampleCount\":1,\"samplesTotal\":1,\"minSample\":1,\"maxSample\":1},\"NUMBER_OF_BYTES_UNMARSHALLED\":{\"sampleCount\":1,\"samplesTotal\":2,\"minSample\":2,\"maxSample\":2},\"NUMBER_OF_FAILED_GET\":{\"sampleCount\":1,\"samplesTotal\":3,\"minSample\":3,\"maxSample\":3},\"NUMBER_OF_FAILED_IDENTIFIED_GET\":{\"sampleCount\":1,\"samplesTotal\":4,\"minSample\":4,\"maxSample\":4},\"NUMBER_OF_FAILED_MARSHALL\":{\"sampleCount\":1,\"samplesTotal\":5,\"minSample\":5,\"maxSample\":5},\"NUMBER_OF_FAILED_UNMARSHALL\":{\"sampleCount\":1,\"samplesTotal\":6,\"minSample\":6,\"maxSample\":6},\"NUMBER_OF_FAILED_IDENTIFIED_REMOVE\":{\"sampleCount\":1,\"samplesTotal\":7,\"minSample\":7,\"maxSample\":7},\"NUMBER_OF_FAILED_IDENTIFIED_REPLACE\":{\"sampleCount\":1,\"samplesTotal\":8,\"minSample\":8,\"maxSample\":8},\"NUMBER_OF_FAILED_PUT\":{\"sampleCount\":1,\"samplesTotal\":9,\"minSample\":9,\"maxSample\":9},\"NUMBER_OF_FAILED_REMOVE\":{\"sampleCount\":1,\"samplesTotal\":10,\"minSample\":10,\"maxSample\":10},\"NUMBER_OF_FAILED_REMOVE_ALL\":{\"sampleCount\":1,\"samplesTotal\":11,\"minSample\":11,\"maxSample\":11},\"NUMBER_OF_FACTORY_KEYS\":{\"sampleCount\":1,\"samplesTotal\":12,\"minSample\":12,\"maxSample\":12},\"NUMBER_OF_HITS\":{\"sampleCount\":1,\"samplesTotal\":13,\"minSample\":13,\"maxSample\":13},\"NUMBER_OF_MISSES\":{\"sampleCount\":1,\"samplesTotal\":14,\"minSample\":14,\"maxSample\":14},\"NUMBER_OF_REMOTE_GET\":{\"sampleCount\":1,\"samplesTotal\":15,\"minSample\":15,\"maxSample\":15},\"TIMED_FACTORY_CALL\":{\"sampleCount\":1,\"samplesTotal\":16,\"minSample\":16,\"maxSample\":16},\"TIMED_SUPPLIER_CALL\":{\"sampleCount\":1,\"samplesTotal\":17,\"minSample\":17,\"maxSample\":17},\"TIMED_GET_CALL\":{\"sampleCount\":1,\"samplesTotal\":18,\"minSample\":18,\"maxSample\":18},\"TIMED_GET_KEYS_CALL\":{\"sampleCount\":1,\"samplesTotal\":19,\"minSample\":19,\"maxSample\":19},\"TIMED_IDENTIFIED_GET_CALL\":{\"sampleCount\":1,\"samplesTotal\":20,\"minSample\":20,\"maxSample\":20},\"TIMED_IDENTIFIED_REMOVE_CALL\":{\"sampleCount\":1,\"samplesTotal\":21,\"minSample\":21,\"maxSample\":21},\"TIMED_IDENTIFIED_REPLACE_CALL\":{\"sampleCount\":1,\"samplesTotal\":22,\"minSample\":22,\"maxSample\":22},\"TIMED_MARSHALL_CALL\":{\"sampleCount\":1,\"samplesTotal\":23,\"minSample\":23,\"maxSample\":23},\"TIMED_PUT_CALL\":{\"sampleCount\":1,\"samplesTotal\":24,\"minSample\":24,\"maxSample\":24},\"TIMED_REMOVE_CALL\":{\"sampleCount\":1,\"samplesTotal\":25,\"minSample\":25,\"maxSample\":25},\"TIMED_REMOVE_ALL_CALL\":{\"sampleCount\":1,\"samplesTotal\":26,\"minSample\":26,\"maxSample\":26},\"TIMED_UNMARSHALL_CALL\":{\"sampleCount\":1,\"samplesTotal\":27,\"minSample\":27,\"maxSample\":27},\"TIMED_TRANSACTION_DISCARD_CALL\":{\"sampleCount\":1,\"samplesTotal\":28,\"minSample\":28,\"maxSample\":28},\"TIMED_TRANSACTION_SYNC_CALL\":{\"sampleCount\":1,\"samplesTotal\":29,\"minSample\":29,\"maxSample\":29}}},\"REQUEST\":{\"cache-REQUEST\":{\"NUMBER_OF_BYTES_MARSHALLED\":{\"sampleCount\":1,\"samplesTotal\":30,\"minSample\":30,\"maxSample\":30},\"NUMBER_OF_BYTES_UNMARSHALLED\":{\"sampleCount\":1,\"samplesTotal\":31,\"minSample\":31,\"maxSample\":31},\"NUMBER_OF_FAILED_GET\":{\"sampleCount\":1,\"samplesTotal\":32,\"minSample\":32,\"maxSample\":32},\"NUMBER_OF_FAILED_IDENTIFIED_GET\":{\"sampleCount\":1,\"samplesTotal\":33,\"minSample\":33,\"maxSample\":33},\"NUMBER_OF_FAILED_MARSHALL\":{\"sampleCount\":1,\"samplesTotal\":34,\"minSample\":34,\"maxSample\":34},\"NUMBER_OF_FAILED_UNMARSHALL\":{\"sampleCount\":1,\"samplesTotal\":35,\"minSample\":35,\"maxSample\":35},\"NUMBER_OF_FAILED_IDENTIFIED_REMOVE\":{\"sampleCount\":1,\"samplesTotal\":36,\"minSample\":36,\"maxSample\":36},\"NUMBER_OF_FAILED_IDENTIFIED_REPLACE\":{\"sampleCount\":1,\"samplesTotal\":37,\"minSample\":37,\"maxSample\":37},\"NUMBER_OF_FAILED_PUT\":{\"sampleCount\":1,\"samplesTotal\":38,\"minSample\":38,\"maxSample\":38},\"NUMBER_OF_FAILED_REMOVE\":{\"sampleCount\":1,\"samplesTotal\":39,\"minSample\":39,\"maxSample\":39},\"NUMBER_OF_FAILED_REMOVE_ALL\":{\"sampleCount\":1,\"samplesTotal\":40,\"minSample\":40,\"maxSample\":40},\"NUMBER_OF_FACTORY_KEYS\":{\"sampleCount\":1,\"samplesTotal\":41,\"minSample\":41,\"maxSample\":41},\"NUMBER_OF_HITS\":{\"sampleCount\":1,\"samplesTotal\":42,\"minSample\":42,\"maxSample\":42},\"NUMBER_OF_MISSES\":{\"sampleCount\":1,\"samplesTotal\":43,\"minSample\":43,\"maxSample\":43},\"NUMBER_OF_REMOTE_GET\":{\"sampleCount\":1,\"samplesTotal\":44,\"minSample\":44,\"maxSample\":44},\"TIMED_FACTORY_CALL\":{\"sampleCount\":1,\"samplesTotal\":45,\"minSample\":45,\"maxSample\":45},\"TIMED_SUPPLIER_CALL\":{\"sampleCount\":1,\"samplesTotal\":46,\"minSample\":46,\"maxSample\":46},\"TIMED_GET_CALL\":{\"sampleCount\":1,\"samplesTotal\":47,\"minSample\":47,\"maxSample\":47},\"TIMED_GET_KEYS_CALL\":{\"sampleCount\":1,\"samplesTotal\":48,\"minSample\":48,\"maxSample\":48},\"TIMED_IDENTIFIED_GET_CALL\":{\"sampleCount\":1,\"samplesTotal\":49,\"minSample\":49,\"maxSample\":49},\"TIMED_IDENTIFIED_REMOVE_CALL\":{\"sampleCount\":1,\"samplesTotal\":50,\"minSample\":50,\"maxSample\":50},\"TIMED_IDENTIFIED_REPLACE_CALL\":{\"sampleCount\":1,\"samplesTotal\":51,\"minSample\":51,\"maxSample\":51},\"TIMED_MARSHALL_CALL\":{\"sampleCount\":1,\"samplesTotal\":52,\"minSample\":52,\"maxSample\":52},\"TIMED_PUT_CALL\":{\"sampleCount\":1,\"samplesTotal\":53,\"minSample\":53,\"maxSample\":53},\"TIMED_REMOVE_CALL\":{\"sampleCount\":1,\"samplesTotal\":54,\"minSample\":54,\"maxSample\":54},\"TIMED_REMOVE_ALL_CALL\":{\"sampleCount\":1,\"samplesTotal\":55,\"minSample\":55,\"maxSample\":55},\"TIMED_UNMARSHALL_CALL\":{\"sampleCount\":1,\"samplesTotal\":56,\"minSample\":56,\"maxSample\":56},\"TIMED_TRANSACTION_DISCARD_CALL\":{\"sampleCount\":1,\"samplesTotal\":57,\"minSample\":57,\"maxSample\":57},\"TIMED_TRANSACTION_SYNC_CALL\":{\"sampleCount\":1,\"samplesTotal\":58,\"minSample\":58,\"maxSample\":58}}},\"EXTERNAL\":{\"cache-EXTERNAL\":{\"NUMBER_OF_BYTES_MARSHALLED\":{\"sampleCount\":1,\"samplesTotal\":59,\"minSample\":59,\"maxSample\":59},\"NUMBER_OF_BYTES_UNMARSHALLED\":{\"sampleCount\":1,\"samplesTotal\":60,\"minSample\":60,\"maxSample\":60},\"NUMBER_OF_FAILED_GET\":{\"sampleCount\":1,\"samplesTotal\":61,\"minSample\":61,\"maxSample\":61},\"NUMBER_OF_FAILED_IDENTIFIED_GET\":{\"sampleCount\":1,\"samplesTotal\":62,\"minSample\":62,\"maxSample\":62},\"NUMBER_OF_FAILED_MARSHALL\":{\"sampleCount\":1,\"samplesTotal\":63,\"minSample\":63,\"maxSample\":63},\"NUMBER_OF_FAILED_UNMARSHALL\":{\"sampleCount\":1,\"samplesTotal\":64,\"minSample\":64,\"maxSample\":64},\"NUMBER_OF_FAILED_IDENTIFIED_REMOVE\":{\"sampleCount\":1,\"samplesTotal\":65,\"minSample\":65,\"maxSample\":65},\"NUMBER_OF_FAILED_IDENTIFIED_REPLACE\":{\"sampleCount\":1,\"samplesTotal\":66,\"minSample\":66,\"maxSample\":66},\"NUMBER_OF_FAILED_PUT\":{\"sampleCount\":1,\"samplesTotal\":67,\"minSample\":67,\"maxSample\":67},\"NUMBER_OF_FAILED_REMOVE\":{\"sampleCount\":1,\"samplesTotal\":68,\"minSample\":68,\"maxSample\":68},\"NUMBER_OF_FAILED_REMOVE_ALL\":{\"sampleCount\":1,\"samplesTotal\":69,\"minSample\":69,\"maxSample\":69},\"NUMBER_OF_FACTORY_KEYS\":{\"sampleCount\":1,\"samplesTotal\":70,\"minSample\":70,\"maxSample\":70},\"NUMBER_OF_HITS\":{\"sampleCount\":1,\"samplesTotal\":71,\"minSample\":71,\"maxSample\":71},\"NUMBER_OF_MISSES\":{\"sampleCount\":1,\"samplesTotal\":72,\"minSample\":72,\"maxSample\":72},\"NUMBER_OF_REMOTE_GET\":{\"sampleCount\":1,\"samplesTotal\":73,\"minSample\":73,\"maxSample\":73},\"TIMED_FACTORY_CALL\":{\"sampleCount\":1,\"samplesTotal\":74,\"minSample\":74,\"maxSample\":74},\"TIMED_SUPPLIER_CALL\":{\"sampleCount\":1,\"samplesTotal\":75,\"minSample\":75,\"maxSample\":75},\"TIMED_GET_CALL\":{\"sampleCount\":1,\"samplesTotal\":76,\"minSample\":76,\"maxSample\":76},\"TIMED_GET_KEYS_CALL\":{\"sampleCount\":1,\"samplesTotal\":77,\"minSample\":77,\"maxSample\":77},\"TIMED_IDENTIFIED_GET_CALL\":{\"sampleCount\":1,\"samplesTotal\":78,\"minSample\":78,\"maxSample\":78},\"TIMED_IDENTIFIED_REMOVE_CALL\":{\"sampleCount\":1,\"samplesTotal\":79,\"minSample\":79,\"maxSample\":79},\"TIMED_IDENTIFIED_REPLACE_CALL\":{\"sampleCount\":1,\"samplesTotal\":80,\"minSample\":80,\"maxSample\":80},\"TIMED_MARSHALL_CALL\":{\"sampleCount\":1,\"samplesTotal\":81,\"minSample\":81,\"maxSample\":81},\"TIMED_PUT_CALL\":{\"sampleCount\":1,\"samplesTotal\":82,\"minSample\":82,\"maxSample\":82},\"TIMED_REMOVE_CALL\":{\"sampleCount\":1,\"samplesTotal\":83,\"minSample\":83,\"maxSample\":83},\"TIMED_REMOVE_ALL_CALL\":{\"sampleCount\":1,\"samplesTotal\":84,\"minSample\":84,\"maxSample\":84},\"TIMED_UNMARSHALL_CALL\":{\"sampleCount\":1,\"samplesTotal\":85,\"minSample\":85,\"maxSample\":85},\"TIMED_TRANSACTION_DISCARD_CALL\":{\"sampleCount\":1,\"samplesTotal\":86,\"minSample\":86,\"maxSample\":86},\"TIMED_TRANSACTION_SYNC_CALL\":{\"sampleCount\":1,\"samplesTotal\":87,\"minSample\":87,\"maxSample\":87}}}}}";
19
20 @Test
21 public void testMarshal() throws Exception {
22 final RequestMetrics metrics = buildMetrics();
23
24 final String gjson = buildString(metrics, new GsonJsonableFactory());
25 final String jjson = buildString(metrics, new JacksonJsonableFactory());
26
27 assertThat(gjson, is(jjson));
28 assertThat(gjson, is(EXPECTED_JSON));
29 }
30
31 private String buildString(RequestMetrics metrics, JsonableFactory bob) throws IOException {
32 final Jsonable bourne = bob.apply(metrics);
33
34 assertThat(bourne, notNullValue());
35
36 final StringWriter gsw = new StringWriter();
37 bourne.write(gsw);
38 gsw.close();
39
40 return gsw.toString();
41 }
42
43 private RequestMetrics buildMetrics() {
44 final DefaultRequestMetrics drm = new DefaultRequestMetrics();
45 long number = 1;
46 for (CacheType type : CacheType.values()) {
47 final String cname = "cache-" + type;
48 for (MetricLabel label : MetricLabel.values()) {
49 drm.record(cname, type, label, number++);
50 }
51 }
52
53 return drm;
54 }
55 }