Duroxide Code Coverage
Guidance for measuring and improving code coverage in the Duroxide codebase.
Quick Commands
bash
# Summary (recommended for quick checks) cargo llvm-cov nextest -p duroxide --all-features --summary-only # Detailed per-file report cargo llvm-cov nextest -p duroxide --all-features # HTML report (opens in browser) cargo llvm-cov nextest -p duroxide --all-features --html --open # Install llvm-cov if needed cargo install cargo-llvm-cov
Coverage Targets
| Metric | Target | Notes |
|---|---|---|
| Lines | >90% | Primary metric |
| Regions | >85% | Branch coverage |
| Functions | >80% | Often lower due to unused helpers |
Priority Files
When coverage drops, focus on these files:
- •src/providers/error.rs - Target 100%, error classification
- •src/runtime/observability.rs - Target 90%, metrics correctness
- •src/providers/sqlite.rs - Target 85%, reference implementation
- •src/providers/instrumented.rs - Target 75%, observability wrapper
- •src/providers/management.rs - Note: default trait impls inflate gaps
Adding Tests
| Gap Type | Location |
|---|---|
| Management API | tests/coverage_improvement_tests.rs |
| Provider validation | tests/sqlite_provider_validations.rs |
| Observability | tests/observability_tests.rs |
| SQLite edge cases | src/providers/sqlite.rs (inline tests) |
Test Patterns
Management API
rust
#[tokio::test]
async fn test_management() {
let store = Arc::new(SqliteProvider::new_in_memory().await.unwrap());
let mgmt = store.as_management_capability().unwrap();
assert!(mgmt.list_instances().await.is_ok());
}
Metrics
rust
#[tokio::test]
async fn test_metrics() {
use duroxide::runtime::observability::{MetricsProvider, ObservabilityConfig};
let metrics = MetricsProvider::new(&ObservabilityConfig::default()).unwrap();
metrics.record_orchestration_failure("Orch", "1.0", "app_error", "cat");
assert_eq!(metrics.snapshot().orch_application_errors, 1);
}
Provider Errors
rust
#[tokio::test]
async fn test_error() {
let err = ProviderError::retryable("op", "msg");
assert!(err.is_retryable());
}
Troubleshooting
- •"no such command: llvm-cov" →
cargo install cargo-llvm-cov - •Coverage seems low → Use
-p duroxide(not--workspace) - •Stale data →
cargo llvm-cov clean --workspace