commit 56e130e200c87eeb892405db88efe11c52dbebed
parent b960684682cce44f5dd1593d761fc0f2a575c83e
Author: triesap <tyson@radroots.org>
Date: Thu, 13 Aug 2026 19:10:28 +0000
test: close service host coverage gate
Diffstat:
4 files changed, 54 insertions(+), 0 deletions(-)
diff --git a/crates/service_host/src/admin/server.rs b/crates/service_host/src/admin/server.rs
@@ -2058,6 +2058,42 @@ mod tests {
#[test]
fn strict_json_routes_accessors_and_safe_errors_cover_the_full_value_surface() {
+ assert!(valid_parameter_name("item_1"));
+ for rejected in [
+ "",
+ "1item",
+ "Item",
+ "item-name",
+ &"x".repeat(ADMIN_ROUTE_PARAMETER_NAME_MAX_UTF8_BYTES + 1),
+ ] {
+ assert!(!valid_parameter_name(rejected));
+ }
+ assert_eq!(decode_route_parameter(""), None);
+ assert_eq!(decode_route_parameter("plain"), Some("plain".to_owned()));
+
+ for path in ["/", "/v", "/v1", "/version2", "/v2beta"] {
+ assert!(!unknown_major_version(path), "{path}");
+ }
+ for path in ["/v0", "/v2", "/v99/status"] {
+ assert!(unknown_major_version(path), "{path}");
+ }
+ assert_eq!(query_item_count(None), 0);
+ assert_eq!(query_item_count(Some("")), 0);
+ assert_eq!(query_item_count(Some("one")), 1);
+ assert_eq!(query_item_count(Some("one&two")), 2);
+
+ let mut headers = HeaderMap::new();
+ assert!(!is_json_content_type(&headers));
+ headers.insert(CONTENT_TYPE, HeaderValue::from_static(JSON_CONTENT_TYPE));
+ assert!(is_json_content_type(&headers));
+ headers.insert(
+ CONTENT_TYPE,
+ HeaderValue::from_static("application/json; charset=utf-8"),
+ );
+ assert!(is_json_content_type(&headers));
+ headers.insert(CONTENT_TYPE, HeaderValue::from_static("text/plain"));
+ assert!(!is_json_content_type(&headers));
+
for (document, expected) in [
("true", Value::Bool(true)),
("-7", Value::Number((-7).into())),
diff --git a/crates/service_host/src/config/value.rs b/crates/service_host/src/config/value.rs
@@ -698,6 +698,10 @@ mod tests {
#[test]
fn optional_operations_bind_is_explicit_redacted_and_policy_checked() {
+ assert_eq!(
+ OptionalOperationsBind::disabled(),
+ OptionalOperationsBind::default()
+ );
let disabled: OptionalOperationsBind = "disabled".parse().unwrap();
assert!(!disabled.is_enabled());
assert_eq!(disabled.address(), None);
@@ -713,6 +717,10 @@ mod tests {
);
let loopback: OptionalOperationsBind = "127.0.0.1:9100".parse().unwrap();
+ assert_eq!(
+ OptionalOperationsBind::listen(loopback.address().unwrap()),
+ loopback
+ );
assert!(loopback.is_enabled());
assert_eq!(loopback.to_string(), "127.0.0.1:9100");
assert!(!format!("{loopback:?}").contains("127.0.0.1"));
diff --git a/crates/service_host/src/lifecycle/signal.rs b/crates/service_host/src/lifecycle/signal.rs
@@ -227,5 +227,8 @@ mod tests {
assert_eq!(ProcessSignal::Interrupt.as_str(), "interrupt");
#[cfg(unix)]
assert_eq!(ProcessSignal::Terminate.as_str(), "terminate");
+
+ let adapter = ProcessSignalAdapter::new(InjectedSignals::new([ProcessSignal::Interrupt]));
+ assert_eq!(adapter.into_inner().events.len(), 1);
}
}
diff --git a/crates/service_host/src/lifecycle/task.rs b/crates/service_host/src/lifecycle/task.rs
@@ -226,6 +226,13 @@ mod tests {
)
.is_ok()
);
+ let optional = TaskMetadata::new(
+ name(),
+ TaskClassification::Optional,
+ Some(ShutdownPhase::CloseNetwork),
+ )
+ .unwrap();
+ assert_eq!(optional.shutdown_phase(), Some(ShutdownPhase::CloseNetwork));
assert_eq!(
TaskMetadata::new(name(), TaskClassification::Optional, None),
Err(TaskMetadataError::InvalidShutdownPhaseAssignment)