test(admin): stabilize telemetry outcome assertions
CI / Rust Checks (push) Failing after 9m31s
CI / UI Checks (push) Has been skipped
CI / Frontend E2E (push) Has been skipped
CI / Community Image Smoke (push) Has been skipped
CI / Deploy (push) Has been skipped

This commit is contained in:
2026-08-30 01:49:00 +03:00
parent 619394f509
commit 2ccaba897d
2 changed files with 44 additions and 4 deletions
@@ -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>>>,