|
9 | 9 | import org.junit.jupiter.api.Test; |
10 | 10 | import org.mockito.MockedStatic; |
11 | 11 |
|
12 | | -import java.net.InetAddress; |
13 | | -import java.util.Optional; |
14 | | - |
15 | 12 | class PrometheusNamingTest { |
16 | 13 |
|
17 | 14 | @Test |
@@ -153,19 +150,19 @@ public void testLabelNameIsValid() { |
153 | 150 | public void testEscapeName() { |
154 | 151 | // empty string |
155 | 152 | String got = escapeName("", EscapingScheme.UNDERSCORE_ESCAPING); |
156 | | - assertThat(got).isEqualTo(""); |
| 153 | + assertThat(got).isEmpty(); |
157 | 154 | got = unescapeName(got, EscapingScheme.UNDERSCORE_ESCAPING); |
158 | | - assertThat(got).isEqualTo(""); |
| 155 | + assertThat(got).isEmpty(); |
159 | 156 |
|
160 | 157 | got = escapeName("", EscapingScheme.DOTS_ESCAPING); |
161 | | - assertThat(got).isEqualTo(""); |
| 158 | + assertThat(got).isEmpty(); |
162 | 159 | got = unescapeName(got, EscapingScheme.DOTS_ESCAPING); |
163 | | - assertThat(got).isEqualTo(""); |
| 160 | + assertThat(got).isEmpty(); |
164 | 161 |
|
165 | 162 | got = escapeName("", EscapingScheme.VALUE_ENCODING_ESCAPING); |
166 | | - assertThat(got).isEqualTo(""); |
| 163 | + assertThat(got).isEmpty(); |
167 | 164 | got = unescapeName(got, EscapingScheme.VALUE_ENCODING_ESCAPING); |
168 | | - assertThat(got).isEqualTo(""); |
| 165 | + assertThat(got).isEmpty(); |
169 | 166 |
|
170 | 167 | // legacy valid name |
171 | 168 | got = escapeName("no:escaping_required", EscapingScheme.UNDERSCORE_ESCAPING); |
@@ -322,7 +319,7 @@ public void testValueUnescapeErrors() { |
322 | 319 |
|
323 | 320 | // empty string |
324 | 321 | got = unescapeName("", EscapingScheme.VALUE_ENCODING_ESCAPING); |
325 | | - assertThat(got).isEqualTo(""); |
| 322 | + assertThat(got).isEmpty(); |
326 | 323 |
|
327 | 324 | // basic case, no error |
328 | 325 | got = unescapeName("U__no:unescapingrequired", EscapingScheme.VALUE_ENCODING_ESCAPING); |
@@ -374,165 +371,101 @@ public void testEscapeMetricSnapshotEmpty() { |
374 | 371 |
|
375 | 372 | @Test |
376 | 373 | public void testEscapeMetricSnapshotSimpleNoEscapingNeeded() { |
377 | | - try (MockedStatic<PrometheusNaming> mock = mockStatic(PrometheusNaming.class, CALLS_REAL_METHODS)) { |
378 | | - mock.when(PrometheusNaming::getValidationScheme) |
379 | | - .thenReturn(ValidationScheme.UTF_8_VALIDATION); |
380 | | - |
381 | | - MetricSnapshot original = CounterSnapshot.builder() |
382 | | - .name("my_metric") |
383 | | - .help("some help text") |
384 | | - .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder() |
385 | | - .value(34.2) |
386 | | - .labels(Labels.builder() |
387 | | - .label("__name__", "my_metric") |
388 | | - .label("some_label", "labelvalue") |
389 | | - .build()) |
390 | | - .build() |
391 | | - ) |
392 | | - .build(); |
393 | | - MetricSnapshot got = escapeMetricSnapshot(original, EscapingScheme.VALUE_ENCODING_ESCAPING); |
394 | | - |
395 | | - assertThat(got.getMetadata().getName()).isEqualTo("my_metric"); |
396 | | - assertThat(got.getMetadata().getHelp()).isEqualTo("some help text"); |
397 | | - assertThat(got.getDataPoints().size()).isEqualTo(1); |
398 | | - CounterSnapshot.CounterDataPointSnapshot data = (CounterSnapshot.CounterDataPointSnapshot) got.getDataPoints().get(0); |
399 | | - assertThat(data.getValue()).isEqualTo(34.2); |
400 | | - assertThat((Iterable<? extends Label>) data.getLabels()).isEqualTo(Labels.builder() |
401 | | - .label("__name__", "my_metric") |
402 | | - .label("some_label", "labelvalue") |
403 | | - .build()); |
404 | | - assertThat(original.getMetadata().getName()).isEqualTo("my_metric"); |
405 | | - assertThat(original.getMetadata().getHelp()).isEqualTo("some help text"); |
406 | | - assertThat(original.getDataPoints().size()).isEqualTo(1); |
407 | | - data = (CounterSnapshot.CounterDataPointSnapshot) original.getDataPoints().get(0); |
408 | | - assertThat(data.getValue()).isEqualTo(34.2); |
409 | | - assertThat((Iterable<? extends Label>) data.getLabels()).isEqualTo(Labels.builder() |
410 | | - .label("__name__", "my_metric") |
411 | | - .label("some_label", "labelvalue") |
412 | | - .build()); |
413 | | - } |
| 374 | + testEscapeMetricSnapshot( |
| 375 | + "my_metric", "some_label", "labelvalue", "some help text", |
| 376 | + "my_metric", "some_label", "labelvalue", "some help text", |
| 377 | + EscapingScheme.VALUE_ENCODING_ESCAPING, |
| 378 | + CounterSnapshot.class); |
414 | 379 | } |
415 | 380 |
|
416 | 381 | @Test |
417 | 382 | public void testEscapeMetricSnapshotLabelNameEscapingNeeded() { |
418 | | - try (MockedStatic<PrometheusNaming> mock = mockStatic(PrometheusNaming.class, CALLS_REAL_METHODS)) { |
419 | | - mock.when(PrometheusNaming::getValidationScheme) |
420 | | - .thenReturn(ValidationScheme.UTF_8_VALIDATION); |
421 | | - |
422 | | - MetricSnapshot original = CounterSnapshot.builder() |
423 | | - .name("my_metric") |
424 | | - .help("some help text") |
425 | | - .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder() |
426 | | - .value(34.2) |
427 | | - .labels(Labels.builder() |
428 | | - .label("__name__", "my_metric") |
429 | | - .label("some.label", "labelvalue") |
430 | | - .build()) |
431 | | - .build() |
432 | | - ) |
433 | | - .build(); |
434 | | - MetricSnapshot got = escapeMetricSnapshot(original, EscapingScheme.VALUE_ENCODING_ESCAPING); |
435 | | - |
436 | | - assertThat(got.getMetadata().getName()).isEqualTo("my_metric"); |
437 | | - assertThat(got.getMetadata().getHelp()).isEqualTo("some help text"); |
438 | | - assertThat(got.getDataPoints().size()).isEqualTo(1); |
439 | | - CounterSnapshot.CounterDataPointSnapshot data = (CounterSnapshot.CounterDataPointSnapshot) got.getDataPoints().get(0); |
440 | | - assertThat(data.getValue()).isEqualTo(34.2); |
441 | | - assertThat((Iterable<? extends Label>) data.getLabels()).isEqualTo(Labels.builder() |
442 | | - .label("__name__", "my_metric") |
443 | | - .label("U__some_2e_label", "labelvalue") |
444 | | - .build()); |
445 | | - assertThat(original.getMetadata().getName()).isEqualTo("my_metric"); |
446 | | - assertThat(original.getMetadata().getHelp()).isEqualTo("some help text"); |
447 | | - assertThat(original.getDataPoints().size()).isEqualTo(1); |
448 | | - data = (CounterSnapshot.CounterDataPointSnapshot) original.getDataPoints().get(0); |
449 | | - assertThat(data.getValue()).isEqualTo(34.2); |
450 | | - assertThat((Iterable<? extends Label>) data.getLabels()).isEqualTo(Labels.builder() |
451 | | - .label("__name__", "my_metric") |
452 | | - .label("some.label", "labelvalue") |
453 | | - .build()); |
454 | | - } |
| 383 | + testEscapeMetricSnapshot( |
| 384 | + "my_metric", "some.label", "labelvalue", "some help text", |
| 385 | + "my_metric", "U__some_2e_label", "labelvalue", "some help text", |
| 386 | + EscapingScheme.VALUE_ENCODING_ESCAPING, |
| 387 | + CounterSnapshot.class); |
455 | 388 | } |
456 | 389 |
|
457 | 390 | @Test |
458 | 391 | public void testEscapeMetricSnapshotCounterEscapingNeeded() { |
| 392 | + testEscapeMetricSnapshot( |
| 393 | + "my.metric", "some?label", "label??value", "some help text", |
| 394 | + "U__my_2e_metric", "U__some_3f_label", "label??value", "some help text", |
| 395 | + EscapingScheme.VALUE_ENCODING_ESCAPING, |
| 396 | + CounterSnapshot.class); |
| 397 | + } |
| 398 | + |
| 399 | + @Test |
| 400 | + public void testEscapeMetricSnapshotGaugeEscapingNeeded() { |
| 401 | + testEscapeMetricSnapshot( |
| 402 | + "unicode.and.dots.花火", "some_label", "label??value", "some help text", |
| 403 | + "unicode_dot_and_dot_dots_dot_____", "some_label", "label??value", "some help text", |
| 404 | + EscapingScheme.DOTS_ESCAPING, |
| 405 | + GaugeSnapshot.class); |
| 406 | + } |
| 407 | + |
| 408 | + private void testEscapeMetricSnapshot( |
| 409 | + String name, String labelName, String labelValue, String help, |
| 410 | + String expectedName, String expectedLabelName, String expectedLabelValue, String expectedHelp, |
| 411 | + EscapingScheme escapingScheme, |
| 412 | + Class<? extends MetricSnapshot> snapshotType) { |
| 413 | + |
459 | 414 | try (MockedStatic<PrometheusNaming> mock = mockStatic(PrometheusNaming.class, CALLS_REAL_METHODS)) { |
460 | 415 | mock.when(PrometheusNaming::getValidationScheme) |
461 | | - .thenReturn(ValidationScheme.UTF_8_VALIDATION); |
462 | | - |
463 | | - MetricSnapshot original = CounterSnapshot.builder() |
464 | | - .name("my.metric") |
465 | | - .help("some help text") |
466 | | - .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder() |
467 | | - .value(34.2) |
468 | | - .labels(Labels.builder() |
469 | | - .label("__name__", "my.metric") |
470 | | - .label("some?label", "label??value") |
471 | | - .build()) |
472 | | - .build() |
473 | | - ) |
474 | | - .build(); |
475 | | - MetricSnapshot got = escapeMetricSnapshot(original, EscapingScheme.VALUE_ENCODING_ESCAPING); |
| 416 | + .thenReturn(ValidationScheme.UTF_8_VALIDATION); |
476 | 417 |
|
477 | | - assertThat(got.getMetadata().getName()).isEqualTo("U__my_2e_metric"); |
478 | | - assertThat(got.getMetadata().getHelp()).isEqualTo("some help text"); |
| 418 | + MetricSnapshot original = createTestSnapshot(name, labelName, labelValue, help, 34.2, snapshotType); |
| 419 | + MetricSnapshot got = escapeMetricSnapshot(original, escapingScheme); |
| 420 | + |
| 421 | + assertThat(got.getMetadata().getName()).isEqualTo(expectedName); |
| 422 | + assertThat(got.getMetadata().getHelp()).isEqualTo(expectedHelp); |
479 | 423 | assertThat(got.getDataPoints().size()).isEqualTo(1); |
480 | | - CounterSnapshot.CounterDataPointSnapshot data = (CounterSnapshot.CounterDataPointSnapshot) got.getDataPoints().get(0); |
481 | | - assertThat(data.getValue()).isEqualTo(34.2); |
482 | | - assertThat((Iterable<? extends Label>) data.getLabels()).isEqualTo(Labels.builder() |
483 | | - .label("__name__", "U__my_2e_metric") |
484 | | - .label("U__some_3f_label", "label??value") |
485 | | - .build()); |
486 | | - assertThat(original.getMetadata().getName()).isEqualTo("my.metric"); |
487 | | - assertThat(original.getMetadata().getHelp()).isEqualTo("some help text"); |
| 424 | + |
| 425 | + DataPointSnapshot escapedData = got.getDataPoints().get(0); |
| 426 | + assertThat((Iterable<? extends Label>) escapedData.getLabels()).isEqualTo(Labels.builder() |
| 427 | + .label("__name__", expectedName) |
| 428 | + .label(expectedLabelName, expectedLabelValue) |
| 429 | + .build()); |
| 430 | + |
| 431 | + assertThat(original.getMetadata().getName()).isEqualTo(name); |
| 432 | + assertThat(original.getMetadata().getHelp()).isEqualTo(help); |
488 | 433 | assertThat(original.getDataPoints().size()).isEqualTo(1); |
489 | | - data = (CounterSnapshot.CounterDataPointSnapshot) original.getDataPoints().get(0); |
490 | | - assertThat(data.getValue()).isEqualTo(34.2); |
491 | | - assertThat((Iterable<? extends Label>) data.getLabels()).isEqualTo(Labels.builder() |
492 | | - .label("__name__", "my.metric") |
493 | | - .label("some?label", "label??value") |
494 | | - .build()); |
| 434 | + |
| 435 | + DataPointSnapshot originalData = original.getDataPoints().get(0); |
| 436 | + assertThat((Iterable<? extends Label>) originalData.getLabels()).isEqualTo(Labels.builder() |
| 437 | + .label("__name__", name) |
| 438 | + .label(labelName, labelValue) |
| 439 | + .build()); |
495 | 440 | } |
496 | 441 | } |
497 | 442 |
|
498 | | - @Test |
499 | | - public void testEscapeMetricSnapshotGaugeEscapingNeeded() { |
500 | | - try (MockedStatic<PrometheusNaming> mock = mockStatic(PrometheusNaming.class, CALLS_REAL_METHODS)) { |
501 | | - mock.when(PrometheusNaming::getValidationScheme) |
502 | | - .thenReturn(ValidationScheme.UTF_8_VALIDATION); |
503 | | - |
504 | | - MetricSnapshot original = GaugeSnapshot.builder() |
505 | | - .name("unicode.and.dots.花火") |
506 | | - .help("some help text") |
507 | | - .dataPoint(GaugeSnapshot.GaugeDataPointSnapshot.builder() |
508 | | - .value(34.2) |
509 | | - .labels(Labels.builder() |
510 | | - .label("__name__", "unicode.and.dots.花火") |
511 | | - .label("some_label", "label??value") |
512 | | - .build()) |
513 | | - .build() |
514 | | - ) |
| 443 | + private MetricSnapshot createTestSnapshot(String name, String labelName, String labelValue, String help, double value, Class<? extends MetricSnapshot> snapshotType) { |
| 444 | + Labels labels = Labels.builder() |
| 445 | + .label("__name__", name) |
| 446 | + .label(labelName, labelValue) |
515 | 447 | .build(); |
516 | | - MetricSnapshot got = escapeMetricSnapshot(original, EscapingScheme.DOTS_ESCAPING); |
517 | 448 |
|
518 | | - assertThat(got.getMetadata().getName()).isEqualTo("unicode_dot_and_dot_dots_dot_____"); |
519 | | - assertThat(got.getMetadata().getHelp()).isEqualTo("some help text"); |
520 | | - assertThat(got.getDataPoints().size()).isEqualTo(1); |
521 | | - GaugeSnapshot.GaugeDataPointSnapshot data = (GaugeSnapshot.GaugeDataPointSnapshot) got.getDataPoints().get(0); |
522 | | - assertThat(data.getValue()).isEqualTo(34.2); |
523 | | - assertThat((Iterable<? extends Label>) data.getLabels()).isEqualTo(Labels.builder() |
524 | | - .label("__name__", "unicode_dot_and_dot_dots_dot_____") |
525 | | - .label("some_label", "label??value") |
526 | | - .build()); |
527 | | - assertThat(original.getMetadata().getName()).isEqualTo("unicode.and.dots.花火"); |
528 | | - assertThat(original.getMetadata().getHelp()).isEqualTo("some help text"); |
529 | | - assertThat(original.getDataPoints().size()).isEqualTo(1); |
530 | | - data = (GaugeSnapshot.GaugeDataPointSnapshot) original.getDataPoints().get(0); |
531 | | - assertThat(data.getValue()).isEqualTo(34.2); |
532 | | - assertThat((Iterable<? extends Label>) data.getLabels()).isEqualTo(Labels.builder() |
533 | | - .label("__name__", "unicode.and.dots.花火") |
534 | | - .label("some_label", "label??value") |
535 | | - .build()); |
| 449 | + if (snapshotType.equals(CounterSnapshot.class)) { |
| 450 | + return CounterSnapshot.builder() |
| 451 | + .name(name) |
| 452 | + .help(help) |
| 453 | + .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder() |
| 454 | + .value(value) |
| 455 | + .labels(labels) |
| 456 | + .build()) |
| 457 | + .build(); |
| 458 | + } else if (snapshotType.equals(GaugeSnapshot.class)) { |
| 459 | + return GaugeSnapshot.builder() |
| 460 | + .name(name) |
| 461 | + .help(help) |
| 462 | + .dataPoint(GaugeSnapshot.GaugeDataPointSnapshot.builder() |
| 463 | + .value(value) |
| 464 | + .labels(labels) |
| 465 | + .build()) |
| 466 | + .build(); |
536 | 467 | } |
| 468 | + |
| 469 | + throw new IllegalArgumentException("Unsupported snapshot type: " + snapshotType); |
537 | 470 | } |
538 | 471 | } |
0 commit comments