commit d70851bdcb5dcde1d0f88eb775d077d15a48e09d
parent 379527f69b475c6767117dadcf9893f585d1b3af
Author: triesap <triesap@radroots.dev>
Date: Mon, 19 Jan 2026 18:38:03 +0000
app: add datastore roundtrip health check
- add health check to write/read/delete temp key
- map datastore failures into health results
- export roundtrip health check helper
- add unit test for non-wasm error mapping
Diffstat:
2 files changed, 33 insertions(+), 0 deletions(-)
diff --git a/app/src/health.rs b/app/src/health.rs
@@ -110,12 +110,36 @@ pub async fn app_health_check_bootstrap_app_data<T: RadrootsClientDatastore>(
}
}
+const APP_HEALTH_TEMP_KEY: &str = "radroots.health.temp";
+
+pub async fn app_health_check_datastore_roundtrip<T: RadrootsClientDatastore>(
+ datastore: &T,
+) -> AppHealthCheckResult {
+ let value = "ok";
+ if let Err(err) = datastore.set(APP_HEALTH_TEMP_KEY, value).await {
+ return AppHealthCheckResult::error(err.to_string());
+ }
+ match datastore.get(APP_HEALTH_TEMP_KEY).await {
+ Ok(read) => {
+ if read != value {
+ return AppHealthCheckResult::error("mismatch");
+ }
+ }
+ Err(err) => return AppHealthCheckResult::error(err.to_string()),
+ }
+ if let Err(err) = datastore.del(APP_HEALTH_TEMP_KEY).await {
+ return AppHealthCheckResult::error(err.to_string());
+ }
+ AppHealthCheckResult::ok()
+}
+
#[cfg(test)]
mod tests {
use super::{
app_health_check_key_maps,
app_health_check_bootstrap_app_data,
app_health_check_bootstrap_config,
+ app_health_check_datastore_roundtrip,
AppHealthCheckResult,
AppHealthCheckStatus,
AppHealthReport,
@@ -177,4 +201,12 @@ mod tests {
));
assert_eq!(result.status, AppHealthCheckStatus::Error);
}
+
+ #[test]
+ fn health_check_roundtrip_reports_idb_errors() {
+ let datastore = RadrootsClientWebDatastore::new(None);
+ let result =
+ futures::executor::block_on(app_health_check_datastore_roundtrip(&datastore));
+ assert_eq!(result.status, AppHealthCheckStatus::Error);
+ }
}
diff --git a/app/src/lib.rs b/app/src/lib.rs
@@ -22,6 +22,7 @@ pub use data::{AppAppData, AppConfigData, AppConfigRole};
pub use health::{
app_health_check_bootstrap_app_data,
app_health_check_bootstrap_config,
+ app_health_check_datastore_roundtrip,
app_health_check_key_maps,
AppHealthCheckResult,
AppHealthCheckStatus,