|
12 | 12 |
|
13 | 13 | import java.io.ByteArrayOutputStream;
|
14 | 14 | import java.io.IOException;
|
| 15 | +import java.util.concurrent.atomic.AtomicInteger; |
| 16 | + |
| 17 | +import static io.prometheus.metrics.model.snapshots.PrometheusNaming.nameEscapingScheme; |
15 | 18 |
|
16 | 19 | public class ExpositionFormatsTest {
|
17 | 20 |
|
@@ -373,6 +376,8 @@ public void testGaugeUTF8() throws IOException {
|
373 | 376 | .build())
|
374 | 377 | .build();
|
375 | 378 | assertPrometheusText(prometheusText, gauge);
|
| 379 | + |
| 380 | + PrometheusNaming.nameValidationScheme = ValidationScheme.LEGACY_VALIDATION; |
376 | 381 | }
|
377 | 382 |
|
378 | 383 | @Test
|
@@ -1837,31 +1842,134 @@ public void testLabelValueEscape() throws IOException {
|
1837 | 1842 | assertPrometheusText(prometheus, counter);
|
1838 | 1843 | }
|
1839 | 1844 |
|
| 1845 | + @Test |
| 1846 | + public void testFindWriter() { |
| 1847 | + EscapingScheme oldDefault = nameEscapingScheme; |
| 1848 | + nameEscapingScheme = EscapingScheme.UNDERSCORE_ESCAPING; |
| 1849 | + ExpositionFormats expositionFormats = ExpositionFormats.init(); |
| 1850 | + |
| 1851 | + // delimited format |
| 1852 | + String acceptHeaderValue = "application/vnd.google.protobuf;proto=io.prometheus.client.MetricFamily;encoding=delimited"; |
| 1853 | + String expectedFmt = "application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited; escaping=underscores"; |
| 1854 | + EscapingScheme escapingScheme = EscapingScheme.fromAcceptHeader(acceptHeaderValue); |
| 1855 | + ExpositionFormatWriter writer = expositionFormats.findWriter(acceptHeaderValue); |
| 1856 | + Assert.assertEquals(expectedFmt, writer.getContentType() + escapingScheme.toHeaderFormat()); |
| 1857 | + |
| 1858 | + // plain text format |
| 1859 | + acceptHeaderValue = "text/plain;version=0.0.4"; |
| 1860 | + expectedFmt = "text/plain; version=0.0.4; charset=utf-8; escaping=underscores"; |
| 1861 | + escapingScheme = EscapingScheme.fromAcceptHeader(acceptHeaderValue); |
| 1862 | + writer = expositionFormats.findWriter(acceptHeaderValue); |
| 1863 | + Assert.assertEquals(expectedFmt, writer.getContentType() + escapingScheme.toHeaderFormat()); |
| 1864 | + |
| 1865 | + // delimited format UTF-8 |
| 1866 | + acceptHeaderValue = "application/vnd.google.protobuf;proto=io.prometheus.client.MetricFamily;encoding=delimited; escaping=allow-utf-8"; |
| 1867 | + expectedFmt = "application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited; escaping=allow-utf-8"; |
| 1868 | + escapingScheme = EscapingScheme.fromAcceptHeader(acceptHeaderValue); |
| 1869 | + writer = expositionFormats.findWriter(acceptHeaderValue); |
| 1870 | + Assert.assertEquals(expectedFmt, writer.getContentType() + escapingScheme.toHeaderFormat()); |
| 1871 | + |
| 1872 | + // TODO review if this is ok |
| 1873 | + nameEscapingScheme = EscapingScheme.VALUE_ENCODING_ESCAPING; |
| 1874 | + |
| 1875 | + // OM format, no version |
| 1876 | + acceptHeaderValue = "application/openmetrics-text"; |
| 1877 | + expectedFmt = "application/openmetrics-text; version=1.0.0; charset=utf-8; escaping=values"; |
| 1878 | + escapingScheme = EscapingScheme.fromAcceptHeader(acceptHeaderValue); |
| 1879 | + writer = expositionFormats.findWriter(acceptHeaderValue); |
| 1880 | + Assert.assertEquals(expectedFmt, writer.getContentType() + escapingScheme.toHeaderFormat()); |
| 1881 | + |
| 1882 | + // OM format, 0.0.1 version |
| 1883 | + acceptHeaderValue = "application/openmetrics-text;version=0.0.1; escaping=underscores"; |
| 1884 | + expectedFmt = "application/openmetrics-text; version=1.0.0; charset=utf-8; escaping=underscores"; |
| 1885 | + escapingScheme = EscapingScheme.fromAcceptHeader(acceptHeaderValue); |
| 1886 | + writer = expositionFormats.findWriter(acceptHeaderValue); |
| 1887 | + Assert.assertEquals(expectedFmt, writer.getContentType() + escapingScheme.toHeaderFormat()); |
| 1888 | + |
| 1889 | + // plain text format |
| 1890 | + acceptHeaderValue = "text/plain;version=0.0.4"; |
| 1891 | + expectedFmt = "text/plain; version=0.0.4; charset=utf-8; escaping=values"; |
| 1892 | + escapingScheme = EscapingScheme.fromAcceptHeader(acceptHeaderValue); |
| 1893 | + writer = expositionFormats.findWriter(acceptHeaderValue); |
| 1894 | + Assert.assertEquals(expectedFmt, writer.getContentType() + escapingScheme.toHeaderFormat()); |
| 1895 | + |
| 1896 | + // plain text format UTF-8 |
| 1897 | + acceptHeaderValue = "text/plain;version=0.0.4; escaping=allow-utf-8"; |
| 1898 | + expectedFmt = "text/plain; version=0.0.4; charset=utf-8; escaping=allow-utf-8"; |
| 1899 | + escapingScheme = EscapingScheme.fromAcceptHeader(acceptHeaderValue); |
| 1900 | + writer = expositionFormats.findWriter(acceptHeaderValue); |
| 1901 | + Assert.assertEquals(expectedFmt, writer.getContentType() + escapingScheme.toHeaderFormat()); |
| 1902 | + |
| 1903 | + // delimited format UTF-8 |
| 1904 | + acceptHeaderValue = "text/plain;version=0.0.4; escaping=allow-utf-8"; |
| 1905 | + expectedFmt = "text/plain; version=0.0.4; charset=utf-8; escaping=allow-utf-8"; |
| 1906 | + escapingScheme = EscapingScheme.fromAcceptHeader(acceptHeaderValue); |
| 1907 | + writer = expositionFormats.findWriter(acceptHeaderValue); |
| 1908 | + Assert.assertEquals(expectedFmt, writer.getContentType() + escapingScheme.toHeaderFormat()); |
| 1909 | + |
| 1910 | + nameEscapingScheme = oldDefault; |
| 1911 | + } |
| 1912 | + |
| 1913 | + @Test |
| 1914 | + public void testWrite() throws IOException { |
| 1915 | + ByteArrayOutputStream buff = new ByteArrayOutputStream(new AtomicInteger(2 << 9).get() + 1024); |
| 1916 | + ExpositionFormats expositionFormats = ExpositionFormats.init(); |
| 1917 | + UnknownSnapshot unknown = UnknownSnapshot.builder() |
| 1918 | + .name("foo_metric") |
| 1919 | + .dataPoint(UnknownDataPointSnapshot.builder() |
| 1920 | + .value(1.234) |
| 1921 | + .build()) |
| 1922 | + .build(); |
| 1923 | + |
| 1924 | + String acceptHeaderValue = "application/vnd.google.protobuf;proto=io.prometheus.client.MetricFamily;encoding=delimited"; |
| 1925 | + EscapingScheme escapingScheme = EscapingScheme.fromAcceptHeader(acceptHeaderValue); |
| 1926 | + ExpositionFormatWriter protoWriter = expositionFormats.findWriter(acceptHeaderValue); |
| 1927 | + |
| 1928 | + protoWriter.write(buff, MetricSnapshots.of(unknown), escapingScheme); |
| 1929 | + byte[] out = buff.toByteArray(); |
| 1930 | + Assert.assertNotEquals(0, out.length); |
| 1931 | + |
| 1932 | + buff.reset(); |
| 1933 | + |
| 1934 | + acceptHeaderValue = "text/plain; version=0.0.4; charset=utf-8"; |
| 1935 | + escapingScheme = EscapingScheme.fromAcceptHeader(acceptHeaderValue); |
| 1936 | + ExpositionFormatWriter textWriter = expositionFormats.findWriter(acceptHeaderValue); |
| 1937 | + |
| 1938 | + textWriter.write(buff, MetricSnapshots.of(unknown), escapingScheme); |
| 1939 | + out = buff.toByteArray(); |
| 1940 | + Assert.assertNotEquals(0, out.length); |
| 1941 | + |
| 1942 | + String expected = "# TYPE foo_metric untyped\n" + |
| 1943 | + "foo_metric 1.234\n"; |
| 1944 | + |
| 1945 | + Assert.assertEquals(expected, new String(out)); |
| 1946 | + } |
| 1947 | + |
1840 | 1948 | private void assertOpenMetricsText(String expected, MetricSnapshot snapshot) throws IOException {
|
1841 | 1949 | ByteArrayOutputStream out = new ByteArrayOutputStream();
|
1842 | 1950 | OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true);
|
1843 |
| - writer.write(out, MetricSnapshots.of(snapshot)); |
| 1951 | + writer.write(out, MetricSnapshots.of(snapshot), EscapingScheme.NO_ESCAPING); |
1844 | 1952 | Assert.assertEquals(expected, out.toString());
|
1845 | 1953 | }
|
1846 | 1954 |
|
1847 | 1955 | private void assertOpenMetricsTextWithoutCreated(String expected, MetricSnapshot snapshot) throws IOException {
|
1848 | 1956 | ByteArrayOutputStream out = new ByteArrayOutputStream();
|
1849 | 1957 | OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(false, true);
|
1850 |
| - writer.write(out, MetricSnapshots.of(snapshot)); |
| 1958 | + writer.write(out, MetricSnapshots.of(snapshot), EscapingScheme.NO_ESCAPING); |
1851 | 1959 | Assert.assertEquals(expected, out.toString());
|
1852 | 1960 | }
|
1853 | 1961 |
|
1854 | 1962 | private void assertPrometheusText(String expected, MetricSnapshot snapshot) throws IOException {
|
1855 | 1963 | ByteArrayOutputStream out = new ByteArrayOutputStream();
|
1856 | 1964 | PrometheusTextFormatWriter writer = new PrometheusTextFormatWriter(true);
|
1857 |
| - writer.write(out, MetricSnapshots.of(snapshot)); |
| 1965 | + writer.write(out, MetricSnapshots.of(snapshot), EscapingScheme.NO_ESCAPING); |
1858 | 1966 | Assert.assertEquals(expected, out.toString());
|
1859 | 1967 | }
|
1860 | 1968 |
|
1861 | 1969 | private void assertPrometheusTextWithoutCreated(String expected, MetricSnapshot snapshot) throws IOException {
|
1862 | 1970 | ByteArrayOutputStream out = new ByteArrayOutputStream();
|
1863 | 1971 | PrometheusTextFormatWriter writer = new PrometheusTextFormatWriter(false);
|
1864 |
| - writer.write(out, MetricSnapshots.of(snapshot)); |
| 1972 | + writer.write(out, MetricSnapshots.of(snapshot), EscapingScheme.NO_ESCAPING); |
1865 | 1973 | Assert.assertEquals(expected, out.toString());
|
1866 | 1974 | }
|
1867 | 1975 |
|
|
0 commit comments