package com.rackspacecloud.blueflood.inputs.handlers.wrappers;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import com.rackspacecloud.blueflood.inputs.formats.AggregatedPayload;
import com.rackspacecloud.blueflood.types.BluefloodTimer;
import org.junit.Before;
import org.junit.Test;
import java.io.*;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import static org.junit.Assert.*;
import static com.rackspacecloud.blueflood.TestUtils.*;
public class TestGsonParsing {
private String postfix = "postfix";
private String json;
private long current = System.currentTimeMillis();
@Before
public void readJsonFile() throws IOException, InterruptedException {
json = getJsonFromFile("sample_payload.json", postfix);
}
@Test
public void testLameButValidJSON() {
String badJson = "{}";
AggregatedPayload payload = AggregatedPayload.create(badJson);
}
@Test(expected = JsonSyntaxException.class)
public void testInvalidJSON() {
String badJson = "{tenantId:}";
AggregatedPayload payload = AggregatedPayload.create(badJson);
}
@Test
public void testBasicAggregatedPayload() {
Gson gson = new Gson();
AggregatedPayload payload = gson.fromJson(json, AggregatedPayload.class);
assertNotNull(payload);
assertEquals("333333", payload.getTenantId());
assertEquals(current, payload.getTimestamp(), 120000 );
assertEquals(15000L, payload.getFlushIntervalMillis());
assertEquals(4, payload.getGauges().size());
assertEquals(6, payload.getCounters().size());
assertEquals(4, payload.getTimers().size());
assertEquals(2, payload.getSets().size());
}
@Test
public void testHistograms() {
AggregatedPayload payload = new Gson().fromJson(json, AggregatedPayload.class);
assertNotNull(payload);
Map<String, BluefloodTimer> timers = asMap(payload.getTimers());
assertEquals(4, timers.get( "4444444.T1s" + postfix ).getHistogram().size());
assertEquals(11, timers.get( "3333333.T29s" + postfix ).getHistogram().size());
assertEquals(11, timers.get( "3333333.T200ms" + postfix ).getHistogram().size());
// this one is non-existant in the json, but we do not want a null map.
assertNotNull(timers.get( "3333333.T10s" + postfix ).getHistogram());
assertEquals(0, timers.get( "3333333.T10s" + postfix ).getHistogram().size());
}
@Test
public void testPercentiles() {
AggregatedPayload payload = new Gson().fromJson(json, AggregatedPayload.class);
assertNotNull(payload);
Map<String, BluefloodTimer> timers = asMap(payload.getTimers());
assertEquals(5, timers.get( "4444444.T1s" + postfix ).getPercentiles().size());
assertEquals(5, timers.get( "3333333.T29s" + postfix ).getPercentiles().size());
assertEquals(5, timers.get( "3333333.T10s" + postfix ).getPercentiles().size());
assertEquals(5, timers.get( "3333333.T200ms" + postfix ).getPercentiles().size());
}
private static Map<String, BluefloodTimer> asMap(Collection<BluefloodTimer> timers) {
Map<String, BluefloodTimer> map = new HashMap<String, BluefloodTimer>(timers.size());
for (BluefloodTimer timer : timers)
map.put(timer.getName(), timer);
return map;
}
}