commit 47a14597e40cb01c862a526061dd767803594ce5
parent 32292836b46e6175bb2b26ff52aa9317633033b5
Author: triesap <tyson@radroots.org>
Date: Sun, 22 Feb 2026 04:41:05 +0000
coverage: raise `radroots-events-indexed` to strict 100 gates
Diffstat:
3 files changed, 135 insertions(+), 2 deletions(-)
diff --git a/crates/events-indexed/src/checkpoint.rs b/crates/events-indexed/src/checkpoint.rs
@@ -45,3 +45,61 @@ impl RadrootsEventsIndexedIndexCheckpoint {
}
}
}
+
+#[cfg(test)]
+mod tests {
+ use super::{RadrootsEventsIndexedIndexCheckpoint, RadrootsEventsIndexedShardCheckpoint};
+ use crate::types::RadrootsEventsIndexedShardId;
+ #[cfg(not(feature = "std"))]
+ use alloc::{string::String, vec, vec::Vec};
+ #[cfg(feature = "std")]
+ use std::{string::String, vec::Vec};
+
+ fn checkpoint(
+ shard_id: &str,
+ last_created_at: u32,
+ last_event_id: Option<&str>,
+ ) -> RadrootsEventsIndexedShardCheckpoint {
+ RadrootsEventsIndexedShardCheckpoint {
+ shard_id: RadrootsEventsIndexedShardId(String::from(shard_id)),
+ last_created_at,
+ last_event_id: last_event_id.map(String::from),
+ cursor: None,
+ }
+ }
+
+ #[test]
+ fn get_returns_none_for_unknown_shard() {
+ let cp = RadrootsEventsIndexedIndexCheckpoint {
+ generated_at: 1,
+ shards: vec![checkpoint("us-1", 10, Some("a"))],
+ };
+ let missing = cp.get(&RadrootsEventsIndexedShardId(String::from("us-2")));
+ assert!(missing.is_none());
+ }
+
+ #[test]
+ fn upsert_inserts_and_updates_shards() {
+ let mut cp = RadrootsEventsIndexedIndexCheckpoint {
+ generated_at: 2,
+ shards: Vec::new(),
+ };
+
+ cp.upsert(checkpoint("us-1", 10, Some("a")));
+ assert_eq!(cp.shards.len(), 1);
+ assert_eq!(
+ cp.get(&RadrootsEventsIndexedShardId(String::from("us-1")))
+ .expect("inserted shard")
+ .last_created_at,
+ 10
+ );
+
+ cp.upsert(checkpoint("us-1", 11, Some("b")));
+ assert_eq!(cp.shards.len(), 1);
+ let updated = cp
+ .get(&RadrootsEventsIndexedShardId(String::from("us-1")))
+ .expect("updated shard");
+ assert_eq!(updated.last_created_at, 11);
+ assert_eq!(updated.last_event_id.as_deref(), Some("b"));
+ }
+}
diff --git a/crates/events-indexed/src/manifest.rs b/crates/events-indexed/src/manifest.rs
@@ -90,9 +90,9 @@ mod tests {
RadrootsEventsIndexedShardMetadata, validate_manifest,
};
#[cfg(not(feature = "std"))]
- use alloc::{string::String, vec, vec::Vec};
+ use alloc::{format, string::String, vec, vec::Vec};
#[cfg(feature = "std")]
- use std::{string::String, vec::Vec};
+ use std::{format, string::String, vec::Vec};
fn shard(file: &str, count: u32, sha256: &str) -> RadrootsEventsIndexedShardMetadata {
RadrootsEventsIndexedShardMetadata {
@@ -154,6 +154,15 @@ mod tests {
}
#[test]
+ fn validate_manifest_rejects_invalid_sha256_with_valid_length() {
+ let mut m = base_manifest();
+ m.shards[0].sha256 =
+ String::from("g123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef");
+ let err = validate_manifest(&m).unwrap_err();
+ assert_eq!(err, RadrootsEventsIndexedManifestError::InvalidSha256(0));
+ }
+
+ #[test]
fn validate_manifest_rejects_total_overflow() {
let m = RadrootsEventsIndexedManifest {
country: String::from("us"),
@@ -190,4 +199,43 @@ mod tests {
let err = validate_manifest(&m).unwrap_err();
assert_eq!(err, RadrootsEventsIndexedManifestError::InconsistentTotals);
}
+
+ #[test]
+ fn validate_manifest_rejects_mismatched_total_without_overflow() {
+ let mut m = base_manifest();
+ m.total = 2;
+ let err = validate_manifest(&m).unwrap_err();
+ assert_eq!(err, RadrootsEventsIndexedManifestError::InconsistentTotals);
+ }
+
+ #[test]
+ fn validate_manifest_accepts_consistent_totals() {
+ let m = base_manifest();
+ let result = validate_manifest(&m);
+ assert!(result.is_ok());
+ }
+
+ #[test]
+ fn manifest_error_display_messages_are_stable() {
+ assert_eq!(
+ format!("{}", RadrootsEventsIndexedManifestError::EmptyCountry),
+ "country is empty"
+ );
+ assert_eq!(
+ format!("{}", RadrootsEventsIndexedManifestError::EmptyShards),
+ "no shards in manifest"
+ );
+ assert_eq!(
+ format!("{}", RadrootsEventsIndexedManifestError::EmptyFile(3)),
+ "shard 3 has empty file name"
+ );
+ assert_eq!(
+ format!("{}", RadrootsEventsIndexedManifestError::InvalidSha256(4)),
+ "shard 4 has invalid sha256"
+ );
+ assert_eq!(
+ format!("{}", RadrootsEventsIndexedManifestError::InconsistentTotals),
+ "total does not match sum of shard counts"
+ );
+ }
}
diff --git a/crates/events-indexed/src/types.rs b/crates/events-indexed/src/types.rs
@@ -74,4 +74,31 @@ mod tests {
};
assert!(range.is_valid());
}
+
+ #[test]
+ fn id_range_rejects_empty_bounds() {
+ let range = RadrootsEventsIndexedIdRange {
+ start: String::new(),
+ end: String::from("0f"),
+ };
+ assert!(!range.is_valid());
+ }
+
+ #[test]
+ fn id_range_rejects_empty_end() {
+ let range = RadrootsEventsIndexedIdRange {
+ start: String::from("0f"),
+ end: String::new(),
+ };
+ assert!(!range.is_valid());
+ }
+
+ #[test]
+ fn id_range_rejects_non_hex_end() {
+ let range = RadrootsEventsIndexedIdRange {
+ start: String::from("0f"),
+ end: String::from("zz"),
+ };
+ assert!(!range.is_valid());
+ }
}