#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct CoverageEntry {
pub rpc: &'static str,
pub wired: bool,
pub note: &'static str,
}
pub const HANDLER_COVERAGE: &[CoverageEntry] = &[
CoverageEntry {
rpc: "/udb.services.v1.DataBroker/Delete",
wired: true,
note: "",
},
CoverageEntry {
rpc: "/udb.services.v1.DataBroker/GetCapabilities",
wired: true,
note: "",
},
CoverageEntry {
rpc: "/udb.services.v1.DataBroker/Health",
wired: true,
note: "",
},
CoverageEntry {
rpc: "/udb.services.v1.DataBroker/ListMessageSchemas",
wired: true,
note: "",
},
CoverageEntry {
rpc: "/udb.services.v1.DataBroker/LookupMessageSchema",
wired: true,
note: "",
},
CoverageEntry {
rpc: "/udb.services.v1.DataBroker/Search",
wired: true,
note: "",
},
CoverageEntry {
rpc: "/udb.services.v1.DataBroker/Select",
wired: true,
note: "",
},
CoverageEntry {
rpc: "/udb.services.v1.DataBroker/StreamCDC",
wired: false,
note: "U21 follow-up: CDC stream emits its own per-event spans; \
needs Phase::Execute wrapper at the subscribe boundary.",
},
CoverageEntry {
rpc: "/udb.services.v1.DataBroker/Upsert",
wired: true,
note: "",
},
CoverageEntry {
rpc: "/udb.services.v1.DataBroker/BeginTx",
wired: true,
note: "",
},
CoverageEntry {
rpc: "/udb.services.v1.DataBroker/CommitTx",
wired: true,
note: "",
},
CoverageEntry {
rpc: "/udb.services.v1.DataBroker/RollbackTx",
wired: true,
note: "",
},
CoverageEntry {
rpc: "/udb.services.v1.DataBroker/VectorSearch",
wired: true,
note: "",
},
CoverageEntry {
rpc: "/udb.services.v1.DataBroker/PutObject",
wired: true,
note: "",
},
CoverageEntry {
rpc: "/udb.services.v1.DataBroker/GetObject",
wired: true,
note: "",
},
CoverageEntry {
rpc: "/udb.services.v1.DataBroker/DeleteObject",
wired: true,
note: "",
},
CoverageEntry {
rpc: "/udb.services.v1.DataBroker/Dispatch",
wired: true,
note: "",
},
];
pub fn report() -> (usize, usize, Vec<&'static str>) {
let total = HANDLER_COVERAGE.len();
let mut wired = 0;
let mut unwired = Vec::new();
for entry in HANDLER_COVERAGE {
if entry.wired {
wired += 1;
} else {
unwired.push(entry.rpc);
}
}
(wired, total, unwired)
}
pub fn coverage_percent() -> u32 {
let (wired, total, _) = report();
if total == 0 {
return 100;
}
((wired as u64 * 100) / total as u64) as u32
}
#[cfg(test)]
mod tests {
use super::*;
use std::collections::HashSet;
#[test]
fn no_duplicate_rpc_entries() {
let mut seen = HashSet::new();
for entry in HANDLER_COVERAGE {
assert!(
seen.insert(entry.rpc),
"duplicate coverage entry for {}",
entry.rpc
);
}
}
#[test]
fn every_entry_has_a_non_empty_rpc_name() {
for entry in HANDLER_COVERAGE {
assert!(
!entry.rpc.trim().is_empty(),
"empty RPC name in coverage list"
);
assert!(
entry.rpc.starts_with("/udb.services.v1.DataBroker/"),
"RPC name '{}' missing canonical DataBroker prefix",
entry.rpc
);
}
}
#[test]
fn note_field_matches_wired_state() {
for entry in HANDLER_COVERAGE {
if entry.wired {
assert!(
entry.note.is_empty(),
"{}: wired entry should not carry a note",
entry.rpc
);
} else {
assert!(
!entry.note.trim().is_empty(),
"{}: unwired entry must point at a follow-up",
entry.rpc
);
}
}
}
#[test]
fn report_returns_consistent_counts() {
let (wired, total, unwired) = report();
assert_eq!(wired + unwired.len(), total);
for rpc in &unwired {
assert!(HANDLER_COVERAGE.iter().any(|e| !e.wired && &e.rpc == rpc));
}
}
#[test]
fn coverage_percent_matches_report() {
let (wired, total, _) = report();
let expected = if total == 0 {
100
} else {
((wired as u64 * 100) / total as u64) as u32
};
assert_eq!(coverage_percent(), expected);
}
#[test]
fn coverage_meets_minimum_threshold() {
let pct = coverage_percent();
assert!(
pct >= 80,
"pipeline coverage dropped below 80% (currently {pct}%); \
check HANDLER_COVERAGE for newly-flipped `wired: false` entries"
);
}
}