|
19 | 19 | package org.apache.hadoop.metrics2.impl; |
20 | 20 |
|
21 | 21 | import static org.junit.Assert.assertEquals; |
| 22 | +import static org.mockito.Mockito.mock; |
| 23 | +import static org.mockito.Mockito.verify; |
| 24 | +import static org.mockito.Mockito.when; |
22 | 25 |
|
| 26 | +import java.io.ByteArrayOutputStream; |
23 | 27 | import java.io.IOException; |
24 | 28 | import java.io.OutputStreamWriter; |
25 | 29 | import java.io.Writer; |
26 | 30 | import java.util.ArrayList; |
| 31 | +import java.util.Collections; |
27 | 32 | import java.util.HashSet; |
28 | 33 | import java.util.List; |
29 | 34 | import java.util.Set; |
|
34 | 39 | import org.apache.hadoop.metrics2.MetricsTag; |
35 | 40 | import org.apache.hadoop.metrics2.sink.GraphiteSink; |
36 | 41 | import org.junit.Test; |
37 | | - |
38 | | -import static org.mockito.Mockito.*; |
39 | 42 | import org.mockito.ArgumentCaptor; |
40 | 43 | import org.mockito.internal.util.reflection.Whitebox; |
41 | 44 |
|
@@ -108,6 +111,43 @@ public void testPutMetrics2() { |
108 | 111 | result.equals("null.all.Context.Context=all.foo2 2 10\n" + |
109 | 112 | "null.all.Context.Context=all.foo1 1 10\n")); |
110 | 113 | } |
| 114 | + |
| 115 | + /** |
| 116 | + * Assert that timestamps are converted correctly, ticket HADOOP-11182 |
| 117 | + */ |
| 118 | + @Test |
| 119 | + public void testPutMetrics3() { |
| 120 | + |
| 121 | + // setup GraphiteSink |
| 122 | + GraphiteSink sink = new GraphiteSink(); |
| 123 | + ByteArrayOutputStream out = new ByteArrayOutputStream(); |
| 124 | + Whitebox.setInternalState(sink, "writer", new OutputStreamWriter(out)); |
| 125 | + |
| 126 | + // given two metrics records with timestamps 1000 milliseconds apart. |
| 127 | + List<MetricsTag> tags = Collections.emptyList(); |
| 128 | + Set<AbstractMetric> metrics = new HashSet<AbstractMetric>(); |
| 129 | + metrics.add(makeMetric("foo1", 1)); |
| 130 | + MetricsRecord record1 = new MetricsRecordImpl(MsInfo.Context, 1000000000000L, tags, metrics); |
| 131 | + MetricsRecord record2 = new MetricsRecordImpl(MsInfo.Context, 1000000001000L, tags, metrics); |
| 132 | + |
| 133 | + sink.putMetrics(record1); |
| 134 | + sink.putMetrics(record2); |
| 135 | + |
| 136 | + sink.flush(); |
| 137 | + try { |
| 138 | + sink.close(); |
| 139 | + } catch(IOException e) { |
| 140 | + e.printStackTrace(); |
| 141 | + } |
| 142 | + |
| 143 | + // then the timestamps in the graphite stream should differ by one second. |
| 144 | + String expectedOutput |
| 145 | + = "null.default.Context.foo1 1 1000000000\n" |
| 146 | + + "null.default.Context.foo1 1 1000000001\n"; |
| 147 | + assertEquals(expectedOutput, out.toString()); |
| 148 | + } |
| 149 | + |
| 150 | + |
111 | 151 | @Test(expected=MetricsException.class) |
112 | 152 | public void testCloseAndWrite() throws IOException { |
113 | 153 | GraphiteSink sink = new GraphiteSink(); |
|
0 commit comments