From 2ccaba897d4a02e49b7cc7e7ec3f0c9a117c327f Mon Sep 17 00:00:00 2001 From: bsodfather Date: Sun, 30 Aug 2026 01:49:00 +0300 Subject: [PATCH] test(admin): stabilize telemetry outcome assertions --- .../service/imports/external_references.rs | 11 ++++++ .../integration/openapi_source/telemetry.rs | 37 +++++++++++++++++-- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/apps/admin-api/src/service/imports/external_references.rs b/apps/admin-api/src/service/imports/external_references.rs index b225ed8..b12c37b 100644 --- a/apps/admin-api/src/service/imports/external_references.rs +++ b/apps/admin-api/src/service/imports/external_references.rs @@ -403,3 +403,14 @@ fn materialization_failure(stage: &'static str, error_code: &'static str, count: "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"); + } +} diff --git a/apps/admin-api/tests/integration/openapi_source/telemetry.rs b/apps/admin-api/tests/integration/openapi_source/telemetry.rs index dad5728..579ec75 100644 --- a/apps/admin-api/tests/integration/openapi_source/telemetry.rs +++ b/apps/admin-api/tests/integration/openapi_source/telemetry.rs @@ -118,10 +118,11 @@ paths: let logs = writer.output(); assert!(!logs.contains(CANARY)); assert!(logs.contains(&trace_id)); - assert!(logs.contains("external OpenAPI materialization failed")); - assert!(logs.contains("stage=\"fetch\"")); - assert!(logs.contains("error_code=\"unexpected_status\"")); - assert!(logs.contains("count=0")); + let safe_materialization_failure = logs.lines().any(is_safe_materialization_failure); + assert!( + safe_materialization_failure, + "expected one bounded, sanitized materialization failure" + ); let spans = exported.lock().unwrap(); let rendered_spans = format!("{spans:?}"); assert!(!rendered_spans.contains(CANARY)); @@ -137,6 +138,34 @@ paths: 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)] struct SharedLogWriter { buffer: Arc>>,