test(admin): stabilize telemetry outcome assertions
This commit is contained in:
@@ -403,3 +403,14 @@ fn materialization_failure(stage: &'static str, error_code: &'static str, count:
|
|||||||
"external OpenAPI materialization failed"
|
"external OpenAPI materialization failed"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::external_fetch_error_code;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn unexpected_status_has_a_stable_safe_error_code() {
|
||||||
|
let error = crank_runtime::ExternalReferenceFetchError::UnexpectedStatus { status: 500 };
|
||||||
|
assert_eq!(external_fetch_error_code(&error), "unexpected_status");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -118,10 +118,11 @@ paths:
|
|||||||
let logs = writer.output();
|
let logs = writer.output();
|
||||||
assert!(!logs.contains(CANARY));
|
assert!(!logs.contains(CANARY));
|
||||||
assert!(logs.contains(&trace_id));
|
assert!(logs.contains(&trace_id));
|
||||||
assert!(logs.contains("external OpenAPI materialization failed"));
|
let safe_materialization_failure = logs.lines().any(is_safe_materialization_failure);
|
||||||
assert!(logs.contains("stage=\"fetch\""));
|
assert!(
|
||||||
assert!(logs.contains("error_code=\"unexpected_status\""));
|
safe_materialization_failure,
|
||||||
assert!(logs.contains("count=0"));
|
"expected one bounded, sanitized materialization failure"
|
||||||
|
);
|
||||||
let spans = exported.lock().unwrap();
|
let spans = exported.lock().unwrap();
|
||||||
let rendered_spans = format!("{spans:?}");
|
let rendered_spans = format!("{spans:?}");
|
||||||
assert!(!rendered_spans.contains(CANARY));
|
assert!(!rendered_spans.contains(CANARY));
|
||||||
@@ -137,6 +138,34 @@ paths:
|
|||||||
provider.shutdown().unwrap();
|
provider.shutdown().unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn is_safe_materialization_failure(line: &str) -> bool {
|
||||||
|
if !line.contains("external OpenAPI materialization failed") || !line.contains("count=0") {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
let immediate_status = contains_log_field(line, "stage", "fetch")
|
||||||
|
&& contains_log_field(line, "error_code", "unexpected_status");
|
||||||
|
let bounded_timeout = contains_log_field(line, "stage", "chain")
|
||||||
|
&& contains_log_field(line, "error_code", "timeout");
|
||||||
|
immediate_status || bounded_timeout
|
||||||
|
}
|
||||||
|
|
||||||
|
fn contains_log_field(line: &str, name: &str, value: &str) -> bool {
|
||||||
|
line.contains(&format!("{name}=\"{value}\"")) || line.contains(&format!("{name}={value}"))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn materialization_log_accepts_only_coherent_safe_outcomes() {
|
||||||
|
for line in [
|
||||||
|
r#"external OpenAPI materialization failed stage="fetch" error_code="unexpected_status" count=0"#,
|
||||||
|
"external OpenAPI materialization failed stage=chain error_code=timeout count=0",
|
||||||
|
] {
|
||||||
|
assert!(is_safe_materialization_failure(line));
|
||||||
|
}
|
||||||
|
assert!(!is_safe_materialization_failure(
|
||||||
|
r#"external OpenAPI materialization failed stage="fetch" error_code="timeout" count=0"#
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Default)]
|
#[derive(Clone, Default)]
|
||||||
struct SharedLogWriter {
|
struct SharedLogWriter {
|
||||||
buffer: Arc<Mutex<Vec<u8>>>,
|
buffer: Arc<Mutex<Vec<u8>>>,
|
||||||
|
|||||||
Reference in New Issue
Block a user