Skip to content

Commit ca92109

Browse files
committed
Additional tests
Signed-off-by: Federico Torres <[email protected]>
1 parent 813b459 commit ca92109

File tree

2 files changed

+111
-1
lines changed

2 files changed

+111
-1
lines changed

src/encoding.rs

+56
Original file line numberDiff line numberDiff line change
@@ -994,6 +994,62 @@ mod tests {
994994
}
995995
}
996996

997+
#[test]
998+
fn label_name_is_legacy_valid() {
999+
struct Scenario {
1000+
input: &'static str,
1001+
expected: bool,
1002+
}
1003+
1004+
let scenarios = vec![
1005+
Scenario {
1006+
input: "Avalid_23name",
1007+
expected: true,
1008+
},
1009+
Scenario {
1010+
input: "_Avalid_23name",
1011+
expected: true,
1012+
},
1013+
Scenario {
1014+
input: "1valid_23name",
1015+
expected: false,
1016+
},
1017+
Scenario {
1018+
input: "avalid_23name",
1019+
expected: true,
1020+
},
1021+
Scenario {
1022+
input: "Ava:lid_23name",
1023+
expected: false,
1024+
},
1025+
Scenario {
1026+
input: "a lid_23name",
1027+
expected: false,
1028+
},
1029+
Scenario {
1030+
input: ":leading_colon",
1031+
expected: false,
1032+
},
1033+
Scenario {
1034+
input: "colon:in:the:middle",
1035+
expected: false,
1036+
},
1037+
Scenario {
1038+
input: "",
1039+
expected: false,
1040+
},
1041+
Scenario {
1042+
input: "aÅz",
1043+
expected: false,
1044+
},
1045+
];
1046+
1047+
for scenario in scenarios {
1048+
let result = is_valid_legacy_label_name(scenario.input);
1049+
assert_eq!(result, scenario.expected);
1050+
}
1051+
}
1052+
9971053
#[test]
9981054
fn test_escape_name() {
9991055
struct Scenario {

src/encoding/text.rs

+55-1
Original file line numberDiff line numberDiff line change
@@ -878,7 +878,7 @@ impl std::fmt::Write for LabelValueEncoder<'_> {
878878
#[cfg(test)]
879879
mod tests {
880880
use super::*;
881-
use crate::encoding::EscapingScheme::NoEscaping;
881+
use crate::encoding::EscapingScheme::{NoEscaping, UnderscoreEscaping};
882882
use crate::encoding::ValidationScheme::UTF8Validation;
883883
use crate::metrics::exemplar::HistogramWithExemplars;
884884
use crate::metrics::family::Family;
@@ -1028,6 +1028,29 @@ mod tests {
10281028
parse_with_python_client(encoded);
10291029
}
10301030

1031+
#[test]
1032+
fn encode_gauge_with_quoted_metric_name() {
1033+
let mut registry = RegistryBuilder::new()
1034+
.with_name_validation_scheme(UTF8Validation)
1035+
.with_escaping_scheme(NoEscaping)
1036+
.build();
1037+
let gauge = Gauge::<f32, AtomicU32>::default();
1038+
registry.register("my.gauge\"", "My\ngau\nge\"", gauge.clone());
1039+
1040+
gauge.set(f32::INFINITY);
1041+
1042+
let mut encoded = String::new();
1043+
1044+
encode(&mut encoded, &registry).unwrap();
1045+
1046+
let expected = "# HELP \"my.gauge\"\" My\ngau\nge\".\n"
1047+
.to_owned()
1048+
+ "# TYPE \"my.gauge\"\" gauge\n"
1049+
+ "{\"my.gauge\"\"} inf\n"
1050+
+ "# EOF\n";
1051+
assert_eq!(expected, encoded);
1052+
}
1053+
10311054
#[test]
10321055
fn encode_counter_family() {
10331056
let mut registry = Registry::default();
@@ -1109,6 +1132,37 @@ mod tests {
11091132
assert_eq!(expected, encoded);
11101133
}
11111134

1135+
#[test]
1136+
fn escaped_encode_counter_family_with_prefix_with_label_with_quoted_metric_and_label_names() {
1137+
let mut registry = RegistryBuilder::new()
1138+
.with_name_validation_scheme(UTF8Validation)
1139+
.with_escaping_scheme(UnderscoreEscaping)
1140+
.build();
1141+
let sub_registry = registry.sub_registry_with_prefix("my.prefix");
1142+
let sub_sub_registry = sub_registry
1143+
.sub_registry_with_label((Cow::Borrowed("my.key"), Cow::Borrowed("my_value")));
1144+
let family = Family::<Vec<(String, String)>, Counter>::default();
1145+
sub_sub_registry.register("my_counter_family", "My counter family", family.clone());
1146+
1147+
family
1148+
.get_or_create(&vec![
1149+
("method".to_string(), "GET".to_string()),
1150+
("status".to_string(), "200".to_string()),
1151+
])
1152+
.inc();
1153+
1154+
let mut encoded = String::new();
1155+
1156+
encode(&mut encoded, &registry).unwrap();
1157+
1158+
let expected = "# HELP my_prefix_my_counter_family My counter family.\n"
1159+
.to_owned()
1160+
+ "# TYPE my_prefix_my_counter_family counter\n"
1161+
+ "my_prefix_my_counter_family_total{my_key=\"my_value\",method=\"GET\",status=\"200\"} 1\n"
1162+
+ "# EOF\n";
1163+
assert_eq!(expected, encoded);
1164+
}
1165+
11121166
#[test]
11131167
fn encode_info() {
11141168
let mut registry = Registry::default();

0 commit comments

Comments
 (0)