@Test
public void reportsHistograms() throws Exception {

    final Histogram histogram = mock(Histogram.class);
    when(histogram.getCount()).thenReturn(1L);
    final Snapshot snapshot = mock(Snapshot.class);
    when(snapshot.getMax()).thenReturn(2L);
    when(snapshot.getMean()).thenReturn(3.0);
    when(snapshot.getMin()).thenReturn(4L);
    when(snapshot.getStdDev()).thenReturn(5.0);
    when(snapshot.getMedian()).thenReturn(6.0);
    when(snapshot.get75thPercentile()).thenReturn(7.0);
    when(snapshot.get95thPercentile()).thenReturn(8.0);
    when(snapshot.get98thPercentile()).thenReturn(9.0);
    when(snapshot.get99thPercentile()).thenReturn(10.0);
    when(snapshot.get999thPercentile()).thenReturn(11.0);
    when(histogram.getSnapshot()).thenReturn(snapshot);
    reporter.report(map(),
        map(),
        map("histogram", histogram),
        map(),
        map());
    final InOrder inOrder = inOrder(graphite);
    inOrder.verify(graphite).connect();
    inOrder.verify(graphite).send("prefix.histogram.count", "1", timestamp);
    inOrder.verify(graphite).send("prefix.histogram.max", "2", timestamp);
    inOrder.verify(graphite).send("prefix.histogram.mean", "3.00", timestamp);
    inOrder.verify(graphite).send("prefix.histogram.min", "4", timestamp);
    inOrder.verify(graphite).send("prefix.histogram.stddev", "5.00", timestamp);
    inOrder.verify(graphite).send("prefix.histogram.p50", "6.00", timestamp);
    inOrder.verify(graphite).send("prefix.histogram.p75", "7.00", timestamp);
    inOrder.verify(graphite).send("prefix.histogram.p95", "8.00", timestamp);
    inOrder.verify(graphite).send("prefix.histogram.p98", "9.00", timestamp);
    inOrder.verify(graphite).send("prefix.histogram.p99", "10.00", timestamp);
    inOrder.verify(graphite).send("prefix.histogram.p999", "11.00", timestamp);
    inOrder.verify(graphite).flush();
    inOrder.verify(graphite).close();
    verifyNoMoreInteractions(graphite);
}