use super::*;
#[test]
fn probe_test_unknown_variable_is_reported_inapplicable() {
let probed = config_defaults_probe(&["PROVIDE_NOT_A_REAL_VARIABLE".to_string()]);
let entry = &probed["PROVIDE_NOT_A_REAL_VARIABLE"];
assert!(!entry.applicable);
assert_eq!(entry.type_name, "");
assert_eq!(entry.default, "");
}
#[test]
fn probe_test_reports_observed_type_and_default_for_a_parsed_variable() {
let probed = config_defaults_probe(&[
"PROVIDE_LOG_LEVEL".to_string(),
"PROVIDE_TRACE_ENABLED".to_string(),
"PROVIDE_SAMPLING_LOGS_RATE".to_string(),
"PROVIDE_BACKPRESSURE_LOGS_MAXSIZE".to_string(),
]);
assert_eq!(probed["PROVIDE_LOG_LEVEL"].type_name, "str");
assert_eq!(probed["PROVIDE_LOG_LEVEL"].default, "INFO");
assert_eq!(probed["PROVIDE_TRACE_ENABLED"].type_name, "bool");
assert_eq!(probed["PROVIDE_TRACE_ENABLED"].default, "true");
assert_eq!(probed["PROVIDE_SAMPLING_LOGS_RATE"].type_name, "float");
assert_eq!(probed["PROVIDE_SAMPLING_LOGS_RATE"].default, "1.0");
assert_eq!(probed["PROVIDE_BACKPRESSURE_LOGS_MAXSIZE"].type_name, "int");
assert_eq!(probed["PROVIDE_BACKPRESSURE_LOGS_MAXSIZE"].default, "0");
}
#[test]
fn probe_test_detects_variables_that_only_add_keys() {
let probed = config_defaults_probe(&["OTEL_EXPORTER_OTLP_LOGS_HEADERS".to_string()]);
let entry = &probed["OTEL_EXPORTER_OTLP_LOGS_HEADERS"];
assert!(entry.applicable);
assert_eq!(entry.type_name, "str");
assert_eq!(entry.default, "");
}
#[test]
fn probe_test_a_variable_only_ever_rejected_is_still_applicable() {
let baseline = build(&HashMap::new()).expect("empty environment must yield a config");
let entry = probe_one(&baseline, "PROVIDE_LOG_INCLUDE_TIMESTAMP", &["not-a-bool"])
.expect("a rejected value must still report the variable as read");
assert!(entry.applicable);
assert_eq!(entry.type_name, "");
assert_eq!(entry.default, "");
}
#[test]
fn probe_test_serializes_type_under_its_spec_name() {
let json = serde_json::to_value(ProbedConfigEntry {
type_name: "int".to_string(),
default: "7".to_string(),
applicable: true,
})
.expect("entry should serialize");
assert_eq!(json["type"], "int");
assert_eq!(json["default"], "7");
assert_eq!(json["applicable"], true);
}
#[test]
fn probe_test_scaled_defaults_are_expressed_in_variable_units() {
assert_eq!(default_in_variable_units("10000", "3", "3000"), "10");
assert_eq!(default_in_variable_units("10000", "3", "4000"), "10000");
assert_eq!(default_in_variable_units("10", "3", "3"), "10");
assert_eq!(default_in_variable_units("10", "3", "-6"), "10");
assert_eq!(default_in_variable_units("INFO", "DEBUG", "DEBUG"), "INFO");
assert_eq!(default_in_variable_units("10", "0", "5"), "10");
assert_eq!(default_in_variable_units("10", "3", "0"), "10");
assert_eq!(default_in_variable_units("10", "0", "0"), "10");
assert_eq!(default_in_variable_units("5", "1", "2"), "2.5");
}
#[test]
fn probe_test_flatten_types_every_json_integer_shape_as_int() {
let mut out = BTreeMap::new();
let value = serde_json::json!({
"neg": -3,
"big": 9_223_372_036_854_775_808_u64,
"frac": 1.5,
});
flatten(&value, "", &mut out);
assert_eq!(out["neg"], ("-3".to_string(), "int".to_string()));
assert_eq!(
out["big"],
("9223372036854775808".to_string(), "int".to_string())
);
assert_eq!(out["frac"], ("1.5".to_string(), "float".to_string()));
}